RecStruct.ecl 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. //
  2. // Example code - use without restriction.
  3. //
  4. Layout_Person := RECORD
  5. UNSIGNED1 PersonID;
  6. STRING15 FirstName;
  7. STRING25 LastName;
  8. END;
  9. Person := DATASET([{1,'Fred','Smith'},
  10. {2,'Joe','Blow'},
  11. {3,'Jane','Smith'}],Layout_Person);
  12. Layout_Accounts := RECORD
  13. STRING10 Account;
  14. UNSIGNED4 Balance;
  15. END;
  16. Layout_Accounts_Link := RECORD
  17. UNSIGNED1 PersonID;
  18. Layout_Accounts; //nested RECORD structure
  19. END;
  20. Accounts := DATASET([{1,'45621234',452},
  21. {1,'55621234',5000},
  22. {2,'45629876',4215},
  23. {3,'45628734',8525}],Layout_Accounts_Link);
  24. Layout_Combined := RECORD
  25. Layout_Person;
  26. DATASET(Layout_Accounts) Accounts; //nested child DATASET
  27. END;
  28. P_recs := PROJECT(Person,TRANSFORM(Layout_Combined,SELF := LEFT; SELF := []));
  29. Layout_Combined CombineRecs(Layout_Combined L,
  30. Layout_Accounts_Link R) := TRANSFORM
  31. SELF.Accounts := L.Accounts + ROW({R.Account,R.Balance}, Layout_Accounts);
  32. SELF := L;
  33. END; //input and output
  34. NestedPeopleAccts := DENORMALIZE(P_recs,
  35. Accounts,
  36. LEFT.personid=RIGHT.personid,
  37. CombineRecs(LEFT,RIGHT));
  38. OUTPUT(NestedPeopleAccts);