orange-orm 5.2.4 → 5.3.1

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.
Files changed (42) hide show
  1. package/README.md +10 -0
  2. package/deno.lock +75 -0
  3. package/dist/index.browser.mjs +116 -50
  4. package/dist/index.mjs +444 -69
  5. package/docs/changelog.md +5 -0
  6. package/other.db +0 -0
  7. package/package.json +2 -1
  8. package/src/bunSqlite/newTransaction.js +2 -1
  9. package/src/client/clientMap.js +2 -0
  10. package/src/client/createProviders.js +8 -0
  11. package/src/client/index.js +2 -1
  12. package/src/client/map.js +1 -0
  13. package/src/getManyDto.js +7 -5
  14. package/src/index.d.ts +1 -0
  15. package/src/index.js +11 -1
  16. package/src/map.d.ts +3 -0
  17. package/src/map2.d.ts +3 -0
  18. package/src/mariaDb/newDatabase.js +101 -0
  19. package/src/mariaDb/newPool.js +13 -0
  20. package/src/mariaDb/newTransaction.js +126 -0
  21. package/src/mssql/newTransaction.js +2 -1
  22. package/src/mySql/newTransaction.js +27 -1
  23. package/src/nodeSqlite/newTransaction.js +2 -1
  24. package/src/oracle/newTransaction.js +2 -1
  25. package/src/patchTable.js +1 -5
  26. package/src/pg/pool/newPgPool.js +1 -1
  27. package/src/sqlite3/newTransaction.js +2 -1
  28. package/src/table/column/bigint/newEncode.js +1 -1
  29. package/src/table/column/date/newEncode.js +1 -1
  30. package/src/table/column/dateWithTimeZone/newEncode.js +14 -10
  31. package/src/table/column/string/newLikeColumnArg.js +1 -1
  32. package/src/table/column.js +2 -7
  33. package/src/table/commands/delete/singleCommand/newSingleCommandCore.js +5 -1
  34. package/src/table/commands/newInsertAndForgetCommand.js +2 -2
  35. package/src/table/commands/newUpdateCommandCore.js +23 -3
  36. package/src/table/isJsonUpdateSupported.js +1 -1
  37. package/src/table/relatedTable/aggregate.js +4 -5
  38. package/src/table/relatedTable/where.js +4 -5
  39. package/src/table/relation/newManyCacheCore.js +1 -1
  40. package/src/table/resultToRows/dbRowToRow.js +38 -5
  41. package/src/tedious/newTransaction.js +2 -1
  42. package/src/table/query/extractLimitQuery.js +0 -23
@@ -28,18 +28,13 @@ function defineColumn(column, table) {
28
28
  return c;
29
29
  };
30
30
 
31
- c.date = function() {
32
- require('./column/date')(column);
33
- return c;
34
- };
35
-
36
31
  c.dateWithTimeZone = function() {
37
32
  require('./column/dateWithTimeZone')(column);
38
33
  return c;
39
34
  };
40
35
 
