@quillsql/react 2.13.22 → 2.13.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/cjs/ChartBuilder.d.ts +7 -3
  2. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  3. package/dist/cjs/ChartBuilder.js +36 -19
  4. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ReportBuilder.js +183 -233
  6. package/dist/cjs/SQLEditor.js +12 -10
  7. package/dist/cjs/components/Dashboard/DataLoader.d.ts.map +1 -1
  8. package/dist/cjs/components/QuillTable.d.ts +2 -1
  9. package/dist/cjs/components/QuillTable.d.ts.map +1 -1
  10. package/dist/cjs/components/QuillTable.js +5 -2
  11. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts +1 -2
  12. package/dist/cjs/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  13. package/dist/cjs/components/ReportBuilder/AddSortPopover.js +1 -2
  14. package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -1
  15. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  16. package/dist/cjs/components/ReportBuilder/convert.js +31 -4
  17. package/dist/cjs/components/ReportBuilder/util.js +1 -1
  18. package/dist/cjs/components/UiComponents.d.ts +3 -2
  19. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  20. package/dist/cjs/components/UiComponents.js +6 -3
  21. package/dist/cjs/utils/astFilterProcessing.d.ts.map +1 -1
  22. package/dist/cjs/utils/astFilterProcessing.js +921 -1604
  23. package/dist/cjs/utils/astProcessing.d.ts +1 -1
  24. package/dist/cjs/utils/astProcessing.d.ts.map +1 -1
  25. package/dist/cjs/utils/astProcessing.js +4 -2
  26. package/dist/cjs/utils/constants.d.ts.map +1 -1
  27. package/dist/cjs/utils/constants.js +2 -2
  28. package/dist/cjs/utils/logging.js +1 -1
  29. package/dist/cjs/utils/pivotConstructor.js +2 -2
  30. package/dist/cjs/utils/queryConstructor.js +2 -2
  31. package/dist/cjs/utils/report.d.ts.map +1 -1
  32. package/dist/cjs/utils/report.js +1 -1
  33. package/dist/esm/ChartBuilder.d.ts +7 -3
  34. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  35. package/dist/esm/ChartBuilder.js +36 -19
  36. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  37. package/dist/esm/ReportBuilder.js +190 -238
  38. package/dist/esm/SQLEditor.js +12 -10
  39. package/dist/esm/components/Dashboard/DataLoader.d.ts.map +1 -1
  40. package/dist/esm/components/QuillTable.d.ts +2 -1
  41. package/dist/esm/components/QuillTable.d.ts.map +1 -1
  42. package/dist/esm/components/QuillTable.js +5 -2
  43. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts +1 -2
  44. package/dist/esm/components/ReportBuilder/AddSortPopover.d.ts.map +1 -1
  45. package/dist/esm/components/ReportBuilder/AddSortPopover.js +1 -2
  46. package/dist/esm/components/ReportBuilder/convert.d.ts +1 -1
  47. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  48. package/dist/esm/components/ReportBuilder/convert.js +31 -4
  49. package/dist/esm/components/ReportBuilder/util.js +1 -1
  50. package/dist/esm/components/UiComponents.d.ts +3 -2
  51. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  52. package/dist/esm/components/UiComponents.js +6 -3
  53. package/dist/esm/utils/astFilterProcessing.d.ts.map +1 -1
  54. package/dist/esm/utils/astFilterProcessing.js +921 -1604
  55. package/dist/esm/utils/astProcessing.d.ts +1 -1
  56. package/dist/esm/utils/astProcessing.d.ts.map +1 -1
  57. package/dist/esm/utils/astProcessing.js +4 -2
  58. package/dist/esm/utils/constants.d.ts.map +1 -1
  59. package/dist/esm/utils/constants.js +2 -2
  60. package/dist/esm/utils/logging.js +1 -1
  61. package/dist/esm/utils/pivotConstructor.js +2 -2
  62. package/dist/esm/utils/queryConstructor.js +2 -2
  63. package/dist/esm/utils/report.d.ts.map +1 -1
  64. package/dist/esm/utils/report.js +1 -1
  65. package/package.json +1 -1
@@ -607,6 +607,7 @@ const queryPatterns = [
607
607
  },
608
608
  unit: function (astWhere) {
609
609
  return (astWhere.right?.args?.value[0]?.column?.expr?.value?.toLowerCase() ??
610
+ astWhere.right?.args?.value[0]?.column.toLowerCase() ??
610
611
  null);
611
612
  },
