@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.
- package/README.md +330 -369
- package/dist-cjs/index.d.cts +12 -5
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/java/JT400.d.cts +3 -3
- package/dist-cjs/java/JT400.js.map +1 -1
- package/dist-cjs/java/index.js +4 -3
- package/dist-cjs/java/index.js.map +1 -1
- package/dist-cjs/lib/baseConnection.js +124 -166
- package/dist-cjs/lib/baseConnection.js.map +1 -1
- package/dist-cjs/lib/baseConnection.types.d.cts +11 -7
- package/dist-cjs/lib/baseConnection.types.js.map +1 -1
- package/dist-cjs/lib/connection.js +12 -25
- package/dist-cjs/lib/connection.js.map +1 -1
- package/dist-cjs/lib/connection.types.d.cts +39 -12
- package/dist-cjs/lib/connection.types.js.map +1 -1
- package/dist-cjs/lib/handleError.d.cts +1 -3
- package/dist-cjs/lib/handleError.js +3 -2
- package/dist-cjs/lib/handleError.js.map +1 -1
- package/dist-cjs/lib/ifs/read_stream.d.cts +6 -1
- package/dist-cjs/lib/ifs/read_stream.js +23 -32
- package/dist-cjs/lib/ifs/read_stream.js.map +1 -1
- package/dist-cjs/lib/ifs/write_stream.d.cts +7 -1
- package/dist-cjs/lib/ifs/write_stream.js +13 -24
- package/dist-cjs/lib/ifs/write_stream.js.map +1 -1
- package/dist-cjs/lib/inMemoryConnection.d.cts +1 -1
- package/dist-cjs/lib/inMemoryConnection.js +4 -4
- package/dist-cjs/lib/inMemoryConnection.js.map +1 -1
- package/dist-cjs/lib/insertList.js +12 -13
- package/dist-cjs/lib/insertList.js.map +1 -1
- package/dist-cjs/lib/jdbcstream.d.cts +16 -1
- package/dist-cjs/lib/jdbcstream.js +31 -36
- package/dist-cjs/lib/jdbcstream.js.map +1 -1
- package/dist-cjs/lib/jdbcwritestream.d.cts +4 -1
- package/dist-cjs/lib/jdbcwritestream.js +7 -20
- package/dist-cjs/lib/jdbcwritestream.js.map +1 -1
- package/dist-cjs/lib/logger.d.cts +4 -4
- package/dist-cjs/lib/logger.js.map +1 -1
- package/dist-cjs/lib/sqlutil.d.cts +4 -1
- package/dist-cjs/lib/sqlutil.js +1 -0
- package/dist-cjs/lib/sqlutil.js.map +1 -1
- package/dist-cjs/lib/streamTransformers.d.cts +2 -1
- package/dist-cjs/lib/streamTransformers.js +1 -1
- package/dist-cjs/lib/streamTransformers.js.map +1 -1
- package/dist-cjs/typings/jsonstream.d.js +1 -0
- package/dist-cjs/typings/jsonstream.d.js.map +1 -0
- package/dist-esm/index.d.ts +12 -5
- package/dist-esm/index.js.map +1 -1
- package/dist-esm/java/JT400.d.ts +3 -3
- package/dist-esm/java/index.js +3 -10
- package/dist-esm/java/index.js.map +1 -1
- package/dist-esm/lib/baseConnection.js +124 -166
- package/dist-esm/lib/baseConnection.js.map +1 -1
- package/dist-esm/lib/baseConnection.types.d.ts +11 -7
- package/dist-esm/lib/baseConnection.types.js.map +1 -1
- package/dist-esm/lib/connection.js +12 -25
- package/dist-esm/lib/connection.js.map +1 -1
- package/dist-esm/lib/connection.types.d.ts +39 -12
- package/dist-esm/lib/handleError.d.ts +1 -3
- package/dist-esm/lib/handleError.js +3 -2
- package/dist-esm/lib/handleError.js.map +1 -1
- package/dist-esm/lib/ifs/read_stream.d.ts +6 -1
- package/dist-esm/lib/ifs/read_stream.js +23 -22
- package/dist-esm/lib/ifs/read_stream.js.map +1 -1
- package/dist-esm/lib/ifs/write_stream.d.ts +7 -1
- package/dist-esm/lib/ifs/write_stream.js +13 -14
- package/dist-esm/lib/ifs/write_stream.js.map +1 -1
- package/dist-esm/lib/inMemoryConnection.d.ts +1 -1
- package/dist-esm/lib/inMemoryConnection.js +4 -4
- package/dist-esm/lib/inMemoryConnection.js.map +1 -1
- package/dist-esm/lib/insertList.js +12 -13
- package/dist-esm/lib/insertList.js.map +1 -1
- package/dist-esm/lib/jdbcstream.d.ts +16 -1
- package/dist-esm/lib/jdbcstream.js +31 -36
- package/dist-esm/lib/jdbcstream.js.map +1 -1
- package/dist-esm/lib/jdbcwritestream.d.ts +4 -1
- package/dist-esm/lib/jdbcwritestream.js +7 -10
- package/dist-esm/lib/jdbcwritestream.js.map +1 -1
- package/dist-esm/lib/logger.d.ts +4 -4
- package/dist-esm/lib/logger.js.map +1 -1
- package/dist-esm/lib/sqlutil.d.ts +4 -1
- package/dist-esm/lib/sqlutil.js +1 -0
- package/dist-esm/lib/sqlutil.js.map +1 -1
- package/dist-esm/lib/streamTransformers.d.ts +2 -1
- package/dist-esm/lib/streamTransformers.js +1 -1
- package/dist-esm/lib/streamTransformers.js.map +1 -1
- package/package.json +16 -21
- package/dist-cjs/integration-test/call-rpg-spec.d.cts +0 -2
- package/dist-cjs/integration-test/call-rpg-spec.js +0 -101
- package/dist-cjs/integration-test/call-rpg-spec.js.map +0 -1
- package/dist-cjs/integration-test/dataq-spec.d.cts +0 -2
- package/dist-cjs/integration-test/dataq-spec.js +0 -57
- package/dist-cjs/integration-test/dataq-spec.js.map +0 -1
- package/dist-cjs/integration-test/db.d.cts +0 -8
- package/dist-cjs/integration-test/db.js +0 -31
- package/dist-cjs/integration-test/db.js.map +0 -1
- package/dist-cjs/integration-test/db2-connect-spec.d.cts +0 -2
- package/dist-cjs/integration-test/db2-connect-spec.js +0 -42
- package/dist-cjs/integration-test/db2-connect-spec.js.map +0 -1
- package/dist-cjs/integration-test/db2-pool-spec.d.cts +0 -2
- package/dist-cjs/integration-test/db2-pool-spec.js +0 -213
- package/dist-cjs/integration-test/db2-pool-spec.js.map +0 -1
- package/dist-cjs/integration-test/ifs-spec.d.cts +0 -2
- package/dist-cjs/integration-test/ifs-spec.js +0 -140
- package/dist-cjs/integration-test/ifs-spec.js.map +0 -1
- package/dist-cjs/integration-test/msgf-spec.d.cts +0 -2
- package/dist-cjs/integration-test/msgf-spec.js +0 -34
- package/dist-cjs/integration-test/msgf-spec.js.map +0 -1
- package/dist-cjs/integration-test/msgq-spec.d.cts +0 -2
- package/dist-cjs/integration-test/msgq-spec.js +0 -45
- package/dist-cjs/integration-test/msgq-spec.js.map +0 -1
- package/dist-cjs/unit-test/hsql-spec.d.cts +0 -2
- package/dist-cjs/unit-test/hsql-spec.js +0 -488
- package/dist-cjs/unit-test/hsql-spec.js.map +0 -1
- package/dist-cjs/unit-test/sqlutil-spec.d.cts +0 -2
- package/dist-cjs/unit-test/sqlutil-spec.js +0 -43
- package/dist-cjs/unit-test/sqlutil-spec.js.map +0 -1
- package/dist-cjs/unit-test/streamTransformers-spec.d.cts +0 -2
- package/dist-cjs/unit-test/streamTransformers-spec.js +0 -121
- package/dist-cjs/unit-test/streamTransformers-spec.js.map +0 -1
- package/dist-esm/integration-test/call-rpg-spec.d.ts +0 -2
- package/dist-esm/integration-test/call-rpg-spec.js +0 -79
- package/dist-esm/integration-test/call-rpg-spec.js.map +0 -1
- package/dist-esm/integration-test/dataq-spec.d.ts +0 -2
- package/dist-esm/integration-test/dataq-spec.js +0 -35
- package/dist-esm/integration-test/dataq-spec.js.map +0 -1
- package/dist-esm/integration-test/db.d.ts +0 -8
- package/dist-esm/integration-test/db.js +0 -8
- package/dist-esm/integration-test/db.js.map +0 -1
- package/dist-esm/integration-test/db2-connect-spec.d.ts +0 -2
- package/dist-esm/integration-test/db2-connect-spec.js +0 -20
- package/dist-esm/integration-test/db2-connect-spec.js.map +0 -1
- package/dist-esm/integration-test/db2-pool-spec.d.ts +0 -2
- package/dist-esm/integration-test/db2-pool-spec.js +0 -197
- package/dist-esm/integration-test/db2-pool-spec.js.map +0 -1
- package/dist-esm/integration-test/ifs-spec.d.ts +0 -2
- package/dist-esm/integration-test/ifs-spec.js +0 -118
- package/dist-esm/integration-test/ifs-spec.js.map +0 -1
- package/dist-esm/integration-test/msgf-spec.d.ts +0 -2
- package/dist-esm/integration-test/msgf-spec.js +0 -12
- package/dist-esm/integration-test/msgf-spec.js.map +0 -1
- package/dist-esm/integration-test/msgq-spec.d.ts +0 -2
- package/dist-esm/integration-test/msgq-spec.js +0 -23
- package/dist-esm/integration-test/msgq-spec.js.map +0 -1
- package/dist-esm/unit-test/hsql-spec.d.ts +0 -2
- package/dist-esm/unit-test/hsql-spec.js +0 -466
- package/dist-esm/unit-test/hsql-spec.js.map +0 -1
- package/dist-esm/unit-test/sqlutil-spec.d.ts +0 -2
- package/dist-esm/unit-test/sqlutil-spec.js +0 -21
- package/dist-esm/unit-test/sqlutil-spec.js.map +0 -1
- package/dist-esm/unit-test/streamTransformers-spec.d.ts +0 -2
- package/dist-esm/unit-test/streamTransformers-spec.js +0 -99
- 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
|
|
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((
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
16
|
-
|
|
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?:
|
|
31
|
-
asObjectStream: (options?:
|
|
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
|
|
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:
|
|
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
|
|
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
|
-
|
|
64
|
-
|
|
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
|
|
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
|
-
|
|
94
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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"]}
|