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