@budibase/backend-core 2.29.21 → 2.29.22

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/dist/index.js CHANGED
@@ -67621,27 +67621,20 @@ var sqlTable_default = SqlTableQueryBuilder;
67621
67621
  // src/sql/sql.ts
67622
67622
  var envLimit = environment_default.SQL_MAX_ROWS ? parseInt(environment_default.SQL_MAX_ROWS) : null;
67623
67623
  var BASE_LIMIT = envLimit || 5e3;
67624
- function likeKey(client, key) {
67625
- let start2, end2;
67624
+ function quote(client, str) {
67626
67625
  switch (client) {
67627
- case "mysql2" /* MY_SQL */:
67628
- start2 = end2 = "`";
67629
- break;
67630
67626
  case "sqlite3" /* SQL_LITE */:
67631
67627
  case "oracledb" /* ORACLE */:
67632
67628
  case "pg" /* POSTGRES */:
67633
- start2 = end2 = '"';
67634
- break;
67629
+ return `"${str}"`;
67635
67630
  case "mssql" /* MS_SQL */:
67636
- start2 = "[";
67637
- end2 = "]";
67638
- break;
67639
- default:
67640
- throw new Error("Unknown client generating like key");
67631
+ return `[${str}]`;
67632
+ case "mysql2" /* MY_SQL */:
67633
+ return `\`${str}\``;
67641
67634
  }
67642
- const parts = key.split(".");
67643
- key = parts.map((part) => `${start2}${part}${end2}`).join(".");
67644
- return key;
67635
+ }
67636
+ function quotedIdentifier(client, key) {
67637
+ return key.split(".").map((part) => quote(client, part)).join(".");
67645
67638
  }
67646
67639
  function parse(input) {
67647
67640
  if (Array.isArray(input)) {
@@ -67684,27 +67677,51 @@ function parseFilters(filters) {
67684
67677
  }
67685
67678
  function generateSelectStatement(json, knex3) {
67686
67679
  const { resource, meta } = json;
67680
+ const client = knex3.client.config.client;
67687
67681
  if (!resource || !resource.fields || resource.fields.length === 0) {
67688
67682
  return "*";
67689
67683
  }
67690
- const schema = meta?.table?.schema;
67684
+ const schema = meta.table.schema;
67691
67685
  return resource.fields.map((field) => {
67692
- const fieldNames = field.split(/\./g);
67693
- const tableName = fieldNames[0];
67694
- const columnName = fieldNames[1];
67695
- const columnSchema = schema?.[columnName];
67696
- if (columnSchema && knex3.client.config.client === "pg" /* POSTGRES */) {
67697
- const externalType = schema[columnName].externalType;
67698
- if (externalType?.includes("money")) {
67699
- return knex3.raw(
67700
- `"${tableName}"."${columnName}"::money::numeric as "${field}"`
67701
- );
67702
- }
67686
+ const parts = field.split(/\./g);
67687
+ let table = void 0;
67688
+ let column = void 0;
67689
+ if (parts.length === 1) {
67690
+ column = parts[0];
67691
+ }
67692
+ if (parts.length === 2) {
67693
+ table = parts[0];
67694
+ column = parts[1];
67695
+ }
67696
+ if (parts.length > 2) {
67697
+ table = parts[0];
67698
+ column = parts.slice(1).join(".");
67699
+ }
67700
+ if (!column) {
67701
+ throw new Error(`Invalid field name: ${field}`);
67702
+ }
67703
+ const columnSchema = schema[column];
67704
+ if (client === "pg" /* POSTGRES */ && columnSchema?.externalType?.includes("money")) {
67705
+ return knex3.raw(
67706
+ `${quotedIdentifier(
67707
+ client,
67708
+ [table, column].join(".")
67709
+ )}::money::numeric as ${quote(client, field)}`
67710
+ );
67703
67711
  }
67704
- if (knex3.client.config.client === "mssql" /* MS_SQL */ && columnSchema?.type === "datetime" /* DATETIME */ && columnSchema.timeOnly) {
67712
+ if (client === "mssql" /* MS_SQL */ && columnSchema?.type === "datetime" /* DATETIME */ && columnSchema.timeOnly) {
67705
67713
  return knex3.raw(`CONVERT(varchar, ${field}, 108) as "${field}"`);
67706
67714
  }
67707
- return `${field} as ${field}`;
67715
+ if (table) {
67716
+ return knex3.raw(
67717
+ `${quote(client, table)}.${quote(client, column)} as ${quote(
67718
+ client,
67719
+ field
67720
+ )}`
67721
+ );
67722
+ } else {
67723
+ return knex3.raw(`${quote(client, field)} as ${quote(client, field)}`);
67724
+ }
67708
67725
  });
67709
67726
  }
67710
67727
  function getTableName(table) {
@@ -67780,9 +67797,10 @@ var InternalBuilder = class {
67780
67797
  query = query[fnc](key, "ilike", `%${value}%`);
67781
67798
  } else {
67782
67799
  const rawFnc = `${fnc}Raw`;
67783
- query = query[rawFnc](`LOWER(${likeKey(this.client, key)}) LIKE ?`, [
67784
- `%${value.toLowerCase()}%`
67785
- ]);
67800
+ query = query[rawFnc](
67801
+ `LOWER(${quotedIdentifier(this.client, key)}) LIKE ?`,
67802
+ [`%${value.toLowerCase()}%`]
67803
+ );
67786
67804
  }
67787
67805
  };
67788
67806
  const contains = (mode, any = false) => {
@@ -67829,7 +67847,10 @@ var InternalBuilder = class {
67829
67847
  } else {
67830
67848
  value[i] = `%${value[i]}%`;
67831
67849
  }
67832
- statement += (statement ? andOr : "") + `COALESCE(LOWER(${likeKey(this.client, key)}), '') LIKE ?`;
67850
+ statement += (statement ? andOr : "") + `COALESCE(LOWER(${quotedIdentifier(
67851
+ this.client,
67852
+ key
67853
+ )}), '') LIKE ?`;
67833
67854
  }
67834
67855
  if (statement === "") {
67835
67856
  return;
@@ -67857,9 +67878,10 @@ var InternalBuilder = class {
67857
67878
  query = query[fnc](key, "ilike", `${value}%`);
67858
67879
  } else {
67859
67880
  const rawFnc = `${fnc}Raw`;
67860
- query = query[rawFnc](`LOWER(${likeKey(this.client, key)}) LIKE ?`, [
67861
- `${value.toLowerCase()}%`
67862
- ]);
67881
+ query = query[rawFnc](
67882
+ `LOWER(${quotedIdentifier(this.client, key)}) LIKE ?`,
67883
+ [`${value.toLowerCase()}%`]
67884
+ );
67863
67885
  }
67864
67886
  });
67865
67887
  }
@@ -67892,12 +67914,15 @@ var InternalBuilder = class {
67892
67914
  const fnc = allOr ? "orWhereRaw" : "whereRaw";
67893
67915
  if (this.client === "mssql" /* MS_SQL */) {
67894
67916
  query = query[fnc](
67895
- `CASE WHEN ${likeKey(this.client, key)} = ? THEN 1 ELSE 0 END = 1`,
67917
+ `CASE WHEN ${quotedIdentifier(
67918
+ this.client,
67919
+ key
67920
+ )} = ? THEN 1 ELSE 0 END = 1`,
67896
67921
  [value]
67897
67922
  );
67898
67923
  } else {
67899
67924
  query = query[fnc](
67900
- `COALESCE(${likeKey(this.client, key)} = ?, FALSE)`,
67925
+ `COALESCE(${quotedIdentifier(this.client, key)} = ?, FALSE)`,
67901
67926
  [value]
67902
67927
  );
67903
67928
  }
@@ -67908,12 +67933,15 @@ var InternalBuilder = class {
67908
67933
  const fnc = allOr ? "orWhereRaw" : "whereRaw";
67909
67934
  if (this.client === "mssql" /* MS_SQL */) {
67910
67935
  query = query[fnc](
67911
- `CASE WHEN ${likeKey(this.client, key)} = ? THEN 1 ELSE 0 END = 0`,
67936
+ `CASE WHEN ${quotedIdentifier(
67937
+ this.client,
67938
+ key
67939
+ )} = ? THEN 1 ELSE 0 END = 0`,
67912
67940
  [value]
67913
67941
  );
67914
67942
  } else {
67915
67943
  query = query[fnc](
67916
- `COALESCE(${likeKey(this.client, key)} != ?, TRUE)`,
67944
+ `COALESCE(${quotedIdentifier(this.client, key)} != ?, TRUE)`,
67917
67945
  [value]
67918
67946
  );
67919
67947
  }