@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
|
@@ -392,7 +392,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
392
392
|
if (sqlIdx > -1) {
|
|
393
393
|
var operator_1 = column.operators[j];
|
|
394
394
|
var operColl = Object.keys(operator_1);
|
|
395
|
-
var values = operColl.map(function (key) { return operator_1[key]; }).join(',').split(',');
|
|
395
|
+
var values = operColl.map(function (key) { return operator_1["" + key]; }).join(',').split(',');
|
|
396
396
|
var valueIdx = operColl.indexOf('value');
|
|
397
397
|
this_1.operators[values[valueIdx]] = values[sqlIdx];
|
|
398
398
|
}
|
|
@@ -789,6 +789,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
789
789
|
var tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'),
|
|
790
790
|
position: 'BottomCenter', cssClass: 'e-querybuilder-error' });
|
|
791
791
|
tooltip.appendTo(element);
|
|
792
|
+
// eslint-disable-next-line
|
|
792
793
|
tooltip.open(element);
|
|
793
794
|
};
|
|
794
795
|
/**
|
|
@@ -846,8 +847,9 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
846
847
|
if (rule.rules[index].value instanceof Array) {
|
|
847
848
|
valArray = rule.rules[index].value;
|
|
848
849
|
}
|
|
849
|
-
if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&
|
|
850
|
-
rule.rules[index].
|
|
850
|
+
if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&
|
|
851
|
+
(isNullOrUndefined(rule.rules[index].value) &&
|
|
852
|
+
rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||
|
|
851
853
|
(rule.rules[index].value instanceof Array && valArray.length < 1)) {
|
|
852
854
|
var valElem = tempElem.querySelectorAll('.e-rule-value .e-control');
|
|
853
855
|
isValid = false;
|
|
@@ -925,7 +927,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
925
927
|
groupElem.appendChild(grpBodyElem);
|
|
926
928
|
// create button group in OR and AND process
|
|
927
929
|
if (!this.headerTemplate) {
|
|
928
|
-
glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group' } });
|
|
930
|
+
glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });
|
|
929
931
|
if (this.enableNotCondition) {
|
|
930
932
|
inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
|
|
931
933
|
glueElem.appendChild(inputElem);
|
|
@@ -1809,29 +1811,29 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
1809
1811
|
for (var j = 0, jLen = fieldColl.length; j < jLen; j++) {
|
|
1810
1812
|
fieldStr = fieldColl[j];
|
|
1811
1813
|
if (fieldColl.length === (j + 1)) {
|
|
1812
|
-
value = dataObj[fieldStr];
|
|
1813
|
-
if (Number(dataObj[fieldStr]) === dataObj[fieldStr] && dataObj[fieldStr] % 1 !== 0) {
|
|
1814
|
-
value = dataObj[fieldStr].toString();
|
|
1814
|
+
value = dataObj["" + fieldStr];
|
|
1815
|
+
if (Number(dataObj["" + fieldStr]) === dataObj["" + fieldStr] && dataObj["" + fieldStr] % 1 !== 0) {
|
|
1816
|
+
value = dataObj["" + fieldStr].toString();
|
|
1815
1817
|
}
|
|
1816
1818
|
}
|
|
1817
1819
|
else {
|
|
1818
|
-
dataObj = dataObj[fieldStr];
|
|
1820
|
+
dataObj = dataObj["" + fieldStr];
|
|
1819
1821
|
}
|
|
1820
1822
|
}
|
|
1821
1823
|
}
|
|
1822
1824
|
else {
|
|
1823
|
-
value = dataSource[i][field];
|
|
1824
|
-
if (Number(dataSource[i][field]) === dataSource[i][field] && dataSource[i][field] % 1 !== 0) {
|
|
1825
|
-
value = dataSource[i][field].toString();
|
|
1825
|
+
value = dataSource[i]["" + field];
|
|
1826
|
+
if (Number(dataSource[i]["" + field]) === dataSource[i]["" + field] && dataSource[i]["" + field] % 1 !== 0) {
|
|
1827
|
+
value = dataSource[i]["" + field].toString();
|
|
1826
1828
|
}
|
|
1827
1829
|
}
|
|
1828
1830
|
if (!(value in original)) {
|
|
1829
|
-
original[value] = 1;
|
|
1831
|
+
original["" + value] = 1;
|
|
1830
1832
|
if (fieldColl.length > 1) {
|
|
1831
1833
|
this.createNestedObject(data, fieldColl, value);
|
|
1832
1834
|
}
|
|
1833
1835
|
else {
|
|
1834
|
-
data[field] = value;
|
|
1836
|
+
data["" + field] = value;
|
|
1835
1837
|
}
|
|
1836
1838
|
result.push(data);
|
|
1837
1839
|
}
|
|
@@ -1845,9 +1847,9 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
1845
1847
|
for (var k = 0; k < lastIndex; ++k) {
|
|
1846
1848
|
key = fieldColl[k];
|
|
1847
1849
|
if (!(key in obj)) {
|
|
1848
|
-
obj[key] = {};
|
|
1850
|
+
obj["" + key] = {};
|
|
1849
1851
|
}
|
|
1850
|
-
obj = obj[key];
|
|
1852
|
+
obj = obj["" + key];
|
|
1851
1853
|
}
|
|
1852
1854
|
obj[fieldColl[lastIndex]] = value;
|
|
1853
1855
|
};
|
|
@@ -1859,28 +1861,28 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
1859
1861
|
var isNested = field.indexOf(this.separator);
|
|
1860
1862
|
var _loop_2 = function (i, iLen) {
|
|
1861
1863
|
if (isNested === 0) {
|
|
1862
|
-
value = dataSource[i][field];
|
|
1864
|
+
value = dataSource[i]["" + field];
|
|
1863
1865
|
}
|
|
1864
1866
|
else {
|
|
1865
1867
|
nest = field.split(this_2.separator);
|
|
1866
1868
|
// eslint-disable-next-line @typescript-eslint/tslint/config
|
|
1867
1869
|
nest.forEach(function (element) {
|
|
1868
1870
|
if (value) {
|
|
1869
|
-
value = value[element];
|
|
1871
|
+
value = value["" + element];
|
|
1870
1872
|
}
|
|
1871
1873
|
else {
|
|
1872
|
-
value = dataSource[i][element];
|
|
1874
|
+
value = dataSource[i]["" + element];
|
|
1873
1875
|
}
|
|
1874
1876
|
});
|
|
1875
1877
|
}
|
|
1876
|
-
if (Number(dataSource[i][field]) === dataSource[i][field] && dataSource[i][field] % 1 !== 0) {
|
|
1877
|
-
value = dataSource[i][field].toString();
|
|
1878
|
+
if (Number(dataSource[i]["" + field]) === dataSource[i]["" + field] && dataSource[i]["" + field] % 1 !== 0) {
|
|
1879
|
+
value = dataSource[i]["" + field].toString();
|
|
1878
1880
|
}
|
|
1879
1881
|
var data = {};
|
|
1880
1882
|
if (!(value in original)) {
|
|
1881
|
-
original[value] = 1;
|
|
1883
|
+
original["" + value] = 1;
|
|
1882
1884
|
if (isNested === 0) {
|
|
1883
|
-
data[field] = value;
|
|
1885
|
+
data["" + field] = value;
|
|
1884
1886
|
}
|
|
1885
1887
|
else {
|
|
1886
1888
|
data[nest[nest.length - 1]] = value;
|
|
@@ -2628,7 +2630,8 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
2628
2630
|
var column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])
|
|
2629
2631
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2630
2632
|
: this.getColumn(dropDownObj.value);
|
|
2631
|
-
if (!this.isImportRules && rule.rules[index].field &&
|
|
2633
|
+
if (!this.isImportRules && rule.rules[index].field &&
|
|
2634
|
+
rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {
|
|
2632
2635
|
if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)
|
|
2633
2636
|
|| (operator.indexOf('empty') > -1)) {
|
|
2634
2637
|
rule.rules[index].value = '';
|
|
@@ -3236,6 +3239,8 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
3236
3239
|
StartsWith: 'Starts With',
|
|
3237
3240
|
EndsWith: 'Ends With',
|
|
3238
3241
|
Contains: 'Contains',
|
|
3242
|
+
NotLike: 'Not Like',
|
|
3243
|
+
Like: 'Like',
|
|
3239
3244
|
Equal: 'Equal',
|
|
3240
3245
|
NotEqual: 'Not Equal',
|
|
3241
3246
|
LessThan: 'Less Than',
|
|
@@ -3320,6 +3325,16 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
3320
3325
|
isnull: 'IS NULL', isnotnull: 'IS NOT NULL', isempty: 'IS EMPTY', isnotempty: 'IS NOT EMPTY', notstartswith: 'NOT LIKE',
|
|
3321
3326
|
notendswith: 'NOT LIKE', notcontains: 'NOT LIKE'
|
|
3322
3327
|
};
|
|
3328
|
+
this.sqlOperators = {
|
|
3329
|
+
equal: '=', notequal: '!=', greaterthan: '>', greaterthanorequal: '>=', lessthan: '<', in: this.l10n.getConstant('In').toUpperCase(),
|
|
3330
|
+
notin: this.l10n.getConstant('NotIn').toUpperCase(), lessthanorequal: '<=', startswith: this.l10n.getConstant('Like').toUpperCase(),
|
|
3331
|
+
endswith: this.l10n.getConstant('Like').toUpperCase(), between: this.l10n.getConstant('Between').toUpperCase(),
|
|
3332
|
+
notbetween: this.l10n.getConstant('NotBetween').toUpperCase(), contains: this.l10n.getConstant('Like').toUpperCase(),
|
|
3333
|
+
isnull: this.l10n.getConstant('IsNull').toUpperCase(), isnotnull: this.l10n.getConstant('IsNotNull').toUpperCase(),
|
|
3334
|
+
isempty: this.l10n.getConstant('IsEmpty').toUpperCase(), isnotempty: this.l10n.getConstant('IsNotEmpty').toUpperCase(),
|
|
3335
|
+
notstartswith: this.l10n.getConstant('NotLike').toUpperCase(), notendswith: this.l10n.getConstant('NotLike').toUpperCase(),
|
|
3336
|
+
notcontains: this.l10n.getConstant('NotLike').toUpperCase()
|
|
3337
|
+
};
|
|
3323
3338
|
if (!this.fields) {
|
|
3324
3339
|
this.fields = { text: 'label', value: 'field' };
|
|
3325
3340
|
}
|
|
@@ -3411,7 +3426,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
3411
3426
|
EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);
|
|
3412
3427
|
};
|
|
3413
3428
|
QueryBuilder.prototype.getParentGroup = function (target, isParent) {
|
|
3414
|
-
var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[target];
|
|
3429
|
+
var groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl["" + target];
|
|
3415
3430
|
var len = isParent ? groupLevel.length - 1 : groupLevel.length;
|
|
3416
3431
|
var rule = this.rule;
|
|
3417
3432
|
for (var i = 0; i < len; i++) {
|
|
@@ -3573,6 +3588,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
3573
3588
|
err = [];
|
|
3574
3589
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3575
3590
|
var error = 'error';
|
|
3591
|
+
// eslint-disable-next-line
|
|
3576
3592
|
err[error] = error;
|
|
3577
3593
|
}
|
|
3578
3594
|
// eslint-enable
|
|
@@ -3734,6 +3750,9 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
3734
3750
|
else {
|
|
3735
3751
|
rule = { 'condition': rule.condition, 'rules': rule.rules };
|
|
3736
3752
|
}
|
|
3753
|
+
if (rule.rules.length === 0) {
|
|
3754
|
+
rule = {};
|
|
3755
|
+
}
|
|
3737
3756
|
}
|
|
3738
3757
|
}
|
|
3739
3758
|
return rule;
|
|
@@ -3942,7 +3961,8 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
3942
3961
|
if (i === 0) {
|
|
3943
3962
|
if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||
|
|
3944
3963
|
oper.indexOf('empty') > -1) && oper.indexOf('contains') < 0) {
|
|
3945
|
-
pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :
|
|
3964
|
+
pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :
|
|
3965
|
+
this.arrayPredicate(ruleColl[i]);
|
|
3946
3966
|
}
|
|
3947
3967
|
else {
|
|
3948
3968
|
var value = ruleValue;
|
|
@@ -4405,7 +4425,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4405
4425
|
}
|
|
4406
4426
|
return false;
|
|
4407
4427
|
};
|
|
4408
|
-
QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr) {
|
|
4428
|
+
QueryBuilder.prototype.getSqlString = function (rules, enableEscape, queryStr, sqlLocale) {
|
|
4409
4429
|
var isRoot = false;
|
|
4410
4430
|
if (!queryStr && queryStr !== '') {
|
|
4411
4431
|
queryStr = '';
|
|
@@ -4416,92 +4436,100 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4416
4436
|
}
|
|
4417
4437
|
var condition = rules.condition;
|
|
4418
4438
|
if (rules.not) {
|
|
4439
|
+
var rulesNotCondition = void 0;
|
|
4419
4440
|
if (isRoot) {
|
|
4420
|
-
|
|
4441
|
+
rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';
|
|
4442
|
+
queryStr += rulesNotCondition;
|
|
4421
4443
|
}
|
|
4422
4444
|
else {
|
|
4423
|
-
|
|
4445
|
+
rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';
|
|
4446
|
+
queryStr += rulesNotCondition;
|
|
4424
4447
|
}
|
|
4425
4448
|
}
|
|
4426
|
-
|
|
4427
|
-
|
|
4428
|
-
|
|
4429
|
-
|
|
4430
|
-
|
|
4431
|
-
|
|
4432
|
-
|
|
4433
|
-
|
|
4434
|
-
|
|
4435
|
-
|
|
4436
|
-
|
|
4449
|
+
if (rules.rules) {
|
|
4450
|
+
for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {
|
|
4451
|
+
if (rules.rules[j].rules) {
|
|
4452
|
+
queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);
|
|
4453
|
+
}
|
|
4454
|
+
else {
|
|
4455
|
+
var rule = rules.rules[j];
|
|
4456
|
+
var valueStr = '';
|
|
4457
|
+
var ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];
|
|
4458
|
+
if (rule.value instanceof Array) {
|
|
4459
|
+
if (rule.operator.toString().indexOf('between') > -1) {
|
|
4460
|
+
var ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';
|
|
4461
|
+
if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {
|
|
4462
|
+
valueStr += '"' + rule.value[0] + '"' + ruleCondition + '"' + rule.value[1] + '"';
|
|
4463
|
+
}
|
|
4464
|
+
else {
|
|
4465
|
+
valueStr += rule.value[0] + ruleCondition + rule.value[1];
|
|
4466
|
+
}
|
|
4437
4467
|
}
|
|
4438
4468
|
else {
|
|
4439
|
-
|
|
4469
|
+
if (typeof rule.value[0] === 'string' && rule.value !== null) {
|
|
4470
|
+
valueStr += '("' + rule.value[0] + '"';
|
|
4471
|
+
for (var k = 1, kLen = rule.value.length; k < kLen; k++) {
|
|
4472
|
+
valueStr += ',"' + rule.value[k] + '"';
|
|
4473
|
+
}
|
|
4474
|
+
valueStr += ')';
|
|
4475
|
+
}
|
|
4476
|
+
else {
|
|
4477
|
+
valueStr += '(' + rule.value + ')';
|
|
4478
|
+
}
|
|
4440
4479
|
}
|
|
4441
4480
|
}
|
|
4442
4481
|
else {
|
|
4443
|
-
if (
|
|
4444
|
-
valueStr += '("' + rule.value
|
|
4445
|
-
|
|
4446
|
-
|
|
4447
|
-
|
|
4448
|
-
|
|
4482
|
+
if (rule.operator.toString().indexOf('startswith') > -1) {
|
|
4483
|
+
valueStr += rule.value ? '("' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4484
|
+
}
|
|
4485
|
+
else if (rule.operator.toString().indexOf('endswith') > -1) {
|
|
4486
|
+
valueStr += rule.value ? '("%' + rule.value + '")' : '(' + rule.value + ')';
|
|
4487
|
+
}
|
|
4488
|
+
else if (rule.operator.toString().indexOf('contains') > -1) {
|
|
4489
|
+
valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4449
4490
|
}
|
|
4450
4491
|
else {
|
|
4451
|
-
|
|
4492
|
+
if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {
|
|
4493
|
+
valueStr += rule.value;
|
|
4494
|
+
}
|
|
4495
|
+
else {
|
|
4496
|
+
valueStr += '"' + rule.value + '"';
|
|
4497
|
+
}
|
|
4452
4498
|
}
|
|
4453
4499
|
}
|
|
4454
|
-
|
|
4455
|
-
|
|
4456
|
-
|
|
4457
|
-
valueStr += rule.value ? '("' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4458
|
-
}
|
|
4459
|
-
else if (rule.operator.toString().indexOf('endswith') > -1) {
|
|
4460
|
-
valueStr += rule.value ? '("%' + rule.value + '")' : '(' + rule.value + ')';
|
|
4461
|
-
}
|
|
4462
|
-
else if (rule.operator.toString().indexOf('contains') > -1) {
|
|
4463
|
-
valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4464
|
-
}
|
|
4465
|
-
else {
|
|
4466
|
-
if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {
|
|
4467
|
-
valueStr += rule.value;
|
|
4500
|
+
if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {
|
|
4501
|
+
if (enableEscape) {
|
|
4502
|
+
rule.field = '`' + rule.field + '`';
|
|
4468
4503
|
}
|
|
4469
4504
|
else {
|
|
4470
|
-
|
|
4505
|
+
if (rule.field.indexOf(' ') > -1) {
|
|
4506
|
+
rule.field = '"' + rule.field + '"';
|
|
4507
|
+
}
|
|
4471
4508
|
}
|
|
4472
|
-
|
|
4473
|
-
}
|
|
4474
|
-
if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {
|
|
4475
|
-
if (enableEscape) {
|
|
4476
|
-
rule.field = '`' + rule.field + '`';
|
|
4509
|
+
queryStr += rule.field + ' ' + ruleOpertor;
|
|
4477
4510
|
}
|
|
4478
4511
|
else {
|
|
4479
|
-
if (
|
|
4480
|
-
rule.field = '
|
|
4512
|
+
if (enableEscape) {
|
|
4513
|
+
rule.field = '`' + rule.field + '`';
|
|
4481
4514
|
}
|
|
4482
|
-
|
|
4483
|
-
|
|
4484
|
-
|
|
4485
|
-
|
|
4486
|
-
if (enableEscape) {
|
|
4487
|
-
rule.field = '`' + rule.field + '`';
|
|
4488
|
-
}
|
|
4489
|
-
else {
|
|
4490
|
-
if (rule.field.indexOf(' ') > -1) {
|
|
4491
|
-
rule.field = '"' + rule.field + '"';
|
|
4515
|
+
else {
|
|
4516
|
+
if (rule.field.indexOf(' ') > -1) {
|
|
4517
|
+
rule.field = '"' + rule.field + '"';
|
|
4518
|
+
}
|
|
4492
4519
|
}
|
|
4520
|
+
queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;
|
|
4521
|
+
}
|
|
4522
|
+
if (rule.condition && rule.condition !== '') {
|
|
4523
|
+
condition = rule.condition;
|
|
4493
4524
|
}
|
|
4494
|
-
queryStr += rule.field + ' ' + this.operators[rule.operator] + ' ' + valueStr;
|
|
4495
|
-
}
|
|
4496
|
-
if (rule.condition && rule.condition !== '') {
|
|
4497
|
-
condition = rule.condition;
|
|
4498
4525
|
}
|
|
4499
|
-
|
|
4500
|
-
|
|
4501
|
-
|
|
4502
|
-
|
|
4526
|
+
if (j !== jLen - 1) {
|
|
4527
|
+
if (condition === '') {
|
|
4528
|
+
condition = rules.rules[j].condition;
|
|
4529
|
+
}
|
|
4530
|
+
condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
|
|
4531
|
+
queryStr += ' ' + condition + ' ';
|
|
4503
4532
|
}
|
|
4504
|
-
queryStr += ' ' + condition.toUpperCase() + ' ';
|
|
4505
4533
|
}
|
|
4506
4534
|
}
|
|
4507
4535
|
if (!isRoot) {
|
|
@@ -4516,24 +4544,26 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4516
4544
|
* Sets the rules from the sql query.
|
|
4517
4545
|
*
|
|
4518
4546
|
* @param {string} sqlString - 'sql String' to be passed to set the rule.
|
|
4547
|
+
* @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
|
|
4519
4548
|
* @returns {void}
|
|
4520
4549
|
*/
|
|
4521
|
-
QueryBuilder.prototype.setRulesFromSql = function (sqlString) {
|
|
4550
|
+
QueryBuilder.prototype.setRulesFromSql = function (sqlString, sqlLocale) {
|
|
4522
4551
|
sqlString = sqlString.replace(/`/g, '');
|
|
4523
|
-
var ruleModel = this.getRulesFromSql(sqlString);
|
|
4552
|
+
var ruleModel = this.getRulesFromSql(sqlString, sqlLocale);
|
|
4524
4553
|
this.setRules({ condition: ruleModel.condition, not: ruleModel.not, rules: ruleModel.rules });
|
|
4525
4554
|
};
|
|
4526
4555
|
/**
|
|
4527
4556
|
* Get the rules from SQL query.
|
|
4528
4557
|
*
|
|
4529
4558
|
* @param {string} sqlString - 'sql String' to be passed to get the rule.
|
|
4559
|
+
* @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
|
|
4530
4560
|
* @returns {object} - Rules from SQL query
|
|
4531
4561
|
*/
|
|
4532
|
-
QueryBuilder.prototype.getRulesFromSql = function (sqlString) {
|
|
4562
|
+
QueryBuilder.prototype.getRulesFromSql = function (sqlString, sqlLocale) {
|
|
4533
4563
|
this.parser = [];
|
|
4534
|
-
this.sqlParser(sqlString);
|
|
4564
|
+
this.sqlParser(sqlString, sqlLocale);
|
|
4535
4565
|
this.rule = { condition: 'and', not: false, rules: [] };
|
|
4536
|
-
var rule = this.processParser(this.parser, this.rule, [0]);
|
|
4566
|
+
var rule = this.processParser(this.parser, this.rule, [0], sqlLocale);
|
|
4537
4567
|
if (this.enableNotCondition) {
|
|
4538
4568
|
return { condition: rule.condition, not: rule.not, rules: rule.rules };
|
|
4539
4569
|
}
|
|
@@ -4546,33 +4576,51 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4546
4576
|
*
|
|
4547
4577
|
* @param {RuleModel} rule - 'rule' to be passed to get the sql.
|
|
4548
4578
|
* @param {boolean} allowEscape - Set `true` if it exclude the escape character.
|
|
4579
|
+
* @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
|
|
4549
4580
|
* @returns {object} - Sql query from rules.
|
|
4550
4581
|
*/
|
|
4551
|
-
QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape) {
|
|
4582
|
+
QueryBuilder.prototype.getSqlFromRules = function (rule, allowEscape, sqlLocale) {
|
|
4552
4583
|
if (!rule) {
|
|
4553
4584
|
rule = this.getValidRules();
|
|
4554
4585
|
}
|
|
4555
4586
|
rule = this.getRuleCollection(rule, false);
|
|
4556
|
-
return this.getSqlString(this.getValidRules(rule), allowEscape).replace(/"/g, '\'');
|
|
4587
|
+
return this.getSqlString(this.getValidRules(rule), allowEscape, null, sqlLocale).replace(/"/g, '\'');
|
|
4557
4588
|
};
|
|
4558
|
-
QueryBuilder.prototype.sqlParser = function (sqlString) {
|
|
4589
|
+
QueryBuilder.prototype.sqlParser = function (sqlString, sqlLocale) {
|
|
4559
4590
|
var st = 0;
|
|
4560
4591
|
var str;
|
|
4561
4592
|
do {
|
|
4562
4593
|
str = sqlString.slice(st);
|
|
4563
|
-
st += this.parseSqlStrings(str);
|
|
4594
|
+
st += this.parseSqlStrings(str, sqlLocale);
|
|
4564
4595
|
} while (str !== '');
|
|
4565
4596
|
return this.parser;
|
|
4566
4597
|
};
|
|
4567
|
-
QueryBuilder.prototype.parseSqlStrings = function (sqlString) {
|
|
4598
|
+
QueryBuilder.prototype.parseSqlStrings = function (sqlString, sqlLocale) {
|
|
4568
4599
|
var operators = ['=', '!=', '<=', '>=', '<', '>'];
|
|
4569
|
-
var conditions
|
|
4570
|
-
|
|
4600
|
+
var conditions;
|
|
4601
|
+
if (sqlLocale) {
|
|
4602
|
+
conditions = [this.l10n.getConstant('AND').toUpperCase(), this.l10n.getConstant('OR').toUpperCase(), this.l10n.getConstant('NOT').toUpperCase()];
|
|
4603
|
+
}
|
|
4604
|
+
else {
|
|
4605
|
+
conditions = ['AND', 'OR', 'NOT'];
|
|
4606
|
+
}
|
|
4607
|
+
var subOp;
|
|
4608
|
+
if (sqlLocale) {
|
|
4609
|
+
subOp = [this.l10n.getConstant('In').toUpperCase(), this.l10n.getConstant('NotIn').toUpperCase(),
|
|
4610
|
+
this.l10n.getConstant('Like').toUpperCase(), this.l10n.getConstant('NotLike').toUpperCase(),
|
|
4611
|
+
this.l10n.getConstant('Between').toUpperCase(), this.l10n.getConstant('NotBetween').toUpperCase(),
|
|
4612
|
+
this.l10n.getConstant('IsNull').toUpperCase(), this.l10n.getConstant('IsNotNull').toUpperCase(),
|
|
4613
|
+
this.l10n.getConstant('IsEmpty').toUpperCase(), this.l10n.getConstant('IsNotEmpty').toUpperCase()];
|
|
4614
|
+
}
|
|
4615
|
+
else {
|
|
4616
|
+
subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];
|
|
4617
|
+
}
|
|
4571
4618
|
var regexStr;
|
|
4572
4619
|
var regex;
|
|
4573
4620
|
var matchValue;
|
|
4574
4621
|
for (var i = 0, iLen = operators.length; i < iLen; i++) {
|
|
4575
4622
|
regexStr = /^\w+$/.test(operators[i]) ? '\\b' : '';
|
|
4623
|
+
// eslint-disable-next-line
|
|
4576
4624
|
regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');
|
|
4577
4625
|
if (regex.exec(sqlString)) {
|
|
4578
4626
|
this.parser.push(['Operators', operators[i].toLowerCase()]);
|
|
@@ -4583,6 +4631,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4583
4631
|
if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {
|
|
4584
4632
|
for (var i = 0, iLen = conditions.length; i < iLen; i++) {
|
|
4585
4633
|
regexStr = /^\w+$/.test(conditions[i]) ? '\\b' : '';
|
|
4634
|
+
// eslint-disable-next-line
|
|
4586
4635
|
regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');
|
|
4587
4636
|
if (regex.exec(sqlString)) {
|
|
4588
4637
|
this.parser.push(['Conditions', conditions[i].toLowerCase()]);
|
|
@@ -4592,6 +4641,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4592
4641
|
}
|
|
4593
4642
|
for (var i = 0, iLen = subOp.length; i < iLen; i++) {
|
|
4594
4643
|
regexStr = /^\w+$/.test(subOp[i]) ? '\\b' : '';
|
|
4644
|
+
// eslint-disable-next-line
|
|
4595
4645
|
regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');
|
|
4596
4646
|
if (regex.exec(sqlString)) {
|
|
4597
4647
|
this.parser.push(['SubOperators', subOp[i].toLowerCase()]);
|
|
@@ -4634,31 +4684,40 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4634
4684
|
this.parser.push(['Literal', matchValue]);
|
|
4635
4685
|
return matchValue.length + 2;
|
|
4636
4686
|
}
|
|
4637
|
-
if (this.checkNumberLiteral(sqlString)) {
|
|
4687
|
+
if (this.checkNumberLiteral(sqlString, sqlLocale)) {
|
|
4688
|
+
// eslint-disable-next-line
|
|
4638
4689
|
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4639
4690
|
this.parser.push(['Literal', matchValue]);
|
|
4640
4691
|
return matchValue.length;
|
|
4641
4692
|
}
|
|
4642
4693
|
//String
|
|
4694
|
+
// eslint-disable-next-line
|
|
4643
4695
|
if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
|
|
4696
|
+
// eslint-disable-next-line
|
|
4644
4697
|
matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
|
|
4645
4698
|
this.parser.push(['String', matchValue]);
|
|
4646
4699
|
return matchValue.length;
|
|
4647
4700
|
}
|
|
4648
4701
|
//Double String
|
|
4702
|
+
// eslint-disable-next-line
|
|
4649
4703
|
if (/^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)) {
|
|
4704
|
+
// eslint-disable-next-line
|
|
4650
4705
|
matchValue = /^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)[0];
|
|
4651
4706
|
this.parser.push(['DoubleString', matchValue]);
|
|
4652
4707
|
return matchValue.length;
|
|
4653
4708
|
}
|
|
4654
4709
|
//Number
|
|
4710
|
+
// eslint-disable-next-line
|
|
4655
4711
|
if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4712
|
+
// eslint-disable-next-line
|
|
4656
4713
|
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4657
4714
|
this.parser.push(['Number', matchValue]);
|
|
4658
4715
|
return matchValue.length;
|
|
4659
4716
|
}
|
|
4660
4717
|
//Negative Number
|
|
4718
|
+
// eslint-disable-next-line
|
|
4661
4719
|
if (/^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4720
|
+
// eslint-disable-next-line
|
|
4662
4721
|
matchValue = /^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4663
4722
|
this.parser.push(['Number', matchValue]);
|
|
4664
4723
|
return matchValue.length;
|
|
@@ -4678,31 +4737,51 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4678
4737
|
}
|
|
4679
4738
|
return false;
|
|
4680
4739
|
};
|
|
4681
|
-
QueryBuilder.prototype.checkNumberLiteral = function (sqlString) {
|
|
4740
|
+
QueryBuilder.prototype.checkNumberLiteral = function (sqlString, sqlLocale) {
|
|
4682
4741
|
var lastParser = this.parser[this.parser.length - 1];
|
|
4683
4742
|
if (!lastParser) {
|
|
4684
4743
|
return true;
|
|
4685
4744
|
}
|
|
4686
4745
|
else {
|
|
4746
|
+
// eslint-disable-next-line
|
|
4687
4747
|
if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4688
4748
|
var secParser = this.parser[this.parser.length - 2];
|
|
4689
4749
|
var betweenParser = this.parser[this.parser.length - 3];
|
|
4690
4750
|
if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
|
|
4691
4751
|
return true;
|
|
4692
4752
|
}
|
|
4693
|
-
|
|
4753
|
+
var betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';
|
|
4754
|
+
if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {
|
|
4694
4755
|
return true;
|
|
4695
4756
|
}
|
|
4696
4757
|
}
|
|
4697
4758
|
}
|
|
4698
4759
|
return false;
|
|
4699
4760
|
};
|
|
4700
|
-
QueryBuilder.prototype.getOperator = function (value, operator) {
|
|
4761
|
+
QueryBuilder.prototype.getOperator = function (value, operator, sqlLocale) {
|
|
4701
4762
|
var operators = {
|
|
4702
4763
|
'=': 'equal', '!=': 'notequal', '<': 'lessthan', '>': 'greaterthan', '<=': 'lessthanorequal',
|
|
4703
4764
|
'>=': 'greaterthanorequal', 'in': 'in', 'not in': 'notin', 'between': 'between', 'not between': 'notbetween',
|
|
4704
4765
|
'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'
|
|
4705
4766
|
};
|
|
4767
|
+
if (sqlLocale) {
|
|
4768
|
+
var localeOperator = Object.keys(this.sqlOperators);
|
|
4769
|
+
for (var i = 0; i < localeOperator.length; i++) {
|
|
4770
|
+
if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {
|
|
4771
|
+
if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {
|
|
4772
|
+
return (localeOperator[i] === 'notcontains') ? 'notcontains' : 'contains';
|
|
4773
|
+
}
|
|
4774
|
+
else if (value && value.indexOf('%') !== 0 && value.indexOf('%') === value.length - 1) {
|
|
4775
|
+
return (localeOperator[i] === 'notstartswith') ? 'notstartswith' : 'startswith';
|
|
4776
|
+
}
|
|
4777
|
+
else if (value && value.indexOf('%') === 0 && value.indexOf('%') !== value.length - 1) {
|
|
4778
|
+
return (localeOperator[i] === 'notendswith') ? 'notendswith' : 'endswith';
|
|
4779
|
+
}
|
|
4780
|
+
return localeOperator[i];
|
|
4781
|
+
}
|
|
4782
|
+
}
|
|
4783
|
+
return null;
|
|
4784
|
+
}
|
|
4706
4785
|
if (value) {
|
|
4707
4786
|
if (value.indexOf('%') === 0 && value[value.length - 1] === '%') {
|
|
4708
4787
|
return (operator === 'not like') ? 'notcontains' : 'contains';
|
|
@@ -4722,11 +4801,14 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4722
4801
|
return 'equal';
|
|
4723
4802
|
}
|
|
4724
4803
|
}
|
|
4725
|
-
return operators[operator];
|
|
4804
|
+
return operators["" + operator];
|
|
4726
4805
|
};
|
|
4727
4806
|
QueryBuilder.prototype.getTypeFromColumn = function (rules) {
|
|
4728
4807
|
var columnData = this.getColumn(rules.field);
|
|
4729
|
-
|
|
4808
|
+
if (!isNullOrUndefined(columnData)) {
|
|
4809
|
+
return columnData.type;
|
|
4810
|
+
}
|
|
4811
|
+
return null;
|
|
4730
4812
|
};
|
|
4731
4813
|
QueryBuilder.prototype.getLabelFromColumn = function (field) {
|
|
4732
4814
|
var label = '';
|
|
@@ -4759,7 +4841,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4759
4841
|
}
|
|
4760
4842
|
return this.getColumn(fieldName).label;
|
|
4761
4843
|
};
|
|
4762
|
-
QueryBuilder.prototype.processParser = function (parser, rules, levelColl) {
|
|
4844
|
+
QueryBuilder.prototype.processParser = function (parser, rules, levelColl, sqlLocale) {
|
|
4763
4845
|
var j;
|
|
4764
4846
|
var jLen;
|
|
4765
4847
|
var rule;
|
|
@@ -4778,18 +4860,27 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4778
4860
|
rule = { label: parser[i][1], field: parser[i][1] };
|
|
4779
4861
|
if (parser[i + 1][0] === 'SubOperators') {
|
|
4780
4862
|
if (parser[i + 1][1].indexOf('null') > -1 || parser[i + 1][1].indexOf('empty') > -1) {
|
|
4781
|
-
rule.operator = this.getOperator(' ', parser[i + 1][1]);
|
|
4863
|
+
rule.operator = this.getOperator(' ', parser[i + 1][1], sqlLocale);
|
|
4782
4864
|
rule.value = null;
|
|
4783
4865
|
rule.type = this.getTypeFromColumn(rule);
|
|
4784
4866
|
}
|
|
4785
4867
|
else {
|
|
4786
4868
|
var oper = parser[i + 3][1] ? parser[i + 3][1].replace(/'/g, '') : parser[i + 3][1];
|
|
4787
|
-
rule.operator = this.getOperator(oper, parser[i + 1][1]);
|
|
4869
|
+
rule.operator = this.getOperator(oper, parser[i + 1][1], sqlLocale);
|
|
4788
4870
|
}
|
|
4789
4871
|
operator = parser[i + 1][1];
|
|
4790
4872
|
i++;
|
|
4791
4873
|
j = i + 1;
|
|
4792
4874
|
jLen = iLen;
|
|
4875
|
+
if (sqlLocale && rule.operator === 'contains' || rule.operator === 'startswith' || rule.operator === 'endswith') {
|
|
4876
|
+
operator = 'like';
|
|
4877
|
+
}
|
|
4878
|
+
else if (sqlLocale && rule.operator === 'notcontains' || rule.operator === 'notstartswith' || rule.operator === 'notendswith') {
|
|
4879
|
+
operator = 'not like';
|
|
4880
|
+
}
|
|
4881
|
+
else if (sqlLocale) {
|
|
4882
|
+
operator = rule.operator;
|
|
4883
|
+
}
|
|
4793
4884
|
for (j = i + 1; j < jLen; j++) {
|
|
4794
4885
|
if (operator.indexOf('between') < 0 && parser[j][0] === 'Left') {
|
|
4795
4886
|
isLeftOpened = true;
|
|
@@ -4855,7 +4946,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4855
4946
|
}
|
|
4856
4947
|
}
|
|
4857
4948
|
else if (parser[i + 1][0] === 'Operators') {
|
|
4858
|
-
rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1]);
|
|
4949
|
+
rule.operator = this.getOperator(parser[i + 2][1], parser[i + 1][1], sqlLocale);
|
|
4859
4950
|
if (parser[i + 2][0] === 'Number') {
|
|
4860
4951
|
rule.type = 'number';
|
|
4861
4952
|
rule.value = Number(parser[i + 2][1]);
|
|
@@ -4869,7 +4960,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4869
4960
|
rules.rules.push(rule);
|
|
4870
4961
|
}
|
|
4871
4962
|
else if (parser[i][0] === 'Left') {
|
|
4872
|
-
if (!(parser[0][0] === 'Left') && parser[i - 1][1] === 'not') {
|
|
4963
|
+
if (!(parser[0][0] === 'Left') && (parser[i - 1][1] === 'not' || sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i - 1][1])) {
|
|
4873
4964
|
continue;
|
|
4874
4965
|
}
|
|
4875
4966
|
this.parser = parser.splice(i + 1, iLen - (i + 1));
|
|
@@ -4888,11 +4979,11 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4888
4979
|
}
|
|
4889
4980
|
levelColl.push(grpCount);
|
|
4890
4981
|
rules.rules.push(subRules);
|
|
4891
|
-
subRules = this.processParser(this.parser, subRules, levelColl);
|
|
4982
|
+
subRules = this.processParser(this.parser, subRules, levelColl, sqlLocale);
|
|
4892
4983
|
return rules;
|
|
4893
4984
|
}
|
|
4894
4985
|
else if (parser[i][0] === 'Conditions') {
|
|
4895
|
-
if (parser[i][1] === 'not') {
|
|
4986
|
+
if (parser[i][1] === 'not' || (sqlLocale && this.l10n.getConstant('NOT').toLowerCase() === parser[i][1])) {
|
|
4896
4987
|
rules.not = true;
|
|
4897
4988
|
}
|
|
4898
4989
|
else {
|
|
@@ -4907,7 +4998,7 @@ var QueryBuilder = /** @class */ (function (_super) {
|
|
|
4907
4998
|
for (l = 0; l < lLen; l++) {
|
|
4908
4999
|
rules = this.findGroupByIdx(levelColl[l], rules, l === 0);
|
|
4909
5000
|
}
|
|
4910
|
-
return this.processParser(this.parser, rules, levelColl);
|
|
5001
|
+
return this.processParser(this.parser, rules, levelColl, sqlLocale);
|
|
4911
5002
|
}
|
|
4912
5003
|
}
|
|
4913
5004
|
return rules;
|