@quillsql/react 2.11.17 → 2.11.18

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 (103) hide show
  1. package/dist/cjs/Chart.d.ts +0 -8
  2. package/dist/cjs/Chart.d.ts.map +1 -1
  3. package/dist/cjs/ChartBuilder.d.ts +11 -1
  4. package/dist/cjs/ChartBuilder.d.ts.map +1 -1
  5. package/dist/cjs/ChartBuilder.js +6 -5
  6. package/dist/cjs/ChartEditor.d.ts +11 -3
  7. package/dist/cjs/ChartEditor.d.ts.map +1 -1
  8. package/dist/cjs/ChartEditor.js +3 -3
  9. package/dist/cjs/Dashboard.d.ts.map +1 -1
  10. package/dist/cjs/Dashboard.js +7 -9
  11. package/dist/cjs/ReportBuilder.d.ts +7 -1
  12. package/dist/cjs/ReportBuilder.d.ts.map +1 -1
  13. package/dist/cjs/ReportBuilder.js +112 -37
  14. package/dist/cjs/SQLEditor.d.ts +7 -5
  15. package/dist/cjs/SQLEditor.d.ts.map +1 -1
  16. package/dist/cjs/SQLEditor.js +3 -2
  17. package/dist/cjs/Table.d.ts +2 -2
  18. package/dist/cjs/Table.d.ts.map +1 -1
  19. package/dist/cjs/components/QuillCard.d.ts +2 -7
  20. package/dist/cjs/components/QuillCard.d.ts.map +1 -1
  21. package/dist/cjs/components/QuillCard.js +15 -9
  22. package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
  23. package/dist/cjs/components/ReportBuilder/AddColumnPopover.js +2 -0
  24. package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +1 -1
  25. package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -0
  26. package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
  27. package/dist/cjs/components/ReportBuilder/convert.js +20 -1
  28. package/dist/cjs/components/ReportBuilder/operators.d.ts +15 -10
  29. package/dist/cjs/components/ReportBuilder/operators.d.ts.map +1 -1
  30. package/dist/cjs/components/ReportBuilder/operators.js +23 -10
  31. package/dist/cjs/components/ReportBuilder/ui.d.ts +1 -2
  32. package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
  33. package/dist/cjs/components/ReportBuilder/ui.js +4 -4
  34. package/dist/cjs/components/ReportBuilder/util.d.ts +8 -3
  35. package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
  36. package/dist/cjs/components/ReportBuilder/util.js +110 -64
  37. package/dist/cjs/components/UiComponents.d.ts +0 -6
  38. package/dist/cjs/components/UiComponents.d.ts.map +1 -1
  39. package/dist/cjs/components/UiComponents.js +2 -44
  40. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +5 -2
  41. package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  42. package/dist/cjs/internals/ReportBuilder/PivotList.js +11 -11
  43. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +2 -1
  44. package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  45. package/dist/cjs/internals/ReportBuilder/PivotModal.js +4 -3
  46. package/dist/cjs/utils/parserBigQuery.d.ts +6 -0
  47. package/dist/cjs/utils/parserBigQuery.d.ts.map +1 -0
  48. package/dist/cjs/utils/parserBigQuery.js +60 -0
  49. package/dist/cjs/utils/parserPostgres.d.ts +3 -0
  50. package/dist/cjs/utils/parserPostgres.d.ts.map +1 -0
  51. package/dist/cjs/utils/parserPostgres.js +42 -0
  52. package/dist/esm/Chart.d.ts +0 -8
  53. package/dist/esm/Chart.d.ts.map +1 -1
  54. package/dist/esm/ChartBuilder.d.ts +11 -1
  55. package/dist/esm/ChartBuilder.d.ts.map +1 -1
  56. package/dist/esm/ChartBuilder.js +6 -5
  57. package/dist/esm/ChartEditor.d.ts +11 -3
  58. package/dist/esm/ChartEditor.d.ts.map +1 -1
  59. package/dist/esm/ChartEditor.js +3 -3
  60. package/dist/esm/Dashboard.d.ts.map +1 -1
  61. package/dist/esm/Dashboard.js +8 -10
  62. package/dist/esm/ReportBuilder.d.ts +7 -1
  63. package/dist/esm/ReportBuilder.d.ts.map +1 -1
  64. package/dist/esm/ReportBuilder.js +113 -38
  65. package/dist/esm/SQLEditor.d.ts +7 -5
  66. package/dist/esm/SQLEditor.d.ts.map +1 -1
  67. package/dist/esm/SQLEditor.js +3 -2
  68. package/dist/esm/Table.d.ts +2 -2
  69. package/dist/esm/Table.d.ts.map +1 -1
  70. package/dist/esm/components/QuillCard.d.ts +2 -7
  71. package/dist/esm/components/QuillCard.d.ts.map +1 -1
  72. package/dist/esm/components/QuillCard.js +15 -9
  73. package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
  74. package/dist/esm/components/ReportBuilder/AddColumnPopover.js +2 -0
  75. package/dist/esm/components/ReportBuilder/AddLimitPopover.js +1 -1
  76. package/dist/esm/components/ReportBuilder/convert.d.ts +1 -0
  77. package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
  78. package/dist/esm/components/ReportBuilder/convert.js +18 -0
  79. package/dist/esm/components/ReportBuilder/operators.d.ts +15 -10
  80. package/dist/esm/components/ReportBuilder/operators.d.ts.map +1 -1
  81. package/dist/esm/components/ReportBuilder/operators.js +23 -10
  82. package/dist/esm/components/ReportBuilder/ui.d.ts +1 -2
  83. package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
  84. package/dist/esm/components/ReportBuilder/ui.js +4 -4
  85. package/dist/esm/components/ReportBuilder/util.d.ts +8 -3
  86. package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
  87. package/dist/esm/components/ReportBuilder/util.js +101 -60
  88. package/dist/esm/components/UiComponents.d.ts +0 -6
  89. package/dist/esm/components/UiComponents.d.ts.map +1 -1
  90. package/dist/esm/components/UiComponents.js +3 -44
  91. package/dist/esm/internals/ReportBuilder/PivotList.d.ts +5 -2
  92. package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
  93. package/dist/esm/internals/ReportBuilder/PivotList.js +11 -11
  94. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +2 -1
  95. package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
  96. package/dist/esm/internals/ReportBuilder/PivotModal.js +4 -3
  97. package/dist/esm/utils/parserBigQuery.d.ts +6 -0
  98. package/dist/esm/utils/parserBigQuery.d.ts.map +1 -0
  99. package/dist/esm/utils/parserBigQuery.js +52 -0
  100. package/dist/esm/utils/parserPostgres.d.ts +3 -0
  101. package/dist/esm/utils/parserPostgres.d.ts.map +1 -0
  102. package/dist/esm/utils/parserPostgres.js +37 -0
  103. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"QuillCard.d.ts","sourceRoot":"","sources":["../../../src/components/QuillCard.tsx"],"names":[],"mappings":"AACA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,UAAU,cAAc;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,KAAK,EACL,OAAO,EACP,UAAkB,EAClB,SAAgB,EAChB,OAAO,EACP,SAAa,EACb,KAAU,GACX,EAAE,cAAc,2CAmEhB"}