612
613
  ast: {
@@ -642,12 +643,7 @@ const queryPatterns = [
642
643
  left: {
643
644
  type: 'column_ref',
644
645
  table: null,
645
- column: {
646
- expr: {
647
- type: 'default',
648
- value: 'transaction_date',
649
- },
650
- },
646
+ column: 'transaction_date',
651
647
  },
652
648
  right: {
653
649
  type: 'function',
@@ -665,12 +661,7 @@ const queryPatterns = [
665
661
  {
666
662
  type: 'column_ref',
667
663
  table: null,
668
- column: {
669
- expr: {
670
- type: 'default',
671
- value: 'DAY',
672
- },
673
- },
664
+ column: 'DAY',
674
665
  },
675
666
  {
676
667
  type: 'number',
@@ -681,7 +672,7 @@ const queryPatterns = [
681
672
  name: {
682
673
  name: [
683
674
  {
684
- type: 'origin',
675
+ type: 'default',
685
676
  value: 'CURRENT_DATE',
686
677
  },
687
678
  ],
@@ -698,6 +689,7 @@ const queryPatterns = [
698
689
  },
699
690
  groupby: null,
700
691
  having: null,
692
+ qualify: null,
701
693
  orderby: null,
702
694
  limit: {
703
695
  seperator: '',
@@ -769,12 +761,7 @@ const queryPatterns = [
769
761
  left: {
770
762
  type: 'column_ref',
771
763
  table: null,
772
- column: {
773
- expr: {
774
- type: 'default',
775
- value: 'transaction_date',
776
- },
777
- },
764
+ column: 'transaction_date',
778
765
  },
779
766
  right: {
780
767
  type: 'binary_expr',
@@ -784,7 +771,7 @@ const queryPatterns = [
784
771
  name: {
785
772
  name: [
786
773
  {
787
- type: 'origin',
774
+ type: 'default',
788
775
  value: 'CURRENT_DATE',
789
776
  },
790
777
  ],
@@ -811,19 +798,14 @@ const queryPatterns = [
811
798
  left: {
812
799
  type: 'column_ref',
813
800
  table: null,
814
- column: {
815
- expr: {
816
- type: 'default',
817
- value: 'transaction_date',
818
- },
819
- },
801
+ column: 'transaction_date',
820
802
  },
821
803
  right: {
822
804
  type: 'function',
823
805
  name: {
824
806
  name: [
825
807
  {
826
- type: 'origin',
808
+ type: 'default',
827
809
  value: 'CURRENT_DATE',
828
810
  },
829
811
  ],
@@ -838,6 +820,7 @@ const queryPatterns = [
838
820
  },
839
821
  groupby: null,
840
822
  having: null,
823
+ qualify: null,
841
824
  orderby: null,
842
825
  limit: {
843
826
  seperator: '',
@@ -851,7 +834,7 @@ const queryPatterns = [
851
834
  SELECT *
852
835
  FROM transactions
853
836
  WHERE transaction_date >= DATEADD(DAY, -90, CURRENT_DATE())
854
- AND transaction_date <= CURRENT_DATE();
837
+ AND transaction_date <= CURRENT_DATE()
855
838
  `,
856
839
  value: function (astWhere) {
857
840
  return astWhere.left?.right?.args?.value[1]?.value
@@ -860,6 +843,7 @@ const queryPatterns = [
860
843
  },
861
844
  unit: function (astWhere) {
862
845
  return (astWhere.left?.right?.args?.value[0]?.column?.expr?.value?.toLowerCase() ??
846
+ astWhere.left?.right?.args?.value[0]?.column?.toLowerCase() ??
863
847
  null);
864
848
  },
865
849
  ast: {
@@ -898,12 +882,7 @@ const queryPatterns = [
898
882
  left: {
899
883
  type: 'column_ref',
900
884
  table: null,
901
- column: {
902
- expr: {
903
- type: 'default',
904
- value: 'transaction_date',
905
- },
906
- },
885
+ column: 'transaction_date',
907
886
  },
908
887
  right: {
909
888
  type: 'function',
@@ -921,12 +900,7 @@ const queryPatterns = [
921
900
  {
922
901
  type: 'column_ref',
923
902
  table: null,
924
- column: {
925
- expr: {
926
- type: 'default',
927
- value: 'DAY',
928
- },
929
- },
903
+ column: 'DAY',
930
904
  },
931
905
  {
932
906
  type: 'number',
@@ -937,7 +911,7 @@ const queryPatterns = [
937
911
  name: {
938
912
  name: [
939
913
  {
940
- type: 'origin',
914
+ type: 'default',
941
915
  value: 'CURRENT_DATE',
942
916
  },
943
917
  ],
@@ -958,19 +932,14 @@ const queryPatterns = [
958
932
  left: {
959
933
  type: 'column_ref',
960
934
  table: null,
961
- column: {
962
- expr: {
963
- type: 'default',
964
- value: 'transaction_date',
965
- },
966
- },
935
+ column: 'transaction_date',
967
936
  },
968
937
  right: {
969
938
  type: 'function',
970
939
  name: {
971
940
  name: [
972
941
  {
973
- type: 'origin',
942
+ type: 'default',
974
943
  value: 'CURRENT_DATE',
975
944
  },
976
945
  ],
@@ -985,6 +954,7 @@ const queryPatterns = [
985
954
  },
986
955
  groupby: null,
987
956
  having: null,
957
+ qualify: null,
988
958
  orderby: null,
989
959
  limit: {
990
960
  seperator: '',
@@ -1028,7 +998,7 @@ const queryPatterns = [
1028
998
  from: [
1029
999
  {
1030
1000
  db: null,
1031
- table: 'CONTACTS',
1001
+ table: 'transactions',
1032
1002
  as: null,
1033
1003
  },
1034
1004
  ],
@@ -1053,21 +1023,15 @@ const queryPatterns = [
1053
1023
  value: 'year',
1054
1024
  },
1055
1025
  {
1056
- type: 'column_ref',
1057
- table: null,
1058
- column: {
1059
- expr: {
1060
- type: 'double_quote_string',
1061
- value: 'CREATED_AT',
1062
- },
1063
- },
1026
+ type: 'double_quote_string',
1027
+ value: 'CREATED_AT',
1064
1028
  },
1065
1029
  {
1066
1030
  type: 'function',
1067
1031
  name: {
1068
1032
  name: [
1069
1033
  {
1070
- type: 'origin',
1034
+ type: 'default',
1071
1035
  value: 'CURRENT_DATE',
1072
1036
  },
1073
1037
  ],
@@ -1088,7 +1052,93 @@ const queryPatterns = [
1088
1052
  },
1089
1053
  groupby: null,
1090
1054
  having: null,
1055
+ qualify: null,
1056
+ orderby: null,
1057
+ limit: {
1058
+ seperator: '',
1059
+ value: [],
1060
+ },
1061
+ window: null,
1062
+ },
1063
+ },
1064
+ {
1065
+ query: `
1066
+ SELECT *
1067
+ FROM transactions
1068
+ WHERE "CREATED_AT" >= CURRENT_DATE() - 90
1069
+ `,
1070
+ value: function (astWhere) {
1071
+ return astWhere.right?.right?.value ?? null;
1072
+ },
1073
+ unit: function () {
1074
+ return 'day';
1075
+ },
1076
+ ast: {
1077
+ with: null,
1078
+ type: 'select',
1079
+ options: null,
1080
+ distinct: {
1081
+ type: null,
1082
+ },
1083
+ columns: [
1084
+ {
1085
+ expr: {
1086
+ type: 'column_ref',
1087
+ table: null,
1088
+ column: '*',
1089
+ suffix: null,
1090
+ },
1091
+ as: null,
1092
+ },
1093
+ ],
1094
+ into: {
1095
+ position: null,
1096
+ },
1097
+ from: [
1098
+ {
1099
+ db: null,
1100
+ table: 'transactions',
1101
+ as: null,
1102
+ operator: null,
1103
+ },
1104
+ ],
1105
+ where: {
1106
+ type: 'binary_expr',
1107
+ operator: '>=',
1108
+ left: {
1109
+ type: 'double_quote_string',
1110
+ value: 'CREATED_AT',
1111
+ },
1112
+ right: {
1113
+ type: 'binary_expr',
1114
+ operator: '-',
1115
+ left: {
1116
+ type: 'function',
1117
+ name: {
1118
+ name: [
1119
+ {
1120
+ type: 'default',
1121
+ value: 'CURRENT_DATE',
1122
+ },
1123
+ ],
1124
+ },
1125
+ args: {
1126
+ type: 'expr_list',
1127
+ value: [],
1128
+ },
1129
+ over: null,
1130
+ },
1131
+ right: {
1132
+ type: 'number',
1133
+ value: 90,
1134
+ },
1135
+ },
1136
+ },
1137
+ groupby: null,
1138
+ having: null,
1139
+ qualify: null,
1091
1140
  orderby: null,
1141
+ top: null,
1092
1142
  limit: {
1093
1143
  seperator: '',
1094
1144
  value: [],
@@ -1200,7 +1250,7 @@ const queryPatterns = [
1200
1250
  WHERE transaction_date >= TIMESTAMP(DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY))
1201
1251
  `,
1202
1252
  value: function (astWhere) {
1203
- return (astWhere.right?.args?.value[0]?.args?.value[1]?.expr?.value ??
1253
+ return (Math.abs(astWhere.right?.args?.value[0]?.args?.value[1]?.expr?.value) ?? // When DATE_ADD
1204
1254
  null);
1205
1255
  },
1206
1256
  unit: function (astWhere) {
@@ -2754,12 +2804,7 @@ const queryPatterns = [
2754
2804
  {
2755
2805
  type: 'column_ref',
2756
2806
  table: null,
2757
- column: {
2758
- expr: {
2759
- type: 'default',
2760
- value: 'created_at',
2761
- },
2762
- },
2807
+ column: 'created_at',
2763
2808
  },
2764
2809
  ],
2765
2810
  },
@@ -2786,7 +2831,7 @@ const queryPatterns = [
2786
2831
  name: {
2787
2832
  name: [
2788
2833
  {
2789
- type: 'origin',
2834
+ type: 'default',
2790
2835
  value: 'CURRENT_TIMESTAMP',
2791
2836
  },
2792
2837
  ],
@@ -2803,6 +2848,7 @@ const queryPatterns = [
2803
2848
  },
2804
2849
  groupby: null,
2805
2850
  having: null,
2851
+ qualify: null,
2806
2852
  orderby: null,
2807
2853
  limit: {
2808
2854
  seperator: '',
@@ -2811,24 +2857,39 @@ const queryPatterns = [
2811
2857
  window: null,
2812
2858
  },
2813
2859
  },
2814
- ],
2815
- bigquery: [
2816
2860
  {
2817
2861
  query: `
2818
- SELECT * FROM transactions
2819
- WHERE EXTRACT(YEAR FROM transaction_date) = EXTRACT(YEAR FROM CURRENT_DATE())
2820
- AND EXTRACT(MONTH FROM transaction_date) = EXTRACT(MONTH FROM CURRENT_DATE())
2862
+ SELECT * FROM transactions
2863
+ WHERE TO_CHAR(CREATED_AT, 'YYYY-MM') = TO_CHAR(CURRENT_DATE(), 'YYYY-MM')
2821
2864
  `,
2822
2865
  value: function () {
2823
2866
  return 0;
2824
2867
  },
2825
2868
  unit: function (astWhere) {
2826
- return extractTimeUnit(astWhere, (node) => node.left?.args?.field?.toLowerCase() ?? null);
2869
+ const unit = astWhere.right?.args?.value?.[1]?.value ?? null;
2870
+ switch (unit) {
2871
+ case 'YYYY':
2872
+ return 'year';
2873
+ case 'YYYY-Q':
2874
+ return 'quarter';
2875
+ case 'YYYY-MM':
2876
+ return 'month';
2877
+ case 'YYYY-IW':
2878
+ return 'week';
2879
+ case 'YYYY-MM-DD':
2880
+ return 'day';
2881
+ case 'YYYY-MM-DD HH24':
2882
+ return 'hour';
2883
+ }
2884
+ return null;
2827
2885
  },
2828
2886
  ast: {
2887
+ with: null,
2829
2888
  type: 'select',
2830
- as_struct_val: null,
2831
- distinct: null,
2889
+ options: null,
2890
+ distinct: {
2891
+ type: null,
2892
+ },
2832
2893
  columns: [
2833
2894
  {
2834
2895
  expr: {
@@ -2839,74 +2900,58 @@ const queryPatterns = [
2839
2900
  as: null,
2840
2901
  },
2841
2902
  ],
2903
+ into: {
2904
+ position: null,
2905
+ },
2842
2906
  from: [
2843
2907
  {
2844
2908
  db: null,
2845
2909
  table: 'transactions',
2846
2910
  as: null,
2847
- operator: null,
2848
2911
  },
2849
2912
  ],
2850
- for_sys_time_as_of: null,
2851
2913
  where: {
2852
2914
  type: 'binary_expr',
2853
- operator: 'AND',
2915
+ operator: '=',
2854
2916
  left: {
2855
- type: 'binary_expr',
2856
- operator: '=',
2857
- left: {
2858
- type: 'extract',
2859
- args: {
2860
- field: 'YEAR',
2861
- source: {
2917
+ type: 'function',
2918
+ name: {
2919
+ name: [
2920
+ {
2921
+ type: 'default',
2922
+ value: 'TO_CHAR',
2923
+ },
2924
+ ],
2925
+ },
2926
+ args: {
2927
+ type: 'expr_list',
2928
+ value: [
2929
+ {
2862
2930
  type: 'column_ref',
2863
2931
  table: null,
2864
- column: 'transaction_date',
2932
+ column: 'CREATED_AT',
2865
2933
  },
2866
- },
2867
- },
2868
- right: {
2869
- type: 'extract',
2870
- args: {
2871
- field: 'YEAR',
2872
- source: {
2873
- type: 'function',
2874
- name: {
2875
- name: [
2876
- {
2877
- type: 'default',
2878
- value: 'CURRENT_DATE',
2879
- },
2880
- ],
2881
- },
2882
- args: {
2883
- type: 'expr_list',
2884
- value: [],
2885
- },
2886
- over: null,
2934
+ {
2935
+ type: 'single_quote_string',
2936
+ value: 'YYYY-MM',
2887
2937
  },
2888
- },
2938
+ ],
2889
2939
  },
2890
2940
  },
2891
2941
  right: {
2892
- type: 'binary_expr',
2893
- operator: '=',
2894
- left: {
2895
- type: 'extract',
2896
- args: {
2897
- field: 'MONTH',
2898
- source: {
2899
- type: 'column_ref',
2900
- table: null,
2901
- column: 'transaction_date',
2942
+ type: 'function',
2943
+ name: {
2944
+ name: [
2945
+ {
2946
+ type: 'default',
2947
+ value: 'TO_CHAR',
2902
2948
  },
2903
- },
2949
+ ],
2904
2950
  },
2905
- right: {
2906
- type: 'extract',
2907
- args: {
2908
- field: 'MONTH',
2909
- source: {
2951
+ args: {
2952
+ type: 'expr_list',
2953
+ value: [
2954
+ {
2910
2955
  type: 'function',
2911
2956
  name: {
2912
2957
  name: [
@@ -2922,16 +2967,146 @@ const queryPatterns = [
2922
2967
  },
2923
2968
  over: null,
2924
2969
  },
2925
- },
2970
+ {
2971
+ type: 'single_quote_string',
2972
+ value: 'YYYY-MM',
2973
+ },
2974
+ ],
2926
2975
  },
2927
2976
  },
2928
2977
  },
2929
- with: null,
2930
2978
  groupby: null,
2931
2979
  having: null,
2932
2980
  qualify: null,
2933
2981
  orderby: null,
2934
- limit: null,
2982
+ limit: {
2983
+ seperator: '',
2984
+ value: [],
2985
+ },
2986
+ window: null,
2987
+ },
2988
+ },
2989
+ ],
2990
+ bigquery: [
2991
+ {
2992
+ query: `
2993
+ SELECT * FROM transactions
2994
+ WHERE EXTRACT(YEAR FROM transaction_date) = EXTRACT(YEAR FROM CURRENT_DATE())
2995
+ AND EXTRACT(MONTH FROM transaction_date) = EXTRACT(MONTH FROM CURRENT_DATE())
2996
+ `,
2997
+ value: function () {
2998
+ return 0;
2999
+ },
3000
+ unit: function (astWhere) {
3001
+ return extractTimeUnit(astWhere, (node) => node.left?.args?.field?.toLowerCase() ?? null);
3002
+ },
3003
+ ast: {
3004
+ type: 'select',
3005
+ as_struct_val: null,
3006
+ distinct: null,
3007
+ columns: [
3008
+ {
3009
+ expr: {
3010
+ type: 'column_ref',
3011
+ table: null,
3012
+ column: '*',
3013
+ },
3014
+ as: null,
3015
+ },
3016
+ ],
3017
+ from: [
3018
+ {
3019
+ db: null,
3020
+ table: 'transactions',
3021
+ as: null,
3022
+ operator: null,
3023
+ },
3024
+ ],
3025
+ for_sys_time_as_of: null,
3026
+ where: {
3027
+ type: 'binary_expr',
3028
+ operator: 'AND',
3029
+ left: {
3030
+ type: 'binary_expr',
3031
+ operator: '=',
3032
+ left: {
3033
+ type: 'extract',
3034
+ args: {
3035
+ field: 'YEAR',
3036
+ source: {
3037
+ type: 'column_ref',
3038
+ table: null,
3039
+ column: 'transaction_date',
3040
+ },
3041
+ },
3042
+ },
3043
+ right: {
3044
+ type: 'extract',
3045
+ args: {
3046
+ field: 'YEAR',
3047
+ source: {
3048
+ type: 'function',
3049
+ name: {
3050
+ name: [
3051
+ {
3052
+ type: 'default',
3053
+ value: 'CURRENT_DATE',
3054
+ },
3055
+ ],
3056
+ },
3057
+ args: {
3058
+ type: 'expr_list',
3059
+ value: [],
3060
+ },
3061
+ over: null,
3062
+ },
3063
+ },
3064
+ },
3065
+ },
3066
+ right: {
3067
+ type: 'binary_expr',
3068
+ operator: '=',
3069
+ left: {
3070
+ type: 'extract',
3071
+ args: {
3072
+ field: 'MONTH',
3073
+ source: {
3074
+ type: 'column_ref',
3075
+ table: null,
3076
+ column: 'transaction_date',
3077
+ },
3078
+ },
3079
+ },
3080
+ right: {
3081
+ type: 'extract',
3082
+ args: {
3083
+ field: 'MONTH',
3084
+ source: {
3085
+ type: 'function',
3086
+ name: {
3087
+ name: [
3088
+ {
3089
+ type: 'default',
3090
+ value: 'CURRENT_DATE',
3091
+ },
3092
+ ],
3093
+ },
3094
+ args: {
3095
+ type: 'expr_list',
3096
+ value: [],
3097
+ },
3098
+ over: null,
3099
+ },
3100
+ },
3101
+ },
3102
+ },
3103
+ },
3104
+ with: null,
3105
+ groupby: null,
3106
+ having: null,
3107
+ qualify: null,
3108
+ orderby: null,
3109
+ limit: null,
2935
3110
  window: null,
2936
3111
  _orderby: null,
2937
3112
  _limit: null,
@@ -3019,6 +3194,118 @@ const queryPatterns = [
3019
3194
  _limit: null,
3020
3195
  },
3021
3196
  },
3197
+ {
3198
+ query: `
3199
+ SELECT * FROM transactions
3200
+ WHERE DATETIME_TRUNC(transaction_ts, YEAR) = DATETIME_TRUNC(CURRENT_TIMESTAMP(), YEAR)
3201
+ `,
3202
+ value: function () {
3203
+ return 0;
3204
+ },
3205
+ unit: function (astWhere) {
3206
+ return (astWhere.left?.args?.value?.[1]?.column?.toLowerCase() ?? null);
3207
+ },
3208
+ ast: {
3209
+ type: 'select',
3210
+ as_struct_val: null,
3211
+ distinct: null,
3212
+ columns: [
3213
+ {
3214
+ expr: {
3215
+ type: 'column_ref',
3216
+ table: null,
3217
+ column: '*',
3218
+ },
3219
+ as: null,
3220
+ },
3221
+ ],
3222
+ from: [
3223
+ {
3224
+ db: null,
3225
+ table: 'transactions',
3226
+ as: null,
3227
+ operator: null,
3228
+ },
3229
+ ],
3230
+ for_sys_time_as_of: null,
3231
+ where: {
3232
+ type: 'binary_expr',
3233
+ operator: '=',
3234
+ left: {
3235
+ type: 'function',
3236
+ name: {
3237
+ name: [],
3238
+ schema: {
3239
+ type: 'default',
3240
+ value: 'DATETIME_TRUNC',
3241
+ },
3242
+ },
3243
+ args: {
3244
+ type: 'expr_list',
3245
+ value: [
3246
+ {
3247
+ type: 'column_ref',
3248
+ table: null,
3249
+ column: 'transaction_ts',
3250
+ },
3251
+ {
3252
+ type: 'column_ref',
3253
+ table: null,
3254
+ column: 'YEAR',
3255
+ },
3256
+ ],
3257
+ },
3258
+ over: null,
3259
+ },
3260
+ right: {
3261
+ type: 'function',
3262
+ name: {
3263
+ name: [],
3264
+ schema: {
3265
+ type: 'default',
3266
+ value: 'DATETIME_TRUNC',
3267
+ },
3268
+ },
3269
+ args: {
3270
+ type: 'expr_list',
3271
+ value: [
3272
+ {
3273
+ type: 'function',
3274
+ name: {
3275
+ name: [
3276
+ {
3277
+ type: 'default',
3278
+ value: 'CURRENT_TIMESTAMP',
3279
+ },
3280
+ ],
3281
+ },
3282
+ args: {
3283
+ type: 'expr_list',
3284
+ value: [],
3285
+ },
3286
+ over: null,
3287
+ },
3288
+ {
3289
+ type: 'column_ref',
3290
+ table: null,
3291
+ column: 'YEAR',
3292
+ },
3293
+ ],
3294
+ },
3295
+ over: null,
3296
+ },
3297
+ },
3298
+ with: null,
3299
+ groupby: null,
3300
+ having: null,
3301
+ qualify: null,
3302
+ orderby: null,
3303
+ limit: null,
3304
+ window: null,
3305
+ _orderby: null,
3306
+ _limit: null,
3307
+ },
3308
+ },
3022
3309
  ],
3023
3310
  mysql: [
3024
3311
  {
@@ -3291,18 +3578,33 @@ const queryPatterns = [
3291
3578
  window: null,
3292
3579
  },
3293
3580
  },
3294
- ],
3295
- postgresql: [
3296
3581
  {
3297
3582
  query: `
3298
3583
  SELECT * FROM transactions
3299
- WHERE DATE_TRUNC('month', transaction_date) = DATE_TRUNC('month', CURRENT_DATE)
3584
+ WHERE DATE_FORMAT(transaction_date, '%Y-%m') = DATE_FORMAT(CURRENT_DATE(), '%Y-%m')
3300
3585
  `,
3301
3586
  value: function () {
3302
3587
  return 0;
3303
3588
  },
3304
3589
  unit: function (astWhere) {
3305
- return astWhere.left?.args?.value[0]?.value ?? null;
3590
+ const format = astWhere.left?.args?.value[1]?.value;
3591
+ if (!format) {
3592
+ return null;
3593
+ }
3594
+ switch (format) {
3595
+ case '%Y':
3596
+ return 'year';
3597
+ case '%Y-%m':
3598
+ return 'month';
3599
+ case '%Y-%u':
3600
+ return 'week';
3601
+ case '%Y-%m-%d':
3602
+ return 'day';
3603
+ case '%Y-%m-%d %H':
3604
+ return 'hour';
3605
+ default:
3606
+ return null;
3607
+ }
3306
3608
  },
3307
3609
  ast: {
3308
3610
  with: null,
@@ -3340,17 +3642,13 @@ const queryPatterns = [
3340
3642
  name: [
3341
3643
  {
3342
3644
  type: 'default',
3343
- value: 'DATE_TRUNC',
3645
+ value: 'DATE_FORMAT',
3344
3646
  },
3345
3647
  ],
3346
3648
  },
3347
3649
  args: {
3348
3650
  type: 'expr_list',
3349
3651
  value: [
3350
- {
3351
- type: 'single_quote_string',
3352
- value: 'month',
3353
- },
3354
3652
  {
3355
3653
  type: 'column_ref',
3356
3654
  table: null,
@@ -3361,6 +3659,10 @@ const queryPatterns = [
3361
3659
  },
3362
3660
  },
3363
3661
  },
3662
+ {
3663
+ type: 'single_quote_string',
3664
+ value: '%Y-%m',
3665
+ },
3364
3666
  ],
3365
3667
  },
3366
3668
  },
@@ -3370,17 +3672,268 @@ const queryPatterns = [
3370
3672
  name: [
3371
3673
  {
3372
3674
  type: 'default',
3373
- value: 'DATE_TRUNC',
3675
+ value: 'DATE_FORMAT',
3374
3676
  },
3375
3677
  ],
3376
3678
  },
3377
3679
  args: {
3378
3680
  type: 'expr_list',
3379
3681
  value: [
3380
- {
3381
- type: 'single_quote_string',
3382
- value: 'month',
3383
- },
3682
+ {
3683
+ type: 'function',
3684
+ name: {
3685
+ name: [
3686
+ {
3687
+ type: 'origin',
3688
+ value: 'CURRENT_DATE',
3689
+ },
3690
+ ],
3691
+ },
3692
+ args: {
3693
+ type: 'expr_list',
3694
+ value: [],
3695
+ },
3696
+ over: null,
3697
+ },
3698
+ {
3699
+ type: 'single_quote_string',
3700
+ value: '%Y-%m',
3701
+ },
3702
+ ],
3703
+ },
3704
+ },
3705
+ },
3706
+ groupby: null,
3707
+ having: null,
3708
+ orderby: null,
3709
+ limit: {
3710
+ seperator: '',
3711
+ value: [],
3712
+ },
3713
+ window: null,
3714
+ },
3715
+ },
3716
+ {
3717
+ query: `
3718
+ SELECT * FROM transactions
3719
+ WHERE DATE_TRUNC(transaction_date, MONTH) = DATE_TRUNC(CURRENT_DATE(), MONTH)
3720
+ `,
3721
+ value: function () {
3722
+ return 0;
3723
+ },
3724
+ unit: function (astWhere) {
3725
+ return (astWhere.left?.args?.value[1]?.column?.expr?.value?.toLowerCase() ??
3726
+ null);
3727
+ },
3728
+ ast: {
3729
+ with: null,
3730
+ type: 'select',
3731
+ options: null,
3732
+ distinct: {
3733
+ type: null,
3734
+ },
3735
+ columns: [
3736
+ {
3737
+ expr: {
3738
+ type: 'column_ref',
3739
+ table: null,
3740
+ column: '*',
3741
+ },
3742
+ as: null,
3743
+ },
3744
+ ],
3745
+ into: {
3746
+ position: null,
3747
+ },
3748
+ from: [
3749
+ {
3750
+ db: null,
3751
+ table: 'transactions',
3752
+ as: null,
3753
+ },
3754
+ ],
3755
+ where: {
3756
+ type: 'binary_expr',
3757
+ operator: '=',
3758
+ left: {
3759
+ type: 'function',
3760
+ name: {
3761
+ name: [
3762
+ {
3763
+ type: 'default',
3764
+ value: 'DATE_TRUNC',
3765
+ },
3766
+ ],
3767
+ },
3768
+ args: {
3769
+ type: 'expr_list',
3770
+ value: [
3771
+ {
3772
+ type: 'column_ref',
3773
+ table: null,
3774
+ column: {
3775
+ expr: {
3776
+ type: 'default',
3777
+ value: 'transaction_date',
3778
+ },
3779
+ },
3780
+ },
3781
+ {
3782
+ type: 'column_ref',
3783
+ table: null,
3784
+ column: {
3785
+ expr: {
3786
+ type: 'default',
3787
+ value: 'MONTH',
3788
+ },
3789
+ },
3790
+ },
3791
+ ],
3792
+ },
3793
+ },
3794
+ right: {
3795
+ type: 'function',
3796
+ name: {
3797
+ name: [
3798
+ {
3799
+ type: 'default',
3800
+ value: 'DATE_TRUNC',
3801
+ },
3802
+ ],
3803
+ },
3804
+ args: {
3805
+ type: 'expr_list',
3806
+ value: [
3807
+ {
3808
+ type: 'function',
3809
+ name: {
3810
+ name: [
3811
+ {
3812
+ type: 'origin',
3813
+ value: 'CURRENT_DATE',
3814
+ },
3815
+ ],
3816
+ },
3817
+ args: {
3818
+ type: 'expr_list',
3819
+ value: [],
3820
+ },
3821
+ over: null,
3822
+ },
3823
+ {
3824
+ type: 'column_ref',
3825
+ table: null,
3826
+ column: {
3827
+ expr: {
3828
+ type: 'default',
3829
+ value: 'MONTH',
3830
+ },
3831
+ },
3832
+ },
3833
+ ],
3834
+ },
3835
+ },
3836
+ },
3837
+ groupby: null,
3838
+ having: null,
3839
+ orderby: null,
3840
+ limit: {
3841
+ seperator: '',
3842
+ value: [],
3843
+ },
3844
+ window: null,
3845
+ },
3846
+ },
3847
+ ],
3848
+ postgresql: [
3849
+ {
3850
+ query: `
3851
+ SELECT * FROM transactions
3852
+ WHERE DATE_TRUNC('month', transaction_date) = DATE_TRUNC('month', CURRENT_DATE)
3853
+ `,
3854
+ value: function () {
3855
+ return 0;
3856
+ },
3857
+ unit: function (astWhere) {
3858
+ return astWhere.left?.args?.value[0]?.value ?? null;
3859
+ },
3860
+ ast: {
3861
+ with: null,
3862
+ type: 'select',
3863
+ options: null,
3864
+ distinct: {
3865
+ type: null,
3866
+ },
3867
+ columns: [
3868
+ {
3869
+ expr: {
3870
+ type: 'column_ref',
3871
+ table: null,
3872
+ column: '*',
3873
+ },
3874
+ as: null,
3875
+ },
3876
+ ],
3877
+ into: {
3878
+ position: null,
3879
+ },
3880
+ from: [
3881
+ {
3882
+ db: null,
3883
+ table: 'transactions',
3884
+ as: null,
3885
+ },
3886
+ ],
3887
+ where: {
3888
+ type: 'binary_expr',
3889
+ operator: '=',
3890
+ left: {
3891
+ type: 'function',
3892
+ name: {
3893
+ name: [
3894
+ {
3895
+ type: 'default',
3896
+ value: 'DATE_TRUNC',
3897
+ },
3898
+ ],
3899
+ },
3900
+ args: {
3901
+ type: 'expr_list',
3902
+ value: [
3903
+ {
3904
+ type: 'single_quote_string',
3905
+ value: 'month',
3906
+ },
3907
+ {
3908
+ type: 'column_ref',
3909
+ table: null,
3910
+ column: {
3911
+ expr: {
3912
+ type: 'default',
3913
+ value: 'transaction_date',
3914
+ },
3915
+ },
3916
+ },
3917
+ ],
3918
+ },
3919
+ },
3920
+ right: {
3921
+ type: 'function',
3922
+ name: {
3923
+ name: [
3924
+ {
3925
+ type: 'default',
3926
+ value: 'DATE_TRUNC',
3927
+ },
3928
+ ],
3929
+ },
3930
+ args: {
3931
+ type: 'expr_list',
3932
+ value: [
3933
+ {
3934
+ type: 'single_quote_string',
3935
+ value: 'month',
3936
+ },
3384
3937
  {
3385
3938
  type: 'function',
3386
3939
  name: {
@@ -5078,8 +5631,8 @@ function generateWhereChecker(astWhere) {
5078
5631
  case 'function':
5079
5632
  if (node?.name && typeof node.name === 'string') {
5080
5633
  resultString = resultString.concat(` && (${testWhereNode}?.name?.toLowerCase() === '${node.name.toLowerCase()} ` +
5081
- `|| (['CURRENT_DATE', 'CURRENT_TIMESTAMP'].includes(${testWhereNode}?.name?.toLowerCase()) ` +
5082
- `&& ['CURRENT_DATE', 'CURRENT_TIMESTAMP'].includes('${node.name.toLowerCase()}')) ` +
5634
+ `|| (['CURRENT_DATE', 'CURRENT_TIMESTAMP'].includes(${testWhereNode}?.name)) ` +
5635
+ `&& ['CURRENT_DATE', 'CURRENT_TIMESTAMP'].includes('${node.name}')) ` +
5083
5636
  `|| (['year', 'month', 'quarter', 'day', 'week', 'hour'].includes(${testWhereNode}?.name?.toLowerCase()) ` +
5084
5637
  `&& ['year', 'month', 'quarter', 'day', 'week', 'hour'].includes('${node.name.toLowerCase()}')))`);
5085
5638
  }
@@ -5299,12 +5852,17 @@ function lowerFunctionToField(lower, db) {
5299
5852
  export function getFieldFromExpression(expr) {
5300
5853
  return (expr.column?.expr?.value ||
5301
5854
  expr.column ||
5302
- expr.args?.value?.[1]?.value ||
5303
- expr.args?.value?.[1]?.column?.expr?.value ||
5304
5855
  expr.args?.value?.[1]?.expr?.column ||
5305
5856
  expr.args?.value?.[1]?.args?.value?.[0]?.column?.expr?.value ||
5306
5857
  expr.args?.value?.[0]?.value?.expr?.value ||
5858
+ expr.args?.value?.[1]?.column?.expr?.value ||
5307
5859
  expr.args?.value?.[0]?.column?.expr?.value ||
5860
+ (expr.name?.schema?.value !== 'DATETIME_TRUNC' // BigQuery edge case
5861
+ ? expr.args?.value?.[1]?.column
5862
+ : null) ||
5863
+ (expr.args?.value?.[1]?.type === 'double_quote_string'
5864
+ ? expr.args?.value?.[1]?.value
5865
+ : null) ||
5308
5866
  expr.args?.value?.[0]?.column ||
5309
5867
  expr.args?.value?.[0]?.value ||
5310
5868
  expr.args?.source?.column?.expr?.value ||
@@ -5727,7 +6285,11 @@ export const filterTreeToAst = (filterTree, db) => {
5727
6285
  }
5728
6286
  }
5729
6287
  else {
5730
- astNode = { ...astNode, type: 'binary_expr', operator: node.operator };
6288
+ astNode = {
6289
+ ...astNode,
6290
+ type: 'binary_expr',
6291
+ operator: node.operator?.toUpperCase(),
6292
+ };
5731
6293
  if (node.leftNode) {
5732
6294
  astNode.left = buildTree(node.leftNode, {});
5733
6295
  }
@@ -6197,6 +6759,7 @@ export const filterToAst = (filter, db) => {
6197
6759
  parentheses: true,
6198
6760
  },
6199
6761
  },
6762
+ parentheses: true,
6200
6763
  };
6201
6764
  case 'snowflake':
6202
6765
  return {
@@ -6222,12 +6785,7 @@ export const filterToAst = (filter, db) => {
6222
6785
  {
6223
6786
  type: 'column_ref',
6224
6787
  table: null,
6225
- column: {
6226
- expr: {
6227
- type: 'default',
6228
- value: field,
6229
- },
6230
- },
6788
+ column: field,
6231
6789
  },
6232
6790
  ],
6233
6791
  },
@@ -6270,184 +6828,115 @@ export const filterToAst = (filter, db) => {
6270
6828
  },
6271
6829
  };
6272
6830
  case 'bigquery':
6273
- switch (filter.value.unit) {
6274
- case 'year':
6275
- return {
6276
- type: 'binary_expr',
6277
- operator: '=',
6278
- left: {
6279
- type: 'extract',
6280
- args: {
6281
- field: 'YEAR',
6282
- source: {
6283
- type: 'column_ref',
6284
- table: null,
6285
- column: field,
6286
- },
6287
- },
6831
+ return {
6832
+ type: 'binary_expr',
6833
+ operator: '=',
6834
+ left: {
6835
+ type: 'function',
6836
+ name: {
6837
+ name: [],
6838
+ schema: {
6839
+ type: 'default',
6840
+ value: 'DATETIME_TRUNC',
6288
6841
  },
6289
- right: {
6290
- type: 'extract',
6291
- args: {
6292
- field: 'YEAR',
6293
- source: {
6294
- type: 'function',
6295
- name: {
6296
- name: [
6297
- {
6298
- type: 'default',
6299
- value: 'CURRENT_DATE',
6300
- },
6301
- ],
6302
- },
6303
- args: {
6304
- type: 'expr_list',
6305
- value: [],
6306
- },
6307
- over: null,
6308
- },
6842
+ },
6843
+ args: {
6844
+ type: 'expr_list',
6845
+ value: [
6846
+ {
6847
+ type: 'column_ref',
6848
+ table: null,
6849
+ column: field,
6309
6850
  },
6310
- },
6311
- };
6312
- case 'quarter':
6313
- return {
6314
- type: 'binary_expr',
6315
- operator: 'AND',
6316
- left: {
6317
- type: 'binary_expr',
6318
- operator: '=',
6319
- left: {
6320
- type: 'extract',
6321
- args: {
6322
- field: 'YEAR',
6323
- source: {
6324
- type: 'column_ref',
6325
- table: null,
6326
- column: field,
6327
- },
6328
- },
6851
+ {
6852
+ type: 'column_ref',
6853
+ table: null,
6854
+ column: filter.value.unit,
6329
6855
  },
6330
- right: {
6331
- type: 'extract',
6332
- args: {
6333
- field: 'YEAR',
6334
- source: {
6335
- type: 'function',
6336
- name: {
6337
- name: [
6338
- {
6339
- type: 'default',
6340
- value: 'CURRENT_DATE',
6341
- },
6342
- ],
6343
- },
6344
- args: {
6345
- type: 'expr_list',
6346
- value: [],
6856
+ ],
6857
+ },
6858
+ },
6859
+ right: {
6860
+ type: 'function',
6861
+ name: {
6862
+ name: [],
6863
+ schema: {
6864
+ type: 'default',
6865
+ value: 'DATETIME_TRUNC',
6866
+ },
6867
+ },
6868
+ args: {
6869
+ type: 'expr_list',
6870
+ value: [
6871
+ {
6872
+ type: 'function',
6873
+ name: {
6874
+ name: [
6875
+ {
6876
+ type: 'origin',
6877
+ value: 'CURRENT_TIMESTAMP',
6347
6878
  },
6348
- over: null,
6349
- },
6879
+ ],
6350
6880
  },
6351
- },
6352
- },
6353
- right: {
6354
- type: 'binary_expr',
6355
- operator: '=',
6356
- left: {
6357
- type: 'extract',
6358
6881
  args: {
6359
- field: 'QUARTER',
6360
- source: {
6361
- type: 'column_ref',
6362
- table: null,
6363
- column: field,
6364
- },
6882
+ type: 'expr_list',
6883
+ value: [],
6365
6884
  },
6885
+ over: null,
6366
6886
  },
6367
- right: {
6368
- type: 'extract',
6369
- args: {
6370
- field: 'QUARTER',
6371
- source: {
6372
- type: 'function',
6373
- name: {
6374
- name: [
6375
- {
6376
- type: 'default',
6377
- value: 'CURRENT_DATE',
6378
- },
6379
- ],
6380
- },
6381
- args: {
6382
- type: 'expr_list',
6383
- value: [],
6384
- },
6385
- over: null,
6386
- },
6387
- },
6887
+ {
6888
+ type: 'column_ref',
6889
+ table: null,
6890
+ column: filter.value.unit,
6388
6891
  },
6389
- },
6390
- };
6391
- case 'month':
6392
- return {
6892
+ ],
6893
+ },
6894
+ },
6895
+ };
6896
+ case 'mysql': {
6897
+ if (filter.value.unit === 'quarter') {
6898
+ return {
6899
+ type: 'binary_expr',
6900
+ operator: 'AND',
6901
+ left: {
6393
6902
  type: 'binary_expr',
6394
- operator: 'AND',
6903
+ operator: '=',
6395
6904
  left: {
6396
- type: 'binary_expr',
6397
- operator: '=',
6398
- left: {
6399
- type: 'extract',
6400
- args: {
6401
- field: 'YEAR',
6402
- source: {
6905
+ type: 'function',
6906
+ name: {
6907
+ name: [
6908
+ {
6909
+ type: 'default',
6910
+ value: 'YEAR',
6911
+ },
6912
+ ],
6913
+ },
6914
+ args: {
6915
+ type: 'expr_list',
6916
+ value: [
6917
+ {
6403
6918
  type: 'column_ref',
6404
6919
  table: null,
6405
6920
  column: field,
6406
6921
  },
6407
- },
6408
- },
6409
- right: {
6410
- type: 'extract',
6411
- args: {
6412
- field: 'YEAR',
6413
- source: {
6414
- type: 'function',
6415
- name: {
6416
- name: [
6417
- {
6418
- type: 'default',
6419
- value: 'CURRENT_DATE',
6420
- },
6421
- ],
6422
- },
6423
- args: {
6424
- type: 'expr_list',
6425
- value: [],
6426
- },
6427
- over: null,
6428
- },
6429
- },
6922
+ ],
6430
6923
  },
6924
+ over: null,
6431
6925
  },
6432
6926
  right: {
6433
- type: 'binary_expr',
6434
- operator: '=',
6435
- left: {
6436
- type: 'extract',
6437
- args: {
6438
- field: 'MONTH',
6439
- source: {
6440
- type: 'column_ref',
6441
- table: null,
6442
- column: field,
6927
+ type: 'function',
6928
+ name: {
6929
+ name: [
6930
+ {
6931
+ type: 'default',
6932
+ value: 'YEAR',
6443
6933
  },
6444
- },
6934
+ ],
6445
6935
  },
6446
- right: {
6447
- type: 'extract',
6448
- args: {
6449
- field: 'MONTH',
6450
- source: {
6936
+ args: {
6937
+ type: 'expr_list',
6938
+ value: [
6939
+ {
6451
6940
  type: 'function',
6452
6941
  name: {
6453
6942
  name: [
@@ -6463,111 +6952,50 @@ export const filterToAst = (filter, db) => {
6463
6952
  },
6464
6953
  over: null,
6465
6954
  },
6466
- },
6955
+ ],
6467
6956
  },
6957
+ over: null,
6468
6958
  },
6469
- };
6470
- case 'week':
6471
- return {
6959
+ },
6960
+ right: {
6472
6961
  type: 'binary_expr',
6473
- operator: 'AND',
6962
+ operator: '=',
6474
6963
  left: {
6475
- type: 'binary_expr',
6476
- operator: 'AND',
6477
- left: {
6478
- type: 'binary_expr',
6479
- operator: '=',
6480
- left: {
6481
- type: 'extract',
6482
- args: {
6483
- field: 'YEAR',
6484
- source: {
6485
- type: 'column_ref',
6486
- table: null,
6487
- column: field,
6488
- },
6489
- },
6490
- },
6491
- right: {
6492
- type: 'extract',
6493
- args: {
6494
- field: 'YEAR',
6495
- source: {
6496
- type: 'function',
6497
- name: {
6498
- name: [
6499
- {
6500
- type: 'default',
6501
- value: 'CURRENT_DATE',
6502
- },
6503
- ],
6504
- },
6505
- args: {
6506
- type: 'expr_list',
6507
- value: [],
6508
- },
6509
- over: null,
6510
- },
6964
+ type: 'function',
6965
+ name: {
6966
+ name: [
6967
+ {
6968
+ type: 'default',
6969
+ value: 'QUARTER',
6511
6970
  },
6512
- },
6971
+ ],
6513
6972
  },
6514
- right: {
6515
- type: 'binary_expr',
6516
- operator: '=',
6517
- left: {
6518
- type: 'extract',
6519
- args: {
6520
- field: 'MONTH',
6521
- source: {
6522
- type: 'column_ref',
6523
- table: null,
6524
- column: field,
6525
- },
6526
- },
6527
- },
6528
- right: {
6529
- type: 'extract',
6530
- args: {
6531
- field: 'MONTH',
6532
- source: {
6533
- type: 'function',
6534
- name: {
6535
- name: [
6536
- {
6537
- type: 'default',
6538
- value: 'CURRENT_DATE',
6539
- },
6540
- ],
6541
- },
6542
- args: {
6543
- type: 'expr_list',
6544
- value: [],
6545
- },
6546
- over: null,
6547
- },
6973
+ args: {
6974
+ type: 'expr_list',
6975
+ value: [
6976
+ {
6977
+ type: 'column_ref',
6978
+ table: null,
6979
+ column: field,
6548
6980
  },
6549
- },
6981
+ ],
6550
6982
  },
6983
+ over: null,
6551
6984
  },
6552
6985
  right: {
6553
- type: 'binary_expr',
6554
- operator: '=',
6555
- left: {
6556
- type: 'extract',
6557
- args: {
6558
- field: 'WEEK',
6559
- source: {
6560
- type: 'column_ref',
6561
- table: null,
6562
- column: field,
6986
+ type: 'function',
6987
+ name: {
6988
+ name: [
6989
+ {
6990
+ type: 'default',
6991
+ value: 'QUARTER',
6563
6992
  },
6564
- },
6993
+ ],
6565
6994
  },
6566
- right: {
6567
- type: 'extract',
6568
- args: {
6569
- field: 'WEEK',
6570
- source: {
6995
+ args: {
6996
+ type: 'expr_list',
6997
+ value: [
6998
+ {
6571
6999
  type: 'function',
6572
7000
  name: {
6573
7001
  name: [
@@ -6583,1228 +7011,112 @@ export const filterToAst = (filter, db) => {
6583
7011
  },
6584
7012
  over: null,
6585
7013
  },
6586
- },
7014
+ ],
6587
7015
  },
7016
+ over: null,
6588
7017
  },
6589
- };
6590
- case 'day':
6591
- return {
6592
- type: 'binary_expr',
6593
- operator: 'AND',
6594
- left: {
6595
- type: 'binary_expr',
6596
- operator: 'AND',
6597
- left: {
6598
- type: 'binary_expr',
6599
- operator: '=',
6600
- left: {
6601
- type: 'extract',
6602
- args: {
6603
- field: 'YEAR',
6604
- source: {
6605
- type: 'column_ref',
6606
- table: null,
6607
- column: field,
6608
- },
6609
- },
6610
- },
6611
- right: {
6612
- type: 'extract',
6613
- args: {
6614
- field: 'YEAR',
6615
- source: {
6616
- type: 'function',
6617
- name: {
6618
- name: [
6619
- {
6620
- type: 'default',
6621
- value: 'CURRENT_DATE',
6622
- },
6623
- ],
6624
- },
6625
- args: {
6626
- type: 'expr_list',
6627
- value: [],
6628
- },
6629
- over: null,
6630
- },
6631
- },
6632
- },
6633
- },
6634
- right: {
6635
- type: 'binary_expr',
6636
- operator: '=',
6637
- left: {
6638
- type: 'extract',
6639
- args: {
6640
- field: 'MONTH',
6641
- source: {
6642
- type: 'column_ref',
6643
- table: null,
6644
- column: field,
6645
- },
6646
- },
6647
- },
6648
- right: {
6649
- type: 'extract',
6650
- args: {
6651
- field: 'MONTH',
6652
- source: {
6653
- type: 'function',
6654
- name: {
6655
- name: [
6656
- {
6657
- type: 'default',
6658
- value: 'CURRENT_DATE',
6659
- },
6660
- ],
6661
- },
6662
- args: {
6663
- type: 'expr_list',
6664
- value: [],
6665
- },
6666
- over: null,
6667
- },
6668
- },
6669
- },
6670
- },
6671
- },
6672
- right: {
6673
- type: 'binary_expr',
6674
- operator: '=',
6675
- left: {
6676
- type: 'extract',
6677
- args: {
6678
- field: 'DAY',
6679
- source: {
6680
- type: 'column_ref',
6681
- table: null,
6682
- column: field,
6683
- },
6684
- },
6685
- },
6686
- right: {
6687
- type: 'extract',
6688
- args: {
6689
- field: 'DAY',
6690
- source: {
6691
- type: 'function',
6692
- name: {
6693
- name: [
6694
- {
6695
- type: 'default',
6696
- value: 'CURRENT_DATE',
6697
- },
6698
- ],
6699
- },
6700
- args: {
6701
- type: 'expr_list',
6702
- value: [],
6703
- },
6704
- over: null,
6705
- },
6706
- },
6707
- },
6708
- },
6709
- };
6710
- case 'hour':
6711
- return {
6712
- type: 'binary_expr',
6713
- operator: 'AND',
6714
- left: {
6715
- type: 'binary_expr',
6716
- operator: 'AND',
6717
- left: {
6718
- type: 'binary_expr',
6719
- operator: 'AND',
6720
- left: {
6721
- type: 'binary_expr',
6722
- operator: '=',
6723
- left: {
6724
- type: 'extract',
6725
- args: {
6726
- field: 'YEAR',
6727
- source: {
6728
- type: 'column_ref',
6729
- table: null,
6730
- column: field,
6731
- },
6732
- },
6733
- },
6734
- right: {
6735
- type: 'extract',
6736
- args: {
6737
- field: 'YEAR',
6738
- source: {
6739
- type: 'function',
6740
- name: {
6741
- name: [
6742
- {
6743
- type: 'default',
6744
- value: 'CURRENT_TIMESTAMP',
6745
- },
6746
- ],
6747
- },
6748
- args: {
6749
- type: 'expr_list',
6750
- value: [],
6751
- },
6752
- over: null,
6753
- },
6754
- },
6755
- },
6756
- },
6757
- right: {
6758
- type: 'binary_expr',
6759
- operator: '=',
6760
- left: {
6761
- type: 'extract',
6762
- args: {
6763
- field: 'MONTH',
6764
- source: {
6765
- type: 'column_ref',
6766
- table: null,
6767
- column: field,
6768
- },
6769
- },
6770
- },
6771
- right: {
6772
- type: 'extract',
6773
- args: {
6774
- field: 'MONTH',
6775
- source: {
6776
- type: 'function',
6777
- name: {
6778
- name: [
6779
- {
6780
- type: 'default',
6781
- value: 'CURRENT_TIMESTAMP',
6782
- },
6783
- ],
6784
- },
6785
- args: {
6786
- type: 'expr_list',
6787
- value: [],
6788
- },
6789
- over: null,
6790
- },
6791
- },
6792
- },
6793
- },
6794
- },
6795
- right: {
6796
- type: 'binary_expr',
6797
- operator: '=',
6798
- left: {
6799
- type: 'extract',
6800
- args: {
6801
- field: 'DAY',
6802
- source: {
6803
- type: 'column_ref',
6804
- table: null,
6805
- column: field,
6806
- },
6807
- },
6808
- },
6809
- right: {
6810
- type: 'extract',
6811
- args: {
6812
- field: 'DAY',
6813
- source: {
6814
- type: 'function',
6815
- name: {
6816
- name: [
6817
- {
6818
- type: 'default',
6819
- value: 'CURRENT_TIMESTAMP',
6820
- },
6821
- ],
6822
- },
6823
- args: {
6824
- type: 'expr_list',
6825
- value: [],
6826
- },
6827
- over: null,
6828
- },
6829
- },
6830
- },
6831
- },
6832
- },
6833
- right: {
6834
- type: 'binary_expr',
6835
- operator: '=',
6836
- left: {
6837
- type: 'extract',
6838
- args: {
6839
- field: 'HOUR',
6840
- source: {
6841
- type: 'column_ref',
6842
- table: null,
6843
- column: field,
6844
- },
6845
- },
6846
- },
6847
- right: {
6848
- type: 'extract',
6849
- args: {
6850
- field: 'HOUR',
6851
- source: {
6852
- type: 'function',
6853
- name: {
6854
- name: [
6855
- {
6856
- type: 'default',
6857
- value: 'CURRENT_TIMESTAMP',
6858
- },
6859
- ],
6860
- },
6861
- args: {
6862
- type: 'expr_list',
6863
- value: [],
6864
- },
6865
- over: null,
6866
- },
6867
- },
6868
- },
6869
- },
6870
- };
6871
- default:
6872
- console.error('Unknown filter time unit: ', filter.value.unit);
6873
- return null;
6874
- }
6875
- case 'mysql':
6876
- switch (filter.value.unit) {
6877
- case 'year':
6878
- return {
6879
- type: 'binary_expr',
6880
- operator: '=',
6881
- left: {
6882
- type: 'function',
6883
- name: {
6884
- name: [
6885
- {
6886
- type: 'default',
6887
- value: 'YEAR',
6888
- },
6889
- ],
6890
- },
6891
- args: {
6892
- type: 'expr_list',
6893
- value: [
6894
- {
6895
- type: 'column_ref',
6896
- table: null,
6897
- column: field,
6898
- },
6899
- ],
6900
- },
6901
- over: null,
6902
- },
6903
- right: {
6904
- type: 'function',
6905
- name: {
6906
- name: [
6907
- {
6908
- type: 'default',
6909
- value: 'YEAR',
6910
- },
6911
- ],
6912
- },
6913
- args: {
6914
- type: 'expr_list',
6915
- value: [
6916
- {
6917
- type: 'function',
6918
- name: {
6919
- name: [
6920
- {
6921
- type: 'default',
6922
- value: 'CURRENT_DATE',
6923
- },
6924
- ],
6925
- },
6926
- args: {
6927
- type: 'expr_list',
6928
- value: [],
6929
- },
6930
- over: null,
6931
- },
6932
- ],
6933
- },
6934
- over: null,
6935
- },
6936
- };
6937
- case 'quarter':
6938
- return {
6939
- type: 'binary_expr',
6940
- operator: 'AND',
6941
- left: {
6942
- type: 'binary_expr',
6943
- operator: '=',
6944
- left: {
6945
- type: 'function',
6946
- name: {
6947
- name: [
6948
- {
6949
- type: 'default',
6950
- value: 'YEAR',
6951
- },
6952
- ],
6953
- },
6954
- args: {
6955
- type: 'expr_list',
6956
- value: [
6957
- {
6958
- type: 'column_ref',
6959
- table: null,
6960
- column: field,
6961
- },
6962
- ],
6963
- },
6964
- over: null,
6965
- },
6966
- right: {
6967
- type: 'function',
6968
- name: {
6969
- name: [
6970
- {
6971
- type: 'default',
6972
- value: 'YEAR',
6973
- },
6974
- ],
6975
- },
6976
- args: {
6977
- type: 'expr_list',
6978
- value: [
6979
- {
6980
- type: 'function',
6981
- name: {
6982
- name: [
6983
- {
6984
- type: 'default',
6985
- value: 'CURRENT_DATE',
6986
- },
6987
- ],
6988
- },
6989
- args: {
6990
- type: 'expr_list',
6991
- value: [],
6992
- },
6993
- over: null,
6994
- },
6995
- ],
6996
- },
6997
- over: null,
6998
- },
6999
- },
7000
- right: {
7001
- type: 'binary_expr',
7002
- operator: '=',
7003
- left: {
7004
- type: 'function',
7005
- name: {
7006
- name: [
7007
- {
7008
- type: 'default',
7009
- value: 'QUARTER',
7010
- },
7011
- ],
7012
- },
7013
- args: {
7014
- type: 'expr_list',
7015
- value: [
7016
- {
7017
- type: 'column_ref',
7018
- table: null,
7019
- column: field,
7020
- },
7021
- ],
7022
- },
7023
- over: null,
7024
- },
7025
- right: {
7026
- type: 'function',
7027
- name: {
7028
- name: [
7029
- {
7030
- type: 'default',
7031
- value: 'QUARTER',
7032
- },
7033
- ],
7034
- },
7035
- args: {
7036
- type: 'expr_list',
7037
- value: [
7038
- {
7039
- type: 'function',
7040
- name: {
7041
- name: [
7042
- {
7043
- type: 'default',
7044
- value: 'CURRENT_DATE',
7045
- },
7046
- ],
7047
- },
7048
- args: {
7049
- type: 'expr_list',
7050
- value: [],
7051
- },
7052
- over: null,
7053
- },
7054
- ],
7055
- },
7056
- over: null,
7057
- },
7058
- },
7059
- };
7060
- case 'month':
7061
- return {
7062
- type: 'binary_expr',
7063
- operator: 'AND',
7064
- left: {
7065
- type: 'binary_expr',
7066
- operator: '=',
7067
- left: {
7068
- type: 'function',
7069
- name: {
7070
- name: [
7071
- {
7072
- type: 'default',
7073
- value: 'YEAR',
7074
- },
7075
- ],
7076
- },
7077
- args: {
7078
- type: 'expr_list',
7079
- value: [
7080
- {
7081
- type: 'column_ref',
7082
- table: null,
7083
- column: field,
7084
- },
7085
- ],
7086
- },
7087
- over: null,
7088
- },
7089
- right: {
7090
- type: 'function',
7091
- name: {
7092
- name: [
7093
- {
7094
- type: 'default',
7095
- value: 'YEAR',
7096
- },
7097
- ],
7098
- },
7099
- args: {
7100
- type: 'expr_list',
7101
- value: [
7102
- {
7103
- type: 'function',
7104
- name: {
7105
- name: [
7106
- {
7107
- type: 'default',
7108
- value: 'CURRENT_DATE',
7109
- },
7110
- ],
7111
- },
7112
- args: {
7113
- type: 'expr_list',
7114
- value: [],
7115
- },
7116
- over: null,
7117
- },
7118
- ],
7119
- },
7120
- over: null,
7121
- },
7122
- },
7123
- right: {
7124
- type: 'binary_expr',
7125
- operator: '=',
7126
- left: {
7127
- type: 'function',
7128
- name: {
7129
- name: [
7130
- {
7131
- type: 'default',
7132
- value: 'MONTH',
7133
- },
7134
- ],
7135
- },
7136
- args: {
7137
- type: 'expr_list',
7138
- value: [
7139
- {
7140
- type: 'column_ref',
7141
- table: null,
7142
- column: field,
7143
- },
7144
- ],
7145
- },
7146
- over: null,
7147
- },
7148
- right: {
7149
- type: 'function',
7150
- name: {
7151
- name: [
7152
- {
7153
- type: 'default',
7154
- value: 'MONTH',
7155
- },
7156
- ],
7157
- },
7158
- args: {
7159
- type: 'expr_list',
7160
- value: [
7161
- {
7162
- type: 'function',
7163
- name: {
7164
- name: [
7165
- {
7166
- type: 'default',
7167
- value: 'CURRENT_DATE',
7168
- },
7169
- ],
7170
- },
7171
- args: {
7172
- type: 'expr_list',
7173
- value: [],
7174
- },
7175
- over: null,
7176
- },
7177
- ],
7178
- },
7179
- over: null,
7180
- },
7181
- },
7182
- };
7183
- case 'week':
7184
- return {
7185
- type: 'binary_expr',
7186
- operator: 'AND',
7187
- left: {
7188
- type: 'binary_expr',
7189
- operator: 'AND',
7190
- left: {
7191
- type: 'binary_expr',
7192
- operator: '=',
7193
- left: {
7194
- type: 'function',
7195
- name: {
7196
- name: [
7197
- {
7198
- type: 'default',
7199
- value: 'YEAR',
7200
- },
7201
- ],
7202
- },
7203
- args: {
7204
- type: 'expr_list',
7205
- value: [
7206
- {
7207
- type: 'column_ref',
7208
- table: null,
7209
- column: field,
7210
- },
7211
- ],
7212
- },
7213
- over: null,
7214
- },
7215
- right: {
7216
- type: 'function',
7217
- name: {
7218
- name: [
7219
- {
7220
- type: 'default',
7221
- value: 'YEAR',
7222
- },
7223
- ],
7224
- },
7225
- args: {
7226
- type: 'expr_list',
7227
- value: [
7228
- {
7229
- type: 'function',
7230
- name: {
7231
- name: [
7232
- {
7233
- type: 'default',
7234
- value: 'CURRENT_DATE',
7235
- },
7236
- ],
7237
- },
7238
- args: {
7239
- type: 'expr_list',
7240
- value: [],
7241
- },
7242
- over: null,
7243
- },
7244
- ],
7245
- },
7246
- over: null,
7247
- },
7248
- },
7249
- right: {
7250
- type: 'binary_expr',
7251
- operator: '=',
7252
- left: {
7253
- type: 'function',
7254
- name: {
7255
- name: [
7256
- {
7257
- type: 'default',
7258
- value: 'MONTH',
7259
- },
7260
- ],
7261
- },
7262
- args: {
7263
- type: 'expr_list',
7264
- value: [
7265
- {
7266
- type: 'column_ref',
7267
- table: null,
7268
- column: field,
7269
- },
7270
- ],
7271
- },
7272
- over: null,
7273
- },
7274
- right: {
7275
- type: 'function',
7276
- name: {
7277
- name: [
7278
- {
7279
- type: 'default',
7280
- value: 'MONTH',
7281
- },
7282
- ],
7283
- },
7284
- args: {
7285
- type: 'expr_list',
7286
- value: [
7287
- {
7288
- type: 'function',
7289
- name: {
7290
- name: [
7291
- {
7292
- type: 'default',
7293
- value: 'CURRENT_DATE',
7294
- },
7295
- ],
7296
- },
7297
- args: {
7298
- type: 'expr_list',
7299
- value: [],
7300
- },
7301
- over: null,
7302
- },
7303
- ],
7304
- },
7305
- over: null,
7306
- },
7307
- },
7308
- },
7309
- right: {
7310
- type: 'binary_expr',
7311
- operator: '=',
7312
- left: {
7313
- type: 'function',
7314
- name: {
7315
- name: [
7316
- {
7317
- type: 'default',
7318
- value: 'WEEK',
7319
- },
7320
- ],
7321
- },
7322
- args: {
7323
- type: 'expr_list',
7324
- value: [
7325
- {
7326
- type: 'column_ref',
7327
- table: null,
7328
- column: field,
7329
- },
7330
- ],
7331
- },
7332
- over: null,
7333
- },
7334
- right: {
7335
- type: 'function',
7336
- name: {
7337
- name: [
7338
- {
7339
- type: 'default',
7340
- value: 'WEEK',
7341
- },
7342
- ],
7343
- },
7344
- args: {
7345
- type: 'expr_list',
7346
- value: [
7347
- {
7348
- type: 'function',
7349
- name: {
7350
- name: [
7351
- {
7352
- type: 'default',
7353
- value: 'CURRENT_DATE',
7354
- },
7355
- ],
7356
- },
7357
- args: {
7358
- type: 'expr_list',
7359
- value: [],
7360
- },
7361
- over: null,
7362
- },
7363
- ],
7364
- },
7365
- over: null,
7366
- },
7367
- },
7368
- };
7369
- case 'day':
7370
- return {
7371
- type: 'binary_expr',
7372
- operator: 'AND',
7373
- left: {
7374
- type: 'binary_expr',
7375
- operator: 'AND',
7376
- left: {
7377
- type: 'binary_expr',
7378
- operator: '=',
7379
- left: {
7380
- type: 'function',
7381
- name: {
7382
- name: [
7383
- {
7384
- type: 'default',
7385
- value: 'YEAR',
7386
- },
7387
- ],
7388
- },
7389
- args: {
7390
- type: 'expr_list',
7391
- value: [
7392
- {
7393
- type: 'column_ref',
7394
- table: null,
7395
- column: field,
7396
- },
7397
- ],
7398
- },
7399
- over: null,
7400
- },
7401
- right: {
7402
- type: 'function',
7403
- name: {
7404
- name: [
7405
- {
7406
- type: 'default',
7407
- value: 'YEAR',
7408
- },
7409
- ],
7410
- },
7411
- args: {
7412
- type: 'expr_list',
7413
- value: [
7414
- {
7415
- type: 'function',
7416
- name: {
7417
- name: [
7418
- {
7419
- type: 'default',
7420
- value: 'CURRENT_DATE',
7421
- },
7422
- ],
7423
- },
7424
- args: {
7425
- type: 'expr_list',
7426
- value: [],
7427
- },
7428
- over: null,
7429
- },
7430
- ],
7431
- },
7432
- over: null,
7433
- },
7434
- },
7435
- right: {
7436
- type: 'binary_expr',
7437
- operator: '=',
7438
- left: {
7439
- type: 'function',
7440
- name: {
7441
- name: [
7442
- {
7443
- type: 'default',
7444
- value: 'MONTH',
7445
- },
7446
- ],
7447
- },
7448
- args: {
7449
- type: 'expr_list',
7450
- value: [
7451
- {
7452
- type: 'column_ref',
7453
- table: null,
7454
- column: field,
7455
- },
7456
- ],
7457
- },
7458
- over: null,
7459
- },
7460
- right: {
7461
- type: 'function',
7462
- name: {
7463
- name: [
7464
- {
7465
- type: 'default',
7466
- value: 'MONTH',
7467
- },
7468
- ],
7469
- },
7470
- args: {
7471
- type: 'expr_list',
7472
- value: [
7473
- {
7474
- type: 'function',
7475
- name: {
7476
- name: [
7477
- {
7478
- type: 'default',
7479
- value: 'CURRENT_DATE',
7480
- },
7481
- ],
7482
- },
7483
- args: {
7484
- type: 'expr_list',
7485
- value: [],
7486
- },
7487
- over: null,
7488
- },
7489
- ],
7490
- },
7491
- over: null,
7492
- },
7493
- },
7494
- },
7495
- right: {
7496
- type: 'binary_expr',
7497
- operator: '=',
7498
- left: {
7499
- type: 'function',
7500
- name: {
7501
- name: [
7502
- {
7503
- type: 'default',
7504
- value: 'DAY',
7505
- },
7506
- ],
7507
- },
7508
- args: {
7509
- type: 'expr_list',
7510
- value: [
7511
- {
7512
- type: 'column_ref',
7513
- table: null,
7514
- column: field,
7515
- },
7516
- ],
7517
- },
7518
- over: null,
7519
- },
7520
- right: {
7521
- type: 'function',
7522
- name: {
7523
- name: [
7524
- {
7525
- type: 'default',
7526
- value: 'DAY',
7527
- },
7528
- ],
7529
- },
7530
- args: {
7531
- type: 'expr_list',
7532
- value: [
7533
- {
7534
- type: 'function',
7535
- name: {
7536
- name: [
7537
- {
7538
- type: 'default',
7539
- value: 'CURRENT_DATE',
7540
- },
7541
- ],
7542
- },
7543
- args: {
7544
- type: 'expr_list',
7545
- value: [],
7546
- },
7547
- over: null,
7548
- },
7549
- ],
7550
- },
7551
- over: null,
7018
+ },
7019
+ parentheses: true,
7020
+ };
7021
+ }
7022
+ let unitFormat;
7023
+ switch (filter.value.unit) {
7024
+ case 'year': {
7025
+ unitFormat = '%Y';
7026
+ break;
7027
+ }
7028
+ case 'month': {
7029
+ unitFormat = '%Y-%m';
7030
+ break;
7031
+ }
7032
+ case 'week': {
7033
+ unitFormat = '%Y-%u';
7034
+ break;
7035
+ }
7036
+ case 'day': {
7037
+ unitFormat = '%Y-%m-%d';
7038
+ break;
7039
+ }
7040
+ case 'hour': {
7041
+ unitFormat = '%Y-%m-%d %H';
7042
+ break;
7043
+ }
7044
+ default: {
7045
+ console.error('Unknown unit: ', filter.value.unit);
7046
+ unitFormat = '%Y';
7047
+ }
7048
+ }
7049
+ return {
7050
+ type: 'binary_expr',
7051
+ operator: '=',
7052
+ left: {
7053
+ type: 'function',
7054
+ name: {
7055
+ name: [
7056
+ {
7057
+ type: 'default',
7058
+ value: 'DATE_FORMAT',
7552
7059
  },
7553
- },
7554
- };
7555
- case 'hour':
7556
- return {
7557
- type: 'binary_expr',
7558
- operator: 'AND',
7559
- left: {
7560
- type: 'binary_expr',
7561
- operator: 'AND',
7562
- left: {
7563
- type: 'binary_expr',
7564
- operator: 'AND',
7565
- left: {
7566
- type: 'binary_expr',
7567
- operator: '=',
7568
- left: {
7569
- type: 'function',
7570
- name: {
7571
- name: [
7572
- {
7573
- type: 'default',
7574
- value: 'YEAR',
7575
- },
7576
- ],
7577
- },
7578
- args: {
7579
- type: 'expr_list',
7580
- value: [
7581
- {
7582
- type: 'column_ref',
7583
- table: null,
7584
- column: field,
7585
- },
7586
- ],
7587
- },
7588
- over: null,
7589
- },
7590
- right: {
7591
- type: 'function',
7592
- name: {
7593
- name: [
7594
- {
7595
- type: 'default',
7596
- value: 'YEAR',
7597
- },
7598
- ],
7599
- },
7600
- args: {
7601
- type: 'expr_list',
7602
- value: [
7603
- {
7604
- type: 'function',
7605
- name: {
7606
- name: [
7607
- {
7608
- type: 'default',
7609
- value: 'CURRENT_TIMESTAMP',
7610
- },
7611
- ],
7612
- },
7613
- args: {
7614
- type: 'expr_list',
7615
- value: [],
7616
- },
7617
- over: null,
7618
- },
7619
- ],
7620
- },
7621
- over: null,
7622
- },
7623
- },
7624
- right: {
7625
- type: 'binary_expr',
7626
- operator: '=',
7627
- left: {
7628
- type: 'function',
7629
- name: {
7630
- name: [
7631
- {
7632
- type: 'default',
7633
- value: 'MONTH',
7634
- },
7635
- ],
7636
- },
7637
- args: {
7638
- type: 'expr_list',
7639
- value: [
7640
- {
7641
- type: 'column_ref',
7642
- table: null,
7643
- column: field,
7644
- },
7645
- ],
7646
- },
7647
- over: null,
7648
- },
7649
- right: {
7650
- type: 'function',
7651
- name: {
7652
- name: [
7653
- {
7654
- type: 'default',
7655
- value: 'MONTH',
7656
- },
7657
- ],
7658
- },
7659
- args: {
7660
- type: 'expr_list',
7661
- value: [
7662
- {
7663
- type: 'function',
7664
- name: {
7665
- name: [
7666
- {
7667
- type: 'default',
7668
- value: 'CURRENT_TIMESTAMP',
7669
- },
7670
- ],
7671
- },
7672
- args: {
7673
- type: 'expr_list',
7674
- value: [],
7675
- },
7676
- over: null,
7677
- },
7678
- ],
7679
- },
7680
- over: null,
7060
+ ],
7061
+ },
7062
+ args: {
7063
+ type: 'expr_list',
7064
+ value: [
7065
+ {
7066
+ type: 'column_ref',
7067
+ table: null,
7068
+ column: {
7069
+ expr: {
7070
+ type: 'default',
7071
+ value: field,
7681
7072
  },
7682
7073
  },
7683
7074
  },
7684
- right: {
7685
- type: 'binary_expr',
7686
- operator: '=',
7687
- left: {
7688
- type: 'function',
7689
- name: {
7690
- name: [
7691
- {
7692
- type: 'default',
7693
- value: 'DAY',
7694
- },
7695
- ],
7696
- },
7697
- args: {
7698
- type: 'expr_list',
7699
- value: [
7700
- {
7701
- type: 'column_ref',
7702
- table: null,
7703
- column: field,
7704
- },
7705
- ],
7706
- },
7707
- over: null,
7708
- },
7709
- right: {
7710
- type: 'function',
7711
- name: {
7712
- name: [
7713
- {
7714
- type: 'default',
7715
- value: 'DAY',
7716
- },
7717
- ],
7718
- },
7719
- args: {
7720
- type: 'expr_list',
7721
- value: [
7722
- {
7723
- type: 'function',
7724
- name: {
7725
- name: [
7726
- {
7727
- type: 'default',
7728
- value: 'CURRENT_TIMESTAMP',
7729
- },
7730
- ],
7731
- },
7732
- args: {
7733
- type: 'expr_list',
7734
- value: [],
7735
- },
7736
- over: null,
7737
- },
7738
- ],
7739
- },
7740
- over: null,
7741
- },
7075
+ {
7076
+ type: 'single_quote_string',
7077
+ value: unitFormat,
7742
7078
  },
7743
- },
7744
- right: {
7745
- type: 'binary_expr',
7746
- operator: '=',
7747
- left: {
7748
- type: 'function',
7749
- name: {
7750
- name: [
7751
- {
7752
- type: 'default',
7753
- value: 'HOUR',
7754
- },
7755
- ],
7756
- },
7757
- args: {
7758
- type: 'expr_list',
7759
- value: [
7760
- {
7761
- type: 'column_ref',
7762
- table: null,
7763
- column: field,
7764
- },
7765
- ],
7766
- },
7767
- over: null,
7079
+ ],
7080
+ },
7081
+ },
7082
+ right: {
7083
+ type: 'function',
7084
+ name: {
7085
+ name: [
7086
+ {
7087
+ type: 'default',
7088
+ value: 'DATE_FORMAT',
7768
7089
  },
7769
- right: {
7090
+ ],
7091
+ },
7092
+ args: {
7093
+ type: 'expr_list',
7094
+ value: [
7095
+ {
7770
7096
  type: 'function',
7771
7097
  name: {
7772
7098
  name: [
7773
7099
  {
7774
- type: 'default',
7775
- value: 'HOUR',
7100
+ type: 'origin',
7101
+ value: 'CURRENT_DATE',
7776
7102
  },
7777
7103
  ],
7778
7104
  },
7779
7105
  args: {
7780
7106
  type: 'expr_list',
7781
- value: [
7782
- {
7783
- type: 'function',
7784
- name: {
7785
- name: [
7786
- {
7787
- type: 'default',
7788
- value: 'CURRENT_TIMESTAMP',
7789
- },
7790
- ],
7791
- },
7792
- args: {
7793
- type: 'expr_list',
7794
- value: [],
7795
- },
7796
- over: null,
7797
- },
7798
- ],
7107
+ value: [],
7799
7108
  },
7800
7109
  over: null,
7801
7110
  },
7802
- },
7803
- };
7804
- default:
7805
- console.error('Unknown filter time unit: ', filter.value.unit);
7806
- return null;
7807
- }
7111
+ {
7112
+ type: 'single_quote_string',
7113
+ value: unitFormat,
7114
+ },
7115
+ ],
7116
+ },
7117
+ },
7118
+ };
7119
+ }
7808
7120
  case 'postgresql':
7809
7121
  return {
7810
7122
  type: 'binary_expr',
@@ -8000,6 +7312,7 @@ export const filterToAst = (filter, db) => {
8000
7312
  },
8001
7313
  },
8002
7314
  },
7315
+ parentheses: true,
8003
7316
  };
8004
7317
  case 'snowflake':
8005
7318
  return {
@@ -8083,6 +7396,7 @@ export const filterToAst = (filter, db) => {
8083
7396
  },
8084
7397
  },
8085
7398
  },
7399
+ parentheses: true,
8086
7400
  };
8087
7401
  case 'bigquery':
8088
7402
  return {
@@ -8222,6 +7536,7 @@ export const filterToAst = (filter, db) => {
8222
7536
  over: null,
8223
7537
  },
8224
7538
  },
7539
+ parentheses: true,
8225
7540
  };
8226
7541
  case 'mysql':
8227
7542
  return {
@@ -8305,6 +7620,7 @@ export const filterToAst = (filter, db) => {
8305
7620
  },
8306
7621
  },
8307
7622
  },
7623
+ parentheses: true,
8308
7624
  };
8309
7625
  case 'postgresql':
8310
7626
  return {
@@ -8390,6 +7706,7 @@ export const filterToAst = (filter, db) => {
8390
7706
  },
8391
7707
  },
8392
7708
  },
7709
+ parentheses: true,
8393
7710
  };
8394
7711
  default:
8395
7712
  console.error('Unknown database source: ', db);