@syncfusion/ej2-querybuilder 20.3.59 → 20.4.40
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 +5 -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 +141 -107
- package/dist/es6/ej2-querybuilder.es2015.js.map +1 -1
- package/dist/es6/ej2-querybuilder.es5.js +139 -105
- 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 +22 -26
- 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 +139 -105
- package/styles/bootstrap4.css +1 -1
- package/styles/query-builder/bootstrap4.css +1 -1
|
@@ -153,7 +153,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
153
153
|
let bodyElem = this.element.querySelector('.e-group-body');
|
|
154
154
|
const inputElement = this.element.querySelectorAll('input.e-control');
|
|
155
155
|
for (let i = 0, len = inputElement.length; i < len; i++) {
|
|
156
|
-
if (inputElement[i].
|
|
156
|
+
if (inputElement[i].className.indexOf('e-tooltip') > -1) {
|
|
157
|
+
getComponent(inputElement[i], 'tooltip').destroy();
|
|
158
|
+
}
|
|
159
|
+
else if (inputElement[i].parentElement.className.indexOf('e-tooltip') > -1) {
|
|
157
160
|
getComponent(inputElement[i].parentElement, 'tooltip').destroy();
|
|
158
161
|
}
|
|
159
162
|
}
|
|
@@ -337,7 +340,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
337
340
|
if (sqlIdx > -1) {
|
|
338
341
|
const operator = column.operators[j];
|
|
339
342
|
const operColl = Object.keys(operator);
|
|
340
|
-
const values = operColl.map((key) => operator[key]).join(',').split(',');
|
|
343
|
+
const values = operColl.map((key) => operator[`${key}`]).join(',').split(',');
|
|
341
344
|
const valueIdx = operColl.indexOf('value');
|
|
342
345
|
this.operators[values[valueIdx]] = values[sqlIdx];
|
|
343
346
|
}
|
|
@@ -728,6 +731,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
728
731
|
const tooltip = new Tooltip({ content: this.l10n.getConstant('ValidationMessage'),
|
|
729
732
|
position: 'BottomCenter', cssClass: 'e-querybuilder-error' });
|
|
730
733
|
tooltip.appendTo(element);
|
|
734
|
+
// eslint-disable-next-line
|
|
731
735
|
tooltip.open(element);
|
|
732
736
|
}
|
|
733
737
|
/**
|
|
@@ -751,23 +755,25 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
751
755
|
let tempElem;
|
|
752
756
|
let rule;
|
|
753
757
|
const ruleElemCln = this.element.querySelectorAll('.e-rule-container');
|
|
754
|
-
let validateRule;
|
|
755
758
|
for (i = 0, len = ruleElemCln.length; i < len; i++) {
|
|
759
|
+
let validateRule;
|
|
756
760
|
groupElem = closest(ruleElemCln[i], '.e-group-container');
|
|
757
761
|
rule = this.getParentGroup(groupElem);
|
|
758
762
|
index = 0;
|
|
759
763
|
indexElem = tempElem = ruleElemCln[i];
|
|
760
764
|
if (this.fieldMode === 'DropdownTree') {
|
|
761
|
-
dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-
|
|
762
|
-
if (dropDownTreeObj.value && dropDownTreeObj.value.length) {
|
|
765
|
+
dropDownTreeObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdowntree'), 'dropdowntree');
|
|
766
|
+
if (dropDownTreeObj && dropDownTreeObj.value && dropDownTreeObj.value.length) {
|
|
763
767
|
this.selectedColumn = this.getColumn(dropDownTreeObj.value[0]);
|
|
764
768
|
validateRule = this.selectedColumn.validation;
|
|
765
769
|
}
|
|
766
770
|
}
|
|
767
771
|
else {
|
|
768
|
-
dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-
|
|
769
|
-
|
|
770
|
-
|
|
772
|
+
dropDownObj = getComponent(ruleElemCln[i].querySelector('.e-rule-filter input.e-dropdownlist'), 'dropdownlist');
|
|
773
|
+
if (dropDownObj && dropDownObj.value) {
|
|
774
|
+
this.selectedColumn = dropDownObj.getDataByValue(dropDownObj.value);
|
|
775
|
+
validateRule = !isNullOrUndefined(dropDownObj.index) && this.selectedColumn.validation;
|
|
776
|
+
}
|
|
771
777
|
}
|
|
772
778
|
fieldElem = tempElem.querySelector('.e-rule-field input.e-control');
|
|
773
779
|
if (validateRule && validateRule.isRequired) {
|
|
@@ -785,8 +791,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
785
791
|
if (rule.rules[index].value instanceof Array) {
|
|
786
792
|
valArray = rule.rules[index].value;
|
|
787
793
|
}
|
|
788
|
-
if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&
|
|
789
|
-
rule.rules[index].
|
|
794
|
+
if (excludeOprs.indexOf(rule.rules[index].operator) < 0 &&
|
|
795
|
+
(isNullOrUndefined(rule.rules[index].value) &&
|
|
796
|
+
rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||
|
|
790
797
|
(rule.rules[index].value instanceof Array && valArray.length < 1)) {
|
|
791
798
|
const valElem = tempElem.querySelectorAll('.e-rule-value .e-control');
|
|
792
799
|
isValid = false;
|
|
@@ -809,8 +816,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
809
816
|
else if ((dropDownObj && dropDownObj.element && isNullOrUndefined(dropDownObj.index)) ||
|
|
810
817
|
(dropDownTreeObj && dropDownTreeObj.element && (isNullOrUndefined(dropDownTreeObj.value) ||
|
|
811
818
|
dropDownTreeObj.value.length < 1))) {
|
|
812
|
-
if (fieldElem.
|
|
813
|
-
this.renderToolTip(fieldElem
|
|
819
|
+
if (fieldElem.className.indexOf('e-tooltip') < 0) {
|
|
820
|
+
this.renderToolTip(fieldElem);
|
|
814
821
|
}
|
|
815
822
|
isValid = false;
|
|
816
823
|
}
|
|
@@ -864,7 +871,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
864
871
|
groupElem.appendChild(grpBodyElem);
|
|
865
872
|
// create button group in OR and AND process
|
|
866
873
|
if (!this.headerTemplate) {
|
|
867
|
-
glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group' } });
|
|
874
|
+
glueElem = this.createElement('div', { attrs: { class: 'e-lib e-btn-group', role: 'group' } });
|
|
868
875
|
if (this.enableNotCondition) {
|
|
869
876
|
inputElem = this.createElement('button', { attrs: { type: 'button', class: 'e-qb-toggle' } });
|
|
870
877
|
glueElem.appendChild(inputElem);
|
|
@@ -1469,6 +1476,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1469
1476
|
}
|
|
1470
1477
|
}
|
|
1471
1478
|
createSubFields(filterElem, rule, tempRule, ddlArgs) {
|
|
1479
|
+
let subFieldValue = false;
|
|
1472
1480
|
const fieldElem = closest(filterElem, '.e-rule-field');
|
|
1473
1481
|
const tempElem = this.createElement('div', { attrs: { class: 'e-rule-sub-filter', id: 'subfilter' + this.subFilterCounter } });
|
|
1474
1482
|
fieldElem.insertBefore(tempElem, fieldElem.querySelector('.e-rule-operator'));
|
|
@@ -1498,6 +1506,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1498
1506
|
if (rule.field === subField[i].field || rule.field.indexOf(subField[i].field) > -1) {
|
|
1499
1507
|
dropDownList.value = subField[i].field;
|
|
1500
1508
|
this.selectedColumn = subField[i];
|
|
1509
|
+
subFieldValue = true;
|
|
1501
1510
|
break;
|
|
1502
1511
|
}
|
|
1503
1512
|
}
|
|
@@ -1506,7 +1515,10 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1506
1515
|
this.subFieldElem = subFieldElem;
|
|
1507
1516
|
// eslint-disable-next-line
|
|
1508
1517
|
ddlArgs.itemData = ddlArgs.itemData;
|
|
1509
|
-
if (!this.isImportRules) {
|
|
1518
|
+
if (!this.isImportRules || (!subFieldValue && this.selectedColumn.columns)) {
|
|
1519
|
+
if (!subFieldValue && this.isImportRules) {
|
|
1520
|
+
dropDownList.value = null;
|
|
1521
|
+
}
|
|
1510
1522
|
this.selectedColumn = this.selectedColumn.columns[0];
|
|
1511
1523
|
}
|
|
1512
1524
|
if (!this.selectedColumn.columns) {
|
|
@@ -1743,29 +1755,29 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1743
1755
|
for (let j = 0, jLen = fieldColl.length; j < jLen; j++) {
|
|
1744
1756
|
fieldStr = fieldColl[j];
|
|
1745
1757
|
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();
|
|
1758
|
+
value = dataObj[`${fieldStr}`];
|
|
1759
|
+
if (Number(dataObj[`${fieldStr}`]) === dataObj[`${fieldStr}`] && dataObj[`${fieldStr}`] % 1 !== 0) {
|
|
1760
|
+
value = dataObj[`${fieldStr}`].toString();
|
|
1749
1761
|
}
|
|
1750
1762
|
}
|
|
1751
1763
|
else {
|
|
1752
|
-
dataObj = dataObj[fieldStr];
|
|
1764
|
+
dataObj = dataObj[`${fieldStr}`];
|
|
1753
1765
|
}
|
|
1754
1766
|
}
|
|
1755
1767
|
}
|
|
1756
1768
|
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();
|
|
1769
|
+
value = dataSource[i][`${field}`];
|
|
1770
|
+
if (Number(dataSource[i][`${field}`]) === dataSource[i][`${field}`] && dataSource[i][`${field}`] % 1 !== 0) {
|
|
1771
|
+
value = dataSource[i][`${field}`].toString();
|
|
1760
1772
|
}
|
|
1761
1773
|
}
|
|
1762
1774
|
if (!(value in original)) {
|
|
1763
|
-
original[value] = 1;
|
|
1775
|
+
original[`${value}`] = 1;
|
|
1764
1776
|
if (fieldColl.length > 1) {
|
|
1765
1777
|
this.createNestedObject(data, fieldColl, value);
|
|
1766
1778
|
}
|
|
1767
1779
|
else {
|
|
1768
|
-
data[field] = value;
|
|
1780
|
+
data[`${field}`] = value;
|
|
1769
1781
|
}
|
|
1770
1782
|
result.push(data);
|
|
1771
1783
|
}
|
|
@@ -1779,9 +1791,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1779
1791
|
for (let k = 0; k < lastIndex; ++k) {
|
|
1780
1792
|
key = fieldColl[k];
|
|
1781
1793
|
if (!(key in obj)) {
|
|
1782
|
-
obj[key] = {};
|
|
1794
|
+
obj[`${key}`] = {};
|
|
1783
1795
|
}
|
|
1784
|
-
obj = obj[key];
|
|
1796
|
+
obj = obj[`${key}`];
|
|
1785
1797
|
}
|
|
1786
1798
|
obj[fieldColl[lastIndex]] = value;
|
|
1787
1799
|
}
|
|
@@ -1793,28 +1805,28 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
1793
1805
|
const isNested = field.indexOf(this.separator);
|
|
1794
1806
|
for (let i = 0, iLen = dataSource.length; i < iLen; i++) {
|
|
1795
1807
|
if (isNested === 0) {
|
|
1796
|
-
value = dataSource[i][field];
|
|
1808
|
+
value = dataSource[i][`${field}`];
|
|
1797
1809
|
}
|
|
1798
1810
|
else {
|
|
1799
1811
|
nest = field.split(this.separator);
|
|
1800
1812
|
// eslint-disable-next-line @typescript-eslint/tslint/config
|
|
1801
1813
|
nest.forEach(element => {
|
|
1802
1814
|
if (value) {
|
|
1803
|
-
value = value[element];
|
|
1815
|
+
value = value[`${element}`];
|
|
1804
1816
|
}
|
|
1805
1817
|
else {
|
|
1806
|
-
value = dataSource[i][element];
|
|
1818
|
+
value = dataSource[i][`${element}`];
|
|
1807
1819
|
}
|
|
1808
1820
|
});
|
|
1809
1821
|
}
|
|
1810
|
-
if (Number(dataSource[i][field]) === dataSource[i][field] && dataSource[i][field] % 1 !== 0) {
|
|
1811
|
-
value = dataSource[i][field].toString();
|
|
1822
|
+
if (Number(dataSource[i][`${field}`]) === dataSource[i][`${field}`] && dataSource[i][`${field}`] % 1 !== 0) {
|
|
1823
|
+
value = dataSource[i][`${field}`].toString();
|
|
1812
1824
|
}
|
|
1813
1825
|
const data = {};
|
|
1814
1826
|
if (!(value in original)) {
|
|
1815
|
-
original[value] = 1;
|
|
1827
|
+
original[`${value}`] = 1;
|
|
1816
1828
|
if (isNested === 0) {
|
|
1817
|
-
data[field] = value;
|
|
1829
|
+
data[`${field}`] = value;
|
|
1818
1830
|
}
|
|
1819
1831
|
else {
|
|
1820
1832
|
data[nest[nest.length - 1]] = value;
|
|
@@ -2289,7 +2301,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2289
2301
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2290
2302
|
prevItemData = this.getColumn(prevItemData.value);
|
|
2291
2303
|
}
|
|
2292
|
-
if (column.template && prevItemData && Object.keys(prevItemData).length < 4) {
|
|
2304
|
+
if (column && column.template && prevItemData && Object.keys(prevItemData).length < 4) {
|
|
2293
2305
|
prevItemData.template = column.template;
|
|
2294
2306
|
}
|
|
2295
2307
|
return prevItemData;
|
|
@@ -2345,7 +2357,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2345
2357
|
this.validateValue(rule, closest(target, '.e-rule-container'));
|
|
2346
2358
|
this.destroyControls(target);
|
|
2347
2359
|
}
|
|
2348
|
-
|
|
2360
|
+
if (column) {
|
|
2361
|
+
itemData.template = column.template;
|
|
2362
|
+
}
|
|
2349
2363
|
if (itemData.template) {
|
|
2350
2364
|
addClass([target.nextElementSibling], 'e-template-value');
|
|
2351
2365
|
itemData.template = column.template;
|
|
@@ -2556,7 +2570,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2556
2570
|
const column = this.fieldMode === 'DropdownTree' ? this.getColumn(dropDownObj.value[0])
|
|
2557
2571
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2558
2572
|
: this.getColumn(dropDownObj.value);
|
|
2559
|
-
if (!this.isImportRules && rule.rules[index].field &&
|
|
2573
|
+
if (!this.isImportRules && rule.rules[index].field &&
|
|
2574
|
+
rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {
|
|
2560
2575
|
if (!(ruleElem.querySelectorAll('.e-template')) && !(operator.indexOf('null') > -1)
|
|
2561
2576
|
|| (operator.indexOf('empty') > -1)) {
|
|
2562
2577
|
rule.rules[index].value = '';
|
|
@@ -2592,8 +2607,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
2592
2607
|
if (!this.isImportRules) {
|
|
2593
2608
|
this.trigger('change', eventsArgs);
|
|
2594
2609
|
}
|
|
2595
|
-
if (this.allowValidation && rule.rules[index].field && target.
|
|
2596
|
-
getComponent(target
|
|
2610
|
+
if (this.allowValidation && rule.rules[index].field && target.className.indexOf('e-tooltip') > -1) {
|
|
2611
|
+
getComponent(target, 'tooltip').destroy();
|
|
2597
2612
|
}
|
|
2598
2613
|
this.filterRules(beforeRules, this.getValidRules(this.rule), 'field');
|
|
2599
2614
|
}
|
|
@@ -3349,7 +3364,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3349
3364
|
EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);
|
|
3350
3365
|
}
|
|
3351
3366
|
getParentGroup(target, isParent) {
|
|
3352
|
-
const groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[target];
|
|
3367
|
+
const groupLevel = (target instanceof Element) ? this.levelColl[target.id] : this.levelColl[`${target}`];
|
|
3353
3368
|
const len = isParent ? groupLevel.length - 1 : groupLevel.length;
|
|
3354
3369
|
let rule = this.rule;
|
|
3355
3370
|
for (let i = 0; i < len; i++) {
|
|
@@ -3509,6 +3524,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3509
3524
|
err = [];
|
|
3510
3525
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3511
3526
|
const error = 'error';
|
|
3527
|
+
// eslint-disable-next-line
|
|
3512
3528
|
err[error] = error;
|
|
3513
3529
|
}
|
|
3514
3530
|
// eslint-enable
|
|
@@ -3670,6 +3686,9 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3670
3686
|
else {
|
|
3671
3687
|
rule = { 'condition': rule.condition, 'rules': rule.rules };
|
|
3672
3688
|
}
|
|
3689
|
+
if (rule.rules.length === 0) {
|
|
3690
|
+
rule = {};
|
|
3691
|
+
}
|
|
3673
3692
|
}
|
|
3674
3693
|
}
|
|
3675
3694
|
return rule;
|
|
@@ -3878,7 +3897,8 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
3878
3897
|
if (i === 0) {
|
|
3879
3898
|
if (isDateFilter || (oper.indexOf('in') > -1 || oper.indexOf('between') > -1 || oper.indexOf('null') > -1 ||
|
|
3880
3899
|
oper.indexOf('empty') > -1) && oper.indexOf('contains') < 0) {
|
|
3881
|
-
pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :
|
|
3900
|
+
pred = isDateFilter ? this.datePredicate(ruleColl[i], ruleValue) :
|
|
3901
|
+
this.arrayPredicate(ruleColl[i]);
|
|
3882
3902
|
}
|
|
3883
3903
|
else {
|
|
3884
3904
|
const value = ruleValue;
|
|
@@ -4361,89 +4381,90 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4361
4381
|
queryStr += rulesNotCondition;
|
|
4362
4382
|
}
|
|
4363
4383
|
}
|
|
4364
|
-
|
|
4365
|
-
|
|
4366
|
-
|
|
4367
|
-
|
|
4368
|
-
|
|
4369
|
-
|
|
4370
|
-
|
|
4371
|
-
|
|
4372
|
-
|
|
4373
|
-
|
|
4374
|
-
|
|
4375
|
-
|
|
4376
|
-
|
|
4377
|
-
|
|
4384
|
+
if (rules.rules) {
|
|
4385
|
+
for (let j = 0, jLen = rules.rules.length; j < jLen; j++) {
|
|
4386
|
+
if (rules.rules[j].rules) {
|
|
4387
|
+
queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr, sqlLocale);
|
|
4388
|
+
}
|
|
4389
|
+
else {
|
|
4390
|
+
const rule = rules.rules[j];
|
|
4391
|
+
let valueStr = '';
|
|
4392
|
+
const ruleOpertor = sqlLocale ? this.sqlOperators[rule.operator] : this.operators[rule.operator];
|
|
4393
|
+
if (rule.value instanceof Array) {
|
|
4394
|
+
if (rule.operator.toString().indexOf('between') > -1) {
|
|
4395
|
+
const ruleCondition = sqlLocale ? ' ' + this.l10n.getConstant('AND').toUpperCase() + ' ' : ' ' + 'AND' + ' ';
|
|
4396
|
+
if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {
|
|
4397
|
+
valueStr += '"' + rule.value[0] + '"' + ruleCondition + '"' + rule.value[1] + '"';
|
|
4398
|
+
}
|
|
4399
|
+
else {
|
|
4400
|
+
valueStr += rule.value[0] + ruleCondition + rule.value[1];
|
|
4401
|
+
}
|
|
4378
4402
|
}
|
|
4379
4403
|
else {
|
|
4380
|
-
|
|
4404
|
+
if (typeof rule.value[0] === 'string' && rule.value !== null) {
|
|
4405
|
+
valueStr += '("' + rule.value[0] + '"';
|
|
4406
|
+
for (let k = 1, kLen = rule.value.length; k < kLen; k++) {
|
|
4407
|
+
valueStr += ',"' + rule.value[k] + '"';
|
|
4408
|
+
}
|
|
4409
|
+
valueStr += ')';
|
|
4410
|
+
}
|
|
4411
|
+
else {
|
|
4412
|
+
valueStr += '(' + rule.value + ')';
|
|
4413
|
+
}
|
|
4381
4414
|
}
|
|
4382
4415
|
}
|
|
4383
4416
|
else {
|
|
4384
|
-
if (
|
|
4385
|
-
valueStr += '("' + rule.value
|
|
4386
|
-
|
|
4387
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4417
|
+
if (rule.operator.toString().indexOf('startswith') > -1) {
|
|
4418
|
+
valueStr += rule.value ? '("' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4419
|
+
}
|
|
4420
|
+
else if (rule.operator.toString().indexOf('endswith') > -1) {
|
|
4421
|
+
valueStr += rule.value ? '("%' + rule.value + '")' : '(' + rule.value + ')';
|
|
4422
|
+
}
|
|
4423
|
+
else if (rule.operator.toString().indexOf('contains') > -1) {
|
|
4424
|
+
valueStr += rule.value ? '("%' + rule.value + '%")' : '(' + rule.value + ')';
|
|
4390
4425
|
}
|
|
4391
4426
|
else {
|
|
4392
|
-
|
|
4427
|
+
if (rule.type === 'number' || typeof rule.value === 'boolean' || rule.value === null) {
|
|
4428
|
+
valueStr += rule.value;
|
|
4429
|
+
}
|
|
4430
|
+
else {
|
|
4431
|
+
valueStr += '"' + rule.value + '"';
|
|
4432
|
+
}
|
|
4393
4433
|
}
|
|
4394
4434
|
}
|
|
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;
|
|
4435
|
+
if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {
|
|
4436
|
+
if (enableEscape) {
|
|
4437
|
+
rule.field = '`' + rule.field + '`';
|
|
4409
4438
|
}
|
|
4410
4439
|
else {
|
|
4411
|
-
|
|
4440
|
+
if (rule.field.indexOf(' ') > -1) {
|
|
4441
|
+
rule.field = '"' + rule.field + '"';
|
|
4442
|
+
}
|
|
4412
4443
|
}
|
|
4413
|
-
|
|
4414
|
-
}
|
|
4415
|
-
if (rule.operator.toString().indexOf('null') > -1 || (rule.operator.toString().indexOf('empty') > -1)) {
|
|
4416
|
-
if (enableEscape) {
|
|
4417
|
-
rule.field = '`' + rule.field + '`';
|
|
4444
|
+
queryStr += rule.field + ' ' + ruleOpertor;
|
|
4418
4445
|
}
|
|
4419
4446
|
else {
|
|
4420
|
-
if (
|
|
4421
|
-
rule.field = '
|
|
4447
|
+
if (enableEscape) {
|
|
4448
|
+
rule.field = '`' + rule.field + '`';
|
|
4422
4449
|
}
|
|
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 + '"';
|
|
4450
|
+
else {
|
|
4451
|
+
if (rule.field.indexOf(' ') > -1) {
|
|
4452
|
+
rule.field = '"' + rule.field + '"';
|
|
4453
|
+
}
|
|
4433
4454
|
}
|
|
4455
|
+
queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;
|
|
4456
|
+
}
|
|
4457
|
+
if (rule.condition && rule.condition !== '') {
|
|
4458
|
+
condition = rule.condition;
|
|
4434
4459
|
}
|
|
4435
|
-
queryStr += rule.field + ' ' + ruleOpertor + ' ' + valueStr;
|
|
4436
|
-
}
|
|
4437
|
-
if (rule.condition && rule.condition !== '') {
|
|
4438
|
-
condition = rule.condition;
|
|
4439
4460
|
}
|
|
4440
|
-
|
|
4441
|
-
|
|
4442
|
-
|
|
4443
|
-
|
|
4461
|
+
if (j !== jLen - 1) {
|
|
4462
|
+
if (condition === '') {
|
|
4463
|
+
condition = rules.rules[j].condition;
|
|
4464
|
+
}
|
|
4465
|
+
condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
|
|
4466
|
+
queryStr += ' ' + condition + ' ';
|
|
4444
4467
|
}
|
|
4445
|
-
condition = sqlLocale ? this.l10n.getConstant(condition.toUpperCase()).toUpperCase() : condition.toUpperCase();
|
|
4446
|
-
queryStr += ' ' + condition + ' ';
|
|
4447
4468
|
}
|
|
4448
4469
|
}
|
|
4449
4470
|
if (!isRoot) {
|
|
@@ -4490,7 +4511,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4490
4511
|
*
|
|
4491
4512
|
* @param {RuleModel} rule - 'rule' to be passed to get the sql.
|
|
4492
4513
|
* @param {boolean} allowEscape - Set `true` if it exclude the escape character.
|
|
4493
|
-
*
|
|
4514
|
+
* @param {boolean} sqlLocale - Set `true` if Localization for Sql query.
|
|
4494
4515
|
* @returns {object} - Sql query from rules.
|
|
4495
4516
|
*/
|
|
4496
4517
|
getSqlFromRules(rule, allowEscape, sqlLocale) {
|
|
@@ -4534,6 +4555,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4534
4555
|
let matchValue;
|
|
4535
4556
|
for (let i = 0, iLen = operators.length; i < iLen; i++) {
|
|
4536
4557
|
regexStr = /^\w+$/.test(operators[i]) ? '\\b' : '';
|
|
4558
|
+
// eslint-disable-next-line
|
|
4537
4559
|
regex = new RegExp('^(' + operators[i] + ')' + regexStr, 'ig');
|
|
4538
4560
|
if (regex.exec(sqlString)) {
|
|
4539
4561
|
this.parser.push(['Operators', operators[i].toLowerCase()]);
|
|
@@ -4544,6 +4566,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4544
4566
|
if (!lastPasrser || (lastPasrser && lastPasrser[0] !== 'Literal')) {
|
|
4545
4567
|
for (let i = 0, iLen = conditions.length; i < iLen; i++) {
|
|
4546
4568
|
regexStr = /^\w+$/.test(conditions[i]) ? '\\b' : '';
|
|
4569
|
+
// eslint-disable-next-line
|
|
4547
4570
|
regex = new RegExp('^(' + conditions[i] + ')' + regexStr, 'ig');
|
|
4548
4571
|
if (regex.exec(sqlString)) {
|
|
4549
4572
|
this.parser.push(['Conditions', conditions[i].toLowerCase()]);
|
|
@@ -4553,6 +4576,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4553
4576
|
}
|
|
4554
4577
|
for (let i = 0, iLen = subOp.length; i < iLen; i++) {
|
|
4555
4578
|
regexStr = /^\w+$/.test(subOp[i]) ? '\\b' : '';
|
|
4579
|
+
// eslint-disable-next-line
|
|
4556
4580
|
regex = new RegExp('^(' + subOp[i] + ')' + regexStr, 'ig');
|
|
4557
4581
|
if (regex.exec(sqlString)) {
|
|
4558
4582
|
this.parser.push(['SubOperators', subOp[i].toLowerCase()]);
|
|
@@ -4596,30 +4620,39 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4596
4620
|
return matchValue.length + 2;
|
|
4597
4621
|
}
|
|
4598
4622
|
if (this.checkNumberLiteral(sqlString, sqlLocale)) {
|
|
4623
|
+
// eslint-disable-next-line
|
|
4599
4624
|
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4600
4625
|
this.parser.push(['Literal', matchValue]);
|
|
4601
4626
|
return matchValue.length;
|
|
4602
4627
|
}
|
|
4603
4628
|
//String
|
|
4629
|
+
// eslint-disable-next-line
|
|
4604
4630
|
if (/^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)) {
|
|
4631
|
+
// eslint-disable-next-line
|
|
4605
4632
|
matchValue = /^'((?:[^\\']+?|\\.|'')*)'(?!')/.exec(sqlString)[0];
|
|
4606
4633
|
this.parser.push(['String', matchValue]);
|
|
4607
4634
|
return matchValue.length;
|
|
4608
4635
|
}
|
|
4609
4636
|
//Double String
|
|
4637
|
+
// eslint-disable-next-line
|
|
4610
4638
|
if (/^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)) {
|
|
4639
|
+
// eslint-disable-next-line
|
|
4611
4640
|
matchValue = /^"([^\\"]*(?:\\.[^\\"]*)*)"/.exec(sqlString)[0];
|
|
4612
4641
|
this.parser.push(['DoubleString', matchValue]);
|
|
4613
4642
|
return matchValue.length;
|
|
4614
4643
|
}
|
|
4615
4644
|
//Number
|
|
4645
|
+
// eslint-disable-next-line
|
|
4616
4646
|
if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4647
|
+
// eslint-disable-next-line
|
|
4617
4648
|
matchValue = /^[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4618
4649
|
this.parser.push(['Number', matchValue]);
|
|
4619
4650
|
return matchValue.length;
|
|
4620
4651
|
}
|
|
4621
4652
|
//Negative Number
|
|
4653
|
+
// eslint-disable-next-line
|
|
4622
4654
|
if (/^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4655
|
+
// eslint-disable-next-line
|
|
4623
4656
|
matchValue = /^-?[0-9]+(\.[0-9]+)?/.exec(sqlString)[0];
|
|
4624
4657
|
this.parser.push(['Number', matchValue]);
|
|
4625
4658
|
return matchValue.length;
|
|
@@ -4645,13 +4678,14 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4645
4678
|
return true;
|
|
4646
4679
|
}
|
|
4647
4680
|
else {
|
|
4681
|
+
// eslint-disable-next-line
|
|
4648
4682
|
if (/^[0-9]+(\.[0-9]+)?/.exec(sqlString)) {
|
|
4649
4683
|
const secParser = this.parser[this.parser.length - 2];
|
|
4650
4684
|
const betweenParser = this.parser[this.parser.length - 3];
|
|
4651
4685
|
if (lastParser[0] === 'Left' && (secParser && secParser[0] === 'Conditions')) {
|
|
4652
4686
|
return true;
|
|
4653
4687
|
}
|
|
4654
|
-
|
|
4688
|
+
const betweenOperator = sqlLocale ? this.l10n.getConstant('Between').toLowerCase() : 'between';
|
|
4655
4689
|
if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf(betweenOperator) < 0)) {
|
|
4656
4690
|
return true;
|
|
4657
4691
|
}
|
|
@@ -4666,7 +4700,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4666
4700
|
'is empty': 'isempty', 'is null': 'isnull', 'is not null': 'isnotnull', 'is not empty': 'isnotempty'
|
|
4667
4701
|
};
|
|
4668
4702
|
if (sqlLocale) {
|
|
4669
|
-
|
|
4703
|
+
const localeOperator = Object.keys(this.sqlOperators);
|
|
4670
4704
|
for (let i = 0; i < localeOperator.length; i++) {
|
|
4671
4705
|
if (this.sqlOperators[localeOperator[i]] === operator.toUpperCase()) {
|
|
4672
4706
|
if (value && value.indexOf('%') === 0 && value[value.length - 1] === '%') {
|
|
@@ -4702,7 +4736,7 @@ let QueryBuilder = class QueryBuilder extends Component {
|
|
|
4702
4736
|
return 'equal';
|
|
4703
4737
|
}
|
|
4704
4738
|
}
|
|
4705
|
-
return operators[operator];
|
|
4739
|
+
return operators[`${operator}`];
|
|
4706
4740
|
}
|
|
4707
4741
|
getTypeFromColumn(rules) {
|
|
4708
4742
|
const columnData = this.getColumn(rules.field);
|