udaf.sql 984 B

1234567891011121314151617181920212223242526
  1. /* syntax version 1 */
  2. /* postgres can not */
  3. -- count example
  4. $create = ($_item, $_parent) -> { return 1 };
  5. $add = ($state, $_item, $_parent) -> { return 1 + $state };
  6. $merge = ($state1, $state2) -> { return $state1 + $state2 };
  7. $get_result = ($state) -> { return $state };
  8. $serialize = ($state) -> { return $state };
  9. $deserialize = ($state) -> { return $state };
  10. $default = 0;
  11. $f = AGGREGATION_FACTORY("udaf", $create, $add, $merge, $get_result, $serialize, $deserialize, $default);
  12. $t = AsList(AsStruct(1 as a),AsStruct(2 as a));
  13. select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f(
  14. ListItemType(TypeOf($t)), ($z)->{return $z.a}))));
  15. $t = AsList(AsStruct(1/0 as a),AsStruct(2/0 as a));
  16. select Yql::Aggregate($t, AsTuple(), AsTuple(AsTuple(AsAtom("res"), $f(
  17. ListItemType(TypeOf($t)), ($z)->{return $z.a}))));
  18. use plato;
  19. insert into @a select * from as_table($t);
  20. commit;
  21. select AGGREGATE_BY(a,$f) from @a;
  22. select AGGREGATE_BY(distinct a,$f) from @a;