orange-orm 4.4.2 → 4.5.0-beta.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 (266) hide show
  1. package/README.md +1 -1
  2. package/package.json +12 -6
  3. package/src/client/clientMap.js +2 -0
  4. package/src/client/createProviders.js +12 -0
  5. package/src/client/index.js +6 -3
  6. package/src/client/index.mjs +8 -3
  7. package/src/client/map.js +1 -0
  8. package/src/createDomain.js +11 -16
  9. package/src/d1/newDatabase.js +119 -0
  10. package/src/d1/newPool.js +19 -0
  11. package/src/d1/newTransaction.js +82 -0
  12. package/src/d1/pool/end.js +13 -0
  13. package/src/d1/pool/newGenericPool.js +53 -0
  14. package/src/d1/wrapQuery.js +22 -0
  15. package/src/d1test.js +35 -0
  16. package/src/emitEvent.js +6 -4
  17. package/src/emptyFilter.js +12 -12
  18. package/src/getManyDto/newQuery.js +5 -5
  19. package/src/getManyDto/query/newSingleQuery.js +5 -5
  20. package/src/getManyDto.js +25 -24
  21. package/src/hostExpress/cycle.ts +211 -0
  22. package/src/hostExpress/executePath.js +360 -357
  23. package/src/hostLocal.js +8 -8
  24. package/src/index.d.ts +2 -0
  25. package/src/index.js +19 -15
  26. package/src/map.d.ts +3 -0
  27. package/src/mssql/newDatabase.js +19 -31
  28. package/src/mssql/newPool.js +2 -2
  29. package/src/mssql/newTransaction.js +5 -4
  30. package/src/mssql/pool/newGenericPool.js +1 -1
  31. package/src/mySql/deleteFromSql.js +1 -1
  32. package/src/mySql/insert.js +5 -5
  33. package/src/mySql/insertSql.js +2 -3
  34. package/src/mySql/lastInsertedSql.js +3 -4
  35. package/src/mySql/newDatabase.js +20 -34
  36. package/src/mySql/newPool.js +10 -10
  37. package/src/mySql/newTransaction.js +3 -3
  38. package/src/mySql/pool/newGenericPool.js +2 -3
  39. package/src/mySql/quote.js +1 -0
  40. package/src/newImmutable.js +1 -2
  41. package/src/oracle/deleteFromSql.js +1 -1
  42. package/src/oracle/formatDateOut.js +1 -1
  43. package/src/oracle/insert.js +6 -6
  44. package/src/oracle/insertSql.js +6 -14
  45. package/src/oracle/lastInsertedSql.js +3 -3
  46. package/src/oracle/mergeSql.js +3 -6
  47. package/src/oracle/newDatabase.js +18 -33
  48. package/src/oracle/newInsertCommandCore.js +3 -3
  49. package/src/oracle/newPool.js +10 -10
  50. package/src/oracle/newTransaction.js +3 -2
  51. package/src/oracle/pool/newGenericPool.js +2 -2
  52. package/src/oracle/quote.js +1 -0
  53. package/src/oracle/wrapQuery.js +0 -3
  54. package/src/patchRow.js +2 -2
  55. package/src/patchTable.js +6 -5
  56. package/src/pg/deleteFromSql.js +1 -1
  57. package/src/pg/formatDateOut.js +1 -2
  58. package/src/pg/insert.js +3 -3
  59. package/src/pg/insertSql.js +2 -7
  60. package/src/pg/lastInsertedSql.js +1 -2
  61. package/src/pg/newDatabase.js +20 -37
  62. package/src/pg/newPool.js +10 -10
  63. package/src/pg/newTransaction.js +3 -2
  64. package/src/pg/pool/newPgPool.js +2 -2
  65. package/src/pg/quote.js +2 -0
  66. package/src/pg/schema.js +2 -2
  67. package/src/{mySql/pool/defaults.js → poolDefaults.js} +0 -2
  68. package/src/query.js +2 -2
  69. package/src/sap/deleteFromSql.js +1 -1
  70. package/src/sap/formatDateOut.js +1 -1
  71. package/src/sap/insert.js +5 -5
  72. package/src/sap/insertSql.js +4 -5
  73. package/src/sap/lastInsertedSql.js +3 -3
  74. package/src/sap/mergeSql.js +1 -2
  75. package/src/sap/newDatabase.js +23 -34
  76. package/src/sap/newPool.js +2 -2
  77. package/src/sap/newTransaction.js +3 -2
  78. package/src/sap/quote.js +1 -0
  79. package/src/sqlite/deleteFromSql.js +1 -1
  80. package/src/sqlite/insert.js +5 -5
  81. package/src/sqlite/insertSql.js +2 -2
  82. package/src/sqlite/lastInsertedSql.js +2 -2
  83. package/src/sqlite/newDatabase.js +16 -32
  84. package/src/sqlite/newPool.js +10 -10
  85. package/src/sqlite/newTransaction.js +3 -2
  86. package/src/sqlite/pool/newGenericPool.js +2 -1
  87. package/src/sqlite/quote.js +1 -0
  88. package/src/table/aggregate.js +1 -1
  89. package/src/table/begin.js +5 -5
  90. package/src/table/cascadeDelete.js +2 -2
  91. package/src/table/column/binary/newDecode.js +2 -2
  92. package/src/table/column/binary/newEncode.js +3 -4
  93. package/src/table/column/boolean/newDecode.js +1 -1
  94. package/src/table/column/boolean/newEncode.js +6 -6
  95. package/src/table/column/date/formatOut.js +3 -5
  96. package/src/table/column/date/newDecode.js +2 -2
  97. package/src/table/column/date/newEncode.js +8 -8
  98. package/src/table/column/date.js +1 -1
  99. package/src/table/column/dateWithTimeZone/newEncode.js +3 -4
  100. package/src/table/column/dateWithTimeZone.js +1 -1
  101. package/src/table/column/encodeFilterArg.js +3 -3
  102. package/src/table/column/equal.js +3 -3
  103. package/src/table/column/extractAlias.js +0 -2
  104. package/src/table/column/greaterThan.js +3 -3
  105. package/src/table/column/greaterThanOrEqual.js +3 -3
  106. package/src/table/column/guid/newDecode.js +1 -1
  107. package/src/table/column/guid/newEncode.js +3 -3
  108. package/src/table/column/in.js +3 -3
  109. package/src/table/column/json/formatOut.js +3 -3
  110. package/src/table/column/json/newDecode.js +3 -3
  111. package/src/table/column/json/newEncode.js +6 -6
  112. package/src/table/column/json.js +2 -1
  113. package/src/table/column/lessThan.js +3 -3
  114. package/src/table/column/lessThanOrEqual.js +4 -4
  115. package/src/table/column/negotiateRawSqlFilter.js +9 -9
  116. package/src/table/column/newBoolean.js +9 -9
  117. package/src/table/column/newColumn.js +21 -21
  118. package/src/table/column/newDecodeCore.js +1 -1
  119. package/src/table/column/notEqual.js +3 -3
  120. package/src/table/column/numeric/newDecode.js +2 -2
  121. package/src/table/column/numeric/newEncode.js +3 -3
  122. package/src/table/column/string/contains.js +2 -1
  123. package/src/table/column/string/containsCore.js +5 -5
  124. package/src/table/column/string/endsWith.js +1 -1
  125. package/src/table/column/string/endsWithCore.js +4 -4
  126. package/src/table/column/string/iContains.js +2 -1
  127. package/src/table/column/string/iEndsWith.js +1 -1
  128. package/src/table/column/string/iEqual.js +3 -3
  129. package/src/table/column/string/iStartsWith.js +1 -1
  130. package/src/table/column/string/newEncode.js +3 -3
  131. package/src/table/column/string/startsWith.js +1 -1
  132. package/src/table/column/string/startsWithCore.js +4 -4
  133. package/src/table/column/string.js +14 -14
  134. package/src/table/commands/beginCommand.js +2 -2
  135. package/src/table/commands/compressChanges.js +2 -2
  136. package/src/table/commands/delete/newSingleCommand.js +5 -5
  137. package/src/table/commands/delete/singleCommand/joinSql.js +12 -12
  138. package/src/table/commands/delete/singleCommand/newSingleCommandCore.js +2 -2
  139. package/src/table/commands/delete/singleCommand/selectSql.js +6 -6
  140. package/src/table/commands/delete/singleCommand/subFilter.js +11 -11
  141. package/src/table/commands/delete/singleCommand/whereSql.js +2 -2
  142. package/src/table/commands/getChangeSet.js +2 -2
  143. package/src/table/commands/insert/getSqlTemplate.js +16 -16
  144. package/src/table/commands/lastCommandMatches.js +2 -2
  145. package/src/table/commands/newDeleteCommand.js +5 -5
  146. package/src/table/commands/newGetLastInsertedCommand.js +4 -4
  147. package/src/table/commands/newGetLastInsertedCommandCore.js +5 -5
  148. package/src/table/commands/newInsertCommand.js +0 -1
  149. package/src/table/commands/newInsertCommandCore.js +3 -3
  150. package/src/table/commands/newRow.js +4 -4
  151. package/src/table/commands/newUpdateCommand.js +4 -4
  152. package/src/table/commands/newUpdateCommandCore.js +4 -4
  153. package/src/table/commands/pushCommand.js +2 -2
  154. package/src/table/commit.js +13 -11
  155. package/src/table/count.js +8 -8
  156. package/src/table/delete.js +4 -4
  157. package/src/table/deleteSessionContext.js +4 -13
  158. package/src/table/executeQueries/executeChanges.js +3 -3
  159. package/src/table/executeQueries/executeQueriesCore.js +2 -2
  160. package/src/table/executeQueries/executeQuery.js +2 -2
  161. package/src/table/executeQueries/resolveExecuteQuery.js +4 -4
  162. package/src/table/executeQueries.js +4 -4
  163. package/src/table/getFromDbById.js +1 -1
  164. package/src/table/getMany.js +7 -7
  165. package/src/table/getManyDto.js +3 -4
  166. package/src/table/getSessionContext.js +4 -4
  167. package/src/table/getSessionSingleton.js +3 -2
  168. package/src/table/groupBy/newQuery.js +4 -4
  169. package/src/table/groupBy.js +9 -9
  170. package/src/table/insert.js +10 -13
  171. package/src/table/joinRelation/getRelatives.js +6 -6
  172. package/src/table/newGetRelated.js +3 -3
  173. package/src/table/newManyRelation.js +9 -9
  174. package/src/table/newOneRelation.js +9 -9
  175. package/src/table/newPrimaryKeyFilter.js +6 -6
  176. package/src/table/newQuery.js +5 -5
  177. package/src/table/newRelatedTable.js +2 -2
  178. package/src/table/newRowCache.js +17 -17
  179. package/src/table/newThrow.js +2 -2
  180. package/src/table/oneRelation/getRelatives.js +5 -5
  181. package/src/table/popChanges.js +3 -3
  182. package/src/table/promise.js +2 -8
  183. package/src/table/query/extractLimit.js +2 -2
  184. package/src/table/query/extractOffset.js +2 -2
  185. package/src/table/query/extractOrderBy.js +2 -2
  186. package/src/table/query/newSingleQuery.js +7 -7
  187. package/src/table/query/singleQuery/columnSql/joinLegToColumnSql.js +5 -5
  188. package/src/table/query/singleQuery/columnSql/newJoinedColumnSql.js +2 -2
  189. package/src/table/query/singleQuery/columnSql/newShallowColumnSql.js +4 -4
  190. package/src/table/query/singleQuery/joinSql/joinLegToJoinSql.js +2 -2
  191. package/src/table/query/singleQuery/joinSql/joinLegToShallowJoinSql.js +2 -2
  192. package/src/table/query/singleQuery/joinSql/newDiscriminatorSql.js +2 -2
  193. package/src/table/query/singleQuery/joinSql/newShallowJoinSql.js +5 -5
  194. package/src/table/query/singleQuery/joinSql/newShallowJoinSqlCore.js +6 -5
  195. package/src/table/query/singleQuery/joinSql/oneLegToJoinSql.js +2 -2
  196. package/src/table/query/singleQuery/joinSql/oneLegToShallowJoinSql.js +2 -2
  197. package/src/table/query/singleQuery/negotiateExclusive.js +2 -2
  198. package/src/table/query/singleQuery/newColumnSql.js +3 -3
  199. package/src/table/query/singleQuery/newDiscriminatorSql.js +2 -2
  200. package/src/table/query/singleQuery/newJoinSql.js +6 -6
  201. package/src/table/query/singleQuery/newWhereSql.js +3 -3
  202. package/src/table/quote.js +4 -4
  203. package/src/table/relatedTable/aggregate.js +2 -2
  204. package/src/table/relatedTable/all.js +5 -5
  205. package/src/table/relatedTable/any.js +3 -3
  206. package/src/table/relatedTable/childColumn.js +12 -12
  207. package/src/table/relatedTable/columnAggregate.js +3 -3
  208. package/src/table/relatedTable/columnAggregateGroup.js +11 -11
  209. package/src/table/relatedTable/joinSql.js +5 -5
  210. package/src/table/relatedTable/joinSqlArray.js +3 -3
  211. package/src/table/relatedTable/none.js +3 -3
  212. package/src/table/relatedTable/relatedColumn.js +13 -13
  213. package/src/table/relatedTable/selectSql.js +2 -2
  214. package/src/table/relatedTable/subFilter.js +4 -4
  215. package/src/table/relatedTable/where.js +3 -3
  216. package/src/table/relatedTable/whereSql.js +2 -2
  217. package/src/table/relation/manyCache/synchronizeAdded.js +2 -2
  218. package/src/table/relation/manyCache/synchronizeChanged.js +3 -3
  219. package/src/table/relation/manyCache/synchronizeRemoved.js +2 -2
  220. package/src/table/relation/newForeignKeyFilter.js +2 -2
  221. package/src/table/relation/newManyCache.js +16 -16
  222. package/src/table/relation/newOneCache.js +6 -6
  223. package/src/table/releaseDbClient.js +4 -4
  224. package/src/table/resultToPromise.js +1 -3
  225. package/src/table/resultToRows/dbRowToRow.js +8 -8
  226. package/src/table/resultToRows/dbRowsToRows.js +2 -2
  227. package/src/table/resultToRows/decodeDbRow.js +2 -2
  228. package/src/table/resultToRows/delete/removeFromCache.js +6 -6
  229. package/src/table/resultToRows/delete.js +6 -6
  230. package/src/table/resultToRows/newDecodeDbRow.js +19 -18
  231. package/src/table/resultToRows/toDto.js +3 -3
  232. package/src/table/resultToRows.js +3 -3
  233. package/src/table/rollback.js +21 -11
  234. package/src/table/rowArray/negotiateNextTick.js +1 -2
  235. package/src/table/setSessionSingleton.js +6 -3
  236. package/src/table/tryGetFirstFromDb.js +4 -4
  237. package/src/table/tryGetFromCacheById.js +3 -3
  238. package/src/table/tryGetFromDbById/extractStrategy.js +2 -2
  239. package/src/table/tryGetFromDbById.js +8 -6
  240. package/src/table/tryGetSessionContext.js +5 -10
  241. package/src/table/tryReleaseDbClient.js +2 -2
  242. package/src/table/updateField.js +4 -4
  243. package/src/table/where.js +2 -2
  244. package/src/table.js +58 -51
  245. package/src/tedious/deleteFromSql.js +1 -1
  246. package/src/tedious/formatDateOut.js +1 -1
  247. package/src/tedious/getManyDto/newQueryCore.js +5 -5
  248. package/src/tedious/getManyDto/query/newSingleQuery.js +5 -5
  249. package/src/tedious/getManyDto/query/newSubQueries/joinLegToQuery.js +3 -3
  250. package/src/tedious/getManyDto/query/newSubQueries/manyLegToQuery.js +3 -3
  251. package/src/tedious/getManyDto/query/newSubQueries/oneLegToQuery.js +4 -4
  252. package/src/tedious/getManyDto/query/newSubQueries.js +8 -8
  253. package/src/tedious/getManyDto/query/singleQuery/newShallowColumnSql.js +5 -6
  254. package/src/tedious/getManyDto.js +6 -6
  255. package/src/tedious/insert.js +3 -3
  256. package/src/tedious/insertSql.js +3 -3
  257. package/src/tedious/newDatabase.js +17 -30
  258. package/src/tedious/newPool.js +10 -10
  259. package/src/tedious/newTransaction.js +4 -5
  260. package/src/tedious/pool/newGenericPool.js +1 -1
  261. package/src/tedious/quote.js +1 -0
  262. package/src/mssql/pool/defaults.js +0 -45
  263. package/src/oracle/pool/defaults.js +0 -45
  264. package/src/pg/pool/defaults.js +0 -45
  265. package/src/sqlite/pool/defaults.js +0 -45
  266. package/src/tedious/pool/defaults.js +0 -45
