@syncfusion/ej2-querybuilder 20.3.59 → 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 +1 -16
- 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 +115 -93
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +113 -91
- 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 +1 -1
- package/src/query-builder/query-builder.js +113 -91
|
@@ -337,7 +337,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
337
337
|
if (sqlIdx > -1) {
|
|
338
338
|
const operator = column.operators[j];
|
|
339
339
|
const operColl = Object.keys(operator);
|
|
340
|
-
const values = operColl.map((key) => operator[key]).join(',').split(',');
|
|
340
|
+
const values = operColl.map((key) => operator[`${key}`]).join(',').split(',');
|
|
341
341
|
const valueIdx = operColl.indexOf('value');
|
|
342
342
|
this.operators[values[valueIdx]] = values[sqlIdx];
|
|
343
343
|
}
|
|
@@ -728,6 +728,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
728
728
|
const tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'),
|
|
729
729
|
position: 'BottomCenter', cssClass: 'e-querybuilder-error' });
|
|
730
730
|
tooltip.appendTo(element);
|
|
731
|
+
// eslint-disable-next-line
|
|
731
732
|
tooltip.open(element);
|
|
732
733
|
}
|
|
733
734
|
/**
|
|
@@ -785,8 +786,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
785
786
|
if (rule.rules[index].value instanceof Array) {
|
|
786
787
|
valArray = rule.rules[index].value;
|
|
787
788
|
}
|
|
788
|
-
if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&
|
|
789
|
-
rule.rules[index].
|
|
789
|
+
if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&
|
|
790
|
+
(isNullOrUndefined(rule.rules[index].value) &&
|
|
791
|
+
rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||
|
|
790
792
|
(rule.rules[index].value instanceof Array && valArray.length < 1)) {
|
|
791
793
|
const valElem = tempElem.querySelectorAll('.e-rule-value .e-control');
|
|
792
794
|
isValid = false;
|
|
@@ -864,7 +866,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
864
866
|
groupElem.appendChild(grpBodyElem);
|
|
865
867
|
// create button group in OR and AND process
|
|
866
868
|
if (!this.headerTemplate) {
|
|
867
|
-
glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group' } });
|
|
869
|
+
glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });
|
|
868
870
|
if (this.enableNotCondition) {
|
|
869
871
|
inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
|
|
870
872
|
glueElem.appendChild(inputElem);
|
|
@@ -1743,29 +1745,29 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1743
1745
|
for (let j = 0, jLen = fieldColl.length; j < jLen; j++) {
|
|
1744
1746
|
fieldStr = fieldColl[j];
|
|
1745
1747
|
if (fieldColl.length === (j + 1)) {
|
|
1746
|
-
value = dataObj[fieldStr];
|
|
1747
|
-
if (Number(dataObj[fieldStr]) === dataObj[fieldStr] && dataObj[fieldStr] % 1 !== 0) {
|
|
1748
|
-
value = dataObj[fieldStr].toString();
|
|
1748
|
+
value = dataObj[`${fieldStr}`];
|
|
1749
|
+
if (Number(dataObj[`${fieldStr}`]) === dataObj[`${fieldStr}`] && dataObj[`${fieldStr}`] % 1 !== 0) {
|
|
1750
|
+
value = dataObj[`${fieldStr}`].toString();
|
|
1749
1751
|
}
|
|
1750
1752
|
}
|
|
1751
1753
|
else {
|
|
1752
|
-
dataObj = dataObj[fieldStr];
|
|
1754
|
+
dataObj = dataObj[`${fieldStr}`];
|
|
1753
1755
|
}
|
|
1754
1756
|
}
|
|
1755
1757
|
}
|
|
1756
1758
|
else {
|
|
1757
|
-
value = dataSource[i][field];
|
|
1758
|
-
if (Number(dataSource[i][field]) === dataSource[i][field] && dataSource[i][field] % 1 !== 0) {
|
|
1759
|
-
value = dataSource[i][field].toString();
|
|
1759
|
+
value = dataSource[i][`${field}`];
|
|
1760
|
+
if (Number(dataSource[i][`${field}`]) === dataSource[i][`${field}`] && dataSource[i][`${field}`] % 1 !== 0) {
|
|
1761
|
+
value = dataSource[i][`${field}`].toString();
|
|
1760
1762
|
}
|
|
1761
1763
|
}
|
|
1762
1764
|
if (!(value in original)) {
|
|
1763
|
-
original[value] = 1;
|
|
1765
|
+
original[`${value}`] = 1;
|
|
1764
1766
|
if (fieldColl.length > 1) {
|
|
1765
1767
|
this.createNestedObject(data, fieldColl, value);
|
|
1766
1768
|
}
|
|
1767
1769
|
else {
|
|
1768
|
-
data[field] = value;
|
|
1770
|
+
data[`${field}`] = value;
|
|
1769
1771
|
}
|
|
1770
1772
|
result.push(data);
|
|
1771
1773
|
}
|
|
@@ -1779,9 +1781,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1779
1781
|
for (let k = 0; k < lastIndex; ++k) {
|
|
1780
1782
|
key = fieldColl[k];
|
|
1781
1783
|
if (!(key in obj)) {
|
|
1782
|
-
obj[key] = {};
|
|
1784
|
+
obj[`${key}`] = {};
|
|
1783
1785
|
}
|
|
1784
|
-
obj = obj[key];
|
|
1786
|
+
obj = obj[`${key}`];
|
|
1785
1787
|
}
|
|
1786
1788
|
obj[fieldColl[lastIndex]] = value;
|
|
1787
1789
|
}
|
|
@@ -1793,28 +1795,28 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1793
1795
|
const isNested = field.indexOf(this.separator);
|
|
1794
1796
|
for (let i = 0, iLen = dataSource.length; i < iLen; i++) {
|
|
1795
1797
|
if (isNested === 0) {
|
|
1796
|
-
value = dataSource[i][field];
|
|
1798
|
+
value = dataSource[i][`${field}`];
|
|
1797
1799
|
}
|
|
1798
1800
|
else {
|
|
1799
1801
|
nest = field.split(this.separator);
|
|
1800
1802
|
// eslint-disable-next-line @typescript-eslint/tslint/config
|
|
1801
1803
|
nest.forEach(element => {
|
|
1802
1804
|
if (value) {
|
|
1803
|
-
value = value[element];
|
|
1805
|
+
value = value[`${element}`];
|
|
1804
1806
|
}
|
|
1805
1807
|
else {
|
|
1806
|
-
value = dataSource[i][element];
|
|
1808
|
+
value = dataSource[i][`${element}`];
|
|
1807
1809
|
}
|
|
1808
1810
|
});
|
|
1809
1811
|
}
|
|
1810
|
-
if (Number(dataSource[i][field]) === dataSource[i][field] && dataSource[i][field] % 1 !== 0) {
|
|
1811
|
-
value = dataSource[i][field].toString();
|
|
1812
|
+
if (Number(dataSource[i][`${field}`]) === dataSource[i][`${field}`] && dataSource[i][`${field}`] % 1 !== 0) {
|
|
1813
|
+
value = dataSource[i][`${field}`].toString();
|
|
1812
1814
|
}
|
|
1813
1815
|
const data = {};
|
|
1814
1816
|
if (!(value in original)) {
|
|
1815
|
-
original[value] = 1;
|
|
1817
|
+
original[`${value}`] = 1;
|
|
1816
1818
|
if (isNested === 0) {
|
|
1817
|
-
data[field] = value;
|
|
1819
|
+
data[`${field}`] = value;
|
|
1818
1820
|
}
|
|
1819
1821
|
else {
|
|
1820
1822
|
data[nest[nest.length - 1]] = value;
|
|
@@ -2556,7 +2558,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2556
2558
|
const column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])
|
|
2557
2559
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2558
2560
|
: this.getColumn(dropDownObj.value);
|
|
2559
|
-
if (!this.isImportRules && rule.rules[index].field &&
|
|
2561
|
+
if (!this.isImportRules && rule.rules[index].field &&
|
|
2562
|
+
rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {
|
|
2560
2563
|
if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)
|
|
2561
2564
|
|| (operator.indexOf('empty') > -1)) {
|
|
2562
2565
|
rule.rules[index].value = '';
|
|
@@ -3349,7 +3352,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3349
3352
|
EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);
|
|
3350
3353
|
}
|
|
3351
3354
|
getParentGroup(target, isParent) {
|
|
3352
|
-
const groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[target];
|
|
3355
|
+
const groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[`${target}`];
|
|
3353
3356
|
const len = isParent ? groupLevel.length - 1 : groupLevel.length;
|
|
3354
3357
|
let rule = this.rule;
|
|
3355
3358
|
for (let i = 0; i < len; i++) {
|
|
@@ -3509,6 +3512,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3509
3512
|
err = [];
|
|
3510
3513
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3511
3514
|
const error = 'error';
|
|
3515
|
+
// eslint-disable-next-line
|
|
3512
3516
|
err[error] = error;
|
|
3513
3517
|
}
|
|
3514
3518
|
// eslint-enable
|
|
@@ -3670,6 +3674,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3670
3674
|
else {
|
|
3671
3675
|
rule = { 'condition': rule.condition, 'rules': rule.rules };
|
|
3672
3676
|
}
|
|
3677
|
+
if (rule.rules.length === 0) {
|
|
3678
|
+
rule = {};
|
|
3679
|
+
}
|
|
3673
3680
|
}
|
|
3674
3681
|
}
|
|
3675
3682
|
return rule;
|
|
@@ -3878,7 +3885,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3878
3885
|
if (i === 0) {
|
|
3879
3886
|
if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||
|
|
3880
3887
|
oper.indexOf('empty') > -1) && oper.indexOf('contains') < 0) {
|
|
3881
|
-
pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :
|
|
3888
|
+
pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :
|
|
3889
|
+
this.arrayPredicate(ruleColl[i]);
|
|
3882
3890
|
}
|
|
3883
3891
|
else {
|
|
3884
3892
|
const value = ruleValue;
|
|
@@ -4361,89 +4369,90 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4361
4369
|
queryStr += rulesNotCondition;
|
|
4362
4370
|
}
|
|
4363
4371
|
}
|
|
4364
|
-
|
|
4365
|
-
|
|
4366
|
-
|
|
4367
|
-
|
|
4368
|
-
|
|
4369
|
-
|
|
4370
|
-
|
|
4371
|
-
|
|
4372
|
-
|
|
4373
|
-
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4372
|
+
if (rules.rules) {
|
|
4373
|
+
for (let j = 0, jLen = rules.rules.length; j < jLen; j++) {
|
|
4374
|
+
if (rules.rules[j].rules) {
|
|
4375
|
+
queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);
|
|
4376
|
+
}
|
|
4377
|
+
else {
|
|
4378
|
+
const rule = rules.rules[j];
|
|
4379
|
+
let valueStr = '';
|
|
4380
|
+
const ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];
|
|
4381
|
+
if (rule.value instanceof Array) {
|
|
4382
|
+
if (rule.operator.toString().indexOf('between') > -1) {
|
|
4383
|
+
const ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';
|
|
4384
|
+
if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {
|
|
4385
|
+
valueStr += '"' + rule.value[0] + '"' + ruleCondition + '"' + rule.value[1] + '"';
|
|
4386
|
+
}
|
|
4387
|
+
else {
|
|
4388
|
+
valueStr += rule.value[0] + ruleCondition + rule.value[1];
|
|
4389
|
+
}
|
|
4378
4390
|
}
|
|
4379
4391
|
else {
|
|
4380
|
-
|
|
4392
|
+
if (typeof rule.value[0] === 'string' && rule.value !== null) {
|
|
4393
|
+
valueStr += '("' + rule.value[0] + '"';
|
|
4394
|
+
for (let k = 1, kLen = rule.value.length; k < kLen; k++) {
|
|
4395
|
+
valueStr += ',"' + rule.value[k] + '"';
|
|
4396
|
+
}
|
|
4397
|
+
valueStr += ')';
|
|
4398
|
+
}
|
|
4399
|
+
else {
|
|
4400
|
+
valueStr += '(' + rule.value + ')';
|
|
4401
|
+
}
|
|
4381
4402
|
}
|
|
4382
4403
|
}
|
|
4383
4404
|
else {
|
|
4384
|
-
if (
|
|
4385
|
-
valueStr += '("' + rule.value
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4405
|
+
if (rule.operator.toString().indexOf('startswith') > -1) {
|
|
4406
|
+
valueStr += rule.value ? '("' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4407
|
+
}
|
|
4408
|
+
else if (rule.operator.toString().indexOf('endswith') > -1) {
|
|
4409
|
+
valueStr += rule.value ? '("%' + rule.value + '")' : '(' + rule.value + ')';
|
|
4410
|
+
}
|
|
4411
|
+
else if (rule.operator.toString().indexOf('contains') > -1) {
|
|
4412
|
+
valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4390
4413
|
}
|
|
4391
4414
|
else {
|
|
4392
|
-
|
|
4415
|
+
if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {
|
|
4416
|
+
valueStr += rule.value;
|
|
4417
|
+
}
|
|
4418
|
+
else {
|
|
4419
|
+
valueStr += '"' + rule.value + '"';
|
|
4420
|
+
}
|
|
4393
4421
|
}
|
|
4394
4422
|
}
|
|
4395
|
-
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
valueStr += rule.value ? '("' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4399
|
-
}
|
|
4400
|
-
else if (rule.operator.toString().indexOf('endswith') > -1) {
|
|
4401
|
-
valueStr += rule.value ? '("%' + rule.value + '")' : '(' + rule.value + ')';
|
|
4402
|
-
}
|
|
4403
|
-
else if (rule.operator.toString().indexOf('contains') > -1) {
|
|
4404
|
-
valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4405
|
-
}
|
|
4406
|
-
else {
|
|
4407
|
-
if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {
|
|
4408
|
-
valueStr += rule.value;
|
|
4423
|
+
if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {
|
|
4424
|
+
if (enableEscape) {
|
|
4425
|
+
rule.field = '`' + rule.field + '`';
|
|
4409
4426
|
}
|
|
4410
4427
|
else {
|
|
4411
|
-
|
|
4428
|
+
if (rule.field.indexOf(' ') > -1) {
|
|
4429
|
+
rule.field = '"' + rule.field + '"';
|
|
4430
|
+
}
|
|
4412
4431
|
}
|
|
4413
|
-
|
|
4414
|
-
}
|
|
4415
|
-
if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {
|
|
4416
|
-
if (enableEscape) {
|
|
4417
|
-
rule.field = '`' + rule.field + '`';
|
|
4432
|
+
queryStr += rule.field + ' ' + ruleOpertor;
|
|
4418
4433
|
}
|
|
4419
4434
|
else {
|
|
4420
|
-
if (
|
|
4421
|
-
rule.field = '
|
|
4435
|
+
if (enableEscape) {
|
|
4436
|
+
rule.field = '`' + rule.field + '`';
|
|
4422
4437
|
}
|
|
4423
|
-
|
|
4424
|
-
|
|
4425
|
-
|
|
4426
|
-
|
|
4427
|
-
if (enableEscape) {
|
|
4428
|
-
rule.field = '`' + rule.field + '`';
|
|
4429
|
-
}
|
|
4430
|
-
else {
|
|
4431
|
-
if (rule.field.indexOf(' ') > -1) {
|
|
4432
|
-
rule.field = '"' + rule.field + '"';
|
|
4438
|
+
else {
|
|
4439
|
+
if (rule.field.indexOf(' ') > -1) {
|
|
4440
|
+
rule.field = '"' + rule.field + '"';
|
|
4441
|
+
}
|
|
4433
4442
|
}
|
|
4443
|
+
queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;
|
|
4444
|
+
}
|
|
4445
|
+
if (rule.condition && rule.condition !== '') {
|
|
4446
|
+
condition = rule.condition;
|
|
4434
4447
|
}
|
|
4435
|
-
queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;
|
|
4436
|
-
}
|
|
4437
|
-
if (rule.condition && rule.condition !== '') {
|
|
4438
|
-
condition = rule.condition;
|
|
4439
4448
|
}
|
|
4440
|
-
|
|
4441
|
-
|
|
4442
|
-
|
|
4443
|
-
|
|
4449
|
+
if (j !== jLen - 1) {
|
|
4450
|
+
if (condition === '') {
|
|
4451
|
+
condition = rules.rules[j].condition;
|
|
4452
|
+
}
|
|
4453
|
+
condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
|
|
4454
|
+
queryStr += ' ' + condition + ' ';
|
|
4444
4455
|
}
|
|
4445
|
-
condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
|
|
4446
|
-
queryStr += ' ' + condition + ' ';
|
|
4447
4456
|
}
|
|
4448
4457
|
}
|
|
4449
4458
|
if (!isRoot) {
|
|
@@ -4490,7 +4499,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4490
4499
|
*
|
|
4491
4500
|
* @param {RuleModel} rule - 'rule' to be passed to get the sql.
|
|
4492
4501
|
* @param {boolean} allowEscape - Set `true` if it exclude the escape character.
|
|
4493
|
-
*
|
|
4502
|
+
* @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
|
|
4494
4503
|
* @returns {object} - Sql query from rules.
|
|
4495
4504
|
*/
|
|
4496
4505
|
getSqlFromRules(rule, allowEscape, sqlLocale) {
|
|
@@ -4534,6 +4543,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4534
4543
|
let matchValue;
|
|
4535
4544
|
for (let i = 0, iLen = operators.length; i < iLen; i++) {
|
|
4536
4545
|
regexStr = /^\w+$/.test(operators[i]) ? '\\b' : '';
|
|
4546
|
+
// eslint-disable-next-line
|
|
4537
4547
|
regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');
|
|
4538
4548
|
if (regex.exec(sqlString)) {
|
|
4539
4549
|
this.parser.push(['Operators', operators[i].toLowerCase()]);
|
|
@@ -4544,6 +4554,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4544
4554
|
if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {
|
|
4545
4555
|
for (let i = 0, iLen = conditions.length; i < iLen; i++) {
|
|
4546
4556
|
regexStr = /^\w+$/.test(conditions[i]) ? '\\b' : '';
|
|
4557
|
+
// eslint-disable-next-line
|
|
4547
4558
|
regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');
|
|
4548
4559
|
if (regex.exec(sqlString)) {
|
|
4549
4560
|
this.parser.push(['Conditions', conditions[i].toLowerCase()]);
|
|
@@ -4553,6 +4564,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4553
4564
|
}
|
|
4554
4565
|
for (let i = 0, iLen = subOp.length; i < iLen; i++) {
|
|
4555
4566
|
regexStr = /^\w+$/.test(subOp[i]) ? '\\b' : '';
|
|
4567
|
+
// eslint-disable-next-line
|
|
4556
4568
|
regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');
|
|
4557
4569
|
if (regex.exec(sqlString)) {
|
|
4558
4570
|
this.parser.push(['SubOperators', subOp[i].toLowerCase()]);
|
|
@@ -4596,30 +4608,39 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4596
4608
|
return matchValue.length + 2;
|
|
4597
4609
|
}
|
|
4598
4610
|
if (this.checkNumberLiteral(sqlString, sqlLocale)) {
|
|
4611
|
+
// eslint-disable-next-line
|
|
4599
4612
|
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4600
4613
|
this.parser.push(['Literal', matchValue]);
|
|
4601
4614
|
return matchValue.length;
|
|
4602
4615
|
}
|
|
4603
4616
|
//String
|
|
4617
|
+
// eslint-disable-next-line
|
|
4604
4618
|
if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
|
|
4619
|
+
// eslint-disable-next-line
|
|
4605
4620
|
matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
|
|
4606
4621
|
this.parser.push(['String', matchValue]);
|
|
4607
4622
|
return matchValue.length;
|
|
4608
4623
|
}
|
|
4609
4624
|
//Double String
|
|
4625
|
+
// eslint-disable-next-line
|
|
4610
4626
|
if (/^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)) {
|
|
4627
|
+
// eslint-disable-next-line
|
|
4611
4628
|
matchValue = /^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)[0];
|
|
4612
4629
|
this.parser.push(['DoubleString', matchValue]);
|
|
4613
4630
|
return matchValue.length;
|
|
4614
4631
|
}
|
|
4615
4632
|
//Number
|
|
4633
|
+
// eslint-disable-next-line
|
|
4616
4634
|
if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4635
|
+
// eslint-disable-next-line
|
|
4617
4636
|
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4618
4637
|
this.parser.push(['Number', matchValue]);
|
|
4619
4638
|
return matchValue.length;
|
|
4620
4639
|
}
|
|
4621
4640
|
//Negative Number
|
|
4641
|
+
// eslint-disable-next-line
|
|
4622
4642
|
if (/^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4643
|
+
// eslint-disable-next-line
|
|
4623
4644
|
matchValue = /^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4624
4645
|
this.parser.push(['Number', matchValue]);
|
|
4625
4646
|
return matchValue.length;
|
|
@@ -4645,13 +4666,14 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4645
4666
|
return true;
|
|
4646
4667
|
}
|
|
4647
4668
|
else {
|
|
4669
|
+
// eslint-disable-next-line
|
|
4648
4670
|
if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4649
4671
|
const secParser = this.parser[this.parser.length - 2];
|
|
4650
4672
|
const betweenParser = this.parser[this.parser.length - 3];
|
|
4651
4673
|
if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
|
|
4652
4674
|
return true;
|
|
4653
4675
|
}
|
|
4654
|
-
|
|
4676
|
+
const betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';
|
|
4655
4677
|
if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {
|
|
4656
4678
|
return true;
|
|
4657
4679
|
}
|
|
@@ -4666,7 +4688,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4666
4688
|
'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'
|
|
4667
4689
|
};
|
|
4668
4690
|
if (sqlLocale) {
|
|
4669
|
-
|
|
4691
|
+
const localeOperator = Object.keys(this.sqlOperators);
|
|
4670
4692
|
for (let i = 0; i < localeOperator.length; i++) {
|
|
4671
4693
|
if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {
|
|
4672
4694
|
if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {
|
|
@@ -4702,7 +4724,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4702
4724
|
return 'equal';
|
|
4703
4725
|
}
|
|
4704
4726
|
}
|
|
4705
|
-
return operators[operator];
|
|
4727
|
+
return operators[`${operator}`];
|
|
4706
4728
|
}
|
|
4707
4729
|
getTypeFromColumn(rules) {
|
|
4708
4730
|
const columnData = this.getColumn(rules.field);
|