@budibase/backend-core 2.29.21 → 2.29.23
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 +83 -40
- package/dist/index.js.map +3 -3
- package/dist/index.js.meta.json +1 -1
- package/dist/package.json +4 -4
- package/dist/plugins.js.meta.json +1 -1
- package/dist/src/sql/sql.d.ts +2 -2
- package/dist/src/sql/sql.js +74 -42
- package/dist/src/sql/sql.js.map +1 -1
- package/dist/src/sql/sqlTable.d.ts +3 -3
- package/dist/src/sql/sqlTable.js.map +1 -1
- package/dist/src/sql/utils.d.ts +1 -0
- package/dist/src/sql/utils.js +5 -0
- package/dist/src/sql/utils.js.map +1 -1
- package/dist/tests/core/utilities/structures/koa.js.map +1 -1
- package/package.json +4 -4
- package/src/sql/sql.ts +113 -44
- package/src/sql/sqlTable.ts +3 -3
- package/src/sql/utils.ts +5 -0
- package/tests/core/utilities/structures/koa.ts +1 -1
package/dist/index.js
CHANGED
|
@@ -56566,6 +56566,7 @@ __export(utils_exports3, {
|
|
|
56566
56566
|
isRowId: () => isRowId,
|
|
56567
56567
|
isValidFilter: () => isValidFilter,
|
|
56568
56568
|
isValidISODateString: () => isValidISODateString,
|
|
56569
|
+
isValidTime: () => isValidTime,
|
|
56569
56570
|
sqlLog: () => sqlLog
|
|
56570
56571
|
});
|
|
56571
56572
|
|
|
@@ -59437,6 +59438,7 @@ var DOUBLE_SEPARATOR = `${SEPARATOR}${SEPARATOR}`;
|
|
|
59437
59438
|
var ROW_ID_REGEX = /^\[.*]$/g;
|
|
59438
59439
|
var ENCODED_SPACE = encodeURIComponent(" ");
|
|
59439
59440
|
var ISO_DATE_REGEX = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z$/;
|
|
59441
|
+
var TIME_REGEX = /^(?:\d{2}:)?(?:\d{2}:)(?:\d{2})$/;
|
|
59440
59442
|
function isExternalTableID(tableId) {
|
|
59441
59443
|
return tableId.startsWith("datasource" /* DATASOURCE */ + SEPARATOR);
|
|
59442
59444
|
}
|
|
@@ -59543,6 +59545,9 @@ function isValidISODateString(str) {
|
|
|
59543
59545
|
function isValidFilter(value) {
|
|
59544
59546
|
return value != null && value !== "";
|
|
59545
59547
|
}
|
|
59548
|
+
function isValidTime(value) {
|
|
59549
|
+
return TIME_REGEX.test(value);
|
|
59550
|
+
}
|
|
59546
59551
|
function sqlLog(client, query, values2) {
|
|
59547
59552
|
if (!environment_default.SQL_LOGGING_ENABLE) {
|
|
59548
59553
|
return;
|
|
@@ -67621,27 +67626,20 @@ var sqlTable_default = SqlTableQueryBuilder;
|
|
|
67621
67626
|
// src/sql/sql.ts
|
|
67622
67627
|
var envLimit = environment_default.SQL_MAX_ROWS ? parseInt(environment_default.SQL_MAX_ROWS) : null;
|
|
67623
67628
|
var BASE_LIMIT = envLimit || 5e3;
|
|
67624
|
-
function
|
|
67625
|
-
let start2, end2;
|
|
67629
|
+
function quote(client, str) {
|
|
67626
67630
|
switch (client) {
|
|
67627
|
-
case "mysql2" /* MY_SQL */:
|
|
67628
|
-
start2 = end2 = "`";
|
|
67629
|
-
break;
|
|
67630
67631
|
case "sqlite3" /* SQL_LITE */:
|
|
67631
67632
|
case "oracledb" /* ORACLE */:
|
|
67632
67633
|
case "pg" /* POSTGRES */:
|
|
67633
|
-
|
|
67634
|
-
break;
|
|
67634
|
+
return `"${str}"`;
|
|
67635
67635
|
case "mssql" /* MS_SQL */:
|
|
67636
|
-
|
|
67637
|
-
|
|
67638
|
-
|
|
67639
|
-
default:
|
|
67640
|
-
throw new Error("Unknown client generating like key");
|
|
67636
|
+
return `[${str}]`;
|
|
67637
|
+
case "mysql2" /* MY_SQL */:
|
|
67638
|
+
return `\`${str}\``;
|
|
67641
67639
|
}
|
|
67642
|
-
|
|
67643
|
-
|
|
67644
|
-
return key;
|
|
67640
|
+
}
|
|
67641
|
+
function quotedIdentifier(client, key) {
|
|
67642
|
+
return key.split(".").map((part) => quote(client, part)).join(".");
|
|
67645
67643
|
}
|
|
67646
67644
|
function parse(input) {
|
|
67647
67645
|
if (Array.isArray(input)) {
|
|
@@ -67684,27 +67682,51 @@ function parseFilters(filters) {
|
|
|
67684
67682
|
}
|
|
67685
67683
|
function generateSelectStatement(json, knex3) {
|
|
67686
67684
|
const { resource, meta } = json;
|
|
67685
|
+
const client = knex3.client.config.client;
|
|
67687
67686
|
if (!resource || !resource.fields || resource.fields.length === 0) {
|
|
67688
67687
|
return "*";
|
|
67689
67688
|
}
|
|
67690
|
-
const schema = meta
|
|
67689
|
+
const schema = meta.table.schema;
|
|
67691
67690
|
return resource.fields.map((field) => {
|
|
67692
|
-
const
|
|
67693
|
-
|
|
67694
|
-
|
|
67695
|
-
|
|
67696
|
-
|
|
67697
|
-
|
|
67698
|
-
|
|
67699
|
-
|
|
67700
|
-
|
|
67701
|
-
|
|
67702
|
-
|
|
67691
|
+
const parts = field.split(/\./g);
|
|
67692
|
+
let table = void 0;
|
|
67693
|
+
let column = void 0;
|
|
67694
|
+
if (parts.length === 1) {
|
|
67695
|
+
column = parts[0];
|
|
67696
|
+
}
|
|
67697
|
+
if (parts.length === 2) {
|
|
67698
|
+
table = parts[0];
|
|
67699
|
+
column = parts[1];
|
|
67700
|
+
}
|
|
67701
|
+
if (parts.length > 2) {
|
|
67702
|
+
table = parts[0];
|
|
67703
|
+
column = parts.slice(1).join(".");
|
|
67704
|
+
}
|
|
67705
|
+
if (!column) {
|
|
67706
|
+
throw new Error(`Invalid field name: ${field}`);
|
|
67707
|
+
}
|
|
67708
|
+
const columnSchema = schema[column];
|
|
67709
|
+
if (client === "pg" /* POSTGRES */ && columnSchema?.externalType?.includes("money")) {
|
|
67710
|
+
return knex3.raw(
|
|
67711
|
+
`${quotedIdentifier(
|
|
67712
|
+
client,
|
|
67713
|
+
[table, column].join(".")
|
|
67714
|
+
)}::money::numeric as ${quote(client, field)}`
|
|
67715
|
+
);
|
|
67703
67716
|
}
|
|
67704
|
-
if (
|
|
67717
|
+
if (client === "mssql" /* MS_SQL */ && columnSchema?.type === "datetime" /* DATETIME */ && columnSchema.timeOnly) {
|
|
67705
67718
|
return knex3.raw(`CONVERT(varchar, ${field}, 108) as "${field}"`);
|
|
67706
67719
|
}
|
|
67707
|
-
|
|
67720
|
+
if (table) {
|
|
67721
|
+
return knex3.raw(
|
|
67722
|
+
`${quote(client, table)}.${quote(client, column)} as ${quote(
|
|
67723
|
+
client,
|
|
67724
|
+
field
|
|
67725
|
+
)}`
|
|
67726
|
+
);
|
|
67727
|
+
} else {
|
|
67728
|
+
return knex3.raw(`${quote(client, field)} as ${quote(client, field)}`);
|
|
67729
|
+
}
|
|
67708
67730
|
});
|
|
67709
67731
|
}
|
|
67710
67732
|
function getTableName(table) {
|
|
@@ -67780,9 +67802,10 @@ var InternalBuilder = class {
|
|
|
67780
67802
|
query = query[fnc](key, "ilike", `%${value}%`);
|
|
67781
67803
|
} else {
|
|
67782
67804
|
const rawFnc = `${fnc}Raw`;
|
|
67783
|
-
query = query[rawFnc](
|
|
67784
|
-
|
|
67785
|
-
|
|
67805
|
+
query = query[rawFnc](
|
|
67806
|
+
`LOWER(${quotedIdentifier(this.client, key)}) LIKE ?`,
|
|
67807
|
+
[`%${value.toLowerCase()}%`]
|
|
67808
|
+
);
|
|
67786
67809
|
}
|
|
67787
67810
|
};
|
|
67788
67811
|
const contains = (mode, any = false) => {
|
|
@@ -67829,7 +67852,10 @@ var InternalBuilder = class {
|
|
|
67829
67852
|
} else {
|
|
67830
67853
|
value[i] = `%${value[i]}%`;
|
|
67831
67854
|
}
|
|
67832
|
-
statement += (statement ? andOr : "") + `COALESCE(LOWER(${
|
|
67855
|
+
statement += (statement ? andOr : "") + `COALESCE(LOWER(${quotedIdentifier(
|
|
67856
|
+
this.client,
|
|
67857
|
+
key
|
|
67858
|
+
)}), '') LIKE ?`;
|
|
67833
67859
|
}
|
|
67834
67860
|
if (statement === "") {
|
|
67835
67861
|
return;
|
|
@@ -67857,9 +67883,10 @@ var InternalBuilder = class {
|
|
|
67857
67883
|
query = query[fnc](key, "ilike", `${value}%`);
|
|
67858
67884
|
} else {
|
|
67859
67885
|
const rawFnc = `${fnc}Raw`;
|
|
67860
|
-
query = query[rawFnc](
|
|
67861
|
-
|
|
67862
|
-
|
|
67886
|
+
query = query[rawFnc](
|
|
67887
|
+
`LOWER(${quotedIdentifier(this.client, key)}) LIKE ?`,
|
|
67888
|
+
[`${value.toLowerCase()}%`]
|
|
67889
|
+
);
|
|
67863
67890
|
}
|
|
67864
67891
|
});
|
|
67865
67892
|
}
|
|
@@ -67892,12 +67919,20 @@ var InternalBuilder = class {
|
|
|
67892
67919
|
const fnc = allOr ? "orWhereRaw" : "whereRaw";
|
|
67893
67920
|
if (this.client === "mssql" /* MS_SQL */) {
|
|
67894
67921
|
query = query[fnc](
|
|
67895
|
-
`CASE WHEN ${
|
|
67922
|
+
`CASE WHEN ${quotedIdentifier(
|
|
67923
|
+
this.client,
|
|
67924
|
+
key
|
|
67925
|
+
)} = ? THEN 1 ELSE 0 END = 1`,
|
|
67926
|
+
[value]
|
|
67927
|
+
);
|
|
67928
|
+
} else if (this.client === "oracledb" /* ORACLE */) {
|
|
67929
|
+
query = query[fnc](
|
|
67930
|
+
`COALESCE(${quotedIdentifier(this.client, key)}, -1) = ?`,
|
|
67896
67931
|
[value]
|
|
67897
67932
|
);
|
|
67898
67933
|
} else {
|
|
67899
67934
|
query = query[fnc](
|
|
67900
|
-
`COALESCE(${
|
|
67935
|
+
`COALESCE(${quotedIdentifier(this.client, key)} = ?, FALSE)`,
|
|
67901
67936
|
[value]
|
|
67902
67937
|
);
|
|
67903
67938
|
}
|
|
@@ -67908,12 +67943,20 @@ var InternalBuilder = class {
|
|
|
67908
67943
|
const fnc = allOr ? "orWhereRaw" : "whereRaw";
|
|
67909
67944
|
if (this.client === "mssql" /* MS_SQL */) {
|
|
67910
67945
|
query = query[fnc](
|
|
67911
|
-
`CASE WHEN ${
|
|
67946
|
+
`CASE WHEN ${quotedIdentifier(
|
|
67947
|
+
this.client,
|
|
67948
|
+
key
|
|
67949
|
+
)} = ? THEN 1 ELSE 0 END = 0`,
|
|
67950
|
+
[value]
|
|
67951
|
+
);
|
|
67952
|
+
} else if (this.client === "oracledb" /* ORACLE */) {
|
|
67953
|
+
query = query[fnc](
|
|
67954
|
+
`COALESCE(${quotedIdentifier(this.client, key)}, -1) != ?`,
|
|
67912
67955
|
[value]
|
|
67913
67956
|
);
|
|
67914
67957
|
} else {
|
|
67915
67958
|
query = query[fnc](
|
|
67916
|
-
`COALESCE(${
|
|
67959
|
+
`COALESCE(${quotedIdentifier(this.client, key)} != ?, TRUE)`,
|
|
67917
67960
|
[value]
|
|
67918
67961
|
);
|
|
67919
67962
|
}
|