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,12 +1,12 @@
1
1
  let getSessionSingleton = require('../table/getSessionSingleton');
2
2
 
3
- function lastInsertedSql(table, keyValues) {
3
+ function lastInsertedSql(context,table, keyValues) {
4
4
  return keyValues.map((value,i) => {
5
5
  let column = table._primaryColumns[i];
6
6
  if (value === undefined)
7
- return `ROWID='${getSessionSingleton('lastRowid')}'`;
7
+ return `ROWID='${getSessionSingleton(context, 'lastRowid')}'`;
8
8
  else
9
- return column.eq(value);
9
+ return column.eq(context, value);
10
10
  });
11
11
 
12
12
  }
@@ -1,8 +1,6 @@
1
- const outputInsertedSql = require('./outputInsertedSql');
2
- const getSessionSingleton = require('../table/getSessionSingleton');
1
+ const quote = require('./quote');
3
2
 
4
3
  function insertSql(table, row, options) {
5
- const quote = getSessionSingleton('quote');
6
4
  let columnNames = [];
7
5
  let regularColumnNames = [];
8
6
  let conflictColumnUpdateSql = '';
@@ -13,9 +11,9 @@ function insertSql(table, row, options) {
13
11
  const matched = whenMatched();
14
12
  let sql;
15
13
  if (matched)
16
- sql = `MERGE INTO ${quote(table._dbName)} target USING (SELECT ${values.join(',')} FROM DUAL) source ON (${join()}) WHEN MATCHED THEN ${matched} WHEN NOT MATCHED THEN ${whenNotMatched()} ${outputInsertedSql(table)}`;
14
+ sql = `MERGE INTO ${quote(table._dbName)} target USING (SELECT ${values.join(',')} FROM DUAL) source ON (${join()}) WHEN MATCHED THEN ${matched} WHEN NOT MATCHED THEN ${whenNotMatched()}`;
17
15
  else
18
- sql = `MERGE INTO ${quote(table._dbName)} target USING (SELECT ${values.join(',')} FROM DUAL) source ON (${join()}) WHEN NOT MATCHED THEN ${whenNotMatched()} ${outputInsertedSql(table)}`;
16
+ sql = `MERGE INTO ${quote(table._dbName)} target USING (SELECT ${values.join(',')} FROM DUAL) source ON (${join()}) WHEN NOT MATCHED THEN ${whenNotMatched()}`;
19
17
  return sql;
20
18
 
21
19
  function join() {
@@ -72,7 +70,6 @@ function insertSql(table, row, options) {
72
70
  if (concurrency === 'overwrite')
73
71
  conflictColumnUpdates.push(`target.${columnName}=source.${columnName}`);
74
72
  else if (concurrency === 'optimistic')
75
- // conflictColumnUpdates.push(`target.${column._dbName} = CASE WHEN target.${column._dbName} <> source.${column._dbName} THEN RAISE_APPLICATION_ERROR(-20001, 'Conflict when updating ${column._dbName}') ELSE target.${column._dbName} END`);
76
73
  conflictColumnUpdates.push(`target.${columnName} = CASE WHEN target.${columnName} <> source.${columnName} THEN 1/0 ELSE target.${columnName} END`);
77
74
 
78
75
  }
@@ -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,68 +43,60 @@ 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
  }
72
+ run.rollback = rollback.bind(null, domain);
73
+ run.commit = commit.bind(null, domain);
81
74
  return run;
82
- };
83
-
84
- c.bindTransaction = function() {
85
- // @ts-ignore
86
- var domain = process.domain;
87
- let p = domain.run(() => true);
88
75
 
89
- function run(fn) {
90
- return p.then(domain.run.bind(domain, fn));
76
+ function begin() {
77
+ return _begin(domain, options);
91
78
  }
92
- return run;
93
79
  };
94
80
 
95
81
  c.query = function(query) {
96
82
  let domain = createDomain();
97
83
  let transaction = newTransaction(domain, pool);
98
84
  let p = domain.run(() => new Promise(transaction)
99
- .then(() => setSessionSingleton('changes', []))
100
- .then(() => doQuery(query).then(onResult, onError)));
85
+ .then(() => setSessionSingleton(domain, 'changes', []))
86
+ .then(() => doQuery(domain, query).then(onResult, onError)));
101
87
  return p;
102
88
 
103
89
  function onResult(result) {
104
- releaseDbClient();
90
+ releaseDbClient(domain);
105
91
  return result;
106
92
  }
107
93
 
108
94
  function onError(e) {
109
- releaseDbClient();
95
+ releaseDbClient(domain);
110
96
  throw e;
111
97
  }
112
98
  };
113
99
 
114
-
115
100
  c.rollback = rollback;
116
101
  c.commit = commit;
117
102
 
@@ -2,16 +2,16 @@ var newParameterized = require('../table/query/newParameterized');
2
2
  var insertSql = require('./insertSql');
3
3
  var util = require('util');
4
4
 
5
- function newInsertCommandCore(table, row, options = {}) {
5
+ function newInsertCommandCore(context,table, row, options = {}) {
6
6
  var parameters = [];
7
- var values = [insertSql(table, row, options)];
7
+ var values = [insertSql(context,table, row, options)];
8
8
 
9
9
  var columns = table._columns;
10
10
  for (var i = 0; i < columns.length; i++) {
11
11
  var column = columns[i];
12
12
  var alias = column.alias;
13
13
  if (row['__' + column.alias] !== undefined) {
14
- var encoded = column.encode(row[alias]);
14
+ var encoded = column.encode(context, row[alias]);
15
15
  if (encoded.parameters.length > 0) {
16
16
  values.push('?');
17
17
  parameters.push(encoded.parameters[0]);
@@ -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
  }
@@ -8,8 +8,9 @@ const insertSql = require('./insertSql');
8
8
  const insert = require('./insert');
9
9
  const formatDateOut = require('./formatDateOut');
10
10
  const formatDateIn = require('./formatDateIn');
11
+ const quote = require('./quote');
11
12
 
12
- function newResolveTransaction(domain, pool, { readonly } = {}) {
13
+ function newResolveTransaction(domain, pool, { readonly = false } = {}) {
13
14
  var rdb = {poolFactory: pool};
14
15
  if (!pool.connect) {
15
16
  pool = pool();
@@ -35,7 +36,7 @@ function newResolveTransaction(domain, pool, { readonly } = {}) {
35
36
  caller.visitSqlite();
36
37
  };
37
38
  rdb.aggregateCount = 0;
38
- rdb.quote = (name) => `"${name}"`;
39
+ rdb.quote = quote;
39
40
 
40
41
  if (readonly) {
41
42
  rdb.dbClient = {
@@ -2,7 +2,7 @@
2
2
  /* eslint-disable no-prototype-builtins */
3
3
  var EventEmitter = require('events').EventEmitter;
4
4
 
5
- var defaults = require('./defaults');
5
+ var defaults = require('../../poolDefaults');
6
6
  var genericPool = require('../../generic-pool');
7
7
  var oracle = require('oracledb');
8
8
 
@@ -15,7 +15,7 @@ function newGenericPool(connectionString, poolOptions) {
15
15
  max: poolOptions.size || poolOptions.poolSize || defaults.poolSize,
16
16
  idleTimeoutMillis: poolOptions.idleTimeout || defaults.poolIdleTimeout,
17
17
  reapIntervalMillis: poolOptions.reapIntervalMillis || defaults.reapIntervalMillis,
18
- log: poolOptions.log || defaults.poolLog,
18
+ log: poolOptions.log,
19
19
  create: function(cb) {
20
20
  var client;
21
21
  oracle.getConnection(connectionString, onConnected);
@@ -0,0 +1 @@
1
+ module.exports = (name) => `"${name}"`;
@@ -10,9 +10,6 @@ function wrapQuery(connection) {
10
10
  var sql = replaceParamChar(query, params);
11
11
  log.emitQuery({ sql, parameters: params });
12
12
 
13
-
14
-
15
-
16
13
  runOriginalQuery.call(connection, sql, params, {
17
14
  fetchTypeHandler: function(metaData) {
18
15
  // Tells the database to return column names in lowercase
package/src/patchRow.js CHANGED
@@ -1,13 +1,13 @@
1
1
  let patchTable = require('./patchTable');
2
2
 
3
- function patchRow(table, row, patches, options) {
3
+ function patchRow(context, table, row, patches, options) {
4
4
  patches = JSON.parse(JSON.stringify(patches));
5
5
  let pkName = table._primaryColumns[0].alias;
6
6
  let id = row[pkName];
7
7
  for (let i = 0; i < patches.length; i++) {
8
8
  patches[i].path = '/' + id + patches[i].path;
9
9
  }
10
- return patchTable(table, patches, options);
10
+ return patchTable(context, table, patches, options);
11
11
  }
12
12
 
13
13
  module.exports = patchRow;
package/src/patchTable.js CHANGED
@@ -12,7 +12,7 @@ async function patchTable() {
12
12
  return patchTableCore.apply(null, arguments);
13
13
  }
14
14
 
15
- async function patchTableCore(table, patches, { strategy = undefined, deduceStrategy = false, ...options } = {}, dryrun) {
15
+ async function patchTableCore(context, table, patches, { strategy = undefined, deduceStrategy = false, ...options } = {}, dryrun) {
16
16
  options = cleanOptions(options);
17
17
  strategy = JSON.parse(JSON.stringify(strategy || {}));
18
18
  let changed = new Set();
@@ -41,7 +41,8 @@ async function patchTableCore(table, patches, { strategy = undefined, deduceStra
41
41
 
42
42
  async function toDtos(set) {
43
43
  set = [...set];
44
- return table.getManyDto(set, strategy);
44
+ const result = await table.getManyDto(context, set, strategy);
45
+ return result;
45
46
  }
46
47
 
47
48
  function toKey(property) {
@@ -56,7 +57,7 @@ async function patchTableCore(table, patches, { strategy = undefined, deduceStra
56
57
  path = path.slice(1);
57
58
  if (!row && path.length > 0) {
58
59
  const key = toKey(property);
59
- row = await table.tryGetById.apply(null, toKey(property), strategy);
60
+ row = await table.tryGetById.apply(null, [context, ...key, strategy]);
60
61
  if (!row)
61
62
  throw new Error(`Row ${table._dbName} with id ${key} was not found.`);
62
63
  }
@@ -98,7 +99,7 @@ async function patchTableCore(table, patches, { strategy = undefined, deduceStra
98
99
  }
99
100
  }
100
101
  }
101
- let row = table.insertWithConcurrency.apply(null, [options, value]);
102
+ let row = table.insertWithConcurrency.apply(null, [context, options, value]);
102
103
  row = await row;
103
104
 
104
105
  for (let i = 0; i < childInserts.length; i++) {
@@ -212,7 +213,7 @@ async function patchTableCore(table, patches, { strategy = undefined, deduceStra
212
213
  async function remove({ path, op, oldValue, options }, table, row) {
213
214
  let property = path[0];
214
215
  path = path.slice(1);
215
- row = row || await table.getById.apply(null, toKey(property));
216
+ row = row || await table.getById.apply(null, [context, ...toKey(property)]);
216
217
  if (path.length === 0) {
217
218
  await validateDeleteAllowed({ row, options, table });
218
219
  if (await validateDeleteConflict({ row, oldValue, options, table }))
@@ -1,6 +1,6 @@
1
1
  var format = 'delete 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);
@@ -1,7 +1,6 @@
1
- const quote = require('../table/quote');
2
1
 
3
2
  function formatDateOut(column, alias) {
4
- return `${alias}.${quote(column._dbName)}::text`;
3
+ return `${alias}."${(column._dbName)}"::text`;
5
4
  }
6
5
 
7
6
  module.exports = formatDateOut;
package/src/pg/insert.js CHANGED
@@ -3,11 +3,11 @@ let newInsertCommandCore = require('../table/commands/newInsertCommandCore');
3
3
  let executeQueries = require('../table/executeQueries');
4
4
 
5
5
 
6
- function insertDefault(table, row, options) {
7
- let insertCmd = newInsertCommand(newInsertCommandCore, table, row, options);
6
+ function insertDefault(context, table, row, options) {
7
+ let insertCmd = newInsertCommand(newInsertCommandCore.bind(null, context), table, row, options);
8
8
  insertCmd.disallowCompress = true;
9
9
 
10
- return executeQueries([insertCmd]).then((result) => result[result.length - 1]);
10
+ return executeQueries(context, [insertCmd]).then((result) => result[result.length - 1]);
11
11
 
12
12
  }
13
13
 
@@ -1,9 +1,7 @@
1
1
  let lastInsertedSql = require('./lastInsertedSql');
2
- let getSessionContext = require('../table/getSessionContext');
3
- const getSessionSingleton = require('../table/getSessionSingleton');
2
+ const quote = require('./quote');
4
3
 
5
- function insertSql(table, row, options) {
6
- const quote = getSessionSingleton('quote');
4
+ function insertSql(_context, table, row, options) {
7
5
  let columnNames = [];
8
6
  let regularColumnNames = [];
9
7
  let conflictColumnUpdateSql = '';
@@ -65,9 +63,6 @@ function insertSql(table, row, options) {
65
63
 
66
64
 
67
65
  function outputInserted() {
68
- let context = getSessionContext();
69
- if (!context.lastInsertedIsSeparate && context.outputInsertedSql)
70
- return context.outputInsertedSql(table) + ' ';
71
66
  return '';
72
67
  }
73
68
  }
@@ -1,7 +1,6 @@
1
- const getSessionSingleton = require('../table/getSessionSingleton');
1
+ const quote = require('./quote');
2
2
 
3
3
  function lastInsertedSql(table) {
4
- const quote = getSessionSingleton('quote');
5
4
  let separator = '';
6
5
  let result = 'RETURNING ';
7
6
  for (let i = 0; i < table._columns.length; i++) {
@@ -6,10 +6,6 @@ let rollback = require('../table/rollback');
6
6
  let newPool = require('./newPool');
7
7
  let lock = require('../lock');
8
8
  let executeSchema = require('./schema');
9
- let useHook = require('../useHook');
10
- let promise = require('promise/domains');
11
- let versionArray = process.version.replace('v', '').split('.');
12
- let major = parseInt(versionArray[0]);
13
9
  let express = require('../hostExpress');
14
10
  let hostLocal = require('../hostLocal');
15
11
  let doQuery = require('../query');
@@ -41,39 +37,30 @@ function newDatabase(connectionString, poolOptions) {
41
37
 
42
38
  if (fn)
43
39
  return domain.run(runInTransaction);
44
- else if ((major >= 12) && useHook()) {
45
- domain.exitContext = true;
46
- return domain.start().then(run);
47
- }
48
40
  else
49
41
  return domain.run(run);
50
42
 
51
-
52
-
53
43
  async function runInTransaction() {
54
44
  let result;
55
45
  let transaction = newTransaction(domain, pool, options);
56
46
  await new Promise(transaction)
57
47
  .then(begin)
58
48
  .then(negotiateSchema)
59
- .then(fn)
49
+ .then(() => fn(domain))
60
50
  .then((res) => result = res)
61
- .then(c.commit)
62
- .then(null, c.rollback);
51
+ .then(() => commit(domain))
52
+ .then(null, (e) => rollback(domain,e));
63
53
  return result;
64
54
  }
65
55
 
66
56
  function begin() {
67
- return _begin(options?.readonly);
57
+ return _begin(domain, options);
68
58
  }
69
59
 
70
60
  function run() {
71
61
  let p;
72
62
  let transaction = newTransaction(domain, pool, options);
73
- if (useHook())
74
- p = new Promise(transaction);
75
- else
76
- p = new promise(transaction);
63
+ p = new Promise(transaction);
77
64
 
78
65
  return p.then(begin)
79
66
  .then(negotiateSchema);
@@ -83,37 +70,34 @@ function newDatabase(connectionString, poolOptions) {
83
70
  let schema = options && options.schema;
84
71
  if (!schema)
85
72
  return previous;
86
- return executeSchema(schema);
73
+ return executeSchema(domain, schema);
87
74
  }
88
75
  };
89
76
 
90
77
  c.createTransaction = function(options) {
91
78
  let domain = createDomain();
92
- let transaction = newTransaction(domain, pool);
93
- let p = domain.run(() => new Promise(transaction).then(_begin).then(negotiateSchema));
79
+ let transaction = newTransaction(domain, pool, options);
80
+ let p = domain.run(() => new Promise(transaction)
81
+ .then(begin).then(negotiateSchema));
94
82
 
95
83
  function run(fn) {
96
84
  return p.then(domain.run.bind(domain, fn));
97
85
  }
98
86
 
87
+ function begin() {
88
+ return _begin(domain, options);
89
+ }
90
+
99
91
  function negotiateSchema(previous) {
100
92
  let schema = options && options.schema;
101
93
  if (!schema)
102
94
  return previous;
103
- return executeSchema(schema);
95
+ return executeSchema(domain,schema);
104
96
  }
105
97
 
106
- return run;
107
- };
98
+ run.rollback = rollback.bind(null, domain);
99
+ run.commit = commit.bind(null, domain);
108
100
 
109
- c.bindTransaction = function() {
110
- // @ts-ignore
111
- var domain = process.domain;
112
- let p = domain.run(() => true);
113
-
114
- function run(fn) {
115
- return p.then(domain.run.bind(domain, fn));
116
- }
117
101
  return run;
118
102
  };
119
103
 
@@ -121,22 +105,21 @@ function newDatabase(connectionString, poolOptions) {
121
105
  let domain = createDomain();
122
106
  let transaction = newTransaction(domain, pool);
123
107
  let p = domain.run(() => new Promise(transaction)
124
- .then(() => setSessionSingleton('changes', []))
125
- .then(() => doQuery(query).then(onResult, onError)));
108
+ .then(() => setSessionSingleton(domain, 'changes', []))
109
+ .then(() => doQuery(domain, query).then(onResult, onError)));
126
110
  return p;
127
111
 
128
112
  function onResult(result) {
129
- releaseDbClient();
113
+ releaseDbClient(domain);
130
114
  return result;
131
115
  }
132
116
 
133
117
  function onError(e) {
134
- releaseDbClient();
118
+ releaseDbClient(domain);
135
119
  throw e;
136
120
  }
137
121
  };
138
122
 
139
-
140
123
  c.rollback = rollback;
141
124
  c.commit = commit;
142
125
  c.lock = lock;
package/src/pg/newPool.js CHANGED
@@ -1,17 +1,17 @@
1
- var pools = require('../pools');
2
- var promise = require('../table/promise');
3
- var end = require('./pool/end');
4
- var newPgPool = require('./pool/newPgPool');
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 newPgPool = require('./pool/newPgPool');
5
+ const newId = require('../newId');
6
6
 
7
7
  function newPool(connectionString, poolOptions) {
8
- var pool = newPgPool(connectionString, poolOptions);
9
- var id = newId();
10
- var boundEnd = end.bind(null, pool, id);
11
- var c = {};
8
+ let pool = newPgPool(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
  }
@@ -8,8 +8,9 @@ var formatDateOut = require('./formatDateOut');
8
8
  var encodeJSON = require('./encodeJSON');
9
9
  var insertSql = require('./insertSql');
10
10
  var insert = require('./insert');
11
+ var quote = require('./quote');
11
12
 
12
- function newResolveTransaction(domain, pool, { readonly } = {}) {
13
+ function newResolveTransaction(domain, pool, { readonly = false } = {}) {
13
14
  var rdb = { poolFactory: pool };
14
15
  if (!pool.connect) {
15
16
  pool = pool();
@@ -32,7 +33,7 @@ function newResolveTransaction(domain, pool, { readonly } = {}) {
32
33
  caller.visitPg();
33
34
  };
34
35
  rdb.aggregateCount = 0;
35
- rdb.quote = (name) => `"${name}"`;
36
+ rdb.quote = quote;
36
37
 
37
38
  if (readonly) {
38
39
  rdb.dbClient = {
@@ -3,7 +3,7 @@
3
3
  var log = require('../../table/log');
4
4
  var EventEmitter = require('events').EventEmitter;
5
5
 
6
- var defaults = require('./defaults');
6
+ var defaults = require('../../poolDefaults');
7
7
  var genericPool = require('../../generic-pool');
8
8
  var _pg = require('pg');
9
9
  var parseSearchPathParam = require('./parseSearchPathParam');
@@ -17,7 +17,7 @@ function newPgPool(connectionString, poolOptions) {
17
17
  max: poolOptions.size || poolOptions.poolSize || defaults.poolSize,
18
18
  idleTimeoutMillis: poolOptions.idleTimeout || defaults.poolIdleTimeout,
19
19
  reapIntervalMillis: poolOptions.reapIntervalMillis || defaults.reapIntervalMillis,
20
- log: poolOptions.log || defaults.poolLog,
20
+ log: poolOptions.log,
21
21
  create: function(cb) {
22
22
  var client = new pg.Client(connectionString);
23
23
  client.connect(function(err) {
@@ -0,0 +1,2 @@
1
+
2
+ module.exports = (name) => `"${name}"`;
package/src/pg/schema.js CHANGED
@@ -1,11 +1,11 @@
1
1
  var query = require('../query');
2
2
 
3
- function executeSchema(schema) {
3
+ function executeSchema(context, schema) {
4
4
  if (!schema)
5
5
  throw new Error('Missing schema');
6
6
  if (!Array.isArray(schema))
7
7
  schema = [schema];
8
- return query('SET LOCAL search_path TO ' + schema.join(','));
8
+ return query(context, 'SET LOCAL search_path TO ' + schema.join(','));
9
9
  }
10
10
 
11
11
  module.exports = executeSchema;
@@ -11,6 +11,4 @@ module.exports = {
11
11
  //frequeny to check for idle clients within the client pool
12
12
  reapIntervalMillis: 1000,
13
13
 
14
- //pool log function / boolean
15
- poolLog: false,
16
14
  };
package/src/query.js CHANGED
@@ -1,9 +1,9 @@
1
1
  var executeQueries = require('./table/executeQueries');
2
2
  var wrapQuery = require('./query/wrapQuery');
3
3
 
4
- function doQuery(query) {
4
+ function doQuery(context, query) {
5
5
  var wrappedQuery = wrapQuery(query);
6
- return executeQueries([wrappedQuery]).then(unwrapResult);
6
+ return executeQueries(context, [wrappedQuery]).then(unwrapResult);
7
7
  }
8
8
 
9
9
  function unwrapResult(results) {
@@ -1,6 +1,6 @@
1
1
  var format = 'delete from %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)}, 23)`;