@syncfusion/ej2-querybuilder 20.3.56 → 20.4.38
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/.eslintrc.json +16 -1
- package/CHANGELOG.md +3 -11
- package/README.md +43 -43
- package/dist/ej2-querybuilder.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js +2 -2
- package/dist/ej2-querybuilder.umd.min.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es2015.js +205 -114
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +205 -114
- package/dist/es6/ej2-querybuilder.es5.js.map +1 -1
- package/dist/global/ej2-querybuilder.min.js +2 -2
- package/dist/global/ej2-querybuilder.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +20 -23
- package/src/query-builder/query-builder-model.d.ts +248 -248
- package/src/query-builder/query-builder.d.ts +7 -3
- package/src/query-builder/query-builder.js +205 -114
|
@@ -383,7 +383,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
383
383
|
if (sqlIdx > -1) {
|
|
384
384
|
var operator_1 = column.operators[j];
|
|
385
385
|
var operColl = Object.keys(operator_1);
|
|
386
|
-
var values = operColl.map(function (key) { return operator_1[key]; }).join(',').split(',');
|
|
386
|
+
var values = operColl.map(function (key) { return operator_1["" + key]; }).join(',').split(',');
|
|
387
387
|
var valueIdx = operColl.indexOf('value');
|
|
388
388
|
this_1.operators[values[valueIdx]] = values[sqlIdx];
|
|
389
389
|
}
|
|
@@ -780,6 +780,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
780
780
|
var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'),
|
|
781
781
|
position: 'BottomCenter', cssClass: 'e-querybuilder-error' });
|
|
782
782
|
tooltip.appendTo(element);
|
|
783
|
+
// eslint-disable-next-line
|
|
783
784
|
tooltip.open(element);
|
|
784
785
|
};
|
|
785
786
|
/**
|
|
@@ -837,8 +838,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
837
838
|
if (rule.rules[index].value instanceof Array) {
|
|
838
839
|
valArray = rule.rules[index].value;
|
|
839
840
|
}
|
|
840
|
-
if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&
|
|
841
|
-
rule.rules[index].
|
|
841
|
+
if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&
|
|
842
|
+
(isNullOrUndefined(rule.rules[index].value) &&
|
|
843
|
+
rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||
|
|
842
844
|
(rule.rules[index].value instanceof Array && valArray.length < 1)) {
|
|
843
845
|
var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');
|
|
844
846
|
isValid = false;
|
|
@@ -916,7 +918,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
916
918
|
groupElem.appendChild(grpBodyElem);
|
|
917
919
|
// create button group in OR and AND process
|
|
918
920
|
if (!this.headerTemplate) {
|
|
919
|
-
glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group' } });
|
|
921
|
+
glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });
|
|
920
922
|
if (this.enableNotCondition) {
|
|
921
923
|
inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
|
|
922
924
|
glueElem.appendChild(inputElem);
|
|
@@ -1800,29 +1802,29 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1800
1802
|
for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {
|
|
1801
1803
|
fieldStr = fieldColl[j];
|
|
1802
1804
|
if (fieldColl.length === (j + 1)) {
|
|
1803
|
-
value = dataObj[fieldStr];
|
|
1804
|
-
if (Number(dataObj[fieldStr]) === dataObj[fieldStr] && dataObj[fieldStr] % 1 !== 0) {
|
|
1805
|
-
value = dataObj[fieldStr].toString();
|
|
1805
|
+
value = dataObj["" + fieldStr];
|
|
1806
|
+
if (Number(dataObj["" + fieldStr]) === dataObj["" + fieldStr] && dataObj["" + fieldStr] % 1 !== 0) {
|
|
1807
|
+
value = dataObj["" + fieldStr].toString();
|
|
1806
1808
|
}
|
|
1807
1809
|
}
|
|
1808
1810
|
else {
|
|
1809
|
-
dataObj = dataObj[fieldStr];
|
|
1811
|
+
dataObj = dataObj["" + fieldStr];
|
|
1810
1812
|
}
|
|
1811
1813
|
}
|
|
1812
1814
|
}
|
|
1813
1815
|
else {
|
|
1814
|
-
value = dataSource[i][field];
|
|
1815
|
-
if (Number(dataSource[i][field]) === dataSource[i][field] && dataSource[i][field] % 1 !== 0) {
|
|
1816
|
-
value = dataSource[i][field].toString();
|
|
1816
|
+
value = dataSource[i]["" + field];
|
|
1817
|
+
if (Number(dataSource[i]["" + field]) === dataSource[i]["" + field] && dataSource[i]["" + field] % 1 !== 0) {
|
|
1818
|
+
value = dataSource[i]["" + field].toString();
|
|
1817
1819
|
}
|
|
1818
1820
|
}
|
|
1819
1821
|
if (!(value in original)) {
|
|
1820
|
-
original[value] = 1;
|
|
1822
|
+
original["" + value] = 1;
|
|
1821
1823
|
if (fieldColl.length > 1) {
|
|
1822
1824
|
this.createNestedObject(data, fieldColl, value);
|
|
1823
1825
|
}
|
|
1824
1826
|
else {
|
|
1825
|
-
data[field] = value;
|
|
1827
|
+
data["" + field] = value;
|
|
1826
1828
|
}
|
|
1827
1829
|
result.push(data);
|
|
1828
1830
|
}
|
|
@@ -1836,9 +1838,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1836
1838
|
for (var k = 0; k < lastIndex; ++k) {
|
|
1837
1839
|
key = fieldColl[k];
|
|
1838
1840
|
if (!(key in obj)) {
|
|
1839
|
-
obj[key] = {};
|
|
1841
|
+
obj["" + key] = {};
|
|
1840
1842
|
}
|
|
1841
|
-
obj = obj[key];
|
|
1843
|
+
obj = obj["" + key];
|
|
1842
1844
|
}
|
|
1843
1845
|
obj[fieldColl[lastIndex]] = value;
|
|
1844
1846
|
};
|
|
@@ -1850,28 +1852,28 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
1850
1852
|
var isNested = field.indexOf(this.separator);
|
|
1851
1853
|
var _loop_2 = function (i, iLen) {
|
|
1852
1854
|
if (isNested === 0) {
|
|
1853
|
-
value = dataSource[i][field];
|
|
1855
|
+
value = dataSource[i]["" + field];
|
|
1854
1856
|
}
|
|
1855
1857
|
else {
|
|
1856
1858
|
nest = field.split(this_2.separator);
|
|
1857
1859
|
// eslint-disable-next-line @typescript-eslint/tslint/config
|
|
1858
1860
|
nest.forEach(function (element) {
|
|
1859
1861
|
if (value) {
|
|
1860
|
-
value = value[element];
|
|
1862
|
+
value = value["" + element];
|
|
1861
1863
|
}
|
|
1862
1864
|
else {
|
|
1863
|
-
value = dataSource[i][element];
|
|
1865
|
+
value = dataSource[i]["" + element];
|
|
1864
1866
|
}
|
|
1865
1867
|
});
|
|
1866
1868
|
}
|
|
1867
|
-
if (Number(dataSource[i][field]) === dataSource[i][field] && dataSource[i][field] % 1 !== 0) {
|
|
1868
|
-
value = dataSource[i][field].toString();
|
|
1869
|
+
if (Number(dataSource[i]["" + field]) === dataSource[i]["" + field] && dataSource[i]["" + field] % 1 !== 0) {
|
|
1870
|
+
value = dataSource[i]["" + field].toString();
|
|
1869
1871
|
}
|
|
1870
1872
|
var data = {};
|
|
1871
1873
|
if (!(value in original)) {
|
|
1872
|
-
original[value] = 1;
|
|
1874
|
+
original["" + value] = 1;
|
|
1873
1875
|
if (isNested === 0) {
|
|
1874
|
-
data[field] = value;
|
|
1876
|
+
data["" + field] = value;
|
|
1875
1877
|
}
|
|
1876
1878
|
else {
|
|
1877
1879
|
data[nest[nest.length - 1]] = value;
|
|
@@ -2619,7 +2621,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
2619
2621
|
var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])
|
|
2620
2622
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2621
2623
|
: this.getColumn(dropDownObj.value);
|
|
2622
|
-
if (!this.isImportRules && rule.rules[index].field &&
|
|
2624
|
+
if (!this.isImportRules && rule.rules[index].field &&
|
|
2625
|
+
rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {
|
|
2623
2626
|
if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)
|
|
2624
2627
|
|| (operator.indexOf('empty') > -1)) {
|
|
2625
2628
|
rule.rules[index].value = '';
|
|
@@ -3227,6 +3230,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
3227
3230
|
StartsWith: 'Starts With',
|
|
3228
3231
|
EndsWith: 'Ends With',
|
|
3229
3232
|
Contains: 'Contains',
|
|
3233
|
+
NotLike: 'Not Like',
|
|
3234
|
+
Like: 'Like',
|
|
3230
3235
|
Equal: 'Equal',
|
|
3231
3236
|
NotEqual: 'Not Equal',
|
|
3232
3237
|
LessThan: 'Less Than',
|
|
@@ -3311,6 +3316,16 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
3311
3316
|
isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',
|
|
3312
3317
|
notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'
|
|
3313
3318
|
};
|
|
3319
|
+
this.sqlOperators = {
|
|
3320
|
+
equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),
|
|
3321
|
+
notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),
|
|
3322
|
+
endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),
|
|
3323
|
+
notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),
|
|
3324
|
+
isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),
|
|
3325
|
+
isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),
|
|
3326
|
+
notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),
|
|
3327
|
+
notcontains: this.l10n.getConstant('NotLike').toUpperCase()
|
|
3328
|
+
};
|
|
3314
3329
|
if (!this.fields) {
|
|
3315
3330
|
this.fields = { text: 'label', value: 'field' };
|
|
3316
3331
|
}
|
|
@@ -3402,7 +3417,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
3402
3417
|
EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);
|
|
3403
3418
|
};
|
|
3404
3419
|
QueryBuilder.prototype.getParentGroup = function (target, isParent) {
|
|
3405
|
-
var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[target];
|
|
3420
|
+
var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl["" + target];
|
|
3406
3421
|
var len = isParent ? groupLevel.length - 1 : groupLevel.length;
|
|
3407
3422
|
var rule = this.rule;
|
|
3408
3423
|
for (var i = 0; i < len; i++) {
|
|
@@ -3564,6 +3579,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
3564
3579
|
err = [];
|
|
3565
3580
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3566
3581
|
var error = 'error';
|
|
3582
|
+
// eslint-disable-next-line
|
|
3567
3583
|
err[error] = error;
|
|
3568
3584
|
}
|
|
3569
3585
|
// eslint-enable
|
|
@@ -3725,6 +3741,9 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
3725
3741
|
else {
|
|
3726
3742
|
rule = { 'condition': rule.condition, 'rules': rule.rules };
|
|
3727
3743
|
}
|
|
3744
|
+
if (rule.rules.length === 0) {
|
|
3745
|
+
rule = {};
|
|
3746
|
+
}
|
|
3728
3747
|
}
|
|
3729
3748
|
}
|
|
3730
3749
|
return rule;
|
|
@@ -3933,7 +3952,8 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
3933
3952
|
if (i === 0) {
|
|
3934
3953
|
if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||
|
|
3935
3954
|
oper.indexOf('empty') > -1) && oper.indexOf('contains') < 0) {
|
|
3936
|
-
pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :
|
|
3955
|
+
pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :
|
|
3956
|
+
this.arrayPredicate(ruleColl[i]);
|
|
3937
3957
|
}
|
|
3938
3958
|
else {
|
|
3939
3959
|
var value = ruleValue;
|
|
@@ -4396,7 +4416,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4396
4416
|
}
|
|
4397
4417
|
return false;
|
|
4398
4418
|
};
|
|
4399
|
-
QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr) {
|
|
4419
|
+
QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {
|
|
4400
4420
|
var isRoot = false;
|
|
4401
4421
|
if (!queryStr && queryStr !== '') {
|
|
4402
4422
|
queryStr = '';
|
|
@@ -4407,92 +4427,100 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4407
4427
|
}
|
|
4408
4428
|
var condition = rules.condition;
|
|
4409
4429
|
if (rules.not) {
|
|
4430
|
+
var rulesNotCondition = void 0;
|
|
4410
4431
|
if (isRoot) {
|
|
4411
|
-
|
|
4432
|
+
rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';
|
|
4433
|
+
queryStr += rulesNotCondition;
|
|
4412
4434
|
}
|
|
4413
4435
|
else {
|
|
4414
|
-
|
|
4436
|
+
rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';
|
|
4437
|
+
queryStr += rulesNotCondition;
|
|
4415
4438
|
}
|
|
4416
4439
|
}
|
|
4417
|
-
|
|
4418
|
-
|
|
4419
|
-
|
|
4420
|
-
|
|
4421
|
-
|
|
4422
|
-
|
|
4423
|
-
|
|
4424
|
-
|
|
4425
|
-
|
|
4426
|
-
|
|
4427
|
-
|
|
4440
|
+
if (rules.rules) {
|
|
4441
|
+
for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {
|
|
4442
|
+
if (rules.rules[j].rules) {
|
|
4443
|
+
queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);
|
|
4444
|
+
}
|
|
4445
|
+
else {
|
|
4446
|
+
var rule = rules.rules[j];
|
|
4447
|
+
var valueStr = '';
|
|
4448
|
+
var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];
|
|
4449
|
+
if (rule.value instanceof Array) {
|
|
4450
|
+
if (rule.operator.toString().indexOf('between') > -1) {
|
|
4451
|
+
var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';
|
|
4452
|
+
if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {
|
|
4453
|
+
valueStr += '"' + rule.value[0] + '"' + ruleCondition + '"' + rule.value[1] + '"';
|
|
4454
|
+
}
|
|
4455
|
+
else {
|
|
4456
|
+
valueStr += rule.value[0] + ruleCondition + rule.value[1];
|
|
4457
|
+
}
|
|
4428
4458
|
}
|
|
4429
4459
|
else {
|
|
4430
|
-
|
|
4460
|
+
if (typeof rule.value[0] === 'string' && rule.value !== null) {
|
|
4461
|
+
valueStr += '("' + rule.value[0] + '"';
|
|
4462
|
+
for (var k = 1, kLen = rule.value.length; k < kLen; k++) {
|
|
4463
|
+
valueStr += ',"' + rule.value[k] + '"';
|
|
4464
|
+
}
|
|
4465
|
+
valueStr += ')';
|
|
4466
|
+
}
|
|
4467
|
+
else {
|
|
4468
|
+
valueStr += '(' + rule.value + ')';
|
|
4469
|
+
}
|
|
4431
4470
|
}
|
|
4432
4471
|
}
|
|
4433
4472
|
else {
|
|
4434
|
-
if (
|
|
4435
|
-
valueStr += '("' + rule.value
|
|
4436
|
-
|
|
4437
|
-
|
|
4438
|
-
|
|
4439
|
-
|
|
4473
|
+
if (rule.operator.toString().indexOf('startswith') > -1) {
|
|
4474
|
+
valueStr += rule.value ? '("' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4475
|
+
}
|
|
4476
|
+
else if (rule.operator.toString().indexOf('endswith') > -1) {
|
|
4477
|
+
valueStr += rule.value ? '("%' + rule.value + '")' : '(' + rule.value + ')';
|
|
4478
|
+
}
|
|
4479
|
+
else if (rule.operator.toString().indexOf('contains') > -1) {
|
|
4480
|
+
valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4440
4481
|
}
|
|
4441
4482
|
else {
|
|
4442
|
-
|
|
4483
|
+
if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {
|
|
4484
|
+
valueStr += rule.value;
|
|
4485
|
+
}
|
|
4486
|
+
else {
|
|
4487
|
+
valueStr += '"' + rule.value + '"';
|
|
4488
|
+
}
|
|
4443
4489
|
}
|
|
4444
4490
|
}
|
|
4445
|
-
|
|
4446
|
-
|
|
4447
|
-
|
|
4448
|
-
valueStr += rule.value ? '("' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4449
|
-
}
|
|
4450
|
-
else if (rule.operator.toString().indexOf('endswith') > -1) {
|
|
4451
|
-
valueStr += rule.value ? '("%' + rule.value + '")' : '(' + rule.value + ')';
|
|
4452
|
-
}
|
|
4453
|
-
else if (rule.operator.toString().indexOf('contains') > -1) {
|
|
4454
|
-
valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4455
|
-
}
|
|
4456
|
-
else {
|
|
4457
|
-
if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {
|
|
4458
|
-
valueStr += rule.value;
|
|
4491
|
+
if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {
|
|
4492
|
+
if (enableEscape) {
|
|
4493
|
+
rule.field = '`' + rule.field + '`';
|
|
4459
4494
|
}
|
|
4460
4495
|
else {
|
|
4461
|
-
|
|
4496
|
+
if (rule.field.indexOf(' ') > -1) {
|
|
4497
|
+
rule.field = '"' + rule.field + '"';
|
|
4498
|
+
}
|
|
4462
4499
|
}
|
|
4463
|
-
|
|
4464
|
-
}
|
|
4465
|
-
if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {
|
|
4466
|
-
if (enableEscape) {
|
|
4467
|
-
rule.field = '`' + rule.field + '`';
|
|
4500
|
+
queryStr += rule.field + ' ' + ruleOpertor;
|
|
4468
4501
|
}
|
|
4469
4502
|
else {
|
|
4470
|
-
if (
|
|
4471
|
-
rule.field = '
|
|
4503
|
+
if (enableEscape) {
|
|
4504
|
+
rule.field = '`' + rule.field + '`';
|
|
4472
4505
|
}
|
|
4473
|
-
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
|
|
4477
|
-
if (enableEscape) {
|
|
4478
|
-
rule.field = '`' + rule.field + '`';
|
|
4479
|
-
}
|
|
4480
|
-
else {
|
|
4481
|
-
if (rule.field.indexOf(' ') > -1) {
|
|
4482
|
-
rule.field = '"' + rule.field + '"';
|
|
4506
|
+
else {
|
|
4507
|
+
if (rule.field.indexOf(' ') > -1) {
|
|
4508
|
+
rule.field = '"' + rule.field + '"';
|
|
4509
|
+
}
|
|
4483
4510
|
}
|
|
4511
|
+
queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;
|
|
4512
|
+
}
|
|
4513
|
+
if (rule.condition && rule.condition !== '') {
|
|
4514
|
+
condition = rule.condition;
|
|
4484
4515
|
}
|
|
4485
|
-
queryStr += rule.field + ' ' + this.operators[rule.operator] + ' ' + valueStr;
|
|
4486
|
-
}
|
|
4487
|
-
if (rule.condition && rule.condition !== '') {
|
|
4488
|
-
condition = rule.condition;
|
|
4489
4516
|
}
|
|
4490
|
-
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
4517
|
+
if (j !== jLen - 1) {
|
|
4518
|
+
if (condition === '') {
|
|
4519
|
+
condition = rules.rules[j].condition;
|
|
4520
|
+
}
|
|
4521
|
+
condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
|
|
4522
|
+
queryStr += ' ' + condition + ' ';
|
|
4494
4523
|
}
|
|
4495
|
-
queryStr += ' ' + condition.toUpperCase() + ' ';
|
|
4496
4524
|
}
|
|
4497
4525
|
}
|
|
4498
4526
|
if (!isRoot) {
|
|
@@ -4507,24 +4535,26 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4507
4535
|
* Sets the rules from the sql query.
|
|
4508
4536
|
*
|
|
4509
4537
|
* @param {string} sqlString - 'sql String' to be passed to set the rule.
|
|
4538
|
+
* @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
|
|
4510
4539
|
* @returns {void}
|
|
4511
4540
|
*/
|
|
4512
|
-
QueryBuilder.prototype.setRulesFromSql = function (sqlString) {
|
|
4541
|
+
QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {
|
|
4513
4542
|
sqlString = sqlString.replace(/`/g, '');
|
|
4514
|
-
var ruleModel = this.getRulesFromSql(sqlString);
|
|
4543
|
+
var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);
|
|
4515
4544
|
this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });
|
|
4516
4545
|
};
|
|
4517
4546
|
/**
|
|
4518
4547
|
* Get the rules from SQL query.
|
|
4519
4548
|
*
|
|
4520
4549
|
* @param {string} sqlString - 'sql String' to be passed to get the rule.
|
|
4550
|
+
* @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
|
|
4521
4551
|
* @returns {object} - Rules from SQL query
|
|
4522
4552
|
*/
|
|
4523
|
-
QueryBuilder.prototype.getRulesFromSql = function (sqlString) {
|
|
4553
|
+
QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {
|
|
4524
4554
|
this.parser = [];
|
|
4525
|
-
this.sqlParser(sqlString);
|
|
4555
|
+
this.sqlParser(sqlString, sqlLocale);
|
|
4526
4556
|
this.rule = { condition: 'and', not: false, rules: [] };
|
|
4527
|
-
var rule = this.processParser(this.parser, this.rule, [0]);
|
|
4557
|
+
var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);
|
|
4528
4558
|
if (this.enableNotCondition) {
|
|
4529
4559
|
return { condition: rule.condition, not: rule.not, rules: rule.rules };
|
|
4530
4560
|
}
|
|
@@ -4537,33 +4567,51 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4537
4567
|
*
|
|
4538
4568
|
* @param {RuleModel} rule - 'rule' to be passed to get the sql.
|
|
4539
4569
|
* @param {boolean} allowEscape - Set `true` if it exclude the escape character.
|
|
4570
|
+
* @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
|
|
4540
4571
|
* @returns {object} - Sql query from rules.
|
|
4541
4572
|
*/
|
|
4542
|
-
QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape) {
|
|
4573
|
+
QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {
|
|
4543
4574
|
if (!rule) {
|
|
4544
4575
|
rule = this.getValidRules();
|
|
4545
4576
|
}
|
|
4546
4577
|
rule = this.getRuleCollection(rule, false);
|
|
4547
|
-
return this.getSqlString(this.getValidRules(rule), allowEscape).replace(/"/g, '\'');
|
|
4578
|
+
return this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/"/g, '\'');
|
|
4548
4579
|
};
|
|
4549
|
-
QueryBuilder.prototype.sqlParser = function (sqlString) {
|
|
4580
|
+
QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {
|
|
4550
4581
|
var st = 0;
|
|
4551
4582
|
var str;
|
|
4552
4583
|
do {
|
|
4553
4584
|
str = sqlString.slice(st);
|
|
4554
|
-
st += this.parseSqlStrings(str);
|
|
4585
|
+
st += this.parseSqlStrings(str, sqlLocale);
|
|
4555
4586
|
} while (str !== '');
|
|
4556
4587
|
return this.parser;
|
|
4557
4588
|
};
|
|
4558
|
-
QueryBuilder.prototype.parseSqlStrings = function (sqlString) {
|
|
4589
|
+
QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {
|
|
4559
4590
|
var operators = ['=', '!=', '<=', '>=', '<', '>'];
|
|
4560
|
-
var conditions
|
|
4561
|
-
|
|
4591
|
+
var conditions;
|
|
4592
|
+
if (sqlLocale) {
|
|
4593
|
+
conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];
|
|
4594
|
+
}
|
|
4595
|
+
else {
|
|
4596
|
+
conditions = ['AND', 'OR', 'NOT'];
|
|
4597
|
+
}
|
|
4598
|
+
var subOp;
|
|
4599
|
+
if (sqlLocale) {
|
|
4600
|
+
subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),
|
|
4601
|
+
this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),
|
|
4602
|
+
this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),
|
|
4603
|
+
this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),
|
|
4604
|
+
this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];
|
|
4605
|
+
}
|
|
4606
|
+
else {
|
|
4607
|
+
subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];
|
|
4608
|
+
}
|
|
4562
4609
|
var regexStr;
|
|
4563
4610
|
var regex;
|
|
4564
4611
|
var matchValue;
|
|
4565
4612
|
for (var i = 0, iLen = operators.length; i < iLen; i++) {
|
|
4566
4613
|
regexStr = /^\w+$/.test(operators[i]) ? '\\b' : '';
|
|
4614
|
+
// eslint-disable-next-line
|
|
4567
4615
|
regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');
|
|
4568
4616
|
if (regex.exec(sqlString)) {
|
|
4569
4617
|
this.parser.push(['Operators', operators[i].toLowerCase()]);
|
|
@@ -4574,6 +4622,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4574
4622
|
if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {
|
|
4575
4623
|
for (var i = 0, iLen = conditions.length; i < iLen; i++) {
|
|
4576
4624
|
regexStr = /^\w+$/.test(conditions[i]) ? '\\b' : '';
|
|
4625
|
+
// eslint-disable-next-line
|
|
4577
4626
|
regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');
|
|
4578
4627
|
if (regex.exec(sqlString)) {
|
|
4579
4628
|
this.parser.push(['Conditions', conditions[i].toLowerCase()]);
|
|
@@ -4583,6 +4632,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4583
4632
|
}
|
|
4584
4633
|
for (var i = 0, iLen = subOp.length; i < iLen; i++) {
|
|
4585
4634
|
regexStr = /^\w+$/.test(subOp[i]) ? '\\b' : '';
|
|
4635
|
+
// eslint-disable-next-line
|
|
4586
4636
|
regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');
|
|
4587
4637
|
if (regex.exec(sqlString)) {
|
|
4588
4638
|
this.parser.push(['SubOperators', subOp[i].toLowerCase()]);
|
|
@@ -4625,31 +4675,40 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4625
4675
|
this.parser.push(['Literal', matchValue]);
|
|
4626
4676
|
return matchValue.length + 2;
|
|
4627
4677
|
}
|
|
4628
|
-
if (this.checkNumberLiteral(sqlString)) {
|
|
4678
|
+
if (this.checkNumberLiteral(sqlString, sqlLocale)) {
|
|
4679
|
+
// eslint-disable-next-line
|
|
4629
4680
|
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4630
4681
|
this.parser.push(['Literal', matchValue]);
|
|
4631
4682
|
return matchValue.length;
|
|
4632
4683
|
}
|
|
4633
4684
|
//String
|
|
4685
|
+
// eslint-disable-next-line
|
|
4634
4686
|
if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
|
|
4687
|
+
// eslint-disable-next-line
|
|
4635
4688
|
matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
|
|
4636
4689
|
this.parser.push(['String', matchValue]);
|
|
4637
4690
|
return matchValue.length;
|
|
4638
4691
|
}
|
|
4639
4692
|
//Double String
|
|
4693
|
+
// eslint-disable-next-line
|
|
4640
4694
|
if (/^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)) {
|
|
4695
|
+
// eslint-disable-next-line
|
|
4641
4696
|
matchValue = /^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)[0];
|
|
4642
4697
|
this.parser.push(['DoubleString', matchValue]);
|
|
4643
4698
|
return matchValue.length;
|
|
4644
4699
|
}
|
|
4645
4700
|
//Number
|
|
4701
|
+
// eslint-disable-next-line
|
|
4646
4702
|
if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4703
|
+
// eslint-disable-next-line
|
|
4647
4704
|
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4648
4705
|
this.parser.push(['Number', matchValue]);
|
|
4649
4706
|
return matchValue.length;
|
|
4650
4707
|
}
|
|
4651
4708
|
//Negative Number
|
|
4709
|
+
// eslint-disable-next-line
|
|
4652
4710
|
if (/^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4711
|
+
// eslint-disable-next-line
|
|
4653
4712
|
matchValue = /^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4654
4713
|
this.parser.push(['Number', matchValue]);
|
|
4655
4714
|
return matchValue.length;
|
|
@@ -4669,31 +4728,51 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4669
4728
|
}
|
|
4670
4729
|
return false;
|
|
4671
4730
|
};
|
|
4672
|
-
QueryBuilder.prototype.checkNumberLiteral = function (sqlString) {
|
|
4731
|
+
QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {
|
|
4673
4732
|
var lastParser = this.parser[this.parser.length - 1];
|
|
4674
4733
|
if (!lastParser) {
|
|
4675
4734
|
return true;
|
|
4676
4735
|
}
|
|
4677
4736
|
else {
|
|
4737
|
+
// eslint-disable-next-line
|
|
4678
4738
|
if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4679
4739
|
var secParser = this.parser[this.parser.length - 2];
|
|
4680
4740
|
var betweenParser = this.parser[this.parser.length - 3];
|
|
4681
4741
|
if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
|
|
4682
4742
|
return true;
|
|
4683
4743
|
}
|
|
4684
|
-
|
|
4744
|
+
var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';
|
|
4745
|
+
if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {
|
|
4685
4746
|
return true;
|
|
4686
4747
|
}
|
|
4687
4748
|
}
|
|
4688
4749
|
}
|
|
4689
4750
|
return false;
|
|
4690
4751
|
};
|
|
4691
|
-
QueryBuilder.prototype.getOperator = function (value, operator) {
|
|
4752
|
+
QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {
|
|
4692
4753
|
var operators = {
|
|
4693
4754
|
'=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',
|
|
4694
4755
|
'>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',
|
|
4695
4756
|
'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'
|
|
4696
4757
|
};
|
|
4758
|
+
if (sqlLocale) {
|
|
4759
|
+
var localeOperator = Object.keys(this.sqlOperators);
|
|
4760
|
+
for (var i = 0; i < localeOperator.length; i++) {
|
|
4761
|
+
if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {
|
|
4762
|
+
if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {
|
|
4763
|
+
return (localeOperator[i] === 'notcontains') ? 'notcontains' : 'contains';
|
|
4764
|
+
}
|
|
4765
|
+
else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {
|
|
4766
|
+
return (localeOperator[i] === 'notstartswith') ? 'notstartswith' : 'startswith';
|
|
4767
|
+
}
|
|
4768
|
+
else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {
|
|
4769
|
+
return (localeOperator[i] === 'notendswith') ? 'notendswith' : 'endswith';
|
|
4770
|
+
}
|
|
4771
|
+
return localeOperator[i];
|
|
4772
|
+
}
|
|
4773
|
+
}
|
|
4774
|
+
return null;
|
|
4775
|
+
}
|
|
4697
4776
|
if (value) {
|
|
4698
4777
|
if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {
|
|
4699
4778
|
return (operator === 'not like') ? 'notcontains' : 'contains';
|
|
@@ -4713,11 +4792,14 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4713
4792
|
return 'equal';
|
|
4714
4793
|
}
|
|
4715
4794
|
}
|
|
4716
|
-
return operators[operator];
|
|
4795
|
+
return operators["" + operator];
|
|
4717
4796
|
};
|
|
4718
4797
|
QueryBuilder.prototype.getTypeFromColumn = function (rules) {
|
|
4719
4798
|
var columnData = this.getColumn(rules.field);
|
|
4720
|
-
|
|
4799
|
+
if (!isNullOrUndefined(columnData)) {
|
|
4800
|
+
return columnData.type;
|
|
4801
|
+
}
|
|
4802
|
+
return null;
|
|
4721
4803
|
};
|
|
4722
4804
|
QueryBuilder.prototype.getLabelFromColumn = function (field) {
|
|
4723
4805
|
var label = '';
|
|
@@ -4750,7 +4832,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4750
4832
|
}
|
|
4751
4833
|
return this.getColumn(fieldName).label;
|
|
4752
4834
|
};
|
|
4753
|
-
QueryBuilder.prototype.processParser = function (parser, rules, levelColl) {
|
|
4835
|
+
QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {
|
|
4754
4836
|
var j;
|
|
4755
4837
|
var jLen;
|
|
4756
4838
|
var rule;
|
|
@@ -4769,18 +4851,27 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4769
4851
|
rule = { label: parser[i][1], field: parser[i][1] };
|
|
4770
4852
|
if (parser[i + 1][0] === 'SubOperators') {
|
|
4771
4853
|
if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {
|
|
4772
|
-
rule.operator = this.getOperator(' ', parser[i + 1][1]);
|
|
4854
|
+
rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);
|
|
4773
4855
|
rule.value = null;
|
|
4774
4856
|
rule.type = this.getTypeFromColumn(rule);
|
|
4775
4857
|
}
|
|
4776
4858
|
else {
|
|
4777
4859
|
var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];
|
|
4778
|
-
rule.operator = this.getOperator(oper, parser[i + 1][1]);
|
|
4860
|
+
rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);
|
|
4779
4861
|
}
|
|
4780
4862
|
operator = parser[i + 1][1];
|
|
4781
4863
|
i++;
|
|
4782
4864
|
j = i + 1;
|
|
4783
4865
|
jLen = iLen;
|
|
4866
|
+
if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {
|
|
4867
|
+
operator = 'like';
|
|
4868
|
+
}
|
|
4869
|
+
else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {
|
|
4870
|
+
operator = 'not like';
|
|
4871
|
+
}
|
|
4872
|
+
else if (sqlLocale) {
|
|
4873
|
+
operator = rule.operator;
|
|
4874
|
+
}
|
|
4784
4875
|
for (j = i + 1; j < jLen; j++) {
|
|
4785
4876
|
if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {
|
|
4786
4877
|
isLeftOpened = true;
|
|
@@ -4846,7 +4937,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4846
4937
|
}
|
|
4847
4938
|
}
|
|
4848
4939
|
else if (parser[i + 1][0] === 'Operators') {
|
|
4849
|
-
rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1]);
|
|
4940
|
+
rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);
|
|
4850
4941
|
if (parser[i + 2][0] === 'Number') {
|
|
4851
4942
|
rule.type = 'number';
|
|
4852
4943
|
rule.value = Number(parser[i + 2][1]);
|
|
@@ -4860,7 +4951,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4860
4951
|
rules.rules.push(rule);
|
|
4861
4952
|
}
|
|
4862
4953
|
else if (parser[i][0] === 'Left') {
|
|
4863
|
-
if (!(parser[0][0] === 'Left') && parser[i - 1][1] === 'not') {
|
|
4954
|
+
if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {
|
|
4864
4955
|
continue;
|
|
4865
4956
|
}
|
|
4866
4957
|
this.parser = parser.splice(i + 1, iLen - (i + 1));
|
|
@@ -4879,11 +4970,11 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4879
4970
|
}
|
|
4880
4971
|
levelColl.push(grpCount);
|
|
4881
4972
|
rules.rules.push(subRules);
|
|
4882
|
-
subRules = this.processParser(this.parser, subRules, levelColl);
|
|
4973
|
+
subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);
|
|
4883
4974
|
return rules;
|
|
4884
4975
|
}
|
|
4885
4976
|
else if (parser[i][0] === 'Conditions') {
|
|
4886
|
-
if (parser[i][1] === 'not') {
|
|
4977
|
+
if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {
|
|
4887
4978
|
rules.not = true;
|
|
4888
4979
|
}
|
|
4889
4980
|
else {
|
|
@@ -4898,7 +4989,7 @@ var QueryBuilder = /** @__PURE__ @class */ (function (_super) {
|
|
|
4898
4989
|
for (l = 0; l < lLen; l++) {
|
|
4899
4990
|
rules = this.findGroupByIdx(levelColl[l], rules, l === 0);
|
|
4900
4991
|
}
|
|
4901
|
-
return this.processParser(this.parser, rules, levelColl);
|
|
4992
|
+
return this.processParser(this.parser, rules, levelColl, sqlLocale);
|
|
4902
4993
|
}
|
|
4903
4994
|
}
|
|
4904
4995
|
return rules;
|