@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.
- package/dist/cjs/Chart.d.ts +0 -8
- package/dist/cjs/Chart.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.d.ts +11 -1
- package/dist/cjs/ChartBuilder.d.ts.map +1 -1
- package/dist/cjs/ChartBuilder.js +6 -5
- package/dist/cjs/ChartEditor.d.ts +11 -3
- package/dist/cjs/ChartEditor.d.ts.map +1 -1
- package/dist/cjs/ChartEditor.js +3 -3
- package/dist/cjs/Dashboard.d.ts.map +1 -1
- package/dist/cjs/Dashboard.js +7 -9
- package/dist/cjs/ReportBuilder.d.ts +7 -1
- package/dist/cjs/ReportBuilder.d.ts.map +1 -1
- package/dist/cjs/ReportBuilder.js +112 -37
- package/dist/cjs/SQLEditor.d.ts +7 -5
- package/dist/cjs/SQLEditor.d.ts.map +1 -1
- package/dist/cjs/SQLEditor.js +3 -2
- package/dist/cjs/Table.d.ts +2 -2
- package/dist/cjs/Table.d.ts.map +1 -1
- package/dist/cjs/components/QuillCard.d.ts +2 -7
- package/dist/cjs/components/QuillCard.d.ts.map +1 -1
- package/dist/cjs/components/QuillCard.js +15 -9
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/AddColumnPopover.js +2 -0
- package/dist/cjs/components/ReportBuilder/AddLimitPopover.js +1 -1
- package/dist/cjs/components/ReportBuilder/convert.d.ts +1 -0
- package/dist/cjs/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/convert.js +20 -1
- package/dist/cjs/components/ReportBuilder/operators.d.ts +15 -10
- package/dist/cjs/components/ReportBuilder/operators.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/operators.js +23 -10
- package/dist/cjs/components/ReportBuilder/ui.d.ts +1 -2
- package/dist/cjs/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/ui.js +4 -4
- package/dist/cjs/components/ReportBuilder/util.d.ts +8 -3
- package/dist/cjs/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/cjs/components/ReportBuilder/util.js +110 -64
- package/dist/cjs/components/UiComponents.d.ts +0 -6
- package/dist/cjs/components/UiComponents.d.ts.map +1 -1
- package/dist/cjs/components/UiComponents.js +2 -44
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts +5 -2
- package/dist/cjs/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotList.js +11 -11
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/cjs/internals/ReportBuilder/PivotModal.js +4 -3
- package/dist/cjs/utils/parserBigQuery.d.ts +6 -0
- package/dist/cjs/utils/parserBigQuery.d.ts.map +1 -0
- package/dist/cjs/utils/parserBigQuery.js +60 -0
- package/dist/cjs/utils/parserPostgres.d.ts +3 -0
- package/dist/cjs/utils/parserPostgres.d.ts.map +1 -0
- package/dist/cjs/utils/parserPostgres.js +42 -0
- package/dist/esm/Chart.d.ts +0 -8
- package/dist/esm/Chart.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.d.ts +11 -1
- package/dist/esm/ChartBuilder.d.ts.map +1 -1
- package/dist/esm/ChartBuilder.js +6 -5
- package/dist/esm/ChartEditor.d.ts +11 -3
- package/dist/esm/ChartEditor.d.ts.map +1 -1
- package/dist/esm/ChartEditor.js +3 -3
- package/dist/esm/Dashboard.d.ts.map +1 -1
- package/dist/esm/Dashboard.js +8 -10
- package/dist/esm/ReportBuilder.d.ts +7 -1
- package/dist/esm/ReportBuilder.d.ts.map +1 -1
- package/dist/esm/ReportBuilder.js +113 -38
- package/dist/esm/SQLEditor.d.ts +7 -5
- package/dist/esm/SQLEditor.d.ts.map +1 -1
- package/dist/esm/SQLEditor.js +3 -2
- package/dist/esm/Table.d.ts +2 -2
- package/dist/esm/Table.d.ts.map +1 -1
- package/dist/esm/components/QuillCard.d.ts +2 -7
- package/dist/esm/components/QuillCard.d.ts.map +1 -1
- package/dist/esm/components/QuillCard.js +15 -9
- package/dist/esm/components/ReportBuilder/AddColumnPopover.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/AddColumnPopover.js +2 -0
- package/dist/esm/components/ReportBuilder/AddLimitPopover.js +1 -1
- package/dist/esm/components/ReportBuilder/convert.d.ts +1 -0
- package/dist/esm/components/ReportBuilder/convert.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/convert.js +18 -0
- package/dist/esm/components/ReportBuilder/operators.d.ts +15 -10
- package/dist/esm/components/ReportBuilder/operators.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/operators.js +23 -10
- package/dist/esm/components/ReportBuilder/ui.d.ts +1 -2
- package/dist/esm/components/ReportBuilder/ui.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/ui.js +4 -4
- package/dist/esm/components/ReportBuilder/util.d.ts +8 -3
- package/dist/esm/components/ReportBuilder/util.d.ts.map +1 -1
- package/dist/esm/components/ReportBuilder/util.js +101 -60
- package/dist/esm/components/UiComponents.d.ts +0 -6
- package/dist/esm/components/UiComponents.d.ts.map +1 -1
- package/dist/esm/components/UiComponents.js +3 -44
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts +5 -2
- package/dist/esm/internals/ReportBuilder/PivotList.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotList.js +11 -11
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts +2 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.d.ts.map +1 -1
- package/dist/esm/internals/ReportBuilder/PivotModal.js +4 -3
- package/dist/esm/utils/parserBigQuery.d.ts +6 -0
- package/dist/esm/utils/parserBigQuery.d.ts.map +1 -0
- package/dist/esm/utils/parserBigQuery.js +52 -0
- package/dist/esm/utils/parserPostgres.d.ts +3 -0
- package/dist/esm/utils/parserPostgres.d.ts.map +1 -0
- package/dist/esm/utils/parserPostgres.js +37 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuillCard.d.ts","sourceRoot":"","sources":["../../../src/components/QuillCard.tsx"],"names":[],"mappings":"AACA,
|
|
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
|
-
|
|
4
|
-
|
|
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:
|
|
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:
|
|
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
|
-
` }),
|
|
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: {
|
|
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,
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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: '
|
|
523
|
+
name: 'timestamp_trunc',
|
|
515
524
|
args: {
|
|
516
525
|
type: 'expr_list',
|
|
517
526
|
value: [
|
|
518
527
|
{
|
|
519
|
-
type: '
|
|
520
|
-
|
|
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: '
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
|
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":"
|
|
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
|
-
|
|
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
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
node
|
|
192
|
-
|
|
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
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
node
|
|
209
|
-
|
|
210
|
-
|
|
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]
|
|
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 ||
|
|
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
|
+
}
|