41
- c.numeric = function(optionalPrecision,optionalScale) {
42
- require('./column/numeric')(column,optionalPrecision,optionalScale);
36
+ c.numeric = function() {
37
+ require('./column/numeric')(column);
43
38
  return c;
44
39
  };
45
40
 
@@ -60,7 +60,7 @@ function newSingleCommandCore(context, table, filter, alias, concurrencyState) {
60
60
  if (engine === 'pg') {
61
61
  return newParameterized(columnSql + ' IS NOT DISTINCT FROM ' + encoded.sql(), encoded.parameters);
62
62
  }
63
- if (engine === 'mysql') {
63
+ if (engine === 'mysql' || engine === 'mariadb') {
64
64
  return newParameterized(columnSql + ' <=> ' + encoded.sql(), encoded.parameters);
65
65
  }
66
66
  if (engine === 'sqlite') {
@@ -101,6 +101,10 @@ function newSingleCommandCore(context, table, filter, alias, concurrencyState) {
101
101
  const jsonValue = JSON.stringify(value === undefined ? null : value);
102
102
  return newParameterized('CAST(? AS JSON)', [jsonValue]);
103
103
  }
104
+ if (engine === 'mariadb') {
105
+ const jsonValue = JSON.stringify(value === undefined ? null : value);
106
+ return newParameterized('JSON_EXTRACT(?, \'$\')', [jsonValue]);
107
+ }
104
108
  if (engine === 'sqlite') {
105
109
  if (isJsonObject(value)) {
106
110
  const jsonValue = JSON.stringify(value);
@@ -3,8 +3,8 @@ var newImmutable = require('../../newImmutable');
3
3
  var createPatch = require('../../client/createPatch');
4
4
  var createDto = require('../resultToRows/toDto/createDto');
5
5
 
6
- function newInsertCommand(table, row, options) {
7
- return new InsertCommand(table, row, options);
6
+ function newInsertCommand(table, row) {
7
+ return new InsertCommand(table, row);
8
8
  }
9
9
 
10
10
  function InsertCommand(table, row) {
@@ -84,7 +84,7 @@ function newUpdateCommandCore(context, table, columns, row, concurrencyState) {
84
84
  if (engine === 'pg') {
85
85
  command = command.append(separator + columnSql + ' IS NOT DISTINCT FROM ').append(encoded);
86
86
  }
87
- else if (engine === 'mysql') {
87
+ else if (engine === 'mysql' || engine === 'mariadb') {
88
88
  command = command.append(separator + columnSql + ' <=> ').append(encoded);
89
89
  }
90
90
  else if (engine === 'sqlite') {
@@ -123,7 +123,7 @@ function newUpdateCommandCore(context, table, columns, row, concurrencyState) {
123
123
  if (engine === 'pg') {
124
124
  command = command.append(separator).append(columnExpr).append(' IS NOT DISTINCT FROM ').append(encoded);
125
125
  }
126
- else if (engine === 'mysql') {
126
+ else if (engine === 'mysql' || engine === 'mariadb') {
127
127
  command = command.append(separator).append(columnExpr).append(' <=> ').append(encoded);
128
128
  }
129
129
  else if (engine === 'sqlite') {
@@ -184,6 +184,11 @@ function newUpdateCommandCore(context, table, columns, row, concurrencyState) {
184
184
  const sql = 'JSON_SET(' + expr.sql() + ', ' + jsonPath.sql + ', CAST(? AS JSON))';
185
185
  return newParameterized(sql, expr.parameters.concat(jsonPath.parameters, [jsonValue]));
186
186
  }
187
+ if (engine === 'mariadb') {
188
+ const jsonValue = JSON.stringify(value === undefined ? null : value);
189
+ const sql = 'JSON_SET(' + expr.sql() + ', ' + jsonPath.sql + ', JSON_EXTRACT(?, \'$\'))';
190
+ return newParameterized(sql, expr.parameters.concat(jsonPath.parameters, [jsonValue]));
191
+ }
187
192
  if (engine === 'sqlite') {
188
193
  const jsonValue = JSON.stringify(value === undefined ? null : value);
189
194
  const sql = 'json_set(' + expr.sql() + ', ' + jsonPath.sql + ', json(?))';
@@ -208,7 +213,7 @@ function newUpdateCommandCore(context, table, columns, row, concurrencyState) {
208
213
  const sql = expr.sql() + ' #- ' + pathLiteral;
209
214
  return newParameterized(sql, expr.parameters);
210
215
  }
211
- if (engine === 'mysql') {
216
+ if (engine === 'mysql' || engine === 'mariadb') {
212
217
  const sql = 'JSON_REMOVE(' + expr.sql() + ', ' + jsonPath.sql + ')';
213
218
  return newParameterized(sql, expr.parameters.concat(jsonPath.parameters));
214
219
  }
@@ -236,6 +241,12 @@ function newUpdateCommandCore(context, table, columns, row, concurrencyState) {
236
241
  const sql = 'JSON_EXTRACT(' + columnSql + ', ' + jsonPath.sql + ')';
237
242
  return newParameterized(sql, jsonPath.parameters);
238
243
  }
244
+ if (engine === 'mariadb') {
245
+ const sql = isJsonObject(oldValue)
246
+ ? 'JSON_EXTRACT(' + columnSql + ', ' + jsonPath.sql + ')'
247
+ : 'JSON_UNQUOTE(JSON_EXTRACT(' + columnSql + ', ' + jsonPath.sql + '))';
248
+ return newParameterized(sql, jsonPath.parameters);
249
+ }
239
250
  if (engine === 'sqlite') {
240
251
  const sql = 'json_extract(' + columnSql + ', ' + jsonPath.sql + ')';
241
252
  return newParameterized(sql, jsonPath.parameters);
@@ -311,6 +322,15 @@ function newUpdateCommandCore(context, table, columns, row, concurrencyState) {
311
322
  const jsonValue = JSON.stringify(value === undefined ? null : value);
312
323
  return newParameterized('CAST(? AS JSON)', [jsonValue]);
313
324
  }
325
+ if (engine === 'mariadb') {
326
+ if (isJsonObject(value)) {
327
+ const jsonValue = JSON.stringify(value);
328
+ return newParameterized('JSON_EXTRACT(?, \'$\')', [jsonValue]);
329
+ }
330
+ if (value === null || value === undefined)
331
+ return newParameterized('null');
332
+ return newParameterized('?', [String(value)]);
333
+ }
314
334
  if (engine === 'sqlite') {
315
335
  if (isJsonObject(value)) {
316
336
  const jsonValue = JSON.stringify(value);
@@ -1,5 +1,5 @@
1
1
  function isJsonUpdateSupported(engine) {
2
- return engine === 'pg' || engine === 'mysql' || engine === 'sqlite' || engine === 'mssql' || engine === 'mssqlNative' || engine === 'oracle';
2
+ return engine === 'pg' || engine === 'mysql' || engine === 'mariadb' || engine === 'sqlite' || engine === 'mssql' || engine === 'mssqlNative' || engine === 'oracle';
3
3
  }
4
4
 
5
5
  module.exports = isJsonUpdateSupported;
@@ -1,10 +1,9 @@
1
1
  function newAggregate(_relations) {
2
2
 
3
3
  function aggregate(context, fn) {
4
- const includeMany = false;
5
- let { relations, alias } = extract(includeMany, _relations);
4
+ let { relations, alias } = extract(_relations);
6
5
  const table = relations[relations.length - 1].childTable;
7
- if (!relations[0].isMany || includeMany)
6
+ if (!relations[0].isMany)
8
7
  table._rootAlias = alias;
9
8
 
10
9
  try {
@@ -19,11 +18,11 @@ function newAggregate(_relations) {
19
18
  }
20
19
  return aggregate;
21
20
 
22
- function extract(includeMany, relations) {
21
+ function extract(relations) {
23
22
  let alias = relations[0].toLeg().table._dbName;
24
23
  let result = [];
25
24
  for (let i = 0; i < relations.length; i++) {
26
- if (relations[i].isMany && !includeMany) {
25
+ if (relations[i].isMany) {
27
26
  result = [relations[i]];
28
27
  alias = relations[i].toLeg().table._dbName;
29
28
  }
@@ -3,10 +3,9 @@ const negotiateRawSqlFilter = require('../column/negotiateRawSqlFilter');
3
3
  function newWhere(_relations, _depth) {
4
4
 
5
5
  function where(context, fn) {
6
- const includeMany = false;
7
- let { relations, alias } = extract(includeMany, _relations);
6
+ let { relations, alias } = extract(_relations);
8
7
  const table = relations[relations.length - 1].childTable;
9
- if (!relations[0].isMany || includeMany)
8
+ if (!relations[0].isMany)
10
9
  table._rootAlias = alias;
11
10
 
12
11
  try {
@@ -22,11 +21,11 @@ function newWhere(_relations, _depth) {
22
21
  }
23
22
  return where;
24
23
 
25
- function extract(includeMany, relations) {
24
+ function extract(relations) {
26
25
  let alias = relations[0].toLeg().table._dbName;
27
26
  let result = [];
28
27
  for (let i = 0; i < relations.length; i++) {
29
- if (relations[i].isMany && !includeMany) {
28
+ if (relations[i].isMany) {
30
29
  result = [relations[i]];
31
30
  alias = relations[i].toLeg().table._dbName;
32
31
  }
@@ -23,7 +23,7 @@ function newManyCache(joinRelation) {
23
23
  }
24
24
  var rows = newArray();
25
25
  rows.push(childRow);
26
- existing = cache.tryAdd(key, rows);
26
+ cache.tryAdd(key, rows);
27
27
  }
28
28
 
29
29
  function newArray() {
@@ -4,6 +4,10 @@ var decodeDbRow = require('./decodeDbRow');
4
4
  function dbRowToRow(context, span, dbRow) {
5
5
  var table = span.table;
6
6
  var row = decodeDbRow(context, span, table, dbRow);
7
+ if (!hasPrimaryKey(row, table)) {
8
+ skipNestedLegs(span, dbRow);
9
+ return null;
10
+ }
7
11
  var cache = table._cache;
8
12
  if (!cache.tryGet(context, row)) {
9
13
  var queryContext = span.queryContext;
@@ -20,13 +24,15 @@ function dbRowToRow(context, span, dbRow) {
20
24
  var c = {};
21
25
 
22
26
  c.visitOne = function(leg) {
23
- dbRowToRow(context, leg.span, dbRow);
24
- leg.expand(row);
27
+ let child = dbRowToRow(context, leg.span, dbRow);
28
+ if (child)
29
+ leg.expand(row);
25
30
  };
26
31
 
27
32
  c.visitJoin = function(leg) {
28
- dbRowToRow(context, leg.span, dbRow);
29
- leg.expand(row);
33
+ let child = dbRowToRow(context, leg.span, dbRow);
34
+ if (child)
35
+ leg.expand(row);
30
36
  };
31
37
 
32
38
  c.visitMany = function() {
@@ -41,4 +47,31 @@ function dbRowToRow(context, span, dbRow) {
41
47
  return row;
42
48
  }
43
49
 
44
- module.exports = dbRowToRow;
50
+ function hasPrimaryKey(row, table) {
51
+ return table._primaryColumns.every((column) => {
52
+ let value = row[column.alias];
53
+ return value !== null && value !== undefined;
54
+ });
55
+ }
56
+
57
+ function skipNestedLegs(span, dbRow) {
58
+ span.legs.forEach((leg) => {
59
+ leg.accept({
60
+ visitOne() {
61
+ skipSpan(leg.span, dbRow);
62
+ },
63
+ visitJoin() {
64
+ skipSpan(leg.span, dbRow);
65
+ },
66
+ visitMany() {
67
+ }
68
+ });
69
+ });
70
+ }
71
+
72
+ function skipSpan(span, dbRow) {
73
+ decodeDbRow(undefined, span, span.table, dbRow);
74
+ skipNestedLegs(span, dbRow);
75
+ }
76
+
77
+ module.exports = dbRowToRow;
@@ -19,6 +19,7 @@ function newResolveTransaction(domain, pool, { readonly = false } = {}) {
19
19
  rdb.pool = pool;
20
20
  }
21
21
  rdb.engine = 'mssql';
22
+ rdb.maxParameters = 2100;
22
23
  rdb.encodeBoolean = encodeBoolean;
23
24
  rdb.decodeJSON = decodeJSON;
24
25
  rdb.encodeJSON = JSON.stringify;
@@ -114,4 +115,4 @@ function decodeJSON(value){
114
115
  return JSON.parse(value);
115
116
  }
116
117
 
117
- module.exports = newResolveTransaction;
118
+ module.exports = newResolveTransaction;
@@ -1,23 +0,0 @@
1
- var newWhereSql = require('./singleQuery/newWhereSql');
2
- var negotiateLimit = require('./singleQuery/negotiateLimit');
3
- var newParameterized = require('./newParameterized');
4
- var getSessionContext = require('../getSessionContext');
5
-
6
- function _new(table, filter, span, alias, orderBy, limit) {
7
- //unused ?
8
-
9
- if (!limit)
10
- return;
11
- var whereSql = newWhereSql(table, filter, alias);
12
- var safeLimit = negotiateLimit(limit);
13
- var sql;
14
- if (getSessionContext().limit === 'TOP') {
15
- safeLimit = safeLimit.replace('limit', 'top');
16
- sql = 'select ' + safeLimit + ' * from ' + table._dbName + ' ' + alias + whereSql + orderBy;
17
- }
18
- sql = 'select * from ' + table._dbName + ' ' + alias + whereSql + orderBy + safeLimit;
19
-
20
- return newParameterized(sql, filter.parameters);
21
- }
22
-
23
- module.exports = _new;