@nesgarbo/node-jt400 6.0.3 → 6.0.4

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 (152) hide show
  1. package/README.md +330 -369
  2. package/dist-cjs/index.d.cts +12 -5
  3. package/dist-cjs/index.js.map +1 -1
  4. package/dist-cjs/java/JT400.d.cts +3 -3
  5. package/dist-cjs/java/JT400.js.map +1 -1
  6. package/dist-cjs/java/index.js +4 -3
  7. package/dist-cjs/java/index.js.map +1 -1
  8. package/dist-cjs/lib/baseConnection.js +124 -166
  9. package/dist-cjs/lib/baseConnection.js.map +1 -1
  10. package/dist-cjs/lib/baseConnection.types.d.cts +11 -7
  11. package/dist-cjs/lib/baseConnection.types.js.map +1 -1
  12. package/dist-cjs/lib/connection.js +12 -25
  13. package/dist-cjs/lib/connection.js.map +1 -1
  14. package/dist-cjs/lib/connection.types.d.cts +39 -12
  15. package/dist-cjs/lib/connection.types.js.map +1 -1
  16. package/dist-cjs/lib/handleError.d.cts +1 -3
  17. package/dist-cjs/lib/handleError.js +3 -2
  18. package/dist-cjs/lib/handleError.js.map +1 -1
  19. package/dist-cjs/lib/ifs/read_stream.d.cts +6 -1
  20. package/dist-cjs/lib/ifs/read_stream.js +23 -32
  21. package/dist-cjs/lib/ifs/read_stream.js.map +1 -1
  22. package/dist-cjs/lib/ifs/write_stream.d.cts +7 -1
  23. package/dist-cjs/lib/ifs/write_stream.js +13 -24
  24. package/dist-cjs/lib/ifs/write_stream.js.map +1 -1
  25. package/dist-cjs/lib/inMemoryConnection.d.cts +1 -1
  26. package/dist-cjs/lib/inMemoryConnection.js +4 -4
  27. package/dist-cjs/lib/inMemoryConnection.js.map +1 -1
  28. package/dist-cjs/lib/insertList.js +12 -13
  29. package/dist-cjs/lib/insertList.js.map +1 -1
  30. package/dist-cjs/lib/jdbcstream.d.cts +16 -1
  31. package/dist-cjs/lib/jdbcstream.js +31 -36
  32. package/dist-cjs/lib/jdbcstream.js.map +1 -1
  33. package/dist-cjs/lib/jdbcwritestream.d.cts +4 -1
  34. package/dist-cjs/lib/jdbcwritestream.js +7 -20
  35. package/dist-cjs/lib/jdbcwritestream.js.map +1 -1
  36. package/dist-cjs/lib/logger.d.cts +4 -4
  37. package/dist-cjs/lib/logger.js.map +1 -1
  38. package/dist-cjs/lib/sqlutil.d.cts +4 -1
  39. package/dist-cjs/lib/sqlutil.js +1 -0
  40. package/dist-cjs/lib/sqlutil.js.map +1 -1
  41. package/dist-cjs/lib/streamTransformers.d.cts +2 -1
  42. package/dist-cjs/lib/streamTransformers.js +1 -1
  43. package/dist-cjs/lib/streamTransformers.js.map +1 -1
  44. package/dist-cjs/typings/jsonstream.d.js +1 -0
  45. package/dist-cjs/typings/jsonstream.d.js.map +1 -0
  46. package/dist-esm/index.d.ts +12 -5
  47. package/dist-esm/index.js.map +1 -1
  48. package/dist-esm/java/JT400.d.ts +3 -3
  49. package/dist-esm/java/index.js +3 -10
  50. package/dist-esm/java/index.js.map +1 -1
  51. package/dist-esm/lib/baseConnection.js +124 -166
  52. package/dist-esm/lib/baseConnection.js.map +1 -1
  53. package/dist-esm/lib/baseConnection.types.d.ts +11 -7
  54. package/dist-esm/lib/baseConnection.types.js.map +1 -1
  55. package/dist-esm/lib/connection.js +12 -25
  56. package/dist-esm/lib/connection.js.map +1 -1
  57. package/dist-esm/lib/connection.types.d.ts +39 -12
  58. package/dist-esm/lib/handleError.d.ts +1 -3
  59. package/dist-esm/lib/handleError.js +3 -2
  60. package/dist-esm/lib/handleError.js.map +1 -1
  61. package/dist-esm/lib/ifs/read_stream.d.ts +6 -1
  62. package/dist-esm/lib/ifs/read_stream.js +23 -22
  63. package/dist-esm/lib/ifs/read_stream.js.map +1 -1
  64. package/dist-esm/lib/ifs/write_stream.d.ts +7 -1
  65. package/dist-esm/lib/ifs/write_stream.js +13 -14
  66. package/dist-esm/lib/ifs/write_stream.js.map +1 -1
  67. package/dist-esm/lib/inMemoryConnection.d.ts +1 -1
  68. package/dist-esm/lib/inMemoryConnection.js +4 -4
  69. package/dist-esm/lib/inMemoryConnection.js.map +1 -1
  70. package/dist-esm/lib/insertList.js +12 -13
  71. package/dist-esm/lib/insertList.js.map +1 -1
  72. package/dist-esm/lib/jdbcstream.d.ts +16 -1
  73. package/dist-esm/lib/jdbcstream.js +31 -36
  74. package/dist-esm/lib/jdbcstream.js.map +1 -1
  75. package/dist-esm/lib/jdbcwritestream.d.ts +4 -1
  76. package/dist-esm/lib/jdbcwritestream.js +7 -10
  77. package/dist-esm/lib/jdbcwritestream.js.map +1 -1
  78. package/dist-esm/lib/logger.d.ts +4 -4
  79. package/dist-esm/lib/logger.js.map +1 -1
  80. package/dist-esm/lib/sqlutil.d.ts +4 -1
  81. package/dist-esm/lib/sqlutil.js +1 -0
  82. package/dist-esm/lib/sqlutil.js.map +1 -1
  83. package/dist-esm/lib/streamTransformers.d.ts +2 -1
  84. package/dist-esm/lib/streamTransformers.js +1 -1
  85. package/dist-esm/lib/streamTransformers.js.map +1 -1
  86. package/package.json +16 -21
  87. package/dist-cjs/integration-test/call-rpg-spec.d.cts +0 -2
  88. package/dist-cjs/integration-test/call-rpg-spec.js +0 -101
  89. package/dist-cjs/integration-test/call-rpg-spec.js.map +0 -1
  90. package/dist-cjs/integration-test/dataq-spec.d.cts +0 -2
  91. package/dist-cjs/integration-test/dataq-spec.js +0 -57
  92. package/dist-cjs/integration-test/dataq-spec.js.map +0 -1
  93. package/dist-cjs/integration-test/db.d.cts +0 -8
  94. package/dist-cjs/integration-test/db.js +0 -31
  95. package/dist-cjs/integration-test/db.js.map +0 -1
  96. package/dist-cjs/integration-test/db2-connect-spec.d.cts +0 -2
  97. package/dist-cjs/integration-test/db2-connect-spec.js +0 -42
  98. package/dist-cjs/integration-test/db2-connect-spec.js.map +0 -1
  99. package/dist-cjs/integration-test/db2-pool-spec.d.cts +0 -2
  100. package/dist-cjs/integration-test/db2-pool-spec.js +0 -213
  101. package/dist-cjs/integration-test/db2-pool-spec.js.map +0 -1
  102. package/dist-cjs/integration-test/ifs-spec.d.cts +0 -2
  103. package/dist-cjs/integration-test/ifs-spec.js +0 -140
  104. package/dist-cjs/integration-test/ifs-spec.js.map +0 -1
  105. package/dist-cjs/integration-test/msgf-spec.d.cts +0 -2
  106. package/dist-cjs/integration-test/msgf-spec.js +0 -34
  107. package/dist-cjs/integration-test/msgf-spec.js.map +0 -1
  108. package/dist-cjs/integration-test/msgq-spec.d.cts +0 -2
  109. package/dist-cjs/integration-test/msgq-spec.js +0 -45
  110. package/dist-cjs/integration-test/msgq-spec.js.map +0 -1
  111. package/dist-cjs/unit-test/hsql-spec.d.cts +0 -2
  112. package/dist-cjs/unit-test/hsql-spec.js +0 -488
  113. package/dist-cjs/unit-test/hsql-spec.js.map +0 -1
  114. package/dist-cjs/unit-test/sqlutil-spec.d.cts +0 -2
  115. package/dist-cjs/unit-test/sqlutil-spec.js +0 -43
  116. package/dist-cjs/unit-test/sqlutil-spec.js.map +0 -1
  117. package/dist-cjs/unit-test/streamTransformers-spec.d.cts +0 -2
  118. package/dist-cjs/unit-test/streamTransformers-spec.js +0 -121
  119. package/dist-cjs/unit-test/streamTransformers-spec.js.map +0 -1
  120. package/dist-esm/integration-test/call-rpg-spec.d.ts +0 -2
  121. package/dist-esm/integration-test/call-rpg-spec.js +0 -79
  122. package/dist-esm/integration-test/call-rpg-spec.js.map +0 -1
  123. package/dist-esm/integration-test/dataq-spec.d.ts +0 -2
  124. package/dist-esm/integration-test/dataq-spec.js +0 -35
  125. package/dist-esm/integration-test/dataq-spec.js.map +0 -1
  126. package/dist-esm/integration-test/db.d.ts +0 -8
  127. package/dist-esm/integration-test/db.js +0 -8
  128. package/dist-esm/integration-test/db.js.map +0 -1
  129. package/dist-esm/integration-test/db2-connect-spec.d.ts +0 -2
  130. package/dist-esm/integration-test/db2-connect-spec.js +0 -20
  131. package/dist-esm/integration-test/db2-connect-spec.js.map +0 -1
  132. package/dist-esm/integration-test/db2-pool-spec.d.ts +0 -2
  133. package/dist-esm/integration-test/db2-pool-spec.js +0 -197
  134. package/dist-esm/integration-test/db2-pool-spec.js.map +0 -1
  135. package/dist-esm/integration-test/ifs-spec.d.ts +0 -2
  136. package/dist-esm/integration-test/ifs-spec.js +0 -118
  137. package/dist-esm/integration-test/ifs-spec.js.map +0 -1
  138. package/dist-esm/integration-test/msgf-spec.d.ts +0 -2
  139. package/dist-esm/integration-test/msgf-spec.js +0 -12
  140. package/dist-esm/integration-test/msgf-spec.js.map +0 -1
  141. package/dist-esm/integration-test/msgq-spec.d.ts +0 -2
  142. package/dist-esm/integration-test/msgq-spec.js +0 -23
  143. package/dist-esm/integration-test/msgq-spec.js.map +0 -1
  144. package/dist-esm/unit-test/hsql-spec.d.ts +0 -2
  145. package/dist-esm/unit-test/hsql-spec.js +0 -466
  146. package/dist-esm/unit-test/hsql-spec.js.map +0 -1
  147. package/dist-esm/unit-test/sqlutil-spec.d.ts +0 -2
  148. package/dist-esm/unit-test/sqlutil-spec.js +0 -21
  149. package/dist-esm/unit-test/sqlutil-spec.js.map +0 -1
  150. package/dist-esm/unit-test/streamTransformers-spec.d.ts +0 -2
  151. package/dist-esm/unit-test/streamTransformers-spec.js +0 -99
  152. package/dist-esm/unit-test/streamTransformers-spec.js.map +0 -1
