@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.
@@ -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 && (isNullOrUndefined(rule.rules[index].value) &&
850
- rule.rules[index].type !== 'date') || rule.rules[index].value === '' ||
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 && rule.rules[index].field.toLowerCase() !== column.field.toLowerCase()) {
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) : this.arrayPredicate(ruleColl[i]);
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
- queryStr += 'NOT (';
4441
+ rulesNotCondition = sqlLocale ? this.l10n.getConstant('NOT').toUpperCase() + ' (' : 'NOT (';
4442
+ queryStr += rulesNotCondition;
4421
4443
  }
4422
4444
  else {
4423
- queryStr += ' NOT (';
4445
+ rulesNotCondition = sqlLocale ? ' ' + this.l10n.getConstant('NOT').toUpperCase() + ' (' : ' NOT (';
4446
+ queryStr += rulesNotCondition;
4424
4447
  }
4425
4448
  }
4426
- for (var j = 0, jLen = rules.rules.length; j < jLen; j++) {
4427
- if (rules.rules[j].rules) {
4428
- queryStr = this.getSqlString(rules.rules[j], enableEscape, queryStr);
4429
- }
4430
- else {
4431
- var rule = rules.rules[j];
4432
- var valueStr = '';
4433
- if (rule.value instanceof Array) {
4434
- if (rule.operator.toString().indexOf('between') > -1) {
4435
- if (rule.type === 'date' && !this.isDateFunction(rule.value[0])) {
4436
- valueStr += '"' + rule.value[0] + '" AND "' + rule.value[1] + '"';
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
- valueStr += rule.value[0] + ' AND ' + rule.value[1];
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 (typeof rule.value[0] === 'string' && rule.value !== null) {
4444
- valueStr += '("' + rule.value[0] + '"';
4445
- for (var k = 1, kLen = rule.value.length; k < kLen; k++) {
4446
- valueStr += ',"' + rule.value[k] + '"';
4447
- }
4448
- valueStr += ')';
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
- valueStr += '(' + rule.value + ')';
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
- else {
4456
- if (rule.operator.toString().indexOf('startswith') > -1) {
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
- valueStr += '"' + rule.value + '"';
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 (rule.field.indexOf(' ') > -1) {
4480
- rule.field = '"' + rule.field + '"';
4512
+ if (enableEscape) {
4513
+ rule.field = '`' + rule.field + '`';
4481
4514
  }
4482
- }
4483
- queryStr += rule.field + ' ' + this.operators[rule.operator];
4484
- }
4485
- else {
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
- if (j !== jLen - 1) {
4501
- if (condition === '') {
4502
- condition = rules.rules[j].condition;
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 = ['AND', 'OR', 'NOT'];
4570
- var subOp = ['IN', 'NOT IN', 'LIKE', 'NOT LIKE', 'BETWEEN', 'NOT BETWEEN', 'IS NULL', 'IS NOT NULL', 'IS EMPTY', 'IS NOT EMPTY'];
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
- if (lastParser[0] === 'Conditions' && (betweenParser && betweenParser[1].indexOf('between') < 0)) {
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
- return columnData.type;
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;