orange-orm 4.5.0-beta.0 → 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 (261) hide show
  1. package/README.md +6 -1
  2. package/docs/changelog.md +4 -0
  3. package/package.json +8 -5
  4. package/src/client/index.js +3 -2
  5. package/src/client/index.mjs +253 -137
  6. package/src/createDomain.js +11 -16
  7. package/src/d1/newDatabase.js +23 -37
  8. package/src/d1/newPool.js +6 -6
  9. package/src/d1/pool/newGenericPool.js +2 -1
  10. package/src/emitEvent.js +6 -4
  11. package/src/emptyFilter.js +12 -12
  12. package/src/getManyDto/newQuery.js +5 -5
  13. package/src/getManyDto/query/newSingleQuery.js +5 -5
  14. package/src/getManyDto.js +25 -24
  15. package/src/hostExpress/cycle.ts +211 -0
  16. package/src/hostExpress/executePath.js +360 -357
  17. package/src/hostLocal.js +8 -8
  18. package/src/index.js +11 -16
  19. package/src/mssql/newDatabase.js +19 -31
  20. package/src/mssql/newPool.js +2 -2
  21. package/src/mssql/newTransaction.js +4 -3
  22. package/src/mssql/pool/newGenericPool.js +1 -1
  23. package/src/mySql/deleteFromSql.js +1 -1
  24. package/src/mySql/insert.js +5 -5
  25. package/src/mySql/insertSql.js +2 -3
  26. package/src/mySql/lastInsertedSql.js +3 -4
  27. package/src/mySql/newDatabase.js +20 -34
  28. package/src/mySql/newPool.js +10 -10
  29. package/src/mySql/newTransaction.js +2 -2
  30. package/src/mySql/pool/newGenericPool.js +2 -3
  31. package/src/mySql/quote.js +1 -0
  32. package/src/newImmutable.js +1 -2
  33. package/src/oracle/deleteFromSql.js +1 -1
  34. package/src/oracle/formatDateOut.js +1 -1
  35. package/src/oracle/insert.js +6 -6
  36. package/src/oracle/insertSql.js +6 -14
  37. package/src/oracle/lastInsertedSql.js +3 -3
  38. package/src/oracle/mergeSql.js +3 -6
  39. package/src/oracle/newDatabase.js +18 -33
  40. package/src/oracle/newInsertCommandCore.js +3 -3
  41. package/src/oracle/newPool.js +10 -10
  42. package/src/oracle/newTransaction.js +2 -1
  43. package/src/oracle/pool/newGenericPool.js +2 -2
  44. package/src/oracle/quote.js +1 -0
  45. package/src/oracle/wrapQuery.js +0 -3
  46. package/src/patchRow.js +2 -2
  47. package/src/patchTable.js +6 -5
  48. package/src/pg/deleteFromSql.js +1 -1
  49. package/src/pg/formatDateOut.js +1 -2
  50. package/src/pg/insert.js +3 -3
  51. package/src/pg/insertSql.js +2 -7
  52. package/src/pg/lastInsertedSql.js +1 -2
  53. package/src/pg/newDatabase.js +20 -37
  54. package/src/pg/newPool.js +10 -10
  55. package/src/pg/newTransaction.js +2 -1
  56. package/src/pg/pool/newPgPool.js +23 -4
  57. package/src/pg/pool/parseSearchPathParam.js +10 -0
  58. package/src/pg/quote.js +2 -0
  59. package/src/pg/schema.js +2 -2
  60. package/src/{mySql/pool/defaults.js → poolDefaults.js} +0 -2
  61. package/src/query.js +2 -2
  62. package/src/sap/deleteFromSql.js +1 -1
  63. package/src/sap/formatDateOut.js +1 -1
  64. package/src/sap/insert.js +5 -5
  65. package/src/sap/insertSql.js +4 -5
  66. package/src/sap/lastInsertedSql.js +3 -3
  67. package/src/sap/mergeSql.js +1 -2
  68. package/src/sap/newDatabase.js +23 -34
  69. package/src/sap/newPool.js +2 -2
  70. package/src/sap/newTransaction.js +2 -1
  71. package/src/sap/quote.js +1 -0
  72. package/src/sqlite/deleteFromSql.js +1 -1
  73. package/src/sqlite/insert.js +5 -5
  74. package/src/sqlite/insertSql.js +2 -2
  75. package/src/sqlite/lastInsertedSql.js +2 -2
  76. package/src/sqlite/newDatabase.js +16 -32
  77. package/src/sqlite/newPool.js +10 -10
  78. package/src/sqlite/newTransaction.js +2 -1
  79. package/src/sqlite/pool/newGenericPool.js +2 -1
  80. package/src/sqlite/quote.js +1 -0
  81. package/src/table/aggregate.js +1 -1
  82. package/src/table/begin.js +5 -5
  83. package/src/table/cascadeDelete.js +2 -2
  84. package/src/table/column/binary/newDecode.js +2 -2
  85. package/src/table/column/binary/newEncode.js +3 -4
  86. package/src/table/column/boolean/newDecode.js +1 -1
  87. package/src/table/column/boolean/newEncode.js +6 -6
  88. package/src/table/column/date/formatOut.js +3 -5
  89. package/src/table/column/date/newDecode.js +2 -2
  90. package/src/table/column/date/newEncode.js +8 -8
  91. package/src/table/column/date/tryParseISO.js +6 -8
  92. package/src/table/column/date.js +1 -1
  93. package/src/table/column/dateWithTimeZone/newEncode.js +3 -4
  94. package/src/table/column/dateWithTimeZone.js +1 -1
  95. package/src/table/column/encodeFilterArg.js +3 -3
  96. package/src/table/column/equal.js +3 -3
  97. package/src/table/column/extractAlias.js +0 -2
  98. package/src/table/column/greaterThan.js +3 -3
  99. package/src/table/column/greaterThanOrEqual.js +3 -3
  100. package/src/table/column/guid/newDecode.js +1 -1
  101. package/src/table/column/guid/newEncode.js +3 -3
  102. package/src/table/column/in.js +3 -3
  103. package/src/table/column/json/formatOut.js +3 -3
  104. package/src/table/column/json/newDecode.js +3 -3
  105. package/src/table/column/json/newEncode.js +6 -6
  106. package/src/table/column/json.js +2 -1
  107. package/src/table/column/lessThan.js +3 -3
  108. package/src/table/column/lessThanOrEqual.js +4 -4
  109. package/src/table/column/negotiateRawSqlFilter.js +9 -9
  110. package/src/table/column/newBoolean.js +9 -9
  111. package/src/table/column/newColumn.js +21 -21
  112. package/src/table/column/newDecodeCore.js +1 -1
  113. package/src/table/column/notEqual.js +3 -3
  114. package/src/table/column/numeric/newDecode.js +2 -2
  115. package/src/table/column/numeric/newEncode.js +3 -3
  116. package/src/table/column/string/contains.js +2 -1
  117. package/src/table/column/string/containsCore.js +5 -5
  118. package/src/table/column/string/endsWith.js +1 -1
  119. package/src/table/column/string/endsWithCore.js +4 -4
  120. package/src/table/column/string/iContains.js +2 -1
  121. package/src/table/column/string/iEndsWith.js +1 -1
  122. package/src/table/column/string/iEqual.js +3 -3
  123. package/src/table/column/string/iStartsWith.js +1 -1
  124. package/src/table/column/string/newEncode.js +3 -3
  125. package/src/table/column/string/startsWith.js +1 -1
  126. package/src/table/column/string/startsWithCore.js +4 -4
  127. package/src/table/column/string.js +14 -14
  128. package/src/table/commands/beginCommand.js +2 -2
  129. package/src/table/commands/compressChanges.js +2 -2
  130. package/src/table/commands/delete/newSingleCommand.js +5 -5
  131. package/src/table/commands/delete/singleCommand/joinSql.js +12 -12
  132. package/src/table/commands/delete/singleCommand/newSingleCommandCore.js +2 -2
  133. package/src/table/commands/delete/singleCommand/selectSql.js +6 -6
  134. package/src/table/commands/delete/singleCommand/subFilter.js +11 -11
  135. package/src/table/commands/delete/singleCommand/whereSql.js +2 -2
  136. package/src/table/commands/getChangeSet.js +2 -2
  137. package/src/table/commands/insert/getSqlTemplate.js +16 -16
  138. package/src/table/commands/lastCommandMatches.js +2 -2
  139. package/src/table/commands/newDeleteCommand.js +5 -5
  140. package/src/table/commands/newGetLastInsertedCommand.js +4 -4
  141. package/src/table/commands/newGetLastInsertedCommandCore.js +5 -5
  142. package/src/table/commands/newInsertCommand.js +0 -1
  143. package/src/table/commands/newInsertCommandCore.js +3 -3
  144. package/src/table/commands/newRow.js +4 -4
  145. package/src/table/commands/newUpdateCommand.js +4 -4
  146. package/src/table/commands/newUpdateCommandCore.js +4 -4
  147. package/src/table/commands/pushCommand.js +2 -2
  148. package/src/table/commit.js +13 -11
  149. package/src/table/count.js +8 -8
  150. package/src/table/delete.js +4 -4
  151. package/src/table/deleteSessionContext.js +4 -13
  152. package/src/table/executeQueries/executeChanges.js +3 -3
  153. package/src/table/executeQueries/executeQueriesCore.js +2 -2
  154. package/src/table/executeQueries/executeQuery.js +2 -2
  155. package/src/table/executeQueries/resolveExecuteQuery.js +4 -4
  156. package/src/table/executeQueries.js +4 -4
  157. package/src/table/getFromDbById.js +1 -1
  158. package/src/table/getMany.js +7 -7
  159. package/src/table/getManyDto.js +3 -4
  160. package/src/table/getSessionContext.js +4 -4
  161. package/src/table/getSessionSingleton.js +3 -2
  162. package/src/table/groupBy/newQuery.js +4 -4
  163. package/src/table/groupBy.js +9 -9
  164. package/src/table/insert.js +10 -13
  165. package/src/table/joinRelation/getRelatives.js +6 -6
  166. package/src/table/newGetRelated.js +3 -3
  167. package/src/table/newManyRelation.js +9 -9
  168. package/src/table/newOneRelation.js +9 -9
  169. package/src/table/newPrimaryKeyFilter.js +6 -6
  170. package/src/table/newQuery.js +5 -5
  171. package/src/table/newRelatedTable.js +2 -2
  172. package/src/table/newRowCache.js +17 -17
  173. package/src/table/newThrow.js +2 -2
  174. package/src/table/oneRelation/getRelatives.js +5 -5
  175. package/src/table/popChanges.js +3 -3
  176. package/src/table/promise.js +2 -8
  177. package/src/table/query/extractLimit.js +2 -2
  178. package/src/table/query/extractOffset.js +2 -2
  179. package/src/table/query/extractOrderBy.js +2 -2
  180. package/src/table/query/newSingleQuery.js +7 -7
  181. package/src/table/query/singleQuery/columnSql/joinLegToColumnSql.js +5 -5
  182. package/src/table/query/singleQuery/columnSql/newJoinedColumnSql.js +2 -2
  183. package/src/table/query/singleQuery/columnSql/newShallowColumnSql.js +4 -4
  184. package/src/table/query/singleQuery/joinSql/joinLegToJoinSql.js +2 -2
  185. package/src/table/query/singleQuery/joinSql/joinLegToShallowJoinSql.js +2 -2
  186. package/src/table/query/singleQuery/joinSql/newDiscriminatorSql.js +2 -2
  187. package/src/table/query/singleQuery/joinSql/newShallowJoinSql.js +5 -5
  188. package/src/table/query/singleQuery/joinSql/newShallowJoinSqlCore.js +6 -5
  189. package/src/table/query/singleQuery/joinSql/oneLegToJoinSql.js +2 -2
  190. package/src/table/query/singleQuery/joinSql/oneLegToShallowJoinSql.js +2 -2
  191. package/src/table/query/singleQuery/negotiateExclusive.js +2 -2
  192. package/src/table/query/singleQuery/newColumnSql.js +3 -3
  193. package/src/table/query/singleQuery/newDiscriminatorSql.js +2 -2
  194. package/src/table/query/singleQuery/newJoinSql.js +6 -6
  195. package/src/table/query/singleQuery/newWhereSql.js +3 -3
  196. package/src/table/quote.js +4 -4
  197. package/src/table/relatedTable/aggregate.js +2 -2
  198. package/src/table/relatedTable/all.js +5 -5
  199. package/src/table/relatedTable/any.js +3 -3
  200. package/src/table/relatedTable/childColumn.js +12 -12
  201. package/src/table/relatedTable/columnAggregate.js +3 -3
  202. package/src/table/relatedTable/columnAggregateGroup.js +11 -11
  203. package/src/table/relatedTable/joinSql.js +5 -5
  204. package/src/table/relatedTable/joinSqlArray.js +3 -3
  205. package/src/table/relatedTable/none.js +3 -3
  206. package/src/table/relatedTable/relatedColumn.js +13 -13
  207. package/src/table/relatedTable/selectSql.js +2 -2
  208. package/src/table/relatedTable/subFilter.js +4 -4
  209. package/src/table/relatedTable/where.js +3 -3
  210. package/src/table/relatedTable/whereSql.js +2 -2
  211. package/src/table/relation/manyCache/synchronizeAdded.js +2 -2
  212. package/src/table/relation/manyCache/synchronizeChanged.js +3 -3
  213. package/src/table/relation/manyCache/synchronizeRemoved.js +2 -2
  214. package/src/table/relation/newForeignKeyFilter.js +2 -2
  215. package/src/table/relation/newManyCache.js +16 -16
  216. package/src/table/relation/newOneCache.js +6 -6
  217. package/src/table/releaseDbClient.js +4 -4
  218. package/src/table/resultToPromise.js +1 -3
  219. package/src/table/resultToRows/dbRowToRow.js +8 -8
  220. package/src/table/resultToRows/dbRowsToRows.js +2 -2
  221. package/src/table/resultToRows/decodeDbRow.js +2 -2
  222. package/src/table/resultToRows/delete/removeFromCache.js +6 -6
  223. package/src/table/resultToRows/delete.js +6 -6
  224. package/src/table/resultToRows/newDecodeDbRow.js +19 -18
  225. package/src/table/resultToRows/toDto.js +3 -3
  226. package/src/table/resultToRows.js +3 -3
  227. package/src/table/rollback.js +21 -11
  228. package/src/table/rowArray/negotiateNextTick.js +1 -2
  229. package/src/table/setSessionSingleton.js +6 -3
  230. package/src/table/tryGetFirstFromDb.js +4 -4
  231. package/src/table/tryGetFromCacheById.js +3 -3
  232. package/src/table/tryGetFromDbById/extractStrategy.js +2 -2
  233. package/src/table/tryGetFromDbById.js +8 -6
  234. package/src/table/tryGetSessionContext.js +5 -10
  235. package/src/table/tryReleaseDbClient.js +2 -2
  236. package/src/table/updateField.js +4 -4
  237. package/src/table/where.js +2 -2
  238. package/src/table.js +58 -51
  239. package/src/tedious/deleteFromSql.js +1 -1
  240. package/src/tedious/formatDateOut.js +1 -1
  241. package/src/tedious/getManyDto/newQueryCore.js +5 -5
  242. package/src/tedious/getManyDto/query/newSingleQuery.js +5 -5
  243. package/src/tedious/getManyDto/query/newSubQueries/joinLegToQuery.js +3 -3
  244. package/src/tedious/getManyDto/query/newSubQueries/manyLegToQuery.js +3 -3
  245. package/src/tedious/getManyDto/query/newSubQueries/oneLegToQuery.js +4 -4
  246. package/src/tedious/getManyDto/query/newSubQueries.js +8 -8
  247. package/src/tedious/getManyDto/query/singleQuery/newShallowColumnSql.js +5 -6
  248. package/src/tedious/getManyDto.js +6 -6
  249. package/src/tedious/insert.js +3 -3
  250. package/src/tedious/insertSql.js +3 -3
  251. package/src/tedious/newDatabase.js +17 -30
  252. package/src/tedious/newPool.js +10 -10
  253. package/src/tedious/newTransaction.js +3 -4
  254. package/src/tedious/pool/newGenericPool.js +1 -1
  255. package/src/tedious/quote.js +1 -0
  256. package/src/d1/pool/defaults.js +0 -45
  257. package/src/mssql/pool/defaults.js +0 -45
  258. package/src/oracle/pool/defaults.js +0 -45
  259. package/src/pg/pool/defaults.js +0 -45
  260. package/src/sqlite/pool/defaults.js +0 -45
  261. package/src/tedious/pool/defaults.js +0 -45