1
+ {"version":3,"file":"QuillCard.d.ts","sourceRoot":"","sources":["../../../src/components/QuillCard.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,UAAU,cAAc;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,OAAO,EACP,QAAQ,GACT,EAAE,cAAc,2CA4EhB"}
@@ -1,19 +1,19 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { XIcon } from '../assets';
3
- export function QuillCard({ children, theme, onClick, isSelected = false, clickable = true, onClose, minHeight = 0, style = {}, }) {
4
- return (_jsxs("div", { className: clickable ? 'quill-card-hover' : '', style: {
3
+ import { useTheme } from '../hooks';
4
+ export function QuillCard({ children, onClick, onDelete, }) {
5
+ const theme = useTheme();
6
+ return (_jsxs("div", { className: onClick ? 'quill-card-hover' : '', style: {
5
7
  backgroundColor: theme.backgroundColor || 'white',
6
- cursor: clickable ? 'pointer' : 'default',
8
+ cursor: onClick ? 'pointer' : 'default',
7
9
  padding: 16,
8
10
  borderRadius: 8,
9
11
  boxShadow: '0 1px 4px 0 rgba(56, 65, 81, 0.07)',
10
12
  borderWidth: theme.borderWidth,
11
13
  borderStyle: 'solid',
12
- borderColor: isSelected ? '#aaaaaa' : theme.borderColor,
14
+ borderColor: theme.borderColor,
13
15
  overflowX: 'hidden',
14
16
  position: 'relative',
15
- minHeight: minHeight,
16
- ...style,
17
17
  }, onClick: onClick, children: [_jsx("style", { children: `
18
18
  .quill-card-hover:hover {
19
19
  background-color: #f9f9f9 !important;
@@ -24,9 +24,11 @@ export function QuillCard({ children, theme, onClick, isSelected = false, clicka
24
24
  background-color: #f5f5f5;
25
25
  }
26
26
  }
27
- ` }), onClose && (_jsxs("button", { className: "quill-delete-button", type: "button", onClick: e => {
27
+ ` }), onDelete && (_jsxs("button", { className: "quill-delete-button", type: "button", onClick: (e) => {
28
+ onDelete();
29
+ // Since this button is inside of the card, we do not want to fire
30
+ // the onClick callback as well, if we fire the onDelete callback.
28
31
  e.stopPropagation();
29
- onClose();
30
32
  }, style: {
31
33
  height: 40,
32
34
  width: 40,
@@ -46,5 +48,9 @@ export function QuillCard({ children, theme, onClick, isSelected = false, clicka
46
48
  }
47
49
  .quill-delete-button:hover {
48
50
  background-color: rgba(56, 65, 81, 0.03);
49
- }` }), _jsx(XIcon, { height: "20", width: "20", fill: "#6C727F" })] })), _jsx("div", { style: { overflowX: 'scroll' }, children: children })] }));
51
+ }` }), _jsx(XIcon, { height: "20", width: "20", fill: "#6C727F" })] })), _jsx("div", { style: {
52
+ overflowX: 'scroll',
53
+ display: 'flex',
54
+ height: '100%',
55
+ }, children: children })] }));
50
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AddColumnPopover.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddColumnPopover.tsx"],"names":[],"mappings":";AAoBA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAI1D,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,MAAM,EACN,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,UAAU,EACV,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,eAAe,EACf,MAAM,GACP,EAAE;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,kBAAkB,EAAE,GAAG,CAAC;IACxB,qBAAqB,EAAE,GAAG,CAAC;IAC3B,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;IAClB,OAAO,EAAE,GAAG,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC;IACX,gBAAgB,EAAE,GAAG,CAAC;IACtB,UAAU,EAAE,GAAG,CAAC;IAChB,YAAY,EAAE,GAAG,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC;IACd,SAAS,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3D,YAAY,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,IAAI,CAAC;QACxB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;KAC5E,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;CACb,2CAoNA"}
1
+ {"version":3,"file":"AddColumnPopover.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/AddColumnPopover.tsx"],"names":[],"mappings":";AAoBA,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAI1D,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EACvC,MAAM,EACN,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,UAAU,EACV,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,eAAe,EACf,MAAM,GACP,EAAE;IACD,MAAM,EAAE,GAAG,CAAC;IACZ,kBAAkB,EAAE,GAAG,CAAC;IACxB,qBAAqB,EAAE,GAAG,CAAC;IAC3B,eAAe,EAAE,GAAG,CAAC;IACrB,kBAAkB,EAAE,GAAG,CAAC;IACxB,oBAAoB,EAAE,GAAG,CAAC;IAC1B,aAAa,EAAE,GAAG,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC;IAClB,OAAO,EAAE,GAAG,CAAC;IACb,UAAU,EAAE,GAAG,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC;IACX,gBAAgB,EAAE,GAAG,CAAC;IACtB,UAAU,EAAE,GAAG,CAAC;IAChB,YAAY,EAAE,GAAG,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC;IACd,SAAS,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3D,YAAY,EAAE,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,IAAI,CAAC;QACxB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;YAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,OAAO,CAAA;SAAE,KAAK,GAAG,CAAC,OAAO,CAAC;KAC5E,KAAK,GAAG,CAAC,OAAO,CAAC;IAClB,eAAe,EAAE,GAAG,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC;CACb,2CAqNA"}
@@ -24,6 +24,8 @@ export default function AddColumnPopover({ onSave, orderedColumnNames, setOrdere
24
24
  // When a drag event ends, switch the item order.
25
25
  function handleDragEnd(event) {
26
26
  const { active, over } = event;
27
+ if (!active || !over)
28
+ return;
27
29
  if (active.id !== over.id) {
28
30
  setOrderedColumnNames((orderedColumnNames) => {
29
31
  const oldIndex = orderedColumnNames.indexOf(active.id);
@@ -13,7 +13,7 @@ export const LimitSentence = ({ limit, handleDelete, setOpenPopover, onSave, pop
13
13
  onSave(column, direction);
14
14
  }, isEdit: true, onDelete: handleClickDelete, initialLimit: limit.value[0].value, TextInput: TextInput, Button: Button, SecondaryButton: SecondaryButton }) }) }));
15
15
  };
16
- export const AddLimitPopover = ({ onSave, initialLimit = 0, isEdit = false, onDelete = () => { }, TextInput = QuillTextInput, Button = MemoizedButton, SecondaryButton = MemoizedSecondaryButton, }) => {
16
+ export const AddLimitPopover = ({ onSave, initialLimit = 10, isEdit = false, onDelete = () => { }, TextInput = QuillTextInput, Button = MemoizedButton, SecondaryButton = MemoizedSecondaryButton, }) => {
17
17
  const [limit, setLimit] = useState(initialLimit);
18
18
  const [theme] = useContext(ThemeContext);
19
19
  return (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 12 }, children: [_jsx("div", { style: {
@@ -3,6 +3,7 @@ import { Pivot } from './pivot';
3
3
  import { TableInfo } from './schema';
4
4
  export declare function convertDateComparison(node: NSP.Select): NSP.Select;
5
5
  export declare function recursiveSearchAndReplace(node: any, search: string, replace: string): void;
6
+ export declare function recursiveSearchAndReplaceByKey(node: any, search: string, replace: string, searchKey: string): void;
6
7
  /**
7
8
  * Takes a bigquery AST as input, cleans it, and returns a Select AST.
8
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,IAAI,GAAG,EACpB,GAAG,EAMJ,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAc,SAAS,EAAE,MAAM,UAAU,CAAC;AASjD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAuBlE;AAGD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,QAahB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CAuCpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,GAAG,CAAC,MAAM,EACf,YAAY,EAAE,SAAS,EAAE,GACxB,GAAG,CAAC,MAAM,CAwBZ;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,GAAG,EACR,SAAS,mBAAc,EACvB,YAAY,EAAE,SAAS,EAAE;;;;;;;;;;;;;;;EAwd1B;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;;;EA6G5D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,OAyJtE;AAID,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAY1E"}
1
+ {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,IAAI,GAAG,EACpB,GAAG,EAMJ,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAc,SAAS,EAAE,MAAM,UAAU,CAAC;AASjD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAuBlE;AAGD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,QAahB;AAGD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,GAAG,EACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,QAalB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,CA2CpD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,GAAG,CAAC,MAAM,EACf,YAAY,EAAE,SAAS,EAAE,GACxB,GAAG,CAAC,MAAM,CAwBZ;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,GAAG,EACR,SAAS,mBAAc,EACvB,YAAY,EAAE,SAAS,EAAE;;;;;;;;;;;;;;;EAwd1B;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;;;EA6G5D;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,OAyJtE;AAID,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAY1E"}
@@ -44,6 +44,20 @@ export function recursiveSearchAndReplace(node, search, replace) {
44
44
  });
45
45
  }
46
46
  }
47
+ // THIS IS USED TO REPLACE UNITS IN INTERVALS FOR BIGQUERY
48
+ export function recursiveSearchAndReplaceByKey(node, search, replace, searchKey) {
49
+ if (typeof node !== 'object') {
50
+ return;
51
+ }
52
+ if (node) {
53
+ Object.keys(node).forEach((key) => {
54
+ recursiveSearchAndReplaceByKey(node[key], search, replace, searchKey);
55
+ if (searchKey === key && node[key] === search) {
56
+ node[key] = replace;
57
+ }
58
+ });
59
+ }
60
+ }
47
61
  /**
48
62
  * Takes a bigquery AST as input, cleans it, and returns a Select AST.
49
63
  */
@@ -66,6 +80,10 @@ export function convertBigQuery(ast) {
66
80
  recursiveSearchAndReplace(newAst.where, 'CURRENT_DATE', 'CURRENT_TIMESTAMP');
67
81
  recursiveSearchAndReplace(newAst.where, 'DATE_TRUNC', 'TIMESTAMP_TRUNC');
68
82
  recursiveSearchAndReplace(newAst.where, 'DATE', 'TIMESTAMP');
83
+ // JANK: If anyone is here this is how you have to do intervals in BigQuery no joke
84
+ recursiveSearchAndReplaceByKey(newAst.where, 'year', '* 365 DAY', 'unit');
85
+ recursiveSearchAndReplaceByKey(newAst.where, 'week', '* 7 DAY', 'unit');
86
+ recursiveSearchAndReplaceByKey(newAst.where, 'month', '* 30 DAY', 'unit');
69
87
  // TODO: handle joins nicely
70
88
  if (newAst.from?.length > 1) {
71
89
  newAst.from = [newAst.from[0]];
@@ -17,6 +17,8 @@ export declare const OPERATOR_GROUPS: {
17
17
  between: string;
18
18
  'IS NOT': string;
19
19
  IS: string;
20
+ EQUALS: string;
21
+ equals: string;
20
22
  };
21
23
  export declare const getDefaultOperatorSubtrees: (key: any, operator: any, left: any, right: any, databaseType: string) => any;
22
24
  export declare const DEFAULT_OPERATOR_SUBTREES: {
@@ -416,29 +418,32 @@ export declare const DEFAULT_BIG_QUERY_OPERATOR_SUBTREES: {
416
418
  name: string;
417
419
  args: {
418
420
  type: string;
419
- value: ({
420
- type: string;
421
- value: string;
422
- table?: undefined;
423
- column?: undefined;
424
- } | {
421
+ value: {
425
422
  type: string;
426
423
  table: null;
427
424
  column: string;
428
- value?: undefined;
429
- })[];
425
+ }[];
430
426
  };
427
+ over: null;
431
428
  };
432
429
  right: {
433
430
  type: string;
434
431
  name: string;
435
432
  args: {
436
433
  type: string;
437
- value: {
434
+ value: ({
438
435
  type: string;
439
436
  value: string;
440
- }[];
437
+ table?: undefined;
438
+ column?: undefined;
439
+ } | {
440
+ type: string;
441
+ table: null;
442
+ column: string;
443
+ value?: undefined;
444
+ })[];
441
445
  };
446
+ over: null;
442
447
  };
443
448
  };
444
449
  };
@@ -1 +1 @@
1
- {"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/operators.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;CAmB3B,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAChC,GAAG,YACE,GAAG,QACP,GAAG,SACF,GAAG,gBACI,MAAM,QA8DrB,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoQrC,CAAC;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+L/C,CAAC"}
1
+ {"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/operators.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;CAqB3B,CAAC;AAEF,eAAO,MAAM,0BAA0B,QAChC,GAAG,YACE,GAAG,QACP,GAAG,SACF,GAAG,gBACI,MAAM,QAoErB,CAAC;AAEF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoQrC,CAAC;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmM/C,CAAC"}
@@ -21,6 +21,8 @@ export const OPERATOR_GROUPS = {
21
21
  between: 'in_the_last',
22
22
  'IS NOT': 'null_comp',
23
23
  IS: 'null_comp',
24
+ EQUALS: 'equals',
25
+ equals: 'equals',
24
26
  };
25
27
  export const getDefaultOperatorSubtrees = (key, operator, left, right, databaseType) => {
26
28
  let result = DEFAULT_OPERATOR_SUBTREES[key];
@@ -81,7 +83,14 @@ export const getDefaultOperatorSubtrees = (key, operator, left, right, databaseT
81
83
  result.left.column = left;
82
84
  }
83
85
  else if (key === 'equals') {
84
- result.left.args.value[1].column = left;
86
+ if (databaseType === 'BigQuery') {
87
+ result = DEFAULT_BIG_QUERY_OPERATOR_SUBTREES['equals'];
88
+ result.left.args.value[0].column = left;
89
+ result.left.column = left;
90
+ }
91
+ else {
92
+ result.left.args.value[1].column = left;
93
+ }
85
94
  }
86
95
  else if (key === 'date') {
87
96
  result.operator = operator;
@@ -511,38 +520,42 @@ export const DEFAULT_BIG_QUERY_OPERATOR_SUBTREES = {
511
520
  operator: '=',
512
521
  left: {
513
522
  type: 'function',
514
- name: 'date_trunc',
523
+ name: 'timestamp_trunc',
515
524
  args: {
516
525
  type: 'expr_list',
517
526
  value: [
518
527
  {
519
- type: 'single_quote_string',
520
- value: 'month',
528
+ type: 'column_ref',
529
+ table: null,
530
+ column: '',
521
531
  },
522
532
  {
523
533
  type: 'column_ref',
524
534
  table: null,
525
- column: '',
535
+ column: 'YEAR',
526
536
  },
527
537
  ],
528
538
  },
539
+ over: null,
529
540
  },
530
541
  right: {
531
542
  type: 'function',
532
- name: 'date_trunc',
543
+ name: 'timestamp_trunc',
533
544
  args: {
534
545
  type: 'expr_list',
535
546
  value: [
536
- {
537
- type: 'single_quote_string',
538
- value: 'month',
539
- },
540
547
  {
541
548
  type: 'timestamp',
542
549
  value: '2024-01-01',
543
550
  },
551
+ {
552
+ type: 'column_ref',
553
+ table: null,
554
+ column: 'YEAR',
555
+ },
544
556
  ],
545
557
  },
558
+ over: null,
546
559
  },
547
560
  },
548
561
  };
@@ -83,7 +83,6 @@ export interface TagWrapperProps {
83
83
  setOpenPopover: any;
84
84
  setIsPending: any;
85
85
  clearCheckboxes: any;
86
- fetchSqlQuery: any;
87
86
  handleDelete: any;
88
87
  setCheckboxes: any;
89
88
  handleReplaceSubtree: any;
@@ -94,6 +93,6 @@ export interface TagWrapperProps {
94
93
  renderNode: any;
95
94
  children: any;
96
95
  }
97
- export declare const TagWrapper: ({ isCard, isRow, editPopoverKey, keyPrefix, formData, activeEditItem, setEditPopoverKey, setActiveEditItem, setActivePath, setOpenPopover, setIsPending, clearCheckboxes, fetchSqlQuery, handleDelete, setCheckboxes, handleReplaceSubtree, FilterPopover, getByKey, EditPopover, Button, renderNode, children, }: TagWrapperProps) => import("react/jsx-runtime").JSX.Element;
96
+ export declare const TagWrapper: ({ isCard, isRow, editPopoverKey, keyPrefix, formData, activeEditItem, setEditPopoverKey, setActiveEditItem, setActivePath, setOpenPopover, setIsPending, clearCheckboxes, handleDelete, setCheckboxes, handleReplaceSubtree, FilterPopover, getByKey, EditPopover, Button, renderNode, children, }: TagWrapperProps) => import("react/jsx-runtime").JSX.Element;
98
97
  export declare const AddFilterPopover: ({ onSave, Button, renderNode, activeEditItem, }: any) => import("react/jsx-runtime").JSX.Element;
99
98
  //# sourceMappingURL=ui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/ui.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/ui.tsx"],"names":[],"mappings":"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"}
@@ -267,7 +267,7 @@ export const QuillLimitPopover = ({ limitLabel, onClickDelete, popoverTitle, pop
267
267
  setIsOpen(!isOpen);
268
268
  } }), _jsx(MemoizedPopover, { isOpen: isOpen, popoverTitle: popoverTitle, setIsOpen: setIsOpen, popoverChildren: popoverChildren })] }));
269
269
  };
270
- export const TagWrapper = ({ isCard, isRow, editPopoverKey, keyPrefix, formData, activeEditItem, setEditPopoverKey, setActiveEditItem, setActivePath, setOpenPopover, setIsPending, clearCheckboxes, fetchSqlQuery, handleDelete, setCheckboxes, handleReplaceSubtree, FilterPopover, getByKey, EditPopover, Button, renderNode, children, }) => {
270
+ export const TagWrapper = ({ isCard, isRow, editPopoverKey, keyPrefix, formData, activeEditItem, setEditPopoverKey, setActiveEditItem, setActivePath, setOpenPopover, setIsPending, clearCheckboxes, handleDelete, setCheckboxes, handleReplaceSubtree, FilterPopover, getByKey, EditPopover, Button, renderNode, children, }) => {
271
271
  const [isOpen, setIsOpen] = useState(false);
272
272
  const onOpen = () => {
273
273
  setActiveEditItem(getByKey(formData, keyPrefix));
@@ -301,7 +301,6 @@ export const TagWrapper = ({ isCard, isRow, editPopoverKey, keyPrefix, formData,
301
301
  setActivePath(null);
302
302
  setOpenPopover(null);
303
303
  setEditPopoverKey(null);
304
- fetchSqlQuery();
305
304
  clearCheckboxes();
306
305
  };
307
306
  return (_jsx("div", { style: { width: '100%' }, children: _jsx(FilterPopover, { isOpen: editPopoverKey === keyPrefix, popoverTitle: "Edit Filter", filterLabel: children, onClickDelete: handleClickDelete, setIsOpen: setIsOpen, popoverChildren: _jsx(EditPopover, { Button: Button, renderNode: renderNode, activeEditItem: activeEditItem, onSave: () => {
@@ -312,7 +311,7 @@ export const TagWrapper = ({ isCard, isRow, editPopoverKey, keyPrefix, formData,
312
311
  setOpenPopover(null);
313
312
  setEditPopoverKey(null);
314
313
  handleDelete(keyPrefix);
315
- fetchSqlQuery();
314
+ setIsOpen(false);
316
315
  clearCheckboxes();
317
316
  }
318
317
  else {
@@ -322,6 +321,7 @@ export const TagWrapper = ({ isCard, isRow, editPopoverKey, keyPrefix, formData,
322
321
  setActiveEditItem(null);
323
322
  setActivePath(null);
324
323
  setOpenPopover(null);
324
+ setIsOpen(false);
325
325
  clearCheckboxes();
326
326
  }
327
327
  }, onDelete: () => {
@@ -330,8 +330,8 @@ export const TagWrapper = ({ isCard, isRow, editPopoverKey, keyPrefix, formData,
330
330
  setActivePath(null);
331
331
  setOpenPopover(null);
332
332
  setEditPopoverKey(null);
333
+ setIsOpen(false);
333
334
  handleDelete(keyPrefix);
334
- fetchSqlQuery();
335
335
  clearCheckboxes();
336
336
  } }) }) })); // Make sure to close the <Tag> correctly
337
337
  }
@@ -21,11 +21,15 @@ export declare function formatDateComparisonNode(node: any): string | null;
21
21
  export declare function getInTheCurrentIntervalSentence(node: any, databaseType: string): string | null;
22
22
  export declare function getInTheLastIntervalSentence(node: any, databaseType: string): string | null;
23
23
  export declare function getInThePreviousIntervalSentence(node: any, databaseType: string): string | null;
24
+ export declare function getIsEqualsSentence(node: any, databaseType: string): string | null;
25
+ export declare function getIsAfterSentence(node: any, databaseType: string): string | null;
26
+ export declare function getIsBeforeSentence(node: any, databaseType: string): string | null;
24
27
  export declare const isInTheLastInterval: (node: any, databaseType: string) => boolean;
25
- export declare const isInTheLastIntervalBigQuery: (node: any) => boolean;
28
+ export declare const isAfter: (node: any, databaseType: string) => boolean | undefined;
29
+ export declare const isBefore: (node: any, databaseType: string) => boolean | undefined;
26
30
  export declare const isTheCurrentInterval: (node: any, databaseType: string) => boolean;
31
+ export declare const isEquals: (node: any, databaseType: string) => boolean;
27
32
  export declare const isThePreviousInterval: (node: any, databaseType: string) => any;
28
- export declare const isTheCurrentIntervalBigQuery: (node: any) => boolean;
29
33
  /**
30
34
  * Returns whether this node is the root of a binary expression
31
35
  * where the left child is a string but really should be
@@ -56,7 +60,7 @@ export declare function tryConvertDateEquality(node: any, databaseType?: string)
56
60
  * Returns whether this node is an equality of a date column with a
57
61
  * date trunc.
58
62
  */
59
- export declare const isDateTruncEquals: (node: any) => boolean;
63
+ export declare const isDateTruncEquals: (node: any, databaseType?: string) => boolean;
60
64
  /**
61
65
  * Returns whether this node is an equality of a date column with extract.
62
66
  */
@@ -76,4 +80,5 @@ export declare const getDateFilterInfo: (node: any) => {
76
80
  export declare function removeNonSelectedTableReferences(ast: any, table: string, columns: string[]): any;
77
81
  export declare function allNumericNodesValidInTree(node: any): boolean;
78
82
  export declare function isIdColumn(columnName?: string): boolean | "" | undefined;
83
+ export declare function getCustomSentence(node: any, databaseType: string): string | null;
79
84
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/util.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,eAAO,MAAM,qBAAqB,SAAU,GAAG,YAW9C,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,WAa1C;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,WAK5C;AAGD,eAAO,MAAM,WAAW,SAAU,GAAG,YAuBpC,CAAC;AAKF,eAAO,MAAM,oBAAoB,SAAU,GAAG,QAE7C,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG;;;;;;;;EAU3C;AAKD,eAAO,MAAM,eAAe,QAAS,GAAG,QAMvC,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,WAiBvD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,GAAG,iBAQjD;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,GAAG,EACT,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAOf;AAQD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,GAAG,EACT,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAWf;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,GAAG,EACT,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAOf;AAMD,eAAO,MAAM,mBAAmB,SAAU,GAAG,gBAAgB,MAAM,YA4BlE,CAAC;AAIF,eAAO,MAAM,2BAA2B,SAAU,GAAG,YAUpD,CAAC;AAIF,eAAO,MAAM,oBAAoB,SACzB,GAAG,gBACK,MAAM,KACnB,OAoBF,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAAU,GAAG,gBAAgB,MAAM,QAYpE,CAAC;AAEF,eAAO,MAAM,4BAA4B,SAAU,GAAG,KAAG,OAUxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,SAAU,GAAG,QA4B3C,CAAC;AAGF,eAAO,MAAM,UAAU,eAAgB,MAAM,SAe5C,CAAC;AAmBF;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,MAAM,UAsBvE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,UAgB9C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,MAAM,sBAmBtE;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,SAAU,GAAG,YAU1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,SAAU,GAAG,YAOxC,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,WAehD;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,GAAG,GACV,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAyB1C;AAED,eAAO,MAAM,QAAQ,QAAS,GAAG,QAAoC,CAAC;AAEtE,eAAO,MAAM,QAAQ,MAAO,MAAM,WAA2C,CAAC;AA4L9E,eAAO,MAAM,iBAAiB,SAAU,GAAG;;;;;;;CAc1C,CAAC;AA6CF,wBAAgB,gCAAgC,CAC9C,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,OAQlB;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAc7D;AAED,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,4BAO7C"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/components/ReportBuilder/util.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  // A collection of reusable, pure, utility functions for the Report Builder.
2
- import { getQuarter } from 'date-fns';
2
+ import { getQuarter, format, addMinutes, } from 'date-fns';
3
3
  import { DATE_DESCRIPTION_MAP } from './bigDateMap';
4
4
  import { snakeCaseToTitleCase } from '../../utils/textProcessing';
5
+ import { isAfterBigQuery, isBeforeBigQuery, isEqualsBigQuery, isInTheLastIntervalBigQuery, isTheCurrentIntervalBigQuery, } from '../../utils/parserBigQuery';
6
+ import { isInTheLastIntervalPostgres, isTheCurrentIntervalPostgres, } from '../../utils/parserPostgres';
5
7
  /**
6
8
  * A node that is "in" or "not in" where none of the variants are selected.
7
9
  */
@@ -134,7 +136,7 @@ const BIG_QUERY_DAY_TO_INTERVAL_MAP = {
134
136
  };
135
137
  export function getInTheLastIntervalSentence(node, databaseType) {
136
138
  if (databaseType === 'BigQuery') {
137
- const dateColumn = snakeCaseToTitleCase(node.left.column);
139
+ const dateColumn = snakeCaseToTitleCase(node.left.column || node.left.args.value[0].columns || '');
138
140
  const amount = node.right.args.value[1].expr.value;
139
141
  let unit = node.right.args.value[1].unit.toLowerCase();
140
142
  if (unit.includes('*')) {
@@ -152,6 +154,48 @@ export function getInThePreviousIntervalSentence(node, databaseType) {
152
154
  }
153
155
  return null;
154
156
  }
157
+ export function getIsEqualsSentence(node, databaseType) {
158
+ if (databaseType === 'BigQuery') {
159
+ const dateColumn = snakeCaseToTitleCase(node.left.args.value[1].column);
160
+ const type = node.right.args.value[1].column.toLowerCase();
161
+ const value = node.right.args.value[0].value;
162
+ // using date-fns can I parse the date to short month year
163
+ const date = new Date(value);
164
+ if (type === 'year') {
165
+ return `${dateColumn} is in ${format(addMinutes(date, date.getTimezoneOffset()), 'yyyy')}`;
166
+ }
167
+ else if (type === 'month') {
168
+ return `${dateColumn} is in ${format(addMinutes(date, date.getTimezoneOffset()), 'MMM yyyy')}`;
169
+ }
170
+ else if (type === 'quarter') {
171
+ return `${dateColumn} is in ${format(addMinutes(date, date.getTimezoneOffset()), 'QQQ yyyy')}`;
172
+ }
173
+ return `${dateColumn} is in the ${type} of ${value}`;
174
+ }
175
+ return null;
176
+ }
177
+ export function getIsAfterSentence(node, databaseType) {
178
+ if (databaseType === 'BigQuery') {
179
+ const dateColumn = snakeCaseToTitleCase(node.left?.column || node.left?.args?.value[0]?.columns || '');
180
+ const value = node.right?.value || node.right?.args?.value[0]?.value || '';
181
+ if (!dateColumn || !value) {
182
+ return null;
183
+ }
184
+ return `${dateColumn} is after ${value}`;
185
+ }
186
+ return null;
187
+ }
188
+ export function getIsBeforeSentence(node, databaseType) {
189
+ if (databaseType === 'BigQuery') {
190
+ const dateColumn = snakeCaseToTitleCase(node.left?.column || node.left?.args?.value[0]?.columns || '');
191
+ const value = node.right?.value || node.right?.args?.value[0]?.value || '';
192
+ if (!dateColumn || !value) {
193
+ return null;
194
+ }
195
+ return `${dateColumn} is before ${value}`;
196
+ }
197
+ return null;
198
+ }
155
199
  // "created_at" >= date_trunc ('year', CURRENT_DATE) - INTERVAL '1 year'
156
200
  // or
157
201
  // "created_at" >= CURRENT_DATE - INTERVAL '1 year'
@@ -160,38 +204,17 @@ export const isInTheLastInterval = (node, databaseType) => {
160
204
  if (databaseType && databaseType.toLowerCase() === 'bigquery') {
161
205
  return isInTheLastIntervalBigQuery(node);
162
206
  }
163
- const isOutsideOfDateTrunc = ['>=', '>'].includes(node.operator) &&
164
- node.left.type === 'column_ref' &&
165
- node.right.type === 'binary_expr' &&
166
- node.right.operator === '-' &&
167
- node.right.left.type === 'function' &&
168
- node.right.left.name.toLowerCase() === 'date_trunc' &&
169
- node.right.left.args.value[0].type === 'single_quote_string' &&
170
- node.right.left.args.value[1].type === 'function' &&
171
- ['current_date', 'now'].includes(node.right.left.args.value[1].name.toLowerCase()) &&
172
- node.right.right.type.toLowerCase() === 'interval' &&
173
- node.right.right.expr.type === 'single_quote_string';
174
- const noDateTrunc = ['>=', '>'].includes(node.operator) &&
175
- node.left.type === 'column_ref' &&
176
- node.right.type === 'binary_expr' &&
177
- node.right.operator === '-' &&
178
- node.right.left.type === 'function' &&
179
- ['current_date', 'now'].includes(node.right.left.name.toLowerCase()) &&
180
- node.right.right.type.toLowerCase() === 'interval' &&
181
- node.right.right.expr.type === 'single_quote_string';
182
- return isOutsideOfDateTrunc || noDateTrunc;
207
+ return isInTheLastIntervalPostgres(node);
183
208
  };
184
- // created_at >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH)
185
- // in the last month aka one interval from today
186
- export const isInTheLastIntervalBigQuery = (node) => {
187
- const isOutsideOfDateTrunc = ['>=', '>'].includes(node.operator) &&
188
- node.left.type === 'column_ref' &&
189
- node.right.type === 'function' &&
190
- node.right.name.toLowerCase() === 'timestamp_sub' &&
191
- node.right.args.value[0].type === 'function' &&
192
- node.right.args.value[1].type === 'interval' &&
193
- ['current_timestamp'].includes(node.right.args.value[0].name.toLowerCase());
194
- return isOutsideOfDateTrunc;
209
+ export const isAfter = (node, databaseType) => {
210
+ if (databaseType && databaseType.toLowerCase() === 'bigquery') {
211
+ return isAfterBigQuery(node);
212
+ }
213
+ };
214
+ export const isBefore = (node, databaseType) => {
215
+ if (databaseType && databaseType.toLowerCase() === 'bigquery') {
216
+ return isBeforeBigQuery(node);
217
+ }
195
218
  };
196
219
  // "created_at" >= date_trunc ('year', CURRENT_DATE - INTERVAL '1 year')
197
220
  // this year
@@ -199,19 +222,15 @@ export const isTheCurrentInterval = (node, databaseType) => {
199
222
  if (databaseType && databaseType.toLowerCase() === 'bigquery') {
200
223
  return isTheCurrentIntervalBigQuery(node);
201
224
  }
202
- const isInsideOfDateTrunc = ['AND'].includes(node.operator) &&
203
- (node.left.operator === '=' || node.left.type === 'double_quote_string') &&
204
- node.right.operator === '=' &&
205
- node.right.name &&
206
- node.right.name.toLowerCase() === 'date_trunc' &&
207
- node.args.value[0].type === 'single_quote_string' &&
208
- node.args.value[1].type === 'binary_expr' &&
209
- node.args.value[1].operator === '-' &&
210
- node.args.value[1].left.type === 'function' &&
211
- ['now', 'current_date'].includes(node.args.value[1].left.name.toLowerCase()) &&
212
- node.args.value[1].right.type === 'interval' &&
213
- node.args.value[1].right.expr.type === 'single_quote_string';
214
- return isInsideOfDateTrunc;
225
+ return isTheCurrentIntervalPostgres(node);
226
+ };
227
+ // "created_at" >= date_trunc ('year', CURRENT_DATE - INTERVAL '1 year')
228
+ // this year
229
+ export const isEquals = (node, databaseType) => {
230
+ if (databaseType && databaseType.toLowerCase() === 'bigquery') {
231
+ return isEqualsBigQuery(node);
232
+ }
233
+ return false;
215
234
  };
216
235
  export const isThePreviousInterval = (node, databaseType) => {
217
236
  const isInsideOfDateTrunc = ['='].includes(node.operator) &&
@@ -220,21 +239,11 @@ export const isThePreviousInterval = (node, databaseType) => {
220
239
  node.left.type === 'function' &&
221
240
  node.right.name &&
222
241
  node.right.name.toLowerCase() === 'timestamp_trunc' &&
223
- node.right.args.value[0].name.toLowerCase() === 'timestamp_sub' &&
242
+ node.right.args.value[0]?.name?.toLowerCase() === 'timestamp_sub' &&
224
243
  node.right.args.value[0].args.value[0].name.toLowerCase() ===
225
244
  'current_timestamp';
226
245
  return isInsideOfDateTrunc;
227
246
  };
228
- export const isTheCurrentIntervalBigQuery = (node) => {
229
- const isInsideOfDateTrunc = ['='].includes(node.operator) &&
230
- node.left.type === 'function' &&
231
- node.left.name &&
232
- node.left.name.toLowerCase() === 'timestamp_trunc' &&
233
- node.right.type === 'function' &&
234
- node.right.name.toLowerCase() === 'timestamp_trunc' &&
235
- node.right.args.value[0].name.toLowerCase() === 'current_timestamp';
236
- return isInsideOfDateTrunc;
237
- };
238
247
  /**
239
248
  * Returns whether this node is the root of a binary expression
240
249
  * where the left child is a string but really should be
@@ -355,7 +364,7 @@ export function extractSuffixToString(node) {
355
364
  }
356
365
  }
357
366
  export function tryConvertDateEquality(node, databaseType) {
358
- if (isDateTruncEquals(node)) {
367
+ if (isDateTruncEquals(node, databaseType)) {
359
368
  const columnNode = node.left.args.value[1];
360
369
  const columnName = columnNode.column ?? columnNode.value;
361
370
  const cleanColumnName = snakeCaseToTitleCase(columnName.replaceAll('_at', ''));
@@ -375,7 +384,7 @@ export function tryConvertDateEquality(node, databaseType) {
375
384
  * Returns whether this node is an equality of a date column with a
376
385
  * date trunc.
377
386
  */
378
- export const isDateTruncEquals = (node) => {
387
+ export const isDateTruncEquals = (node, databaseType) => {
379
388
  return (node.type === 'binary_expr' &&
380
389
  node.operator === '=' &&
381
390
  isDateTrunc(node.left) &&
@@ -630,12 +639,21 @@ function getNodeTable(node) {
630
639
  function removeNonSelectedTableFilters(node, table, columns) {
631
640
  if (node.left.type !== 'binary_expr') {
632
641
  const referencedTable = getNodeTable(node.left);
633
- const referencedColumn = node.left.column || node.left.value;
642
+ const referencedColumn = node.left.column ||
643
+ node.left.value ||
644
+ node.left.args?.value[0]?.column ||
645
+ node.left.args?.value[0]?.value;
634
646
  if ((referencedTable && referencedTable !== table) ||
635
647
  !columns.includes(referencedColumn)) {
636
648
  return null;
637
649
  }
638
650
  else {
651
+ if (node.left.value) {
652
+ node.left.column = node.left.value;
653
+ }
654
+ else if (node.left.args?.value[0].value) {
655
+ node.left.args.value[0].column = node.left.args.value[0].value;
656
+ }
639
657
  return node;
640
658
  }
641
659
  }
@@ -686,3 +704,26 @@ export function isIdColumn(columnName) {
686
704
  columnName.toLowerCase().endsWith('_id') ||
687
705
  columnName.endsWith('Id')));
688
706
  }
707
+ // This function determines if a node is a custom node type.
708
+ // This will parse out date filters and some numeric filters that are unique (between).
709
+ export function getCustomSentence(node, databaseType) {
710
+ if (isTheCurrentInterval(node, databaseType)) {
711
+ return getInTheCurrentIntervalSentence(node, databaseType);
712
+ }
713
+ else if (isInTheLastInterval(node, databaseType)) {
714
+ return getInTheLastIntervalSentence(node, databaseType);
715
+ }
716
+ else if (isAfter(node, databaseType)) {
717
+ return getIsAfterSentence(node, databaseType);
718
+ }
719
+ else if (isBefore(node, databaseType)) {
720
+ return getIsBeforeSentence(node, databaseType);
721
+ }
722
+ else if (isThePreviousInterval(node, databaseType)) {
723
+ return getInThePreviousIntervalSentence(node, databaseType);
724
+ }
725
+ else if (isEquals(node, databaseType)) {
726
+ return getIsEqualsSentence(node, databaseType);
727
+ }
728
+ return null;
729
+ }