list_builtins.sql 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /* postgres can not */
  2. /* syntax version 1 */
  3. $list = AsList(3, 1, 2, 3);
  4. $other_list = AsList(4);
  5. $bool_list = AsList(true, false, true);
  6. $struct_list = AsList(
  7. AsStruct(1 AS one, 2 AS two),
  8. AsStruct(-1 AS one, -2 AS two)
  9. );
  10. $script = @@
  11. def formula(a, b, c, d):
  12. return a * b + c // d
  13. @@;
  14. $udf = Python3::formula(
  15. Callable<(Int64, Int64, Int64, Int64)->Int64>,
  16. $script
  17. );
  18. $lambdaSum = ($x, $y) -> { RETURN $x + $y; };
  19. $lambdaMult = ($x) -> { RETURN 4 * $x; };
  20. $lambdaTuple = ($i, $s) -> { RETURN ($i * $s, $i + $s); };
  21. $lambdaInc = ($i) -> { RETURN ($i + 1, $i + 2); };
  22. SELECT
  23. ListLength($list) AS length,
  24. ListExtend($list, $other_list) AS extend,
  25. ListZip($list, $other_list) AS zip,
  26. ListZipAll($list, $other_list) AS zipall,
  27. ListEnumerate($list) AS enumerate,
  28. ListReverse($list) AS reverse,
  29. ListSkip($list, 2) AS skip,
  30. ListTake($list, 2) AS take,
  31. ListSort($list) AS sort,
  32. ListSort($struct_list, ($x) -> { return $x.two; }) AS sort_structs,
  33. ListMap($list, ($item) -> { return $udf($item, 6, 4, 2); }) AS map,
  34. ListFlatMap($list, ($item) -> { return $item / 0; }) AS flatmap,
  35. ListFilter($list, ($item) -> { return $item < 3; }) AS filter,
  36. ListAny($bool_list) AS any,
  37. ListAll($bool_list) AS all,
  38. ListMax($list) AS max,
  39. ListMin($list) AS min,
  40. ListSum($list) AS sum,
  41. ListAvg($list) AS avg,
  42. ListUniq($list) AS uniq,
  43. ListConcat(ListMap($list, ($item) -> { return CAST($item AS String); })) AS concat,
  44. ListExtract($struct_list, "two") AS extract,
  45. ListMap($list, ($item) -> { return CAST($item AS Double);}),
  46. ListCreate(Tuple<Int64,Double>),
  47. ListCreate(TypeOf("foo")),
  48. ListFold($list, 6, $lambdaSum),
  49. ListFold([], 3, $lambdaSum),
  50. ListFold(Just($list), 6, $lambdaSum),
  51. ListFold(Just([]), 3, $lambdaSum),
  52. ListFold(Null, 3, $lambdaSum),
  53. ListFold1($list, $lambdaMult, $lambdaSum),
  54. ListFold1([], $lambdaMult, $lambdaSum),
  55. ListFold1(Just($list), $lambdaMult, $lambdaSum),
  56. ListFold1(Just([]), $lambdaMult, $lambdaSum),
  57. ListFold1(Null, $lambdaMult, $lambdaSum),
  58. ListFoldMap($list, 1, $lambdaTuple),
  59. ListFoldMap([], 1, $lambdaTuple),
  60. ListFoldMap(Just($list), 1, $lambdaTuple),
  61. ListFoldMap(Just([]), 1, $lambdaTuple),
  62. ListFoldMap(Null, 1, $lambdaTuple),
  63. ListFold1Map($list, $lambdaInc, $lambdaTuple),
  64. ListFold1Map([], $lambdaInc, $lambdaTuple),
  65. ListFold1Map(Just($list), $lambdaInc, $lambdaTuple),
  66. ListFold1Map(Just([]), $lambdaInc, $lambdaTuple),
  67. ListFold1Map(Null, $lambdaInc, $lambdaTuple);