@budibase/backend-core 2.29.4 → 2.29.7

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
@@ -54827,8 +54827,10 @@ var DEFAULT_BB_DATASOURCE_ID = "datasource_internal_bb_default";
54827
54827
  // ../shared-core/src/filters.ts
54828
54828
  var filters_exports = {};
54829
54829
  __export(filters_exports, {
54830
+ ColumnSplitter: () => ColumnSplitter,
54830
54831
  NoEmptyFilterStrings: () => NoEmptyFilterStrings,
54831
54832
  buildQuery: () => buildQuery,
54833
+ getKeyNumbering: () => getKeyNumbering,
54832
54834
  getValidOperatorsForType: () => getValidOperatorsForType,
54833
54835
  hasFilters: () => hasFilters,
54834
54836
  limit: () => limit,
@@ -55064,12 +55066,46 @@ var cleanupQuery = (query) => {
55064
55066
  return query;
55065
55067
  };
55066
55068
  var removeKeyNumbering = (key) => {
55069
+ return getKeyNumbering(key).key;
55070
+ };
55071
+ var getKeyNumbering = (key) => {
55067
55072
  if (typeof key === "string" && key.match(/\d[0-9]*:/g) != null) {
55068
55073
  const parts = key.split(":");
55069
- parts.shift();
55070
- return parts.join(":");
55074
+ const number = parts.shift();
55075
+ return { prefix: `${number}:`, key: parts.join(":") };
55071
55076
  } else {
55072
- return key;
55077
+ return { key };
55078
+ }
55079
+ };
55080
+ var ColumnSplitter = class {
55081
+ constructor(tables) {
55082
+ this.tableNames = tables.map((table) => table.name);
55083
+ this.tableIds = tables.map((table) => table._id);
55084
+ this.relationshipColumnNames = tables.flatMap(
55085
+ (table) => Object.keys(table.schema).filter(
55086
+ (columnName) => table.schema[columnName].type === "link" /* LINK */
55087
+ )
55088
+ );
55089
+ this.relationships = this.tableNames.concat(this.tableIds).concat(this.relationshipColumnNames).sort((a, b) => b.length - a.length);
55090
+ }
55091
+ run(key) {
55092
+ let { prefix, key: splitKey } = getKeyNumbering(key);
55093
+ let relationship;
55094
+ for (let possibleRelationship of this.relationships) {
55095
+ const withDot = `${possibleRelationship}.`;
55096
+ if (splitKey.startsWith(withDot)) {
55097
+ const finalKeyParts = splitKey.split(withDot);
55098
+ finalKeyParts.shift();
55099
+ relationship = withDot;
55100
+ splitKey = finalKeyParts.join(".");
55101
+ break;
55102
+ }
55103
+ }
55104
+ return {
55105
+ numberPrefix: prefix,
55106
+ relationshipPrefix: relationship,
55107
+ column: splitKey
55108
+ };
55073
55109
  }
55074
55110
  };
55075
55111
  var buildQuery = (filter) => {
@@ -67180,14 +67216,20 @@ var import_knex2 = require("knex");
67180
67216
 
67181
67217
  // src/sql/sqlStatements.ts
67182
67218
  var SqlStatements = class {
67183
- constructor(client, table, { allOr } = {}) {
67219
+ constructor(client, table, { allOr, columnPrefix } = {}) {
67184
67220
  this.client = client;
67185
67221
  this.table = table;
67186
67222
  this.allOr = allOr;
67223
+ this.columnPrefix = columnPrefix;
67187
67224
  }
67188
67225
  getField(key) {
67189
67226
  const fieldName = key.split(".")[1];
67190
- return this.table.schema[fieldName];
67227
+ let found = this.table.schema[fieldName];
67228
+ if (!found && this.columnPrefix) {
67229
+ const prefixRemovedFieldName = fieldName.replace(this.columnPrefix, "");
67230
+ found = this.table.schema[prefixRemovedFieldName];
67231
+ }
67232
+ return found;
67191
67233
  }
67192
67234
  between(query, key, low, high) {
67193
67235
  const field = this.getField(key);
@@ -67563,7 +67605,10 @@ var InternalBuilder = class {
67563
67605
  }
67564
67606
  filters = parseFilters(filters);
67565
67607
  const allOr = filters.allOr;
67566
- const sqlStatements = new SqlStatements(this.client, table, { allOr });
67608
+ const sqlStatements = new SqlStatements(this.client, table, {
67609
+ allOr,
67610
+ columnPrefix: opts.columnPrefix
67611
+ });
67567
67612
  const tableName = this.client === "sqlite3" /* SQL_LITE */ ? table._id : table.name;
67568
67613
  function getTableAlias(name) {
67569
67614
  const alias = opts.aliases?.[name];
@@ -67938,6 +67983,7 @@ var InternalBuilder = class {
67938
67983
  query = this.addSorting(query, json);
67939
67984
  }
67940
67985
  query = this.addFilters(query, filters, json.meta.table, {
67986
+ columnPrefix: json.meta.columnPrefix,
67941
67987
  aliases: tableAliases
67942
67988
  });
67943
67989
  const alias = tableAliases?.[tableName] || tableName;
@@ -67963,6 +68009,7 @@ var InternalBuilder = class {
67963
68009
  query = query.limit(limits.base);
67964
68010
  }
67965
68011
  return this.addFilters(query, filters, json.meta.table, {
68012
+ columnPrefix: json.meta.columnPrefix,
67966
68013
  relationship: true,
67967
68014
  aliases: tableAliases
67968
68015
  });
@@ -67972,6 +68019,7 @@ var InternalBuilder = class {
67972
68019
  let query = this.knexWithAlias(knex3, endpoint, tableAliases);
67973
68020
  const parsedBody = parseBody(body2);
67974
68021
  query = this.addFilters(query, filters, json.meta.table, {
68022
+ columnPrefix: json.meta.columnPrefix,
67975
68023
  aliases: tableAliases
67976
68024
  });
67977
68025
  if (opts.disableReturning) {
@@ -67984,6 +68032,7 @@ var InternalBuilder = class {
67984
68032
  const { endpoint, filters, tableAliases } = json;
67985
68033
  let query = this.knexWithAlias(knex3, endpoint, tableAliases);
67986
68034
  query = this.addFilters(query, filters, json.meta.table, {
68035
+ columnPrefix: json.meta.columnPrefix,
67987
68036
  aliases: tableAliases
67988
68037
  });
67989
68038
  if (opts.disableReturning) {