SmartStepping3.ecl 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //
  2. // Example code - use without restriction.
  3. //
  4. LinkRec := RECORD
  5. UNSIGNED1 Link;
  6. END;
  7. DS_Rec := RECORD(LinkRec)
  8. STRING10 Name;
  9. STRING10 Address;
  10. END;
  11. Child1_Rec := RECORD(LinkRec)
  12. UNSIGNED1 Nbr;
  13. END;
  14. Child2_Rec := RECORD(LinkRec)
  15. STRING10 Car;
  16. END;
  17. Child3_Rec := RECORD(LinkRec)
  18. UNSIGNED4 Salary;
  19. END;
  20. Child4_Rec := RECORD(LinkRec)
  21. STRING10 Domicile;
  22. END;
  23. ds := DATASET([{1,'Fred','123 Main'},{2,'George','456 High'},{3,'Charlie','789 Bank'},{4,'Danielle','246 Front'},{5,'Emily','613 Boca'},
  24. {6,'Oscar','942 Frank'},{7,'Felix','777 John'},{8,'Adele','543 Bank'},{9,'Johan','123 Front'},{10,'Ludwig','212 Front'}],DS_Rec);
  25. Child1 := DATASET([{1,5},{2,8},{3,11},{4,14},{5,17},
  26. {6,20},{7,23},{8,26},{9,29},{10,32}],Child1_Rec);
  27. Child2 := DATASET([{1,'Ford'},{2,'Ford'},{3,'Chevy'},{4,'Lexus'},{5,'Lexus'},
  28. {6,'Kia'},{7,'Mercury'},{8,'Jeep'},{9,'Lexus'},{9,'Ferrari'},{10,'Ford'}],Child2_Rec);
  29. Child3 := DATASET([{1,10000},{2,20000},{3,155000},{4,800000},{5,250000},
  30. {6,75000},{7,200000},{8,15000},{9,80000},{10,25000}],Child3_Rec);
  31. Child4 := DATASET([{1,'House'},{2,'House'},{3,'House'},{4,'Apt'},{5,'Apt'},
  32. {6,'Apt'},{7,'Apt'},{8,'House'},{9,'Apt'},{10,'House'}],Child4_Rec);
  33. TblRec := RECORD(LinkRec),MAXLENGTH(4096)
  34. UNSIGNED1 DS;
  35. UNSIGNED1 Matches := 0;
  36. UNSIGNED1 LastMatch := 0;
  37. SET OF UNSIGNED1 MatchDSs := [];
  38. END;
  39. Filter1 := Child1.Nbr % 2 = 0;
  40. Filter2 := Child2.Car IN ['Ford','Chevy','Jeep'];
  41. Filter3 := Child3.Salary < 100000;
  42. Filter4 := Child4.Domicile = 'House';
  43. t1 := PROJECT(Child1(Filter1),TRANSFORM(TblRec,SELF.DS:=1,SELF:=LEFT));
  44. t2 := PROJECT(Child2(Filter2),TRANSFORM(TblRec,SELF.DS:=2,SELF:=LEFT));
  45. t3 := PROJECT(Child3(Filter3),TRANSFORM(TblRec,SELF.DS:=3,SELF:=LEFT));
  46. t4 := PROJECT(Child4(Filter4),TRANSFORM(TblRec,SELF.DS:=4,SELF:=LEFT));
  47. SetDS := [t1,t2,t3,t4];
  48. TblRec XF(TblRec L,DATASET(TblRec) Matches) := TRANSFORM
  49. SELF.Matches := COUNT(Matches);
  50. SELF.LastMatch := MAX(Matches,DS);
  51. SELF.MatchDSs := SET(Matches,DS);
  52. SELF := L;
  53. END;
  54. j1 := JOIN( SetDS,STEPPED(LEFT.Link=RIGHT.Link),XF(LEFT,ROWS(LEFT)),SORTED(Link));
  55. OUTPUT(j1);
  56. OUTPUT(ds(link IN SET(j1,link)));