diff options
| author | Justin Palmer <justin@github.com> | 2012-09-20 15:07:41 -0700 |
|---|---|---|
| committer | Justin Palmer <justin@github.com> | 2012-09-20 15:07:41 -0700 |
| commit | 662fc2ee9d58ba89fa0cde3eac633add56738de9 (patch) | |
| tree | ad5b549f62628e2612e3a41a9b43b24aa5d3f547 | |
| parent | 567cd6ef68bdaa8ab42f132ef6ad6707d47672c3 (diff) | |
| parent | da6cf8dbb486083d0e45bbd0857fe871d10fa28d (diff) | |
Merge remote-tracking branch 'rengolin/ecl'
| -rw-r--r-- | lib/linguist/languages.yml | 7 | ||||
| -rw-r--r-- | samples/ecl/sample.ecl | 42 |
2 files changed, 49 insertions, 0 deletions
diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 1fbc38b..1733cd5 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -367,6 +367,13 @@ Ecere Projects: extensions: - .epj +Ecl: + type: programming + primary_extension: .ecl + lexer: ECL + extensions: + - .eclxml + Eiffel: type: programming lexer: Text only diff --git a/samples/ecl/sample.ecl b/samples/ecl/sample.ecl new file mode 100644 index 0000000..2edd10d --- /dev/null +++ b/samples/ecl/sample.ecl @@ -0,0 +1,42 @@ +/* + * Multi-line comment + */ +#option ('slidingJoins', true); + +namesRecord := + RECORD +string20 surname; +string10 forename; +integer2 age; +integer2 dadAge; +integer2 mumAge; + END; + +namesRecord2 := + record +string10 extra; +namesRecord; + end; + +namesTable := dataset('x',namesRecord,FLAT); +namesTable2 := dataset('y',namesRecord2,FLAT); + +integer2 aveAgeL(namesRecord l) := (l.dadAge+l.mumAge)/2; +integer2 aveAgeR(namesRecord2 r) := (r.dadAge+r.mumAge)/2; + +// Standard join on a function of left and right +output(join(namesTable, namesTable2, aveAgeL(left) = aveAgeR(right))); + +//Several simple examples of sliding join syntax +output(join(namesTable, namesTable2, left.age >= right.age - 10 and left.age <= right.age +10)); +output(join(namesTable, namesTable2, left.age between right.age - 10 and right.age +10)); +output(join(namesTable, namesTable2, left.age between right.age + 10 and right.age +30)); +output(join(namesTable, namesTable2, left.age between (right.age + 20) - 10 and (right.age +20) + 10)); +output(join(namesTable, namesTable2, aveAgeL(left) between aveAgeR(right)+10 and aveAgeR(right)+40)); + +//Same, but on strings. Also includes age to ensure sort is done by non-sliding before sliding. +output(join(namesTable, namesTable2, left.surname between right.surname[1..10]+'AAAAAAAAAA' and right.surname[1..10]+'ZZZZZZZZZZ' and left.age=right.age)); +output(join(namesTable, namesTable2, left.surname between right.surname[1..10]+'AAAAAAAAAA' and right.surname[1..10]+'ZZZZZZZZZZ' and left.age=right.age,all)); + +//This should not generate a self join +output(join(namesTable, namesTable, left.age between right.age - 10 and right.age +10)); |