package/src/sap/insert.js CHANGED
@@ -5,16 +5,16 @@ let executeQueries = require('../table/executeQueries');
5
5
  let pushCommand = require('../table/commands/pushCommand');
6
6
 
7
7
 
8
- function insertDefault(table, row, options) {
8
+ function insertDefault(context, table, row, options) {
9
9
  let commands = [];
10
- let insertCmd = newInsertCommand(newInsertCommandCore, table, row, options);
10
+ let insertCmd = newInsertCommand(newInsertCommandCore.bind(null, context), table, row, options);
11
11
  insertCmd.disallowCompress = true;
12
- pushCommand(insertCmd);
12
+ pushCommand(context, insertCmd);
13
13
 
14
- let selectCmd = newGetLastInsertedCommand(table, row, insertCmd);
14
+ let selectCmd = newGetLastInsertedCommand(context, table, row, insertCmd);
15
15
  commands.push(selectCmd);
16
16
 
17
- return executeQueries(commands).then((result) => result[result.length - 1]);
17
+ return executeQueries(context, commands).then((result) => result[result.length - 1]);
18
18
 
19
19
  }
20
20
 
@@ -1,12 +1,12 @@
1
- const getSessionSingleton = require('../table/getSessionSingleton');
2
1
  const mergeSql = require('./mergeSql');
2
+ const quote = require('./quote');
3
3
 
4
- function getSqlTemplate(_table, _row, options) {
4
+ function getSqlTemplate(_context, _table, _row, options) {
5
5
 
6
6
  if (hasConcurrency(_table, options) && hasColumns())
7
- return mergeSql.apply(null, arguments);
7
+ return mergeSql.apply(null, [...arguments].slice(1));
8
8
  else
9
- return insertSql.apply(null, arguments);
9
+ return insertSql.apply(null, [...arguments].slice(1));
10
10
 
11
11
  function hasColumns() {
12
12
  for(let p in _row) {
@@ -27,7 +27,6 @@ function hasConcurrency(table,options) {
27
27
  }
28
28
 
29
29
  function insertSql(table, row) {
30
- const quote = getSessionSingleton('quote');
31
30
  let columnNames = [];
32
31
  let regularColumnNames = [];
33
32
  let values = [];
@@ -1,10 +1,10 @@
1
- function lastInsertedSql(table, keyValues) {
2
- return keyValues.map((value,i) => {
1
+ function lastInsertedSql(context, table, keyValues) {
2
+ return keyValues.map((value, i) => {
3
3
  let column = table._primaryColumns[i];
4
4
  if (value === undefined && column.tsType === 'NumberColumn')
5
5
  return `${column._dbName}=@@identity`;
6
6
  else
7
- return column.eq(value);
7
+ return column.eq(context, value);
8
8
  });
9
9
 
10
10
  }
@@ -1,7 +1,6 @@
1
- const getSessionSingleton = require('../table/getSessionSingleton');
1
+ const quote = require('./quote');
2
2
 
3
3
  function insertSql(table, row, options) {
4
- const quote = getSessionSingleton('quote');
5
4
  let columnNames = [];
6
5
  let conflictColumnUpdateSql = '';
7
6
  let values = [];
@@ -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,12 @@ 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
 
36
+
44
37
  function begin() {
45
- return _begin(options?.readonly);
38
+ return _begin(domain, options);
46
39
  }
47
40
 
48
41
  async function runInTransaction() {
@@ -50,69 +43,65 @@ function newDatabase(connectionString, poolOptions) {
50
43
  let transaction = newTransaction(domain, pool, options);
51
44
  await new Promise(transaction)
52
45
  .then(begin)
53
- .then(fn)
46
+ .then(() => fn(domain))
54
47
  .then((res) => result = res)
55
- .then(c.commit)
56
- .then(null, c.rollback);
48
+ .then(() => commit(domain))
49
+ .then(null, (e) => rollback(domain, e));
57
50
  return result;
51
+
58
52
  }
59
53
 
60
54
  function run() {
61
55
  let p;
62
56
  let transaction = newTransaction(domain, pool, options);
63
- if (useHook())
64
- p = new Promise(transaction);
65
- else
66
- p = new promise(transaction);
57
+ p = new Promise(transaction);
67
58
 
68
59
  return p.then(begin);
69
60
  }
70
61
 
71
62
  };
72
63
 
73
- c.createTransaction = function() {
64
+ c.createTransaction = function(options) {
74
65
  let domain = createDomain();
75
66
  let transaction = newTransaction(domain, pool);
76
- let p = domain.run(() => new Promise(transaction).then(_begin));
67
+ let p = domain.run(() => new Promise(transaction).then(begin));
77
68
 
78
69
  function run(fn) {
79
- return p.then(domain.run.bind(domain, fn));
70
+ return p.then(() => fn(domain));
80
71
  }
81
- return run;
82
- };
83
-
84
- c.bindTransaction = function() {
85
- // @ts-ignore
86
- var domain = process.domain;
87
- let p = domain.run(() => true);
88
72
 
89
- function run(fn) {
90
- return p.then(domain.run.bind(domain, fn));
73
+ function begin() {
74
+ return _begin(domain, options);
91
75
  }
76
+
77
+ run.rollback = rollback.bind(null, domain);
78
+ run.commit = commit.bind(null, domain);
79
+
92
80
  return run;
81
+
93
82
  };
94
83
 
84
+
85
+
95
86
  c.query = function(query) {
96
87
  let domain = createDomain();
97
88
  let transaction = newTransaction(domain, pool);
98
89
  let p = domain.run(() => new Promise(transaction)
99
- .then(() => setSessionSingleton('changes', []))
100
- .then(() => doQuery(query).then(onResult, onError)));
90
+ .then(() => setSessionSingleton(domain, 'changes', []))
91
+ .then(() => doQuery(domain, query).then(onResult, onError)));
101
92
  return p;
102
93
 
103
94
  function onResult(result) {
104
- releaseDbClient();
95
+ releaseDbClient(domain);
105
96
  return result;
106
97
  }
107
98
 
108
99
  function onError(e) {
109
- releaseDbClient();
100
+ releaseDbClient(domain);
110
101
  throw e;
111
102
  }
112
103
  };
113
104
 
114
-
115
-
116
105
  c.rollback = rollback;
117
106
  c.commit = commit;
118
107
 
@@ -1,5 +1,5 @@
1
+ const promisify = require('node:util').promisify;
1
2
  var pools = require('../pools');
2
- var promise = require('../table/promise');
3
3
  var end = require('./pool/end');
4
4
  var newGenericPool = require('../mssql/pool/newGenericPool');
5
5
  var newId = require('../newId');
@@ -11,7 +11,7 @@ function newPool(connectionString, poolOptions) {
11
11
  var c = {};
12
12
 
13
13
  c.connect = pool.connect;
14
- c.end = promise.denodeify(boundEnd);
14
+ c.end = promisify(boundEnd);
15
15
  pools[id] = c;
16
16
  return c;
17
17
  }
@@ -7,6 +7,7 @@ const formatDateOut = require('./formatDateOut');
7
7
  const insertSql = require('./insertSql');
8
8
  const insert = require('./insert');
9
9
  const limitAndOffset = require('./limitAndOffset');
10
+ const quote = require('./quote');
10
11
 
11
12
  function newResolveTransaction(domain, pool, { readonly = false } = {}) {
12
13
  var rdb = {poolFactory: pool};
@@ -40,7 +41,7 @@ function newResolveTransaction(domain, pool, { readonly = false } = {}) {
40
41
  caller.visitSap();
41
42
  };
42
43
  rdb.aggregateCount = 0;
43
- rdb.quote = (name) => `[${name}]`;
44
+ rdb.quote = quote;
44
45
 
45
46
  if (readonly) {
46
47
  rdb.dbClient = {
@@ -0,0 +1 @@
1
+ module.exports = (name) => `[${name}]`;
@@ -1,6 +1,6 @@
1
1
  var format = 'delete from %s where %s.rowId in (SELECT %s.rowId FROM %s %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);
@@ -5,16 +5,16 @@ let executeQueries = require('../table/executeQueries');
5
5
  let pushCommand = require('../table/commands/pushCommand');
6
6
 
7
7
 
8
- function insertDefault(table, row, options) {
8
+ function insertDefault(context, table, row, options) {
9
9
  let commands = [];
10
- let insertCmd = newInsertCommand(newInsertCommandCore, table, row, options);
10
+ let insertCmd = newInsertCommand(newInsertCommandCore.bind(null, context), table, row, options);
11
11
  insertCmd.disallowCompress = true;
12
- pushCommand(insertCmd);
12
+ pushCommand(context, insertCmd);
13
13
 
14
- let selectCmd = newGetLastInsertedCommand(table, row, insertCmd);
14
+ let selectCmd = newGetLastInsertedCommand(context, table, row, insertCmd);
15
15
  commands.push(selectCmd);
16
16
 
17
- return executeQueries(commands).then((result) => result[result.length - 1]);
17
+ return executeQueries(context, commands).then((result) => result[result.length - 1]);
18
18
 
19
19
  }
20
20
 
@@ -1,6 +1,6 @@
1
- const quote = require('../table/quote');
1
+ const quote = require('./quote');
2
2
 
3
- function insertSql(table, row, options) {
3
+ function insertSql(_context, table, row, options) {
4
4
  let columnNames = [];
5
5
  let conflictColumnUpdateSql = '';
6
6
  let values = [];
@@ -1,10 +1,10 @@
1
- function lastInsertedSql(table, keyValues) {
1
+ function lastInsertedSql(context, table, keyValues) {
2
2
  return keyValues.map((value,i) => {
3
3
  let column = table._primaryColumns[i];
4
4
  if (value === undefined && column.tsType === 'NumberColumn')
5
5
  return 'rowid IN (select last_insert_rowid())';
6
6
  else
7
- return column.eq(value);
7
+ return column.eq(context, value);
8
8
  });
9
9
 
10
10
  }
@@ -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,63 +42,55 @@ 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(() => commit(domain))
48
+ .then(null, (e) => rollback(domain, e));
57
49
  return result;
58
50
  }
59
51
 
60
52
  function run() {
61
53
  let p;
62
54
  let transaction = newTransaction(domain, pool, options);
63
- if (useHook())
64
- p = new Promise(transaction);
65
- else
66
- p = new promise(transaction);
55
+ p = new Promise(transaction);
67
56
 
68
57
  return p.then(begin);
69
58
  }
70
59
 
71
60
  };
72
61
 
73
- c.createTransaction = function() {
62
+ c.createTransaction = function(options) {
74
63
  let domain = createDomain();
75
64
  let transaction = newTransaction(domain, pool);
76
- let p = domain.run(() => new Promise(transaction).then(_begin));
65
+ let p = domain.run(() => new Promise(transaction).then(begin));
77
66
 
78
67
  function run(fn) {
79
- return p.then(domain.run.bind(domain, fn));
68
+ return p.then(() => fn(domain));
80
69
  }
70
+ run.rollback = rollback.bind(null, domain);
71
+ run.commit = commit.bind(null, domain);
81
72
  return run;
82
- };
83
-
84
- c.bindTransaction = function() {
85
- // @ts-ignore
86
- var domain = process.domain;
87
- let p = domain.run(() => true);
88
73
 
89
- function run(fn) {
90
- return p.then(domain.run.bind(domain, fn));
74
+ function begin() {
75
+ return _begin(domain, options);
91
76
  }
92
- return run;
93
77
  };
94
78
 
95
79
  c.query = function(query) {
96
80
  let domain = createDomain();
97
81
  let transaction = newTransaction(domain, pool);
98
82
  let p = domain.run(() => new Promise(transaction)
99
- .then(() => setSessionSingleton('changes', []))
100
- .then(() => doQuery(query).then(onResult, onError)));
83
+ .then(() => setSessionSingleton(domain, 'changes', []))
84
+ .then(() => doQuery(domain, query).then(onResult, onError)));
101
85
  return p;
102
86
 
103
87
  function onResult(result) {
104
- releaseDbClient();
88
+ releaseDbClient(domain);
105
89
  return result;
106
90
  }
107
91
 
108
92
  function onError(e) {
109
- releaseDbClient();
93
+ releaseDbClient(domain);
110
94
  throw e;
111
95
  }
112
96
  };
@@ -1,17 +1,17 @@
1
- var pools = require('../pools');
2
- var promise = require('../table/promise');
3
- var end = require('./pool/end');
4
- var newGenericPool = require('./pool/newGenericPool');
5
- var newId = require('../newId');
1
+ const promisify = require('node:util').promisify;
2
+ const pools = require('../pools');
3
+ const end = require('./pool/end');
4
+ const newGenericPool = require('./pool/newGenericPool');
5
+ const newId = require('../newId');
6
6
 
7
7
  function newPool(connectionString, poolOptions) {
8
- var pool = newGenericPool(connectionString, poolOptions);
9
- var id = newId();
10
- var boundEnd = end.bind(null, pool, id);
11
- var c = {};
8
+ let pool = newGenericPool(connectionString, poolOptions);
9
+ let id = newId();
10
+ let boundEnd = end.bind(null, pool, id);
11
+ let c = {};
12
12
 
13
13
  c.connect = pool.connect;
14
- c.end = promise.denodeify(boundEnd);
14
+ c.end = promisify(boundEnd);
15
15
  pools[id] = c;
16
16
  return c;
17
17
  }
@@ -6,6 +6,7 @@ const lastInsertedSql = require('./lastInsertedSql');
6
6
  const limitAndOffset = require('./limitAndOffset');
7
7
  const insertSql = require('./insertSql');
8
8
  const insert = require('./insert');
9
+ const quote = require('./quote');
9
10
 
10
11
  function newResolveTransaction(domain, pool, { readonly = false } = {}) {
11
12
  var rdb = {poolFactory: pool};
@@ -29,7 +30,7 @@ function newResolveTransaction(domain, pool, { readonly = false } = {}) {
29
30
  caller.visitSqlite();
30
31
  };
31
32
  rdb.aggregateCount = 0;
32
- rdb.quote = (name) => `"${name}"`;
33
+ rdb.quote = quote;
33
34
 
34
35
  if (readonly) {
35
36
  rdb.dbClient = {
@@ -1,7 +1,8 @@
1
1
  /* eslint-disable no-prototype-builtins */
2
2
  var EventEmitter = require('events').EventEmitter;
3
3
 
4
- var defaults = require('./defaults');
4
+ var defaults = require('../../poolDefaults');
5
+
5
6
  var genericPool = require('../../generic-pool');
6
7
  var sqlite = require('sqlite3');
7
8
 
@@ -0,0 +1 @@
1
+ module.exports = (name) => `"${name}"`;
@@ -1,6 +1,6 @@
1
1
  function newAggregate(table) {
2
2
 
3
- function aggregate(fn) {
3
+ function aggregate(_context, fn) {
4
4
  return fn(table);
5
5
  }
6
6
  return aggregate;
@@ -2,13 +2,13 @@ let beginCommand = require('./commands/beginCommand');
2
2
  let executeQuery = require('./executeQueries/executeQuery');
3
3
  let setSessionSingleton = require('./setSessionSingleton');
4
4
 
5
- function begin(readonly) {
6
- setSessionSingleton('changes', []);
7
- if (readonly) {
8
- setSessionSingleton('transactionLess', true);
5
+ function begin(context, transactionLess) {
6
+ setSessionSingleton(context, 'changes', []);
7
+ if (transactionLess) {
8
+ setSessionSingleton(context, 'transactionLess', true);
9
9
  return Promise.resolve();
10
10
  }
11
- return executeQuery(beginCommand());
11
+ return executeQuery(context, beginCommand(context));
12
12
  }
13
13
 
14
14
  module.exports = begin;
@@ -2,10 +2,10 @@ var _delete = require('./delete');
2
2
  var newObject = require('../newObject');
3
3
  var newCascadeDeleteStrategy = require('./newCascadeDeleteStrategy');
4
4
 
5
- function cascadeDelete(table, filter) {
5
+ function cascadeDelete(context, table, filter) {
6
6
  var empty = newObject();
7
7
  var strategy = newCascadeDeleteStrategy(empty, table);
8
- return _delete(table, filter, strategy);
8
+ return _delete(context, table, filter, strategy);
9
9
  }
10
10
 
11
11
  module.exports = cascadeDelete;
@@ -3,8 +3,8 @@ var newDecodeCore = require('../newDecodeCore');
3
3
  function _new(column) {
4
4
  var decodeCore = newDecodeCore(column);
5
5
 
6
- return function(value) {
7
- value = decodeCore(value);
6
+ return function(context, value) {
7
+ value = decodeCore(context, value);
8
8
  if (value === null)
9
9
  return value;
10
10
  else
@@ -3,21 +3,20 @@ var newParam = require('../../query/newParameterized');
3
3
 
4
4
  function _new(_column) {
5
5
 
6
-
7
- function encode(value) {
6
+ function encode(_context, value) {
8
7
  value = purify(value);
9
8
  if (value === null)
10
9
  return newParam('null');
11
10
  return newParam('?', [Buffer.from(value, 'base64')]);
12
11
  }
13
- encode.unsafe = function(value) {
12
+ encode.unsafe = function(_context, value) {
14
13
  value = purify(value);
15
14
  if (value === null)
16
15
  return 'null';
17
16
  return Buffer.from(value, 'base64');
18
17
  };
19
18
 
20
- encode.direct = function(value) {
19
+ encode.direct = function(_context, value) {
21
20
  return Buffer.from(value, 'base64');
22
21
  };
23
22
 
@@ -2,7 +2,7 @@ var purify = require('./purify');
2
2
 
3
3
  function _new(column) {
4
4
 
5
- return function(value) {
5
+ return function(context, value) {
6
6
  if (value == column.dbNull)
7
7
  return null;
8
8
  return purify(value);
@@ -4,34 +4,34 @@ var getSessionSingleton = require('../../getSessionSingleton');
4
4
 
5
5
  function _new(column) {
6
6
 
7
- function encode(value) {
7
+ function encode(context, value) {
8
8
  value = purify(value);
9
9
  if (value === null) {
10
10
  if (column.dbNull === null)
11
11
  return newParam('null');
12
12
  return newParam('\'' + column.dbNull + '\'');
13
13
  }
14
- var encodeCore = getSessionSingleton('encodeBoolean');
14
+ var encodeCore = getSessionSingleton(context, 'encodeBoolean');
15
15
 
16
16
 
17
17
  return newParam('?', [encodeCore(value)]);
18
18
  }
19
19
 
20
- encode.unsafe = function(value) {
20
+ encode.unsafe = function(context, value) {
21
21
  value = purify(value);
22
22
  if (value === null) {
23
23
  if (column.dbNull === null)
24
24
  return 'null';
25
25
  return '\'' + column.dbNull + '\'';
26
26
  }
27
- var encodeCore = getSessionSingleton('encodeBoolean');
27
+ var encodeCore = getSessionSingleton(context, 'encodeBoolean');
28
28
 
29
29
 
30
30
  return encodeCore(value);
31
31
  };
32
32
 
33
- encode.direct = function(value) {
34
- var encodeCore = getSessionSingleton('encodeBoolean');
33
+ encode.direct = function(context, value) {
34
+ var encodeCore = getSessionSingleton(context, 'encodeBoolean');
35
35
 
36
36
  return encodeCore(value);
37
37
  };
@@ -1,14 +1,12 @@
1
1
  var getSessionSingleton = require('../../getSessionSingleton');
2
2
  const quote = require('../../quote');
3
3
 
4
- //todo fix
5
-
6
- function formatOut(column, alias) {
7
- var formatColumn = getSessionSingleton('formatDateOut');
4
+ function formatOut(context, column, alias) {
5
+ var formatColumn = getSessionSingleton(context, 'formatDateOut');
8
6
  if (formatColumn)
9
7
  return formatColumn(column, alias);
10
8
  else
11
- return `${alias}.${quote(column._dbName)}`;
9
+ return `${alias}.${quote(context, column._dbName)}`;
12
10
  }
13
11
 
14
12
  module.exports = formatOut;
@@ -4,8 +4,8 @@ var dateToISOString = require('../../../dateToISOString');
4
4
  function _new(column) {
5
5
  var decodeCore = newDecodeCore(column);
6
6
 
7
- return function(value) {
8
- value = decodeCore(value);
7
+ return function(context, value) {
8
+ value = decodeCore(context, value);
9
9
  if (value === null)
10
10
  return value;
11
11
  else if (typeof value === 'string')
@@ -4,32 +4,32 @@ var getSessionContext = require('../../getSessionContext');
4
4
  var getSessionSingleton = require('../../getSessionSingleton');
5
5
 
6
6
  function _new(column) {
7
- var encode = function(value) {
7
+ var encode = function(context, value) {
8
8
  value = purify(value);
9
9
  if (value == null) {
10
10
  if (column.dbNull === null)
11
11
  return newPara('null');
12
12
  return newPara('\'' + column.dbNull + '\'');
13
13
  }
14
- var context = getSessionContext();
15
- var encodeCore = context.encodeDate || encodeDate;
16
- var formatIn = context.formatDateIn;
14
+ var ctx = getSessionContext(context);
15
+ var encodeCore = ctx.encodeDate || encodeDate;
16
+ var formatIn = ctx.formatDateIn;
17
17
  return newPara(formatIn ? formatIn('?') : '?', [encodeCore(value)]);
18
18
  };
19
19
 
20
- encode.unsafe = function(value) {
20
+ encode.unsafe = function(context, value) {
21
21
  value = purify(value);
22
22
  if (value == null) {
23
23
  if (column.dbNull === null)
24
24
  'null';
25
25
  return '\'' + column.dbNull + '\'';
26
26
  }
27
- var encodeCore = getSessionSingleton('encodeDate') || encodeDate;
27
+ var encodeCore = getSessionSingleton(context, 'encodeDate') || encodeDate;
28
28
  return encodeCore(value);
29
29
  };
30
30
 
31
- encode.direct = function(value) {
32
- var encodeCore = getSessionSingleton('encodeDate') || encodeDate;
31
+ encode.direct = function(context, value) {
32
+ var encodeCore = getSessionSingleton(context, 'encodeDate') || encodeDate;
33
33
  return encodeCore(value);
34
34
  };
35
35