@@ -9,6 +9,105 @@ function convertDateValues(v) {
9
9
  function paramsToJson(params) {
10
10
  return JSON.stringify((params || []).map(convertDateValues));
11
11
  }
12
+ function buildStatementWrapper(st, ctx) {
13
+ let stream;
14
+ return {
15
+ prepare(sql) {
16
+ return st.prepare(sql);
17
+ },
18
+ isQuery() {
19
+ return st.isQuerySync();
20
+ },
21
+ async metadata() {
22
+ return st.getMetaData().then(JSON.parse);
23
+ },
24
+ async asArray() {
25
+ const startTime = ctx ? process.hrtime.bigint() : 0n;
26
+ return st.asArray().then(JSON.parse).then((result) => {
27
+ if (ctx) {
28
+ ctx.logger.info({
29
+ sql: ctx.sql,
30
+ state: "finished",
31
+ duration: Number(process.hrtime.bigint() - startTime),
32
+ parameterCount: ctx.params.length,
33
+ resultSize: result.length
34
+ }, "IBMI DB query executed");
35
+ }
36
+ return result;
37
+ });
38
+ },
39
+ asStream(options) {
40
+ const startTime = ctx ? process.hrtime.bigint() : 0n;
41
+ stream = new JdbcStream({
42
+ jdbcStream: st.asStreamSync(options?.bufferSize ?? 100)
43
+ });
44
+ if (ctx) {
45
+ stream.on("end", () => {
46
+ ctx.logger.info({
47
+ sql: ctx.sql,
48
+ state: "finished",
49
+ duration: Number(process.hrtime.bigint() - startTime),
50
+ parameterCount: ctx.params.length
51
+ }, "IBMI DB query as stream ended");
52
+ });
53
+ }
54
+ return stream;
55
+ },
56
+ asObjectStream(options) {
57
+ const startTime = ctx ? process.hrtime.bigint() : 0n;
58
+ return st.getMetaData().then(JSON.parse).then((metadata) => {
59
+ const transformArrayToObject = arrayToObject(metadata);
60
+ const parseJSON = parse("*");
61
+ stream = new JdbcStream({
62
+ jdbcStream: st.asStreamSync(options?.bufferSize ?? 100)
63
+ });
64
+ if (ctx) {
65
+ stream.on("end", () => {
66
+ ctx.logger.info({
67
+ sql: ctx.sql,
68
+ state: "finished",
69
+ duration: Number(process.hrtime.bigint() - startTime),
70
+ parameterCount: ctx.params.length
71
+ }, "IBMI DB query as object stream ended");
72
+ });
73
+ }
74
+ return stream.pipe(parseJSON).pipe(transformArrayToObject);
75
+ });
76
+ },
77
+ asIterable() {
78
+ const startTime = ctx ? process.hrtime.bigint() : 0n;
79
+ return {
80
+ [Symbol.asyncIterator]() {
81
+ return {
82
+ async next() {
83
+ return st.next().then(JSON.parse).then((value) => {
84
+ const done = !value;
85
+ if (done && ctx) {
86
+ ctx.logger.info({
87
+ sql: ctx.sql,
88
+ state: "finished",
89
+ duration: Number(process.hrtime.bigint() - startTime),
90
+ parameterCount: ctx.params.length
91
+ }, "IBMI DB query as iterable executed");
92
+ }
93
+ return { done, value };
94
+ });
95
+ }
96
+ };
97
+ }
98
+ };
99
+ },
100
+ updated() {
101
+ return st.updated();
102
+ },
103
+ close() {
104
+ if (stream) {
105
+ return stream.close();
106
+ }
107
+ return st.close();
108
+ }
109
+ };
110
+ }
12
111
  const createBaseConnection = function(jdbcConnection, insertListFun, logger, inMemory) {
13
112
  const baseConnection = {
14
113
  async commit() {
@@ -27,57 +126,11 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
27
126
  "createStatement is not supported by this JDBCConnection"
28
127
  );
29
128
  }
30
- return jdbcConnection.createStatement().then((st) => {
31
- return {
32
- prepare(sql) {
33
- return st.prepare(sql);
34
- },
35
- isQuery() {
36
- return st.isQuerySync();
37
- },
38
- async metadata() {
39
- return st.getMetaData().then(JSON.parse);
40
- },
41
- async asArray() {
42
- return st.asArray().then(JSON.parse);
43
- },
44
- asIterable() {
45
- return {
46
- [Symbol.asyncIterator]: async function* () {
47
- while (true) {
48
- const row = await st.next().then(JSON.parse);
49
- if (!row) break;
50
- yield row;
51
- }
52
- }
53
- };
54
- },
55
- asStream(options) {
56
- return new JdbcStream({
57
- jdbcStream: st.asStreamSync(options?.bufferSize ?? 100)
58
- });
59
- },
60
- asObjectStream(options) {
61
- return st.getMetaData().then(JSON.parse).then((metadata) => {
62
- const transform = arrayToObject(metadata);
63
- const stream = new JdbcStream({
64
- jdbcStream: st.asStreamSync(options?.bufferSize ?? 100)
65
- });
66
- return stream.pipe(parse("*")).pipe(transform);
67
- });
68
- },
69
- updated() {
70
- return st.updated();
71
- },
72
- close() {
73
- return st.close();
74
- }
75
- };
76
- });
129
+ return jdbcConnection.createStatement().then((st) => buildStatementWrapper(st));
77
130
  },
78
131
  query(sql, params = [], options) {
79
132
  const jsonParams = paramsToJson(params);
80
- const trim = options && options.trim !== void 0 ? options.trim : true;
133
+ const trim = options?.trim !== void 0 ? options.trim : true;
81
134
  logger.debug(
82
135
  { sql, state: "starting", parameterCount: params.length },
83
136
  "Executing IBMI DB query"
@@ -126,122 +179,7 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
126
179
  { sql, state: "starting", parameterCount: params.length },
127
180
  "Executing IBMI DB sql statement"
128
181
  );
129
- return jdbcConnection.execute(sql, jsonParams).then((statement) => {
130
- const isQuery = statement.isQuerySync();
131
- let stream;
132
- const stWrap = {
133
- prepare(prepSql) {
134
- return statement.prepare(prepSql);
135
- },
136
- isQuery() {
137
- return isQuery;
138
- },
139
- metadata() {
140
- return statement.getMetaData().then(JSON.parse);
141
- },
142
- asArray() {
143
- const startTime = process.hrtime.bigint();
144
- return statement.asArray().then(JSON.parse).then((result) => {
145
- logger.info(
146
- {
147
- sql,
148
- state: "finished",
149
- duration: Number(process.hrtime.bigint() - startTime),
150
- parameterCount: params.length,
151
- resultSize: result.length
152
- },
153
- "IBMI DB query executed"
154
- );
155
- return result;
156
- });
157
- },
158
- asStream(options) {
159
- const startTime = process.hrtime.bigint();
160
- options = options || {};
161
- stream = new JdbcStream({
162
- jdbcStream: statement.asStreamSync(options.bufferSize || 100)
163
- });
164
- stream.on("end", () => {
165
- logger.info(
166
- {
167
- sql,
168
- state: "finished",
169
- duration: Number(process.hrtime.bigint() - startTime),
170
- parameterCount: params.length
171
- },
172
- "IBMI DB query as stream ended"
173
- );
174
- });
175
- return stream;
176
- },
177
- asObjectStream(options) {
178
- const startTime = process.hrtime.bigint();
179
- options = options || {};
180
- const parseJSON = parse("*");
181
- return statement.getMetaData().then(JSON.parse).then((metadata) => {
182
- const transformArrayToObject = arrayToObject(metadata);
183
- stream = new JdbcStream({
184
- jdbcStream: statement.asStreamSync(
185
- options.bufferSize || 100
186
- )
187
- });
188
- stream.on("end", () => {
189
- logger.info(
190
- {
191
- sql,
192
- state: "finished",
193
- duration: Number(process.hrtime.bigint() - startTime),
194
- parameterCount: params.length
195
- },
196
- "IBMI DB query as object stream ended"
197
- );
198
- });
199
- return stream.pipe(parseJSON).pipe(transformArrayToObject);
200
- });
201
- },
202
- asIterable() {
203
- const startTime = process.hrtime.bigint();
204
- return {
205
- [Symbol.asyncIterator]() {
206
- return {
207
- async next() {
208
- return statement.next().then(JSON.parse).then((value) => {
209
- const done = !value;
210
- if (done) {
211
- logger.info(
212
- {
213
- sql,
214
- state: "finished",
215
- duration: Number(
216
- process.hrtime.bigint() - startTime
217
- ),
218
- parameterCount: jsonParams.length
219
- },
220
- "IBMI DB query as iterable executed"
221
- );
222
- }
223
- return {
224
- done,
225
- value
226
- };
227
- });
228
- }
229
- };
230
- }
231
- };
232
- },
233
- updated() {
234
- return statement.updated();
235
- },
236
- close() {
237
- if (stream) {
238
- return stream.close();
239
- }
240
- return statement.close();
241
- }
242
- };
243
- return stWrap;
244
- }).catch(handleError({ sql, params }));
182
+ return jdbcConnection.execute(sql, jsonParams).then((st) => buildStatementWrapper(st, { sql, params, logger })).catch(handleError({ sql, params }));
245
183
  },
246
184
  update(sql, params = []) {
247
185
  const jsonParams = paramsToJson(params);
@@ -270,7 +208,7 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
270
208
  const stream = createJdbcWriteStream(
271
209
  baseConnection.batchUpdate,
272
210
  sql,
273
- options && options.bufferSize
211
+ options?.bufferSize
274
212
  );
275
213
  stream.on("finish", () => {
276
214
  logger.info(
@@ -285,7 +223,10 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
285
223
  return stream;
286
224
  },
287
225
  batchUpdate(sql, paramsList) {
288
- const params = (paramsList || []).map((row) => {
226
+ if (!paramsList || paramsList.length === 0) {
227
+ return Promise.resolve([]);
228
+ }
229
+ const params = paramsList.map((row) => {
289
230
  return row.map(convertDateValues);
290
231
  });
291
232
  const jsonParams = JSON.stringify(params);
@@ -332,6 +273,23 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
332
273
  insertList(tableName, idColumn, list) {
333
274
  return insertListFun(baseConnection)(tableName, idColumn, list);
334
275
  },
276
+ queryCursor(sql, params = []) {
277
+ const jsonParams = paramsToJson(params);
278
+ return (async function* () {
279
+ const st = await jdbcConnection.execute(sql, jsonParams).catch(handleError({ sql, params }));
280
+ try {
281
+ while (true) {
282
+ const json = await st.next();
283
+ if (!json) break;
284
+ const row = JSON.parse(json);
285
+ if (row === null || row === void 0) break;
286
+ yield row;
287
+ }
288
+ } finally {
289
+ await st.close();
290
+ }
291
+ })();
292
+ },
335
293
  isInMemory() {
336
294
  return inMemory;
337
295
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ts-src/lib/baseConnection.ts"],"sourcesContent":["import { parse } from 'JSONStream'\nimport { JDBCConnection } from '../java/JT400.js'\nimport { BaseConnection, Param } from './baseConnection.types.js'\nimport { handleError } from './handleError.js'\nimport { CreateInsertList } from './insertList.js'\nimport { JdbcStream } from './jdbcstream.js'\nimport { createJdbcWriteStream } from './jdbcwritestream.js'\nimport { Logger } from './logger.js'\nimport { arrayToObject } from './streamTransformers.js'\n\nfunction convertDateValues(v: any) {\n return v instanceof Date\n ? v.toISOString().replace('T', ' ').replace('Z', '')\n : v\n}\n\nfunction paramsToJson(params: Param[]) {\n return JSON.stringify((params || []).map(convertDateValues))\n}\n\nexport const createBaseConnection = function (\n jdbcConnection: JDBCConnection,\n insertListFun: CreateInsertList,\n logger: Logger,\n inMemory: boolean,\n): BaseConnection {\n const baseConnection: BaseConnection = {\n async commit() {\n return jdbcConnection.commit().catch((err) => {\n throw handleError({})(err)\n })\n },\n async rollback() {\n return jdbcConnection.rollback().catch((err) => {\n throw handleError({})(err)\n })\n },\n async createStatement() {\n if (!jdbcConnection.createStatement) {\n throw new Error(\n 'createStatement is not supported by this JDBCConnection',\n )\n }\n\n return jdbcConnection.createStatement().then((st) => {\n return {\n prepare(sql: string) {\n return st.prepare(sql)\n },\n isQuery() {\n return st.isQuerySync()\n },\n async metadata() {\n return st.getMetaData().then(JSON.parse)\n },\n async asArray() {\n return st.asArray().then(JSON.parse)\n },\n asIterable() {\n return {\n [Symbol.asyncIterator]: async function * () {\n while (true) {\n const row = await st.next().then(JSON.parse)\n if (!row) break\n yield row\n }\n },\n }\n },\n asStream(options) {\n return new JdbcStream({\n jdbcStream: st.asStreamSync(options?.bufferSize ?? 100),\n })\n },\n asObjectStream(options) {\n return st\n .getMetaData()\n .then(JSON.parse)\n .then((metadata) => {\n const transform = arrayToObject(metadata)\n const stream = new JdbcStream({\n jdbcStream: st.asStreamSync(options?.bufferSize ?? 100),\n })\n return stream.pipe(parse('*')).pipe(transform)\n })\n },\n updated() {\n return st.updated()\n },\n close() {\n return st.close()\n },\n }\n })\n },\n query(sql, params = [], options) {\n const jsonParams = paramsToJson(params)\n\n // Sending default options to java\n const trim = options && options.trim !== undefined ? options.trim : true\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB query',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .query(sql, jsonParams, trim)\n .then(JSON.parse)\n .then((result: any[]) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n resultSize: result.length,\n },\n 'IBMI DB query executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n createReadStream(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB query as stream',\n )\n const startTime = process.hrtime.bigint()\n const stream = new JdbcStream({\n jdbcStreamPromise: jdbcConnection\n .queryAsStream(sql, jsonParams, 100)\n .catch(handleError({ sql, params })),\n })\n stream.on('end', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB query as stream ended',\n )\n })\n return stream\n },\n\n execute(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB sql statement',\n )\n\n return jdbcConnection\n .execute(sql, jsonParams)\n .then((statement) => {\n const isQuery = statement.isQuerySync()\n let stream\n\n const stWrap = {\n prepare(prepSql: string) {\n return statement.prepare(prepSql)\n },\n isQuery() {\n return isQuery\n },\n metadata() {\n return statement.getMetaData().then(JSON.parse)\n },\n asArray() {\n const startTime = process.hrtime.bigint()\n return statement\n .asArray()\n .then(JSON.parse)\n .then((result: any[]) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n resultSize: result.length,\n },\n 'IBMI DB query executed',\n )\n return result\n })\n },\n asStream(options) {\n const startTime = process.hrtime.bigint()\n options = options || {}\n stream = new JdbcStream({\n jdbcStream: statement.asStreamSync(options.bufferSize || 100),\n })\n stream.on('end', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB query as stream ended',\n )\n })\n return stream\n },\n asObjectStream(options) {\n const startTime = process.hrtime.bigint()\n options = options || {}\n const parseJSON = parse('*')\n\n return statement\n .getMetaData()\n .then(JSON.parse)\n .then((metadata) => {\n const transformArrayToObject = arrayToObject(metadata)\n stream = new JdbcStream({\n jdbcStream: statement.asStreamSync(\n options.bufferSize || 100,\n ),\n })\n stream.on('end', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB query as object stream ended',\n )\n })\n\n return stream.pipe(parseJSON).pipe(transformArrayToObject)\n })\n },\n asIterable() {\n const startTime = process.hrtime.bigint()\n return {\n [Symbol.asyncIterator]() {\n return {\n async next() {\n return statement\n .next()\n .then(JSON.parse)\n .then((value) => {\n const done = !value\n if (done) {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(\n process.hrtime.bigint() - startTime,\n ),\n parameterCount: jsonParams.length,\n },\n 'IBMI DB query as iterable executed',\n )\n }\n return {\n done,\n value,\n }\n })\n },\n }\n },\n }\n },\n updated() {\n return statement.updated()\n },\n close() {\n if (stream) {\n return stream.close()\n }\n return statement.close()\n },\n }\n\n return stWrap\n })\n .catch(handleError({ sql, params }))\n },\n update(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB update',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .update(sql, jsonParams)\n .then((result) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n result,\n },\n 'IBMI DB update executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n createWriteStream(sql, options) {\n logger.debug({ sql, state: 'starting' }, 'Executing IBMI DB write stream')\n const startTime = process.hrtime.bigint()\n const stream = createJdbcWriteStream(\n baseConnection.batchUpdate,\n sql,\n options && options.bufferSize,\n )\n stream.on('finish', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n },\n 'IBMI DB write stream ended',\n )\n })\n return stream\n },\n\n batchUpdate(sql, paramsList) {\n const params = (paramsList || []).map((row) => {\n return row.map(convertDateValues)\n })\n\n const jsonParams = JSON.stringify(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB batch update',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .batchUpdate(sql, jsonParams)\n .then((res) => {\n const result = Array.from(res)\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n result,\n },\n 'IBMI DB batch update executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n insertAndGetId(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB insert and get id',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .insertAndGetId(sql, jsonParams)\n .then((result) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB insert and get id executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n insertList(tableName, idColumn, list) {\n return insertListFun(baseConnection)(tableName, idColumn, list)\n },\n\n isInMemory() {\n return inMemory\n },\n }\n return baseConnection\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../ts-src/lib/baseConnection.ts"],"sourcesContent":["import { parse } from 'JSONStream'\nimport { JDBCConnection, StatementWrap } from '../java/JT400.js'\nimport { BaseConnection, Param, Statement, StreamOptions } from './baseConnection.types.js'\nimport { handleError } from './handleError.js'\nimport { CreateInsertList } from './insertList.js'\nimport { JdbcStream } from './jdbcstream.js'\nimport { createJdbcWriteStream } from './jdbcwritestream.js'\nimport { Logger } from './logger.js'\nimport { arrayToObject } from './streamTransformers.js'\n\nfunction convertDateValues(v: Param): Param {\n return v instanceof Date\n ? v.toISOString().replace('T', ' ').replace('Z', '')\n : v\n}\n\nfunction paramsToJson(params: Param[]) {\n return JSON.stringify((params || []).map(convertDateValues))\n}\n\ntype LogContext = { sql: string; params: Param[]; logger: Logger }\n\nfunction buildStatementWrapper(st: StatementWrap, ctx?: LogContext): Statement {\n let stream: JdbcStream | undefined\n\n return {\n prepare(sql: string) {\n return st.prepare(sql)\n },\n isQuery() {\n return st.isQuerySync()\n },\n async metadata() {\n return st.getMetaData().then(JSON.parse)\n },\n async asArray() {\n const startTime = ctx ? process.hrtime.bigint() : 0n\n return st.asArray().then(JSON.parse).then((result: unknown[]) => {\n if (ctx) {\n ctx.logger.info({\n sql: ctx.sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: ctx.params.length,\n resultSize: result.length,\n }, 'IBMI DB query executed')\n }\n return result as string[][]\n })\n },\n asStream(options?: StreamOptions) {\n const startTime = ctx ? process.hrtime.bigint() : 0n\n stream = new JdbcStream({\n jdbcStream: st.asStreamSync(options?.bufferSize ?? 100),\n })\n if (ctx) {\n stream.on('end', () => {\n ctx.logger.info({\n sql: ctx.sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: ctx.params.length,\n }, 'IBMI DB query as stream ended')\n })\n }\n return stream\n },\n asObjectStream(options?: StreamOptions) {\n const startTime = ctx ? process.hrtime.bigint() : 0n\n return st.getMetaData().then(JSON.parse).then((metadata) => {\n const transformArrayToObject = arrayToObject(metadata)\n const parseJSON = parse('*')\n stream = new JdbcStream({\n jdbcStream: st.asStreamSync(options?.bufferSize ?? 100),\n })\n if (ctx) {\n stream.on('end', () => {\n ctx.logger.info({\n sql: ctx.sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: ctx.params.length,\n }, 'IBMI DB query as object stream ended')\n })\n }\n return stream.pipe(parseJSON).pipe(transformArrayToObject)\n })\n },\n asIterable() {\n const startTime = ctx ? process.hrtime.bigint() : 0n\n return {\n [Symbol.asyncIterator]() {\n return {\n async next() {\n return st.next().then(JSON.parse).then((value) => {\n const done = !value\n if (done && ctx) {\n ctx.logger.info({\n sql: ctx.sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: ctx.params.length,\n }, 'IBMI DB query as iterable executed')\n }\n return { done, value }\n })\n },\n }\n },\n }\n },\n updated() {\n return st.updated()\n },\n close() {\n if (stream) {\n return stream.close()\n }\n return st.close()\n },\n }\n}\n\nexport const createBaseConnection = function (\n jdbcConnection: JDBCConnection,\n insertListFun: CreateInsertList,\n logger: Logger,\n inMemory: boolean,\n): BaseConnection {\n const baseConnection: BaseConnection = {\n async commit() {\n return jdbcConnection.commit().catch((err) => {\n throw handleError({})(err)\n })\n },\n async rollback() {\n return jdbcConnection.rollback().catch((err) => {\n throw handleError({})(err)\n })\n },\n async createStatement() {\n if (!jdbcConnection.createStatement) {\n throw new Error(\n 'createStatement is not supported by this JDBCConnection',\n )\n }\n return jdbcConnection.createStatement().then((st) => buildStatementWrapper(st))\n },\n query(sql, params = [], options) {\n const jsonParams = paramsToJson(params)\n const trim = options?.trim !== undefined ? options.trim : true\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB query',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .query(sql, jsonParams, trim)\n .then(JSON.parse)\n .then((result: unknown[]) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n resultSize: result.length,\n },\n 'IBMI DB query executed',\n )\n return result as never[]\n })\n .catch(handleError({ sql, params }))\n },\n\n createReadStream(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB query as stream',\n )\n const startTime = process.hrtime.bigint()\n const stream = new JdbcStream({\n jdbcStreamPromise: jdbcConnection\n .queryAsStream(sql, jsonParams, 100)\n .catch(handleError({ sql, params })),\n })\n stream.on('end', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB query as stream ended',\n )\n })\n return stream\n },\n\n execute(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB sql statement',\n )\n return jdbcConnection\n .execute(sql, jsonParams)\n .then((st) => buildStatementWrapper(st, { sql, params, logger }))\n .catch(handleError({ sql, params }))\n },\n\n update(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB update',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .update(sql, jsonParams)\n .then((result) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n result,\n },\n 'IBMI DB update executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n createWriteStream(sql, options) {\n logger.debug({ sql, state: 'starting' }, 'Executing IBMI DB write stream')\n const startTime = process.hrtime.bigint()\n const stream = createJdbcWriteStream(\n baseConnection.batchUpdate,\n sql,\n options?.bufferSize,\n )\n stream.on('finish', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n },\n 'IBMI DB write stream ended',\n )\n })\n return stream\n },\n\n batchUpdate(sql, paramsList) {\n if (!paramsList || paramsList.length === 0) {\n return Promise.resolve([])\n }\n const params = paramsList.map((row) => {\n return row.map(convertDateValues)\n })\n\n const jsonParams = JSON.stringify(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB batch update',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .batchUpdate(sql, jsonParams)\n .then((res) => {\n const result = Array.from(res)\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n result,\n },\n 'IBMI DB batch update executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n insertAndGetId(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB insert and get id',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .insertAndGetId(sql, jsonParams)\n .then((result) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB insert and get id executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n insertList(tableName, idColumn, list) {\n return insertListFun(baseConnection)(tableName, idColumn, list)\n },\n\n queryCursor<T>(sql: string, params: Param[] = []) {\n const jsonParams = paramsToJson(params)\n return (async function* () {\n const st = await jdbcConnection\n .execute(sql, jsonParams)\n .catch(handleError({ sql, params }))\n try {\n while (true) {\n const json = await st.next()\n if (!json) break\n const row: T = JSON.parse(json)\n if (row === null || row === undefined) break\n yield row\n }\n } finally {\n await st.close()\n }\n })() as AsyncIterable<T>\n },\n\n isInMemory() {\n return inMemory\n },\n }\n return baseConnection\n}\n"],"mappings":"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","names":[]}
@@ -12,8 +12,8 @@ interface BLOB {
12
12
  type Param = string | number | Date | null | CLOB | BLOB;
13
13
  interface QueryOptions {
14
14
  trim?: boolean;
15
- cursor?: boolean;
16
- fetchSize?: number;
15
+ }
16
+ interface CursorOptions {
17
17
  }
18
18
  interface Metadata {
19
19
  name: string;
@@ -21,20 +21,23 @@ interface Metadata {
21
21
  precision: number;
22
22
  scale: number;
23
23
  }
24
+ interface StreamOptions {
25
+ bufferSize?: number;
26
+ }
24
27
  interface Statement {
25
28
  prepare: (sql: string) => Promise<void>;
26
29
  isQuery: () => boolean;
27
30
  metadata: () => Promise<Metadata[]>;
28
31
  asArray: () => Promise<string[][]>;
29
32
  asIterable: () => AsyncIterable<string[]>;
30
- asStream: (options?: any) => Readable;
31
- asObjectStream: (options?: any) => Promise<Readable>;
33
+ asStream: (options?: StreamOptions) => Readable;
34
+ asObjectStream: (options?: StreamOptions) => Promise<Readable>;
32
35
  updated: () => Promise<number>;
33
36
  close: Close;
34
37
  }
35
38
  type Execute = (sql: string, params?: Param[]) => Promise<Statement>;
36
39
  type Query = {
37
- <T>(sql: string, params?: Param[] | undefined, options?: QueryOptions, callback?: (error: any, cursor: any) => void): Promise<T[]>;
40
+ <T>(sql: string, params?: Param[] | undefined, options?: QueryOptions): Promise<T[]>;
38
41
  };
39
42
  type Update = (sql: string, params?: Param[]) => Promise<number>;
40
43
  type CreateReadStream = (sql: string, params?: Param[]) => Readable;
@@ -45,7 +48,7 @@ interface WriteStreamOptions {
45
48
  type CreateWriteStream = (sql: string, options?: WriteStreamOptions) => Writable;
46
49
  type BatchUpdate = (sql: string, params?: Param[][]) => Promise<number[]>;
47
50
  type Close = () => void;
48
- type InsertList = (tableName: string, idColumn: string, rows: any[]) => Promise<number[]>;
51
+ type InsertList = (tableName: string, idColumn: string, rows: Record<string, Param>[]) => Promise<number[]>;
49
52
  interface BaseConnection {
50
53
  query: Query;
51
54
  update: Update;
@@ -56,9 +59,10 @@ interface BaseConnection {
56
59
  createWriteStream: CreateWriteStream;
57
60
  batchUpdate: BatchUpdate;
58
61
  execute: Execute;
62
+ queryCursor: <T>(sql: string, params?: Param[], options?: CursorOptions) => AsyncIterable<T>;
59
63
  commit: () => Promise<void>;
60
64
  rollback: () => Promise<void>;
61
65
  createStatement: () => Promise<Statement>;
62
66
  }
63
67
 
64
- export type { BLOB, BaseConnection, BatchUpdate, CLOB, Close, CreateReadStream, CreateWriteStream, Execute, InsertAndGetId, InsertList, Metadata, Param, Query, QueryOptions, Statement, Update, WriteStreamOptions };
68
+ export type { BLOB, BaseConnection, BatchUpdate, CLOB, Close, CreateReadStream, CreateWriteStream, CursorOptions, Execute, InsertAndGetId, InsertList, Metadata, Param, Query, QueryOptions, Statement, StreamOptions, Update, WriteStreamOptions };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ts-src/lib/baseConnection.types.ts"],"sourcesContent":["import { Readable, Writable } from 'stream'\nexport { Readable, Writable }\n\nexport interface CLOB {\n type: 'CLOB'\n value: string\n}\n\nexport interface BLOB {\n type: 'BLOB'\n value: string\n}\n\nexport type Param = string | number | Date | null | CLOB | BLOB\n\nexport interface QueryOptions {\n trim?: boolean,\n cursor?: boolean,\n fetchSize?: number\n}\n\nexport interface Metadata {\n name: string\n typeName: string\n precision: number\n scale: number\n}\nexport interface Statement {\n prepare: (sql: string) => Promise<void>\n isQuery: () => boolean\n metadata: () => Promise<Metadata[]>\n asArray: () => Promise<string[][]>\n asIterable: () => AsyncIterable<string[]>\n asStream: (options?: any) => Readable\n asObjectStream: (options?: any) => Promise<Readable>\n updated: () => Promise<number>\n close: Close\n}\nexport type Execute = (sql: string, params?: Param[]) => Promise<Statement>\nexport type Query = {\n <T>(\n sql: string,\n params?: Param[] | undefined,\n options?: QueryOptions,\n callback?: (error: any, cursor: any) => void,\n ): Promise<T[]>\n}\nexport type Update = (sql: string, params?: Param[]) => Promise<number>\nexport type CreateReadStream = (sql: string, params?: Param[]) => Readable\nexport type InsertAndGetId = (sql: string, params?: Param[]) => Promise<number>\n\nexport interface WriteStreamOptions {\n bufferSize: number\n}\n\nexport type CreateWriteStream = (\n sql: string,\n options?: WriteStreamOptions,\n) => Writable\nexport type BatchUpdate = (sql: string, params?: Param[][]) => Promise<number[]>\nexport type Close = () => void\nexport type InsertList = (\n tableName: string,\n idColumn: string,\n rows: any[],\n) => Promise<number[]>\nexport interface BaseConnection {\n query: Query\n update: Update\n isInMemory: () => boolean\n createReadStream: CreateReadStream\n insertAndGetId: InsertAndGetId\n insertList: InsertList\n createWriteStream: CreateWriteStream\n batchUpdate: BatchUpdate\n execute: Execute\n\n commit: () => Promise<void>\n rollback: () => Promise<void>\n createStatement: () => Promise<Statement>\n}\n"],"mappings":"AAAA,SAAS,UAAU,gBAAgB;","names":[]}
1
+ {"version":3,"sources":["../../ts-src/lib/baseConnection.types.ts"],"sourcesContent":["import { Readable, Writable } from 'stream'\nexport { Readable, Writable }\n\nexport interface CLOB {\n type: 'CLOB'\n value: string\n}\n\nexport interface BLOB {\n type: 'BLOB'\n value: string\n}\n\nexport type Param = string | number | Date | null | CLOB | BLOB\n\nexport interface QueryOptions {\n trim?: boolean\n}\n\nexport interface CursorOptions {\n // reserved for future options\n}\n\nexport interface Metadata {\n name: string\n typeName: string\n precision: number\n scale: number\n}\nexport interface StreamOptions {\n bufferSize?: number\n}\n\nexport interface Statement {\n prepare: (sql: string) => Promise<void>\n isQuery: () => boolean\n metadata: () => Promise<Metadata[]>\n asArray: () => Promise<string[][]>\n asIterable: () => AsyncIterable<string[]>\n asStream: (options?: StreamOptions) => Readable\n asObjectStream: (options?: StreamOptions) => Promise<Readable>\n updated: () => Promise<number>\n close: Close\n}\nexport type Execute = (sql: string, params?: Param[]) => Promise<Statement>\nexport type Query = {\n <T>(\n sql: string,\n params?: Param[] | undefined,\n options?: QueryOptions,\n ): Promise<T[]>\n}\nexport type Update = (sql: string, params?: Param[]) => Promise<number>\nexport type CreateReadStream = (sql: string, params?: Param[]) => Readable\nexport type InsertAndGetId = (sql: string, params?: Param[]) => Promise<number>\n\nexport interface WriteStreamOptions {\n bufferSize: number\n}\n\nexport type CreateWriteStream = (\n sql: string,\n options?: WriteStreamOptions,\n) => Writable\nexport type BatchUpdate = (sql: string, params?: Param[][]) => Promise<number[]>\nexport type Close = () => void\nexport type InsertList = (\n tableName: string,\n idColumn: string,\n rows: Record<string, Param>[],\n) => Promise<number[]>\nexport interface BaseConnection {\n query: Query\n update: Update\n isInMemory: () => boolean\n createReadStream: CreateReadStream\n insertAndGetId: InsertAndGetId\n insertList: InsertList\n createWriteStream: CreateWriteStream\n batchUpdate: BatchUpdate\n execute: Execute\n queryCursor: <T>(sql: string, params?: Param[], options?: CursorOptions) => AsyncIterable<T>\n\n commit: () => Promise<void>\n rollback: () => Promise<void>\n createStatement: () => Promise<Statement>\n}\n"],"mappings":"AAAA,SAAS,UAAU,gBAAgB;","names":[]}
@@ -60,15 +60,9 @@ function createConnection({
60
60
  const name = isJustNameMessageQ(opt) ? opt.name : opt.path;
61
61
  const dq = await connection.openMessageQ(name, hasPath);
62
62
  return {
63
- // write (key, data) {
64
- // dq.writeSync(key, data);
65
- // },
66
- read() {
67
- let wait = -1;
68
- if (arguments[0] === Object(arguments[0])) {
69
- wait = arguments[0].wait || wait;
70
- }
71
- return dq.read(wait);
63
+ read(params) {
64
+ const wait = params?.wait ?? -1;
65
+ return dq.read(wait).then((json) => json ? JSON.parse(json) : null);
72
66
  },
73
67
  sendInformational(messageText) {
74
68
  return dq.sendInformational(messageText);
@@ -77,7 +71,7 @@ function createConnection({
77
71
  },
78
72
  createKeyedDataQ(opt) {
79
73
  const dq = connection.createKeyedDataQSync(opt.name);
80
- const readRes = async function(key, wait, writeKeyLength) {
74
+ const readRes = async (key, wait, writeKeyLength) => {
81
75
  const res = await dq.readResponse(key, wait, writeKeyLength);
82
76
  const data = await res.getData();
83
77
  return {
@@ -89,17 +83,11 @@ function createConnection({
89
83
  write(key, data) {
90
84
  return dq.write(key, data);
91
85
  },
92
- read() {
93
- let wait = -1;
94
- let key;
95
- let writeKeyLength;
96
- if (arguments[0] === Object(arguments[0])) {
97
- key = arguments[0].key;
98
- wait = arguments[0].wait || wait;
99
- writeKeyLength = arguments[0].writeKeyLength;
100
- } else {
101
- key = arguments[0];
86
+ read(params) {
87
+ if (typeof params === "string") {
88
+ return dq.read(params, -1);
102
89
  }
90
+ const { key, wait = -1, writeKeyLength } = params;
103
91
  return writeKeyLength ? readRes(key, wait, writeKeyLength) : dq.read(key, wait);
104
92
  }
105
93
  };
@@ -107,9 +95,8 @@ function createConnection({
107
95
  async openMessageFile(opt) {
108
96
  const messageFile = await connection.openMessageFile(opt.path);
109
97
  return {
110
- read() {
111
- const messageId = arguments[0].messageId;
112
- return messageFile.read(messageId);
98
+ read(params) {
99
+ return messageFile.read(params.messageId);
113
100
  }
114
101
  };
115
102
  },
@@ -128,12 +115,12 @@ function createConnection({
128
115
  };
129
116
  },
130
117
  pgm: deprecate(function(programName, paramsSchema, libraryName) {
131
- return this.defineProgram({
118
+ return jt400.defineProgram({
132
119
  programName,
133
120
  paramsSchema,
134
121
  libraryName
135
122
  });
136
- }, "pgm function is deprecated and will be removed in version 5.0. Please use defineProgram."),
123
+ }, "pgm function is deprecated and will be removed in version 7.0. Please use defineProgram."),
137
124
  close() {
138
125
  return connection.close();
139
126
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ts-src/lib/connection.ts"],"sourcesContent":["import { deprecate } from 'util'\nimport { JT400 } from '../java/JT400.js'\nimport { createBaseConnection } from './baseConnection.js'\nimport {\n Connection,\n JustNameMessageQ,\n MessageFileHandlerOptions,\n MessageQOptions,\n ProgramDefinitionOptions,\n} from './connection.types.js'\nimport { handleError } from './handleError.js'\nimport { ifs as createIfs } from './ifs/index.js'\nimport { CreateInsertList } from './insertList.js'\nimport { JdbcStream } from './jdbcstream.js'\nimport JSONStream from 'JSONStream'\nimport { Logger } from './logger.js'\n\nconst isJustNameMessageQ = function (\n opt: MessageQOptions,\n): opt is JustNameMessageQ {\n return (opt as JustNameMessageQ).name !== undefined\n}\n\nexport function createConnection({\n connection,\n insertListFun,\n inMemory,\n logger,\n}: {\n connection: JT400\n insertListFun: CreateInsertList\n inMemory: boolean\n logger: Logger\n}): Connection {\n const baseConnection = createBaseConnection(\n connection,\n insertListFun,\n logger,\n inMemory,\n )\n const jt400: Connection = {\n ...baseConnection,\n async transaction(transactionFunction) {\n const t = connection.createTransactionSync()\n const transactionContext = createBaseConnection(\n t,\n insertListFun,\n logger,\n inMemory,\n )\n\n try {\n const res = await transactionFunction(transactionContext)\n await t.commit()\n return res\n } catch (err) {\n await t.rollback()\n throw err\n } finally {\n await t.end()\n }\n },\n getTablesAsStream(opt) {\n return new JdbcStream({\n jdbcStream: connection.getTablesAsStreamSync(\n opt.catalog,\n opt.schema,\n opt.table || '%',\n ),\n }).pipe(JSONStream.parse([true]))\n },\n getColumns(opt) {\n return connection\n .getColumns(opt.catalog, opt.schema, opt.table, opt.columns || '%')\n .then(JSON.parse)\n },\n getPrimaryKeys(opt) {\n return connection\n .getPrimaryKeys(opt.catalog, opt.schema, opt.table)\n .then(JSON.parse)\n },\n async openMessageQ(opt) {\n const hasPath = !isJustNameMessageQ(opt)\n const name = isJustNameMessageQ(opt) ? opt.name : opt.path\n const dq = await connection.openMessageQ(name, hasPath)\n return {\n // write (key, data) {\n // \tdq.writeSync(key, data);\n // },\n read() {\n let wait = -1\n if (arguments[0] === Object(arguments[0])) {\n wait = arguments[0].wait || wait\n }\n return dq.read(wait)\n },\n sendInformational(messageText) {\n return dq.sendInformational(messageText)\n },\n }\n },\n createKeyedDataQ(opt) {\n const dq = connection.createKeyedDataQSync(opt.name)\n const readRes = async function (key, wait, writeKeyLength) {\n const res = await dq.readResponse(key, wait, writeKeyLength)\n const data = await res.getData()\n return {\n data,\n write: (data: string) => res.write(data),\n }\n }\n return {\n write(key, data) {\n return dq.write(key, data)\n },\n read() {\n let wait = -1\n let key: string\n let writeKeyLength\n if (arguments[0] === Object(arguments[0])) {\n key = arguments[0].key\n wait = arguments[0].wait || wait\n writeKeyLength = arguments[0].writeKeyLength\n } else {\n key = arguments[0]\n }\n return writeKeyLength\n ? readRes(key, wait, writeKeyLength)\n : dq.read(key, wait)\n },\n }\n },\n async openMessageFile(opt: MessageFileHandlerOptions) {\n const messageFile = await connection.openMessageFile(opt.path)\n return {\n read() {\n const messageId = arguments[0].messageId\n return messageFile.read(messageId)\n },\n }\n },\n ifs() {\n return createIfs(connection)\n },\n defineProgram(opt: ProgramDefinitionOptions) {\n const pgm = connection.pgmSync(\n opt.programName,\n JSON.stringify(opt.paramsSchema),\n opt.libraryName || '*LIBL',\n opt.ccsid,\n )\n return function run(params, timeout = 3) {\n return pgm\n .run(JSON.stringify(params), timeout)\n .then(JSON.parse)\n .catch(handleError({ programName: opt.programName, params, timeout }))\n }\n },\n pgm: deprecate(function (programName, paramsSchema, libraryName) {\n return this.defineProgram({\n programName,\n paramsSchema,\n libraryName,\n })\n }, 'pgm function is deprecated and will be removed in version 5.0. Please use defineProgram.'),\n close() {\n return connection.close()\n },\n }\n\n return jt400\n}\n"],"mappings":"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","names":["data"]}
1
+ {"version":3,"sources":["../../ts-src/lib/connection.ts"],"sourcesContent":["import { deprecate } from 'util'\nimport { JT400 } from '../java/JT400.js'\nimport { createBaseConnection } from './baseConnection.js'\nimport {\n Connection,\n DataQReadOptions,\n JustNameMessageQ,\n MessageFileHandlerOptions,\n MessageFileReadOptions,\n MessageQOptions,\n MessageQReadOptions,\n PgmParamType,\n ProgramDefinitionOptions,\n} from './connection.types.js'\nimport { handleError } from './handleError.js'\nimport { ifs as createIfs } from './ifs/index.js'\nimport { CreateInsertList } from './insertList.js'\nimport { JdbcStream } from './jdbcstream.js'\nimport JSONStream from 'JSONStream'\nimport { Logger } from './logger.js'\n\nconst isJustNameMessageQ = function (\n opt: MessageQOptions,\n): opt is JustNameMessageQ {\n return (opt as JustNameMessageQ).name !== undefined\n}\n\nexport function createConnection({\n connection,\n insertListFun,\n inMemory,\n logger,\n}: {\n connection: JT400\n insertListFun: CreateInsertList\n inMemory: boolean\n logger: Logger\n}): Connection {\n const baseConnection = createBaseConnection(\n connection,\n insertListFun,\n logger,\n inMemory,\n )\n const jt400: Connection = {\n ...baseConnection,\n async transaction(transactionFunction) {\n const t = connection.createTransactionSync()\n const transactionContext = createBaseConnection(\n t,\n insertListFun,\n logger,\n inMemory,\n )\n\n try {\n const res = await transactionFunction(transactionContext)\n await t.commit()\n return res\n } catch (err) {\n await t.rollback()\n throw err\n } finally {\n await t.end()\n }\n },\n getTablesAsStream(opt) {\n return new JdbcStream({\n jdbcStream: connection.getTablesAsStreamSync(\n opt.catalog,\n opt.schema,\n opt.table || '%',\n ),\n }).pipe(JSONStream.parse([true]))\n },\n getColumns(opt) {\n return connection\n .getColumns(opt.catalog, opt.schema, opt.table, opt.columns || '%')\n .then(JSON.parse)\n },\n getPrimaryKeys(opt) {\n return connection\n .getPrimaryKeys(opt.catalog, opt.schema, opt.table)\n .then(JSON.parse)\n },\n async openMessageQ(opt) {\n const hasPath = !isJustNameMessageQ(opt)\n const name = isJustNameMessageQ(opt) ? opt.name : opt.path\n const dq = await connection.openMessageQ(name, hasPath)\n return {\n read(params?: MessageQReadOptions) {\n const wait = params?.wait ?? -1\n return dq.read(wait).then((json) => json ? JSON.parse(json) : null)\n },\n sendInformational(messageText) {\n return dq.sendInformational(messageText)\n },\n }\n },\n createKeyedDataQ(opt) {\n const dq = connection.createKeyedDataQSync(opt.name)\n const readRes = async (key: string, wait: number, writeKeyLength: number) => {\n const res = await dq.readResponse(key, wait, writeKeyLength)\n const data = await res.getData()\n return {\n data,\n write: (data: string) => res.write(data),\n }\n }\n return {\n write(key, data) {\n return dq.write(key, data)\n },\n read(params: DataQReadOptions | string) {\n if (typeof params === 'string') {\n return dq.read(params, -1)\n }\n const { key, wait = -1, writeKeyLength } = params\n return writeKeyLength\n ? readRes(key, wait, writeKeyLength)\n : dq.read(key, wait)\n },\n }\n },\n async openMessageFile(opt: MessageFileHandlerOptions) {\n const messageFile = await connection.openMessageFile(opt.path)\n return {\n read(params: MessageFileReadOptions) {\n return messageFile.read(params.messageId)\n },\n }\n },\n ifs() {\n return createIfs(connection)\n },\n defineProgram(opt: ProgramDefinitionOptions) {\n const pgm = connection.pgmSync(\n opt.programName,\n JSON.stringify(opt.paramsSchema),\n opt.libraryName || '*LIBL',\n opt.ccsid,\n )\n return function run(params, timeout = 3) {\n return pgm\n .run(JSON.stringify(params), timeout)\n .then(JSON.parse)\n .catch(handleError({ programName: opt.programName, params, timeout }))\n }\n },\n pgm: deprecate(function (programName: string, paramsSchema: PgmParamType[], libraryName?: string) {\n return jt400.defineProgram({\n programName,\n paramsSchema,\n libraryName,\n })\n }, 'pgm function is deprecated and will be removed in version 7.0. Please use defineProgram.'),\n close() {\n return connection.close()\n },\n }\n\n return jt400\n}\n"],"mappings":"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","names":["data"]}