@@ -1,6 +1,6 @@
1
1
 
2
- function extract(table) {
3
- var lengthWithStrategy = table._primaryColumns.length + 2;
2
+ function extract(_context, table) {
3
+ var lengthWithStrategy = table._primaryColumns.length + 3;
4
4
  if (arguments.length === lengthWithStrategy)
5
5
  return arguments[lengthWithStrategy-1];
6
6
  return;
@@ -2,18 +2,20 @@ var newPrimaryKeyFilter = require('./newPrimaryKeyFilter');
2
2
  var tryGetFirstFromDb = require('./tryGetFirstFromDb');
3
3
  var extractStrategy = require('./tryGetFromDbById/extractStrategy');
4
4
 
5
- function tryGet() {
5
+ function tryGet(context) {
6
6
  var filter = newPrimaryKeyFilter.apply(null, arguments);
7
- var table = arguments[0];
7
+ var table = arguments[1];
8
8
  var strategy = extractStrategy.apply(null, arguments);
9
- return tryGetFirstFromDb(table, filter, strategy);
9
+ return tryGetFirstFromDb(context, table, filter, strategy);
10
10
  }
11
11
 
12
- tryGet.exclusive = function tryGet() {
12
+ tryGet.exclusive = function tryGet(context) {
13
13
  var filter = newPrimaryKeyFilter.apply(null, arguments);
14
- var table = arguments[0];
14
+ var table = arguments[1];
15
15
  var strategy = extractStrategy.apply(null, arguments);
16
- return tryGetFirstFromDb.exclusive(table, filter, strategy);
16
+ return tryGetFirstFromDb.exclusive(context, table, filter, strategy);
17
+
18
+
17
19
  };
18
20
 
19
21
  module.exports = tryGet;
@@ -1,15 +1,10 @@
1
- let useHook = require('../useHook');
2
- let cls;
1
+ const process = require('node:process');
3
2
 
4
-
5
- function tryGetSessionContext() {
6
- if (useHook()) {
7
- if (!cls)
8
- cls = require('node-cls');
9
- let context = cls.getContext('rdb');
10
- return context && context.rdb;
11
- }
3
+ function tryGetSessionContext(context) {
4
+ if (context)
5
+ return context.rdb;
12
6
  else
7
+ // @ts-ignore
13
8
  return process.domain && process.domain.rdb;
14
9
  }
15
10
 
@@ -1,8 +1,8 @@
1
1
  var release = require('./releaseDbClient');
2
2
 
3
- function tryReleaseDbClient() {
3
+ function tryReleaseDbClient(context) {
4
4
  try {
5
- release();
5
+ release(context);
6
6
  }
7
7
  // eslint-disable-next-line no-empty
8
8
  catch (e) {
@@ -2,11 +2,11 @@ var newUpdateCommand = require('./commands/newUpdateCommand');
2
2
  var pushCommand = require('./commands/pushCommand');
3
3
  var lastCommandMatches = require('./commands/lastCommandMatches');
4
4
 
5
- function updateField(table, column, row, oldValue) {
6
- if (lastCommandMatches(row))
5
+ function updateField(context, table, column, row) {
6
+ if (lastCommandMatches(context, row))
7
7
  return;
8
- var command = newUpdateCommand(table, column, row, oldValue);
9
- pushCommand(command);
8
+ var command = newUpdateCommand(context, table, column, row);
9
+ pushCommand(context, command);
10
10
  }
11
11
 
12
12
  module.exports = updateField;
@@ -2,9 +2,9 @@ const negotiateRawSqlFilter = require('./column/negotiateRawSqlFilter');
2
2
 
3
3
  function newWhere(table) {
4
4
 
5
- function where(fn) {
5
+ function where(context, fn) {
6
6
  let arg = typeof fn === 'function' ? fn(table) : fn;
7
- return negotiateRawSqlFilter(arg);
7
+ return negotiateRawSqlFilter(context, arg);
8
8
  }
9
9
  return where;
10
10
  }
package/src/table.js CHANGED
@@ -16,11 +16,10 @@ const _delete = require('./table/delete');
16
16
  const cascadeDelete = require('./table/cascadeDelete');
17
17
  const createReadStream = require('./table/createReadStream');
18
18
  const createJSONReadStream = require('./table/createJSONReadStream');
19
- const getIdArgs = require('./table/getIdArgs');
20
19
  const patchTable = require('./patchTable');
21
20
  const newEmitEvent = require('./emitEvent');
22
21
  const hostLocal = require('./hostLocal');
23
- const getTSDefinition = require('./getTSDefinition');
22
+ // const getTSDefinition = require('./getTSDefinition'); //todo: unused ?
24
23
  const where = require('./table/where');
25
24
  const aggregate = require('./table/aggregate');
26
25
  const groupBy = require('./table/groupBy');
@@ -62,63 +61,63 @@ function _new(tableName) {
62
61
  return hasOne(joinRelation);
63
62
  };
64
63
 
65
- table.count = function(filter) {
66
- return Promise.resolve().then(() => count(table, filter));
64
+ table.count = function(context, ...rest) {
65
+ const args = [context, table, ...rest];
66
+ return Promise.resolve().then(() => count.apply(null, args));
67
67
  };
68
68
 
69
- table.getMany = function(filter, strategy) {
70
- return Promise.resolve().then(() => getMany(table, filter, strategy));
69
+ table.getMany = function(context, ...rest) {
70
+ const args = [context, table, ...rest];
71
+ return Promise.resolve().then(() => getMany.apply(null, args));
71
72
  };
72
- table.getManyDto = function(filter, strategy) {
73
- return Promise.resolve().then(() => getManyDto(table, filter, strategy));
73
+ table.getManyDto = function(context, ...rest) {
74
+ const args = [context, table, ...rest];
75
+ return Promise.resolve().then(() => getManyDto.apply(null, args));
74
76
  };
75
77
 
76
- table.aggregate = function(filter, strategy) {
77
- return groupBy(table, filter, strategy);
78
+ table.aggregate = function(context, ...rest) {
79
+ const args = [context, table, ...rest];
80
+ return groupBy.apply(null, args);
78
81
  };
79
82
 
80
- table.getMany.exclusive = function(filter, strategy) {
81
- return Promise.resolve().then(() => getMany.exclusive(table, filter, strategy));
83
+ table.getMany.exclusive = function(context, ...rest) {
84
+ const args = [context, table, ...rest];
85
+ return Promise.resolve().then(() => getMany.exclusive.apply(null, args));
82
86
  };
83
87
 
84
- table.tryGetFirst = function(filter, strategy) {
85
- return Promise.resolve().then(() => tryGetFirst(table, filter, strategy));
88
+ table.tryGetFirst = function(context, ...rest) {
89
+ const args = [context, table, ...rest];
90
+ return Promise.resolve().then(() => tryGetFirst.apply(null, args));
86
91
  };
87
- table.tryGetFirst.exclusive = function(filter, strategy) {
88
- return Promise.resolve().then(() => tryGetFirst.exclusive(table, filter, strategy));
92
+ table.tryGetFirst.exclusive = function(context, ...rest) {
93
+ const args = [context, table, ...rest];
94
+ return Promise.resolve().then(() => tryGetFirst.exclusive.apply(null, args));
89
95
  };
96
+
90
97
  table.getOne = table.tryGetFirst;
91
98
  table.getOne.exclusive = table.tryGetFirst.exclusive;
92
99
 
93
- function callAsync(func, args) {
94
- return Promise.resolve().then(() => call(func, args));
95
- }
96
-
97
- function call(func, args) {
98
- var mergedArgs = [table];
99
- for (var i = 0; i < args.length; i++) {
100
- mergedArgs.push(args[i]);
101
- }
102
- return func.apply(null, mergedArgs);
103
- }
104
-
105
- table.getById = function() {
106
- return callAsync(getById, getIdArgs(table, arguments));
100
+ table.getById = function(context, ...rest) {
101
+ const args = [context, table, ...rest];
102
+ return Promise.resolve().then(() => getById.apply(null, args));
107
103
  };
108
104
 
109
- table.getById.exclusive = function() {
110
-
111
- return callAsync(getById.exclusive, getIdArgs(table, arguments));
105
+ table.getById.exclusive = function(context, ...rest) {
106
+ const args = [context, table, ...rest];
107
+ return Promise.resolve().then(() => getById.exclusive.apply(null, args));
112
108
  };
113
109
 
114
- table.tryGetById = function() {
115
- return callAsync(tryGetById, getIdArgs(table, arguments));
110
+ table.tryGetById = function(context, ...rest) {
111
+ const args = [context, table, ...rest];
112
+ return Promise.resolve().then(() => tryGetById.apply(null, args));
116
113
  };
117
114
 
118
- table.tryGetById.exclusive = function() {
119
- return callAsync(tryGetById.exclusive, getIdArgs(table, arguments));
115
+ table.tryGetById.exclusive = function(context, ...rest) {
116
+ const args = [context, table, ...rest];
117
+ return Promise.resolve().then(() => tryGetById.exclusive.apply(null, args));
120
118
  };
121
119
 
120
+
122
121
  table.columnDiscriminators = function() {
123
122
  for (var i = 0; i < arguments.length; i++) {
124
123
  table._columnDiscriminators.push(arguments[i]);
@@ -133,37 +132,45 @@ function _new(tableName) {
133
132
  return table;
134
133
  };
135
134
 
136
- table.insert = function() {
135
+ table.insert = function(context, ...rest) {
137
136
  const concurrency = undefined;
138
- let args = [{table, concurrency}].concat([].slice.call(arguments));
137
+ let args = [context, {table, concurrency}, ...rest];
139
138
  return insert.apply(null, args);
140
139
  };
141
140
 
142
- table.insertWithConcurrency = function(options, ...rows) {
143
- let args = [{table, options}].concat([].slice.call(rows));
141
+ table.insertWithConcurrency = function(context, options, ...rows) {
142
+ let args = [context, {table, options}].concat([].slice.call(rows));
144
143
  return insert.apply(null, args);
145
144
  };
146
145
 
147
146
  table.delete = _delete.bind(null, table);
148
- table.cascadeDelete = cascadeDelete.bind(null, table);
149
- table.deleteCascade = cascadeDelete.bind(null, table);
150
- table.createReadStream = createReadStream.bind(null, table);
151
- table.createJSONReadStream = createJSONReadStream.bind(null, table);
147
+ table.cascadeDelete = function(context, ...rest) {
148
+ const args = [context, table, ...rest];
149
+ return cascadeDelete.apply(null, args);
150
+ };
151
+
152
+ table.deleteCascade = table.cascadeDelete;
153
+ table.createReadStream = createReadStream.bind(null, table); //legacy
154
+ table.createJSONReadStream = createJSONReadStream.bind(null, table); //legacy
152
155
  table.exclusive = function() {
153
156
  table._exclusive = true;
154
157
  return table;
155
158
  };
156
- table.patch = patchTable.bind(null, table);
157
- table.subscribeChanged = table._emitChanged.add;
158
- table.unsubscribeChanged = table._emitChanged.remove;
159
+ table.patch = function(context, ...rest) {
160
+ const args = [context, table, ...rest];
161
+ return patchTable.apply(null, args);
162
+ };
163
+
164
+ // table.subscribeChanged = table._emitChanged.add; //legacy
165
+ // table.unsubscribeChanged = table._emitChanged.remove; //legacy
159
166
 
160
167
  table.hostLocal = function(options) {
161
168
  return hostLocal({table, ...options});
162
169
  };
163
170
 
164
- table.ts = function(name) {
165
- return getTSDefinition(table, {name});
166
- };
171
+ // table.ts = function(name) { //unused ?
172
+ // return getTSDefinition(table, {name});
173
+ // };
167
174
 
168
175
  table.where = where(table);
169
176
  table._aggregate = aggregate(table);
@@ -1,6 +1,6 @@
1
1
  var format = 'delete %s from %s as %s%s';
2
2
  var util = require('util');
3
- const quote = require('../table/quote');
3
+ const quote = require('./quote');
4
4
 
5
5
  function deleteFromSql(table, alias, whereSql) {
6
6
  var name = quote(table._dbName);
@@ -1,4 +1,4 @@
1
- const quote = require('../table/quote');
1
+ const quote = require('./quote');
2
2
 
3
3
  function formatDateOut(column, alias) {
4
4
  return `CONVERT(VARCHAR, ${alias}.${quote(column._dbName)}, 121)`;
@@ -5,14 +5,14 @@ var extractOrderBy = require('../../table/query/extractOrderBy');
5
5
  var extractLimit = require('../../table/query/extractLimit');
6
6
  var limitAndOffset = require('../limitAndOffset');
7
7
 
8
- function newQuery(table,filter,span,alias) {
8
+ function newQuery(context, table, filter, span, alias) {
9
9
  filter = extractFilter(filter);
10
- var orderBy = extractOrderBy(table,alias,span.orderBy);
11
- var limit = extractLimit(span);
10
+ var orderBy = extractOrderBy(context, table, alias, span.orderBy);
11
+ var limit = extractLimit(context, span);
12
12
  var offset = limitAndOffset(span);
13
13
 
14
- var subQueries = newSubQueries(table,span,alias);
15
- return newSingleQuery(table,filter,span,alias,subQueries,orderBy,limit,offset);
14
+ var subQueries = newSubQueries(context, table, span, alias);
15
+ return newSingleQuery(context, table, filter, span, alias, subQueries, orderBy, limit, offset);
16
16
  }
17
17
 
18
18
  module.exports = newQuery;
@@ -2,17 +2,17 @@ var newColumnSql = require('./singleQuery/newShallowColumnSql');
2
2
  var newWhereSql = require('../../../table/query/singleQuery/newWhereSql');
3
3
  var newParameterized = require('../../../table/query/newParameterized');
4
4
 
5
- function _new(table, filter, span, alias, subQueries, orderBy, limit, offset) {
6
- var columnSql = newColumnSql(table, alias, span);
7
- var whereSql = newWhereSql(table, filter, alias);
5
+ function _new(context, table, filter, span, alias, subQueries, orderBy, limit, offset) {
6
+ var columnSql = newColumnSql(context, table, alias, span);
7
+ var whereSql = newWhereSql(context, table, filter, alias);
8
8
  if (limit)
9
9
  limit = limit + ' ';
10
10
 
11
11
  let join = '';
12
12
  const set = new Set();
13
- for(let key in span.aggregates) {
13
+ for (let key in span.aggregates) {
14
14
  const agg = span.aggregates[key];
15
- for(let sql of agg.joins) {
15
+ for (let sql of agg.joins) {
16
16
  if (!set.has(sql)) {
17
17
  join = join + sql;
18
18
  set.add(sql);
@@ -1,15 +1,15 @@
1
1
  var newShallowJoinSql = require('../../../../table/query/singleQuery/joinSql/newShallowJoinSqlCore');
2
2
  var newQuery = require('../../newQueryCore');
3
3
 
4
- function joinLegToQuery(parentAlias,leg,_legNo) {
4
+ function joinLegToQuery(context, parentAlias, leg, _legNo) {
5
5
  var childAlias = parentAlias + leg.name;
6
6
  var span = leg.span;
7
7
  var parentTable = leg.table;
8
8
  var childColumns = span.table._primaryColumns;
9
9
  var parentColumns = leg.columns;
10
10
 
11
- var filter = newShallowJoinSql(parentTable,childColumns,parentColumns,childAlias,parentAlias,leg.span.where);
12
- var query = newQuery(span.table,filter,span,childAlias);
11
+ var filter = newShallowJoinSql(context, parentTable, childColumns, parentColumns, childAlias, parentAlias, leg.span.where);
12
+ var query = newQuery(context, span.table, filter, span, childAlias);
13
13
  return query.prepend('JSON_QUERY((').append(` FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)) "${leg.name}"`);
14
14
  }
15
15
 
@@ -1,15 +1,15 @@
1
1
  var newShallowJoinSql = require('../../../../table/query/singleQuery/joinSql/newShallowJoinSqlCore');
2
2
  var newQuery = require('../../newQueryCore');
3
3
 
4
- function manyLegToQuery(rightAlias, leg, _legNo) {
4
+ function manyLegToQuery(context, rightAlias, leg, _legNo) {
5
5
  var leftAlias = rightAlias + leg.name;
6
6
  var span = leg.span;
7
7
  var rightTable = leg.table;
8
8
  var rightColumns = rightTable._primaryColumns;
9
9
  var leftColumns = leg.columns;
10
10
 
11
- var filter = newShallowJoinSql(rightTable, leftColumns, rightColumns, leftAlias, rightAlias, leg.span.where);
12
- var query = newQuery(span.table, filter, span, leftAlias);
11
+ var filter = newShallowJoinSql(context, rightTable, leftColumns, rightColumns, leftAlias, rightAlias, leg.span.where);
12
+ var query = newQuery(context, span.table, filter, span, leftAlias);
13
13
  return query.prepend('JSON_QUERY( coalesce((').append(` FOR JSON PATH, INCLUDE_NULL_VALUES),'[]')) "${leg.name}"`);
14
14
  }
15
15
 
@@ -3,17 +3,17 @@ var newQuery = require('../../newQueryCore');
3
3
  var newParameterized = require('../../../../table/query/newParameterized');
4
4
  var util = require('util');
5
5
 
6
- function oneLegToQuery(rightAlias,leg,_legNo) {
6
+ function oneLegToQuery(context, rightAlias, leg, _legNo) {
7
7
  var leftAlias = rightAlias + leg.name;
8
8
  var span = leg.span;
9
9
  var rightTable = leg.table;
10
10
  var rightColumns = rightTable._primaryColumns;
11
11
  var leftColumns = leg.columns;
12
12
 
13
- var filter = newShallowJoinSql(rightTable,leftColumns,rightColumns,leftAlias,rightAlias,leg.span.where);
14
- var query = newQuery(span.table,filter,span,leftAlias);
13
+ var filter = newShallowJoinSql(context, rightTable, leftColumns, rightColumns, leftAlias, rightAlias, leg.span.where);
14
+ var query = newQuery(context, span.table, filter, span, leftAlias);
15
15
  var sql = 'SELECT TOP 1' + query.sql().substring(6);
16
- return newParameterized(util.format('JSON_QUERY((%s FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)) "%s"',sql, leg.name ), query.parameters);
16
+ return newParameterized(util.format('JSON_QUERY((%s FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)) "%s"', sql, leg.name), query.parameters);
17
17
  }
18
18
 
19
19
  module.exports = oneLegToQuery;
@@ -3,24 +3,24 @@ var oneLegToQuery = _oneLegToQuery;
3
3
  var manyLegToQuery = _manyLegToQuery;
4
4
  var newParameterized = require('../../../table/query/newParameterized');
5
5
 
6
- function newSubQueries(_table,span,alias) {
6
+ function newSubQueries(context, _table, span, alias) {
7
7
  var result = newParameterized('', []);
8
8
  var c = {};
9
9
  var _legNo;
10
10
 
11
11
  c.visitJoin = function(leg) {
12
- result = result.append(',').append(joinLegToQuery( alias,leg,_legNo));
12
+ result = result.append(',').append(joinLegToQuery(context, alias, leg, _legNo));
13
13
  };
14
14
  c.visitOne = function(leg) {
15
- result = result.append(',').append(oneLegToQuery( alias,leg,_legNo));
15
+ result = result.append(',').append(oneLegToQuery(context, alias, leg, _legNo));
16
16
  };
17
17
  c.visitMany = function(leg) {
18
- result = result.append(',').append(manyLegToQuery( alias,leg,_legNo));
18
+ result = result.append(',').append(manyLegToQuery(context, alias, leg, _legNo));
19
19
  };
20
20
 
21
21
  span.legs.forEach(onEachLeg);
22
22
 
23
- function onEachLeg(leg,legNo) {
23
+ function onEachLeg(leg, legNo) {
24
24
  _legNo = legNo;
25
25
  leg.accept(c);
26
26
  }
@@ -30,17 +30,17 @@ function newSubQueries(_table,span,alias) {
30
30
 
31
31
  function _joinLegToQuery() {
32
32
  joinLegToQuery = require('./newSubQueries/joinLegToQuery');
33
- return joinLegToQuery.apply(null,arguments);
33
+ return joinLegToQuery.apply(null, arguments);
34
34
  }
35
35
 
36
36
  function _oneLegToQuery() {
37
37
  oneLegToQuery = require('./newSubQueries/oneLegToQuery');
38
- return oneLegToQuery.apply(null,arguments);
38
+ return oneLegToQuery.apply(null, arguments);
39
39
  }
40
40
 
41
41
  function _manyLegToQuery() {
42
42
  manyLegToQuery = require('./newSubQueries/manyLegToQuery');
43
- return manyLegToQuery.apply(null,arguments);
43
+ return manyLegToQuery.apply(null, arguments);
44
44
  }
45
45
 
46
46
 
@@ -1,7 +1,6 @@
1
- const getSessionSingleton = require('../../../../table/getSessionSingleton');
1
+ const quote = require('../../../quote');
2
2
 
3
- function _new(table,alias, span) {
4
- const quote = getSessionSingleton('quote');
3
+ function _new(context, table, alias, span) {
5
4
  alias = quote(alias);
6
5
  let columnsMap = span.columns;
7
6
  var columns = table._columns;
@@ -11,7 +10,7 @@ function _new(table,alias, span) {
11
10
  for (var i = 0; i < columns.length; i++) {
12
11
  var column = columns[i];
13
12
  if (!columnsMap || (columnsMap.get(column))) {
14
- sql = sql + separator + formatColumn(column) + ' as ' + quote(column.alias);
13
+ sql = sql + separator + formatColumn(column) + ' as ' + quote(column.alias);
15
14
  separator = ',';
16
15
  }
17
16
  }
@@ -24,11 +23,11 @@ function _new(table,alias, span) {
24
23
 
25
24
  function formatColumn(column) {
26
25
 
27
- const formatted = column.formatOut && column.tsType !== 'DateColumn' ? column.formatOut(alias) : alias + '.' + quote(column._dbName);
26
+ const formatted = column.formatOut && column.tsType !== 'DateColumn' ? column.formatOut(context, alias) : alias + '.' + quote(column._dbName);
28
27
  if (column.dbNull === null)
29
28
  return formatted;
30
29
  else {
31
- const encoded = column.encode.unsafe(column.dbNull);
30
+ const encoded = column.encode.unsafe(context, column.dbNull);
32
31
  return `CASE WHEN ${formatted}=${encoded} THEN null ELSE ${formatted} END`;
33
32
  }
34
33
 
@@ -3,17 +3,17 @@ const negotiateRawSqlFilter = require('../table/column/negotiateRawSqlFilter');
3
3
  const strategyToSpan = require('../table/strategyToSpan');
4
4
  const executeQueries = require('../table/executeQueries');
5
5
 
6
- async function getManyDto(table, filter, strategy) {
7
- filter = negotiateRawSqlFilter(filter, table);
6
+ async function getManyDto(context, table, filter, strategy) {
7
+ filter = negotiateRawSqlFilter(context, filter, table);
8
8
  if (strategy && strategy.where) {
9
9
  let arg = typeof strategy.where === 'function' ? strategy.where(table) : strategy.where;
10
- filter = filter.and(arg);
10
+ filter = filter.and(context, arg);
11
11
  }
12
- let span = strategyToSpan(table,strategy);
12
+ let span = strategyToSpan(table, strategy);
13
13
  let alias = table._dbName;
14
14
 
15
- const query = newQuery(table, filter, span, alias);
16
- const res = await executeQueries([query]);
15
+ const query = newQuery(context, table, filter, span, alias);
16
+ const res = await executeQueries(context, [query]);
17
17
  const rows = await res[0];
18
18
  if (rows.length === 0)
19
19
  return [];
@@ -2,11 +2,11 @@ let newInsertCommand = require('../table/commands/newInsertCommand');
2
2
  let newInsertCommandCore = require('../table/commands/newInsertCommandCore');
3
3
  let executeQueries = require('../table/executeQueries');
4
4
 
5
- async function insertDefault(table, row, options) {
6
- let insertCmd = newInsertCommand(newInsertCommandCore, table, row, options);
5
+ async function insertDefault(context, table, row, options) {
6
+ let insertCmd = newInsertCommand(newInsertCommandCore.bind(null, context), table, row, options);
7
7
  insertCmd.disallowCompress = true;
8
8
 
9
- return executeQueries([insertCmd]).then((result) => result[result.length - 1]);
9
+ return executeQueries(context, [insertCmd]).then((result) => result[result.length - 1]);
10
10
 
11
11
  }
12
12
 
@@ -1,11 +1,11 @@
1
1
  let outputInsertedSql = require('./outputInsertedSql');
2
2
  let mergeSql = require('./mergeSql');
3
3
 
4
- function getSqlTemplate(_table, _row, options) {
4
+ function getSqlTemplate(_context, _table, _row, options) {
5
5
  if (hasConcurrency(_table, options) && hasColumns())
6
- return mergeSql.apply(null, arguments);
6
+ return mergeSql.apply(null, [...arguments].slice(1));
7
7
  else
8
- return insertSql.apply(null, arguments);
8
+ return insertSql.apply(null, [...arguments].slice(1));
9
9
 
10
10
  function hasColumns() {
11
11
  for(let p in _row) {
@@ -4,10 +4,6 @@ let _begin = require('../table/begin');
4
4
  let commit = require('../table/commit');
5
5
  let rollback = require('../table/rollback');
6
6
  let newPool = require('./newPool');
7
- let useHook = require('../useHook');
8
- let promise = require('promise/domains');
9
- let versionArray = process.version.replace('v', '').split('.');
10
- let major = parseInt(versionArray[0]);
11
7
  let express = require('../hostExpress');
12
8
  let hostLocal = require('../hostLocal');
13
9
  let doQuery = require('../query');
@@ -34,15 +30,11 @@ function newDatabase(connectionString, poolOptions) {
34
30
 
35
31
  if (fn)
36
32
  return domain.run(runInTransaction);
37
- else if ((major >= 12) && useHook()) {
38
- domain.exitContext = true;
39
- return domain.start().then(run);
40
- }
41
33
  else
42
34
  return domain.run(run);
43
35
 
44
36
  function begin() {
45
- return _begin(options?.readonly);
37
+ return _begin(domain, options);
46
38
  }
47
39
 
48
40
  async function runInTransaction() {
@@ -50,10 +42,10 @@ function newDatabase(connectionString, poolOptions) {
50
42
  let transaction = newTransaction(domain, pool, options);
51
43
  await new Promise(transaction)
52
44
  .then(begin)
53
- .then(fn)
45
+ .then(() => fn(domain))
54
46
  .then((res) => result = res)
55
- .then(c.commit)
56
- .then(null, c.rollback);
47
+ .then(() => c.commit(domain))
48
+ .then(null, (e) => c.rollback(domain,e));
57
49
  return result;
58
50
  }
59
51
 
@@ -61,53 +53,48 @@ function newDatabase(connectionString, poolOptions) {
61
53
  function run() {
62
54
  let p;
63
55
  let transaction = newTransaction(domain, pool, options);
64
- if (useHook())
65
- p = new Promise(transaction);
66
- else
67
- p = new promise(transaction);
56
+ p = new Promise(transaction);
68
57
 
69
58
  return p.then(begin);
70
59
  }
71
60
 
72
61
  };
73
62
 
74
- c.createTransaction = function() {
63
+ c.createTransaction = function(options) {
75
64
  let domain = createDomain();
76
65
  let transaction = newTransaction(domain, pool);
77
- let p = domain.run(() => new Promise(transaction).then(_begin));
66
+ let p = domain.run(() => new Promise(transaction).then(begin));
78
67
 
79
68
  function run(fn) {
80
69
  return p.then(domain.run.bind(domain, fn));
81
70
  }
71
+
72
+ run.rollback = rollback.bind(null, domain);
73
+ run.commit = commit.bind(null, domain);
82
74
  return run;
83
- };
84
75
 
85
- c.bindTransaction = function() {
86
- // @ts-ignore
87
- var domain = process.domain;
88
- let p = domain.run(() => true);
89
76
 
90
- function run(fn) {
91
- return p.then(domain.run.bind(domain, fn));
77
+ function begin() {
78
+ return _begin(domain, options);
92
79
  }
93
- return run;
80
+
94
81
  };
95
82
 
96
83
  c.query = function(query) {
97
84
  let domain = createDomain();
98
85
  let transaction = newTransaction(domain, pool);
99
86
  let p = domain.run(() => new Promise(transaction)
100
- .then(() => setSessionSingleton('changes', []))
101
- .then(() => doQuery(query).then(onResult, onError)));
87
+ .then(() => setSessionSingleton(domain, 'changes', []))
88
+ .then(() => doQuery(domain, query).then(onResult, onError)));
102
89
  return p;
103
90
 
104
91
  function onResult(result) {
105
- releaseDbClient();
92
+ releaseDbClient(domain);
106
93
  return result;
107
94
  }
108
95
 
109
96
  function onError(e) {
110
- releaseDbClient();
97
+ releaseDbClient(domain);
111
98
  throw e;
112
99
  }
113
100
  };