sqlparser-devexpress 2.1.0 → 2.1.1
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/package.json +5 -1
- package/src/core/converter.js +14 -11
- package/src/core/parser.js +3 -3
- package/src/debug.js +40 -0
- package/src/index.js +0 -24
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sqlparser-devexpress",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"main": "src/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
"require": "./src/index.js"
|
|
12
12
|
},
|
|
13
13
|
"types": "src/@types/default.d.ts",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/RohitM-IN/SQLParser.git"
|
|
17
|
+
},
|
|
14
18
|
"keywords": [
|
|
15
19
|
"sql",
|
|
16
20
|
"parser",
|
package/src/core/converter.js
CHANGED
|
@@ -31,7 +31,7 @@ function DevExpressConverter() {
|
|
|
31
31
|
let result = processAstNode(ast);
|
|
32
32
|
|
|
33
33
|
// Handle special cases for short circuit
|
|
34
|
-
if(result === true || result === false || result === null) return [];
|
|
34
|
+
if (result === true || result === false || result === null) return [];
|
|
35
35
|
|
|
36
36
|
return processAstNode(ast);
|
|
37
37
|
}
|
|
@@ -192,17 +192,13 @@ function DevExpressConverter() {
|
|
|
192
192
|
}
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
if(Array.isArray(resolvedValue) && resolvedValue.length){
|
|
195
|
+
if (Array.isArray(resolvedValue) && resolvedValue.length) {
|
|
196
|
+
|
|
197
|
+
return resolvedValue.flatMap(i => [[ast.field, '=', i], 'or']).slice(0, -1);
|
|
196
198
|
|
|
197
|
-
return Array.prototype.concat
|
|
198
|
-
.apply(
|
|
199
|
-
[],
|
|
200
|
-
resolvedValue.map((i) => [[ast.field, '=', i], 'or']),
|
|
201
|
-
)
|
|
202
|
-
.slice(0, -1)
|
|
203
199
|
}
|
|
204
200
|
|
|
205
|
-
return [ast.field, "
|
|
201
|
+
return [ast.field, "=", resolvedValue];
|
|
206
202
|
}
|
|
207
203
|
|
|
208
204
|
/**
|
|
@@ -329,7 +325,14 @@ function DevExpressConverter() {
|
|
|
329
325
|
* @returns {boolean|null} The result of the evaluation or null if not evaluable.
|
|
330
326
|
*/
|
|
331
327
|
function evaluateExpression(left, operator, right) {
|
|
332
|
-
if (
|
|
328
|
+
if ((left !== null && isNaN(left)) || (right !== null && isNaN(right))) return null;
|
|
329
|
+
|
|
330
|
+
if (left === null || right === null) {
|
|
331
|
+
if (operator === '=' || operator === '==') return left === right;
|
|
332
|
+
if (operator === '<>' || operator === '!=') return left !== right;
|
|
333
|
+
return null; // Any comparison with null should return null
|
|
334
|
+
}
|
|
335
|
+
|
|
333
336
|
switch (operator) {
|
|
334
337
|
case '=': case '==': return left === right;
|
|
335
338
|
case '<>': case '!=': return left !== right;
|
|
@@ -337,7 +340,7 @@ function DevExpressConverter() {
|
|
|
337
340
|
case '>=': return left >= right;
|
|
338
341
|
case '<': return left < right;
|
|
339
342
|
case '<=': return left <= right;
|
|
340
|
-
default: return
|
|
343
|
+
default: return null; // Invalid operator
|
|
341
344
|
}
|
|
342
345
|
}
|
|
343
346
|
|
package/src/core/parser.js
CHANGED
|
@@ -25,9 +25,9 @@ export function parse(input, variables = []) {
|
|
|
25
25
|
// const tokens = [];
|
|
26
26
|
// let tempToken = currentToken;
|
|
27
27
|
// while (tempToken) {
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
//
|
|
28
|
+
// tokens.push(tempToken);
|
|
29
|
+
// tempToken = tokenizer.peekNextToken();
|
|
30
|
+
// tokenizer.nextToken();
|
|
31
31
|
// }
|
|
32
32
|
|
|
33
33
|
// console.log("Tokens:", tokens);
|
package/src/debug.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// // Example usage
|
|
2
|
+
// // const devExpressFilter = parseFilterString("((ISNULL({0}, 0) = 0 AND CompanyID = {1}) OR CompanyID IS NULL) OR BranchID = {0} | [LeadDocument.BranchID] | [LeadDocument.CompanyID]", sampleResultObject);
|
|
3
|
+
// // const devExpressFilter = parseFilterString("FromDate <= '{TransferOutwardDocument.DocDate}' ", sampleResultObject, "TransferOutwardDocument", "789");
|
|
4
|
+
// // const devExpressFilter = parseFilterString("(RS2ID in ({SaleOrderStatusStmtGlobalRpt.StateID}) Or ({SaleOrderStatusStmtGlobalRpt.StateID} =0)) And (RS3ID in (0,{SaleOrderStatusStmtGlobalRpt.RegionID}) Or {SaleOrderStatusStmtGlobalRpt.RegionID} =0 )", sampleResultObject,);
|
|
5
|
+
|
|
6
|
+
// import { convertToDevExpressFormat } from "./core/converter.js";
|
|
7
|
+
// import { parse } from "./core/parser.js";
|
|
8
|
+
// import { sanitizeQuery } from "./core/sanitizer.js";
|
|
9
|
+
// import { convertAstToDevextreme, convertSQLToAst } from "./index.js";
|
|
10
|
+
|
|
11
|
+
// const sampleData = {
|
|
12
|
+
// 'LeadStatementGlobalRpt.StateID': null,
|
|
13
|
+
// 'LeadStatementGlobalRpt.RegionID': null,
|
|
14
|
+
// 'ServiceOrderDocument.SourceID': 2
|
|
15
|
+
// }
|
|
16
|
+
|
|
17
|
+
// export function parseFilterString(filterString, sampleData = null) {
|
|
18
|
+
// if (filterString.toUpperCase().startsWith("SELECT")) return null; // Skip full SQL queries
|
|
19
|
+
|
|
20
|
+
// let { sanitizedSQL, extractedVariables } = sanitizeQuery(filterString);
|
|
21
|
+
// console.log("Sanitized SQL:", sanitizedSQL, "\n");
|
|
22
|
+
|
|
23
|
+
// const parsedResult = parse(sanitizedSQL, extractedVariables);
|
|
24
|
+
// extractedVariables = parsedResult.variables;
|
|
25
|
+
// console.log("Extracted Variables:", JSON.stringify(extractedVariables, null, 2), "\n");
|
|
26
|
+
|
|
27
|
+
// const astTree = parsedResult.ast;
|
|
28
|
+
// console.log("AST Tree:", JSON.stringify(astTree, null, 2), "\n");
|
|
29
|
+
|
|
30
|
+
// return convertToDevExpressFormat({ ast: astTree, variables: extractedVariables, resultObject: sampleData });
|
|
31
|
+
// }
|
|
32
|
+
|
|
33
|
+
// // const devexpress = parseFilterString("(RS2ID in ({LeadStatementGlobalRpt.StateID}) Or ({LeadStatementGlobalRpt.StateID} =0)) And (RS3ID in (0,{LeadStatementGlobalRpt.RegionID}) Or {LeadStatementGlobalRpt.RegionID} =0 )", sampleData);
|
|
34
|
+
// const devexpress = parseFilterString("{LeadStatementGlobalRpt.RegionID} =0", sampleData);
|
|
35
|
+
// console.log("DevExpress Filter:", JSON.stringify(devexpress, null, 2));
|
|
36
|
+
|
|
37
|
+
// // const devExpressFilter = convertSQLToAst("(RS2ID in ({LeadStatementGlobalRpt.StateID}) Or ({LeadStatementGlobalRpt.StateID} =0)) And (RS3ID in (0,{LeadStatementGlobalRpt.RegionID}) Or {LeadStatementGlobalRpt.RegionID} =0 ) ");
|
|
38
|
+
// // const devExpressFilterresult = convertAstToDevextreme(devExpressFilter.ast, devExpressFilter.variables, sampleData);
|
|
39
|
+
// // console.log("DevExpress Filter:", JSON.stringify(devExpressFilter, null, 2));
|
|
40
|
+
// // console.log("DevExpress Result:", JSON.stringify(devExpressFilterresult, null, 2));
|
package/src/index.js
CHANGED
|
@@ -19,29 +19,5 @@ export function convertAstToDevextreme(ast, variables, state) {
|
|
|
19
19
|
return convertToDevExpressFormat({ ast, variables, resultObject: state })
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
// export function parseFilterString(filterString, sampleData = null) {
|
|
23
|
-
// if (filterString.toUpperCase().startsWith("SELECT")) return null; // Skip full SQL queries
|
|
24
22
|
|
|
25
|
-
// let { sanitizedSQL, extractedVariables } = sanitizeQuery(filterString);
|
|
26
|
-
// console.log("Sanitized SQL:", sanitizedSQL, "\n");
|
|
27
|
-
|
|
28
|
-
// const parsedResult = parse(sanitizedSQL, extractedVariables);
|
|
29
|
-
// extractedVariables = parsedResult.variables;
|
|
30
|
-
// console.log("Extracted Variables:", JSON.stringify(extractedVariables, null, 2), "\n");
|
|
31
|
-
|
|
32
|
-
// const astTree = parsedResult.ast;
|
|
33
|
-
// console.log("AST Tree:", JSON.stringify(astTree, null, 2), "\n");
|
|
34
|
-
|
|
35
|
-
// return convertToDevExpressFormat({ ast: astTree, variables: extractedVariables, resultObject: sampleData });
|
|
36
|
-
// }
|
|
37
|
-
|
|
38
|
-
// Example usage
|
|
39
|
-
// const devExpressFilter = parseFilterString("((ISNULL({0}, 0) = 0 AND CompanyID = {1}) OR CompanyID IS NULL) OR BranchID = {0} | [LeadDocument.BranchID] | [LeadDocument.CompanyID]", sampleResultObject);
|
|
40
|
-
// const devExpressFilter = parseFilterString("FromDate <= '{TransferOutwardDocument.DocDate}' ", sampleResultObject, "TransferOutwardDocument", "789");
|
|
41
|
-
// const devExpressFilter = parseFilterString("(RS2ID in ({SaleOrderStatusStmtGlobalRpt.StateID}) Or ({SaleOrderStatusStmtGlobalRpt.StateID} =0)) And (RS3ID in (0,{SaleOrderStatusStmtGlobalRpt.RegionID}) Or {SaleOrderStatusStmtGlobalRpt.RegionID} =0 )", sampleResultObject,);
|
|
42
|
-
|
|
43
|
-
// const devExpressFilter = convertSQLToAst("CompanyID = CompanyID2 = {AccountingRule.CompanyID}");
|
|
44
|
-
// const devExpressFilterresult = convertAstToDevextreme(devExpressFilter.ast, devExpressFilter.variables,{'ServiceOrderDocument.SourceID': 2});
|
|
45
|
-
// console.log("DevExpress Filter:", JSON.stringify(devExpressFilter, null, 2));
|
|
46
|
-
// console.log("DevExpress Result:", JSON.stringify(devExpressFilterresult, null, 2));
|
|
47
23
|
|