@nesgarbo/node-jt400 6.0.1 → 6.0.3

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.
@@ -3,6 +3,7 @@ interface ResultStream {
3
3
  read: () => Promise<string>;
4
4
  }
5
5
  interface StatementWrap {
6
+ prepare: (sql: string) => Promise<void>;
6
7
  isQuerySync: () => boolean;
7
8
  close: () => Promise<void>;
8
9
  updated: () => Promise<number>;
@@ -25,6 +26,14 @@ interface JDBCConnection {
25
26
  update: (sql: string, jsonParams: string) => Promise<number>;
26
27
  batchUpdate: (sql: string, jsonParams: string) => Promise<number[]>;
27
28
  insertAndGetId: (sql: string, jsonParams: string) => Promise<number>;
29
+ commit: () => Promise<void>;
30
+ rollback: () => Promise<void>;
31
+ createStatement: () => Promise<StatementWrap>;
32
+ queryAsCursor: (sql: string, jsonParams: string, fetchSize: number, trim: boolean) => Promise<CursorWrap>;
33
+ }
34
+ interface CursorWrap {
35
+ next: () => Promise<string>;
36
+ close: () => Promise<void>;
28
37
  }
29
38
  interface Transaction extends JDBCConnection {
30
39
  commit: () => Promise<void>;
@@ -76,4 +85,4 @@ interface JT400 extends JDBCConnection {
76
85
  close: () => Promise<void>;
77
86
  }
78
87
 
79
- export type { AS400Message, IfsReadStream, IfsWriteStream, JDBCConnection, JT400, KeyedDataQ, KeyedDataQueueResponse, MessageFileHandler, MessageQ, Pgm, ResultStream, StatementWrap, TablesReadStream, Transaction };
88
+ export type { AS400Message, CursorWrap, IfsReadStream, IfsWriteStream, JDBCConnection, JT400, KeyedDataQ, KeyedDataQueueResponse, MessageFileHandler, MessageQ, Pgm, ResultStream, StatementWrap, TablesReadStream, Transaction };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ts-src/java/JT400.ts"],"sourcesContent":["export interface ResultStream {\n close: () => Promise<void>\n read: () => Promise<string>\n}\n\nexport interface StatementWrap {\n isQuerySync: () => boolean\n close: () => Promise<void>\n updated: () => Promise<number>\n getMetaData: () => Promise<string>\n asStreamSync: (bufferSize: number) => ResultStream\n asArray: () => Promise<string>\n next: () => Promise<string>\n}\n\nexport interface TablesReadStream {\n close: () => Promise<void>\n read: () => Promise<string>\n getMetaData: () => Promise<string>\n}\n\nexport interface JDBCConnection {\n query: (sql: string, jsonParams: string, trim: boolean) => Promise<string>\n queryAsStream: (\n sql: string,\n jsonParams: string,\n bufferSize: number,\n ) => Promise<ResultStream>\n\n execute: (sql: string, jsonParams: string) => Promise<StatementWrap>\n getTablesAsStreamSync: (\n catalog: string,\n schema: string,\n tableName: string,\n ) => TablesReadStream\n getColumns: (\n catalog: string,\n schema: string,\n tableNamePattern: string,\n columnNamePattern: string,\n ) => Promise<string>\n update: (sql: string, jsonParams: string) => Promise<number>\n batchUpdate: (sql: string, jsonParams: string) => Promise<number[]>\n insertAndGetId: (sql: string, jsonParams: string) => Promise<number>\n}\n\nexport interface Transaction extends JDBCConnection {\n commit: () => Promise<void>\n rollback: () => Promise<void>\n end: () => Promise<void>\n}\n\nexport interface Pgm {\n run: (jsonParams: string, timeout: number) => Promise<string>\n}\n\nexport interface MessageQ {\n read: (wait: number) => Promise<string>\n sendInformational: (message: string) => Promise<void>\n}\n\nexport interface KeyedDataQueueResponse {\n getData: () => Promise<string>\n\n write: (data: string) => Promise<void>\n}\nexport interface KeyedDataQ {\n read: (key: string, wait: number) => Promise<string>\n readResponse: (\n key: string,\n wait: number,\n writeKeyLength: number,\n ) => Promise<KeyedDataQueueResponse>\n write: (key: string, data: string) => Promise<void>\n}\n\nexport interface AS400Message {\n getText: () => Promise<string>\n}\n\nexport interface MessageFileHandler {\n read: (messageId: string) => Promise<AS400Message>\n}\n\nexport interface IfsReadStream {\n read: () => Promise<Buffer>\n}\n\nexport interface IfsWriteStream {\n write: (data: Buffer) => Promise<void>\n flush: () => Promise<void>\n}\n\nexport interface JT400 extends JDBCConnection {\n createTransactionSync: () => Transaction\n getPrimaryKeys: (\n catalog: string,\n schema: string,\n table: string,\n ) => Promise<string>\n pgmSync: (\n programName: string,\n paramsSchemaJsonStr: string,\n libraryName?: string,\n ccsid?: number,\n ) => Pgm\n openMessageQ: (name: string, isPath: boolean) => Promise<MessageQ>\n createKeyedDataQSync: (name: string) => KeyedDataQ\n openMessageFile: (path: string) => Promise<MessageFileHandler>\n createIfsReadStream: (fileName: string) => Promise<IfsReadStream>\n createIfsWriteStream: (\n folderPath: string,\n fileName: string,\n append: boolean,\n ccsid?: number,\n ) => Promise<IfsWriteStream>\n listIfsFiles: (folderName: string) => Promise<string[]>\n moveIfsFile: (fileName: string, newFileName: string) => Promise<boolean>\n deleteIfsFile: (fileName: string) => Promise<boolean>\n getIfsFileMetadata: (fileName: string) => Promise<string>\n close: () => Promise<void>\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../ts-src/java/JT400.ts"],"sourcesContent":["export interface ResultStream {\n close: () => Promise<void>\n read: () => Promise<string>\n}\n\nexport interface StatementWrap {\n prepare: (sql: string) => Promise<void>\n isQuerySync: () => boolean\n close: () => Promise<void>\n updated: () => Promise<number>\n getMetaData: () => Promise<string>\n asStreamSync: (bufferSize: number) => ResultStream\n asArray: () => Promise<string>\n next: () => Promise<string>\n}\n\nexport interface TablesReadStream {\n close: () => Promise<void>\n read: () => Promise<string>\n getMetaData: () => Promise<string>\n}\n\nexport interface JDBCConnection {\n query: (sql: string, jsonParams: string, trim: boolean) => Promise<string>\n queryAsStream: (\n sql: string,\n jsonParams: string,\n bufferSize: number,\n ) => Promise<ResultStream>\n\n execute: (sql: string, jsonParams: string) => Promise<StatementWrap>\n getTablesAsStreamSync: (\n catalog: string,\n schema: string,\n tableName: string,\n ) => TablesReadStream\n getColumns: (\n catalog: string,\n schema: string,\n tableNamePattern: string,\n columnNamePattern: string,\n ) => Promise<string>\n update: (sql: string, jsonParams: string) => Promise<number>\n batchUpdate: (sql: string, jsonParams: string) => Promise<number[]>\n insertAndGetId: (sql: string, jsonParams: string) => Promise<number>\n // ----- NUEVOS PARA COMPATIBILIDAD ODBC -----\n\n /** Ejecuta commit en este JDBC Connection */\n commit: () => Promise<void>\n\n /** Ejecuta rollback en este JDBC Connection */\n rollback: () => Promise<void>\n\n /** Crea un PreparedStatement */\n createStatement: () => Promise<StatementWrap>\n\n /** Devuelve un CursorWrap (modo ODBC con callback) */\n queryAsCursor: (\n sql: string,\n jsonParams: string,\n fetchSize: number,\n trim: boolean\n ) => Promise<CursorWrap>\n}\n\nexport interface CursorWrap {\n next: () => Promise<string>// JSON de una fila\n close: () => Promise<void>\n}\n\nexport interface Transaction extends JDBCConnection {\n commit: () => Promise<void>\n rollback: () => Promise<void>\n end: () => Promise<void>\n}\n\nexport interface Pgm {\n run: (jsonParams: string, timeout: number) => Promise<string>\n}\n\nexport interface MessageQ {\n read: (wait: number) => Promise<string>\n sendInformational: (message: string) => Promise<void>\n}\n\nexport interface KeyedDataQueueResponse {\n getData: () => Promise<string>\n\n write: (data: string) => Promise<void>\n}\nexport interface KeyedDataQ {\n read: (key: string, wait: number) => Promise<string>\n readResponse: (\n key: string,\n wait: number,\n writeKeyLength: number,\n ) => Promise<KeyedDataQueueResponse>\n write: (key: string, data: string) => Promise<void>\n}\n\nexport interface AS400Message {\n getText: () => Promise<string>\n}\n\nexport interface MessageFileHandler {\n read: (messageId: string) => Promise<AS400Message>\n}\n\nexport interface IfsReadStream {\n read: () => Promise<Buffer>\n}\n\nexport interface IfsWriteStream {\n write: (data: Buffer) => Promise<void>\n flush: () => Promise<void>\n}\n\nexport interface JT400 extends JDBCConnection {\n createTransactionSync: () => Transaction\n getPrimaryKeys: (\n catalog: string,\n schema: string,\n table: string,\n ) => Promise<string>\n pgmSync: (\n programName: string,\n paramsSchemaJsonStr: string,\n libraryName?: string,\n ccsid?: number,\n ) => Pgm\n openMessageQ: (name: string, isPath: boolean) => Promise<MessageQ>\n createKeyedDataQSync: (name: string) => KeyedDataQ\n openMessageFile: (path: string) => Promise<MessageFileHandler>\n createIfsReadStream: (fileName: string) => Promise<IfsReadStream>\n createIfsWriteStream: (\n folderPath: string,\n fileName: string,\n append: boolean,\n ccsid?: number,\n ) => Promise<IfsWriteStream>\n listIfsFiles: (folderName: string) => Promise<string[]>\n moveIfsFile: (fileName: string, newFileName: string) => Promise<boolean>\n deleteIfsFile: (fileName: string) => Promise<boolean>\n getIfsFileMetadata: (fileName: string) => Promise<string>\n close: () => Promise<void>\n}\n"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1,6 +1,8 @@
1
+ var __create = Object.create;
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
4
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
5
7
  var __export = (target, all) => {
6
8
  for (var name in all)
@@ -14,31 +16,39 @@ var __copyProps = (to, from, except, desc) => {
14
16
  }
15
17
  return to;
16
18
  };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
17
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
28
  var java_exports = {};
19
29
  __export(java_exports, {
20
30
  initJavaBridge: () => initJavaBridge
21
31
  });
22
32
  module.exports = __toCommonJS(java_exports);
23
- var import_java_bridge = require("java-bridge");
33
+ var import_java_bridge = __toESM(require("java-bridge"), 1);
24
34
  var import_path = require("path");
25
35
  const initJavaBridge = () => {
26
36
  const JAR_DIR = (0, import_path.join)(__dirname, "/../../java/lib");
27
- (0, import_java_bridge.appendClasspath)([
37
+ import_java_bridge.default.appendClasspath([
28
38
  (0, import_path.join)(JAR_DIR, "jt400.jar"),
29
39
  (0, import_path.join)(JAR_DIR, "jt400wrap.jar"),
30
40
  (0, import_path.join)(JAR_DIR, "json-simple-1.1.1.jar"),
31
41
  (0, import_path.join)(JAR_DIR, "hsqldb.jar")
32
42
  ]);
33
- (0, import_java_bridge.ensureJvm)({
43
+ import_java_bridge.default.ensureJvm({
34
44
  opts: [
35
45
  "-Xrs",
36
46
  "-Dcom.ibm.as400.access.AS400.guiAvailable=false",
37
47
  "--enable-native-access=ALL-UNNAMED"
38
48
  ]
39
49
  });
40
- const JT400Class = (0, import_java_bridge.importClass)("nodejt400.JT400");
41
- const HsqlClientClass = (0, import_java_bridge.importClass)("nodejt400.HsqlClient");
50
+ const JT400Class = import_java_bridge.default.importClass("nodejt400.JT400");
51
+ const HsqlClientClass = import_java_bridge.default.importClass("nodejt400.HsqlClient");
42
52
  return {
43
53
  createConnection: (config) => JT400Class.createConnection(config),
44
54
  // async
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ts-src/java/index.ts"],"sourcesContent":["// src/common/libs/jt400/javaBridge.ts\nimport { appendClasspath, ensureJvm, importClass } from 'java-bridge'\nimport { join as joinPath } from 'path'\nimport type { JT400 } from './JT400'\n\nexport interface JavaBridge {\n createConnection: (config: string) => Promise<JT400>\n createPool: (config: string) => JT400\n createInMemoryConnection: () => JT400\n}\n\nexport const initJavaBridge = (): JavaBridge => {\n const JAR_DIR = joinPath(__dirname, '/../../java/lib')\n\n appendClasspath([\n joinPath(JAR_DIR, 'jt400.jar'),\n joinPath(JAR_DIR, 'jt400wrap.jar'),\n joinPath(JAR_DIR, 'json-simple-1.1.1.jar'),\n joinPath(JAR_DIR, 'hsqldb.jar'),\n ])\n\n // Opciones JVM (esto te funcionó)\n ensureJvm({\n opts: [\n '-Xrs',\n '-Dcom.ibm.as400.access.AS400.guiAvailable=false',\n '--enable-native-access=ALL-UNNAMED',\n ],\n })\n\n // Clases del wrapper Java\n const JT400Class: any = importClass('nodejt400.JT400')\n const HsqlClientClass: any = importClass('nodejt400.HsqlClient')\n\n return {\n createConnection: (config: string) =>\n JT400Class.createConnection(config) as Promise<JT400>, // async\n createPool: (config: string) => JT400Class.createPoolSync(config) as JT400, // sync si tu wrapper lo expone\n createInMemoryConnection: () => {\n // En java-bridge se instancia con `new`\n const instance = new HsqlClientClass()\n return instance as JT400\n },\n }\n}\n\n// export const initNewJavaBridge = (): JavaBridge => {\n// ensureJvm({\n// // This option should not have any effect when not using electron or not having the application packaged.\n// // https://github.com/MarkusJx/node-java-bridge?tab=readme-ov-file#notes-on-electron\n// isPackagedElectron: true,\n\n// opts: [\n// '-Xrs',\n// '-Dcom.ibm.as400.access.AS400.guiAvailable=false', // Removes gui prompts\n// ],\n// })\n// appendClasspath(\n// ['jt400.jar', 'jt400wrap.jar', 'json-simple-1.1.1.jar', 'hsqldb.jar'].map(\n// (jar) => joinPath(currentDir, '/../../java/lib/', jar)\n// )\n// )\n\n// const JT400Class = importClass('nodejt400.JT400')\n// return {\n// createConnection: (config: string) => JT400Class.createConnection(config),\n// createInMemoryConnection: () => {\n// const HsqlClientClass = importClass('nodejt400.HsqlClient')\n// const instance: any = new HsqlClientClass()\n// return instance\n// },\n// createPool: (config: string) => JT400Class.createPoolSync(config),\n// bufferToJavaType: (buffer: Buffer) => buffer,\n// javaTypeToBuffer: (javaType: any) => javaType,\n// }\n// }\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,yBAAwD;AACxD,kBAAiC;AAS1B,MAAM,iBAAiB,MAAkB;AAC9C,QAAM,cAAU,YAAAA,MAAS,WAAW,iBAAiB;AAErD,0CAAgB;AAAA,QACd,YAAAA,MAAS,SAAS,WAAW;AAAA,QAC7B,YAAAA,MAAS,SAAS,eAAe;AAAA,QACjC,YAAAA,MAAS,SAAS,uBAAuB;AAAA,QACzC,YAAAA,MAAS,SAAS,YAAY;AAAA,EAChC,CAAC;AAGD,oCAAU;AAAA,IACR,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AAGD,QAAM,iBAAkB,gCAAY,iBAAiB;AACrD,QAAM,sBAAuB,gCAAY,sBAAsB;AAE/D,SAAO;AAAA,IACL,kBAAkB,CAAC,WACjB,WAAW,iBAAiB,MAAM;AAAA;AAAA,IACpC,YAAY,CAAC,WAAmB,WAAW,eAAe,MAAM;AAAA;AAAA,IAChE,0BAA0B,MAAM;AAE9B,YAAM,WAAW,IAAI,gBAAgB;AACrC,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["joinPath"]}
1
+ {"version":3,"sources":["../../ts-src/java/index.ts"],"sourcesContent":["// src/common/libs/jt400/javaBridge.ts\nimport java from 'java-bridge'\nimport { join as joinPath } from 'path'\nimport type { JT400 } from './JT400.js'\n\nexport interface JavaBridge {\n createConnection: (config: string) => Promise<JT400>\n createPool: (config: string) => JT400\n createInMemoryConnection: () => JT400\n}\n\nexport const initJavaBridge = (): JavaBridge => {\n const JAR_DIR = joinPath(__dirname, '/../../java/lib')\n\n java.appendClasspath([\n joinPath(JAR_DIR, 'jt400.jar'),\n joinPath(JAR_DIR, 'jt400wrap.jar'),\n joinPath(JAR_DIR, 'json-simple-1.1.1.jar'),\n joinPath(JAR_DIR, 'hsqldb.jar'),\n ])\n\n // Opciones JVM (esto te funcionó)\n java.ensureJvm({\n opts: [\n '-Xrs',\n '-Dcom.ibm.as400.access.AS400.guiAvailable=false',\n '--enable-native-access=ALL-UNNAMED',\n ],\n })\n\n // Clases del wrapper Java\n const JT400Class = java.importClass('nodejt400.JT400')\n const HsqlClientClass = java.importClass('nodejt400.HsqlClient')\n\n return {\n createConnection: (config: string) =>\n JT400Class.createConnection(config) as Promise<JT400>, // async\n createPool: (config: string) => JT400Class.createPoolSync(config) as JT400, // sync si tu wrapper lo expone\n createInMemoryConnection: () => {\n // En java-bridge se instancia con `new`\n const instance = new HsqlClientClass()\n return instance as unknown as JT400\n },\n }\n}\n\n// export const initNewJavaBridge = (): JavaBridge => {\n// ensureJvm({\n// // This option should not have any effect when not using electron or not having the application packaged.\n// // https://github.com/MarkusJx/node-java-bridge?tab=readme-ov-file#notes-on-electron\n// isPackagedElectron: true,\n\n// opts: [\n// '-Xrs',\n// '-Dcom.ibm.as400.access.AS400.guiAvailable=false', // Removes gui prompts\n// ],\n// })\n// appendClasspath(\n// ['jt400.jar', 'jt400wrap.jar', 'json-simple-1.1.1.jar', 'hsqldb.jar'].map(\n// (jar) => joinPath(currentDir, '/../../java/lib/', jar)\n// )\n// )\n\n// const JT400Class = importClass('nodejt400.JT400')\n// return {\n// createConnection: (config: string) => JT400Class.createConnection(config),\n// createInMemoryConnection: () => {\n// const HsqlClientClass = importClass('nodejt400.HsqlClient')\n// const instance: any = new HsqlClientClass()\n// return instance\n// },\n// createPool: (config: string) => JT400Class.createPoolSync(config),\n// bufferToJavaType: (buffer: Buffer) => buffer,\n// javaTypeToBuffer: (javaType: any) => javaType,\n// }\n// }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,yBAAiB;AACjB,kBAAiC;AAS1B,MAAM,iBAAiB,MAAkB;AAC9C,QAAM,cAAU,YAAAA,MAAS,WAAW,iBAAiB;AAErD,qBAAAC,QAAK,gBAAgB;AAAA,QACnB,YAAAD,MAAS,SAAS,WAAW;AAAA,QAC7B,YAAAA,MAAS,SAAS,eAAe;AAAA,QACjC,YAAAA,MAAS,SAAS,uBAAuB;AAAA,QACzC,YAAAA,MAAS,SAAS,YAAY;AAAA,EAChC,CAAC;AAGD,qBAAAC,QAAK,UAAU;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AAGD,QAAM,aAAa,mBAAAA,QAAK,YAAY,iBAAiB;AACrD,QAAM,kBAAkB,mBAAAA,QAAK,YAAY,sBAAsB;AAE/D,SAAO;AAAA,IACL,kBAAkB,CAAC,WACjB,WAAW,iBAAiB,MAAM;AAAA;AAAA,IACpC,YAAY,CAAC,WAAmB,WAAW,eAAe,MAAM;AAAA;AAAA,IAChE,0BAA0B,MAAM;AAE9B,YAAM,WAAW,IAAI,gBAAgB;AACrC,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["joinPath","java"]}
@@ -33,6 +33,70 @@ function paramsToJson(params) {
33
33
  }
34
34
  const createBaseConnection = function(jdbcConnection, insertListFun, logger, inMemory) {
35
35
  const baseConnection = {
36
+ async commit() {
37
+ return jdbcConnection.commit().catch((err) => {
38
+ throw (0, import_handleError.handleError)({})(err);
39
+ });
40
+ },
41
+ async rollback() {
42
+ return jdbcConnection.rollback().catch((err) => {
43
+ throw (0, import_handleError.handleError)({})(err);
44
+ });
45
+ },
46
+ async createStatement() {
47
+ if (!jdbcConnection.createStatement) {
48
+ throw new Error(
49
+ "createStatement is not supported by this JDBCConnection"
50
+ );
51
+ }
52
+ return jdbcConnection.createStatement().then((st) => {
53
+ return {
54
+ prepare(sql) {
55
+ return st.prepare(sql);
56
+ },
57
+ isQuery() {
58
+ return st.isQuerySync();
59
+ },
60
+ async metadata() {
61
+ return st.getMetaData().then(JSON.parse);
62
+ },
63
+ async asArray() {
64
+ return st.asArray().then(JSON.parse);
65
+ },
66
+ asIterable() {
67
+ return {
68
+ [Symbol.asyncIterator]: async function* () {
69
+ while (true) {
70
+ const row = await st.next().then(JSON.parse);
71
+ if (!row) break;
72
+ yield row;
73
+ }
74
+ }
75
+ };
76
+ },
77
+ asStream(options) {
78
+ return new import_jdbcstream.JdbcStream({
79
+ jdbcStream: st.asStreamSync(options?.bufferSize ?? 100)
80
+ });
81
+ },
82
+ asObjectStream(options) {
83
+ return st.getMetaData().then(JSON.parse).then((metadata) => {
84
+ const transform = (0, import_streamTransformers.arrayToObject)(metadata);
85
+ const stream = new import_jdbcstream.JdbcStream({
86
+ jdbcStream: st.asStreamSync(options?.bufferSize ?? 100)
87
+ });
88
+ return stream.pipe((0, import_JSONStream.parse)("*")).pipe(transform);
89
+ });
90
+ },
91
+ updated() {
92
+ return st.updated();
93
+ },
94
+ close() {
95
+ return st.close();
96
+ }
97
+ };
98
+ });
99
+ },
36
100
  query(sql, params = [], options) {
37
101
  const jsonParams = paramsToJson(params);
38
102
  const trim = options && options.trim !== void 0 ? options.trim : true;
@@ -88,6 +152,9 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
88
152
  const isQuery = statement.isQuerySync();
89
153
  let stream;
90
154
  const stWrap = {
155
+ prepare(prepSql) {
156
+ return statement.prepare(prepSql);
157
+ },
91
158
  isQuery() {
92
159
  return isQuery;
93
160
  },
@@ -190,10 +257,9 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
190
257
  },
191
258
  close() {
192
259
  if (stream) {
193
- stream.close();
194
- } else {
195
- return statement.close();
260
+ return stream.close();
196
261
  }
262
+ return statement.close();
197
263
  }
198
264
  };
199
265
  return stWrap;
@@ -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 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 return jdbcConnection\n .execute(sql, jsonParams)\n .then((statement) => {\n const isQuery = statement.isQuerySync()\n let stream\n const stWrap = {\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 stream.close()\n } else {\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 } 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":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAAsB;AAGtB,yBAA4B;AAE5B,wBAA2B;AAC3B,6BAAsC;AAEtC,gCAA8B;AAE9B,SAAS,kBAAkB,GAAQ;AACjC,SAAO,aAAa,OAChB,EAAE,YAAY,EAAE,QAAQ,KAAK,GAAG,EAAE,QAAQ,KAAK,EAAE,IACjD;AACN;AAEA,SAAS,aAAa,QAAiB;AACrC,SAAO,KAAK,WAAW,UAAU,CAAC,GAAG,IAAI,iBAAiB,CAAC;AAC7D;AAEO,MAAM,uBAAuB,SAClC,gBACA,eACA,QACA,UACgB;AAChB,QAAM,iBAAiC;AAAA,IACrC,MAAM,SAAS;AACb,aAAO,eAAe,OAAO,EAAE,MAAM,CAAC,QAAQ;AAC5C,kBAAM,gCAAY,CAAC,CAAC,EAAE,GAAG;AAAA,MAC3B,CAAC;AAAA,IACH;AAAA,IACA,MAAM,WAAW;AACf,aAAO,eAAe,SAAS,EAAE,MAAM,CAAC,QAAQ;AAC9C,kBAAM,gCAAY,CAAC,CAAC,EAAE,GAAG;AAAA,MAC3B,CAAC;AAAA,IACH;AAAA,IACA,MAAM,kBAAkB;AACtB,UAAI,CAAC,eAAe,iBAAiB;AACnC,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,aAAO,eAAe,gBAAgB,EAAE,KAAK,CAAC,OAAO;AACnD,eAAO;AAAA,UACL,QAAQ,KAAa;AACnB,mBAAO,GAAG,QAAQ,GAAG;AAAA,UACvB;AAAA,UACA,UAAU;AACR,mBAAO,GAAG,YAAY;AAAA,UACxB;AAAA,UACA,MAAM,WAAW;AACf,mBAAO,GAAG,YAAY,EAAE,KAAK,KAAK,KAAK;AAAA,UACzC;AAAA,UACA,MAAM,UAAU;AACd,mBAAO,GAAG,QAAQ,EAAE,KAAK,KAAK,KAAK;AAAA,UACrC;AAAA,UACA,aAAa;AACX,mBAAO;AAAA,cACL,CAAC,OAAO,aAAa,GAAG,mBAAoB;AAC1C,uBAAO,MAAM;AACX,wBAAM,MAAM,MAAM,GAAG,KAAK,EAAE,KAAK,KAAK,KAAK;AAC3C,sBAAI,CAAC,IAAK;AACV,wBAAM;AAAA,gBACR;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA,SAAS,SAAS;AAChB,mBAAO,IAAI,6BAAW;AAAA,cACpB,YAAY,GAAG,aAAa,SAAS,cAAc,GAAG;AAAA,YACxD,CAAC;AAAA,UACH;AAAA,UACA,eAAe,SAAS;AACtB,mBAAO,GACJ,YAAY,EACZ,KAAK,KAAK,KAAK,EACf,KAAK,CAAC,aAAa;AAClB,oBAAM,gBAAY,yCAAc,QAAQ;AACxC,oBAAM,SAAS,IAAI,6BAAW;AAAA,gBAC5B,YAAY,GAAG,aAAa,SAAS,cAAc,GAAG;AAAA,cACxD,CAAC;AACD,qBAAO,OAAO,SAAK,yBAAM,GAAG,CAAC,EAAE,KAAK,SAAS;AAAA,YAC/C,CAAC;AAAA,UACL;AAAA,UACA,UAAU;AACR,mBAAO,GAAG,QAAQ;AAAA,UACpB;AAAA,UACA,QAAQ;AACN,mBAAO,GAAG,MAAM;AAAA,UAClB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,MAAM,KAAK,SAAS,CAAC,GAAG,SAAS;AAC/B,YAAM,aAAa,aAAa,MAAM;AAGtC,YAAM,OAAO,WAAW,QAAQ,SAAS,SAAY,QAAQ,OAAO;AACpE,aAAO;AAAA,QACL,EAAE,KAAK,OAAO,YAAY,gBAAgB,OAAO,OAAO;AAAA,QACxD;AAAA,MACF;AACA,YAAM,YAAY,QAAQ,OAAO,OAAO;AACxC,aAAO,eACJ,MAAM,KAAK,YAAY,IAAI,EAC3B,KAAK,KAAK,KAAK,EACf,KAAK,CAAC,WAAkB;AACvB,eAAO;AAAA,UACL;AAAA,YACE;AAAA,YACA,OAAO;AAAA,YACP,UAAU,OAAO,QAAQ,OAAO,OAAO,IAAI,SAAS;AAAA,YACpD,gBAAgB,OAAO;AAAA,YACvB,YAAY,OAAO;AAAA,UACrB;AAAA,UACA;AAAA,QACF;AACA,eAAO;AAAA,MACT,CAAC,EACA,UAAM,gCAAY,EAAE,KAAK,OAAO,CAAC,CAAC;AAAA,IACvC;AAAA,IAEA,iBAAiB,KAAK,SAAS,CAAC,GAAG;AACjC,YAAM,aAAa,aAAa,MAAM;AACtC,aAAO;AAAA,QACL,EAAE,KAAK,OAAO,YAAY,gBAAgB,OAAO,OAAO;AAAA,QACxD;AAAA,MACF;AACA,YAAM,YAAY,QAAQ,OAAO,OAAO;AACxC,YAAM,SAAS,IAAI,6BAAW;AAAA,QAC5B,mBAAmB,eAChB,cAAc,KAAK,YAAY,GAAG,EAClC,UAAM,gCAAY,EAAE,KAAK,OAAO,CAAC,CAAC;AAAA,MACvC,CAAC;AACD,aAAO,GAAG,OAAO,MAAM;AACrB,eAAO;AAAA,UACL;AAAA,YACE;AAAA,YACA,OAAO;AAAA,YACP,UAAU,OAAO,QAAQ,OAAO,OAAO,IAAI,SAAS;AAAA,YACpD,gBAAgB,OAAO;AAAA,UACzB;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAEA,QAAQ,KAAK,SAAS,CAAC,GAAG;AACxB,YAAM,aAAa,aAAa,MAAM;AACtC,aAAO;AAAA,QACL,EAAE,KAAK,OAAO,YAAY,gBAAgB,OAAO,OAAO;AAAA,QACxD;AAAA,MACF;AAEA,aAAO,eACJ,QAAQ,KAAK,UAAU,EACvB,KAAK,CAAC,cAAc;AACnB,cAAM,UAAU,UAAU,YAAY;AACtC,YAAI;AAEJ,cAAM,SAAS;AAAA,UACb,QAAQ,SAAiB;AACvB,mBAAO,UAAU,QAAQ,OAAO;AAAA,UAClC;AAAA,UACA,UAAU;AACR,mBAAO;AAAA,UACT;AAAA,UACA,WAAW;AACT,mBAAO,UAAU,YAAY,EAAE,KAAK,KAAK,KAAK;AAAA,UAChD;AAAA,UACA,UAAU;AACR,kBAAM,YAAY,QAAQ,OAAO,OAAO;AACxC,mBAAO,UACJ,QAAQ,EACR,KAAK,KAAK,KAAK,EACf,KAAK,CAAC,WAAkB;AACvB,qBAAO;AAAA,gBACL;AAAA,kBACE;AAAA,kBACA,OAAO;AAAA,kBACP,UAAU,OAAO,QAAQ,OAAO,OAAO,IAAI,SAAS;AAAA,kBACpD,gBAAgB,OAAO;AAAA,kBACvB,YAAY,OAAO;AAAA,gBACrB;AAAA,gBACA;AAAA,cACF;AACA,qBAAO;AAAA,YACT,CAAC;AAAA,UACL;AAAA,UACA,SAAS,SAAS;AAChB,kBAAM,YAAY,QAAQ,OAAO,OAAO;AACxC,sBAAU,WAAW,CAAC;AACtB,qBAAS,IAAI,6BAAW;AAAA,cACtB,YAAY,UAAU,aAAa,QAAQ,cAAc,GAAG;AAAA,YAC9D,CAAC;AACD,mBAAO,GAAG,OAAO,MAAM;AACrB,qBAAO;AAAA,gBACL;AAAA,kBACE;AAAA,kBACA,OAAO;AAAA,kBACP,UAAU,OAAO,QAAQ,OAAO,OAAO,IAAI,SAAS;AAAA,kBACpD,gBAAgB,OAAO;AAAA,gBACzB;AAAA,gBACA;AAAA,cACF;AAAA,YACF,CAAC;AACD,mBAAO;AAAA,UACT;AAAA,UACA,eAAe,SAAS;AACtB,kBAAM,YAAY,QAAQ,OAAO,OAAO;AACxC,sBAAU,WAAW,CAAC;AACtB,kBAAM,gBAAY,yBAAM,GAAG;AAE3B,mBAAO,UACJ,YAAY,EACZ,KAAK,KAAK,KAAK,EACf,KAAK,CAAC,aAAa;AAClB,oBAAM,6BAAyB,yCAAc,QAAQ;AACrD,uBAAS,IAAI,6BAAW;AAAA,gBACtB,YAAY,UAAU;AAAA,kBACpB,QAAQ,cAAc;AAAA,gBACxB;AAAA,cACF,CAAC;AACD,qBAAO,GAAG,OAAO,MAAM;AACrB,uBAAO;AAAA,kBACL;AAAA,oBACE;AAAA,oBACA,OAAO;AAAA,oBACP,UAAU,OAAO,QAAQ,OAAO,OAAO,IAAI,SAAS;AAAA,oBACpD,gBAAgB,OAAO;AAAA,kBACzB;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAC;AAED,qBAAO,OAAO,KAAK,SAAS,EAAE,KAAK,sBAAsB;AAAA,YAC3D,CAAC;AAAA,UACL;AAAA,UACA,aAAa;AACX,kBAAM,YAAY,QAAQ,OAAO,OAAO;AACxC,mBAAO;AAAA,cACL,CAAC,OAAO,aAAa,IAAI;AACvB,uBAAO;AAAA,kBACL,MAAM,OAAO;AACX,2BAAO,UACJ,KAAK,EACL,KAAK,KAAK,KAAK,EACf,KAAK,CAAC,UAAU;AACf,4BAAM,OAAO,CAAC;AACd,0BAAI,MAAM;AACR,+BAAO;AAAA,0BACL;AAAA,4BACE;AAAA,4BACA,OAAO;AAAA,4BACP,UAAU;AAAA,8BACR,QAAQ,OAAO,OAAO,IAAI;AAAA,4BAC5B;AAAA,4BACA,gBAAgB,WAAW;AAAA,0BAC7B;AAAA,0BACA;AAAA,wBACF;AAAA,sBACF;AACA,6BAAO;AAAA,wBACL;AAAA,wBACA;AAAA,sBACF;AAAA,oBACF,CAAC;AAAA,kBACL;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA,UAAU;AACR,mBAAO,UAAU,QAAQ;AAAA,UAC3B;AAAA,UACA,QAAQ;AACN,gBAAI,QAAQ;AACV,qBAAO,OAAO,MAAM;AAAA,YACtB;AACA,mBAAO,UAAU,MAAM;AAAA,UACzB;AAAA,QACF;AAEA,eAAO;AAAA,MACT,CAAC,EACA,UAAM,gCAAY,EAAE,KAAK,OAAO,CAAC,CAAC;AAAA,IACvC;AAAA,IACA,OAAO,KAAK,SAAS,CAAC,GAAG;AACvB,YAAM,aAAa,aAAa,MAAM;AACtC,aAAO;AAAA,QACL,EAAE,KAAK,OAAO,YAAY,gBAAgB,OAAO,OAAO;AAAA,QACxD;AAAA,MACF;AACA,YAAM,YAAY,QAAQ,OAAO,OAAO;AACxC,aAAO,eACJ,OAAO,KAAK,UAAU,EACtB,KAAK,CAAC,WAAW;AAChB,eAAO;AAAA,UACL;AAAA,YACE;AAAA,YACA,OAAO;AAAA,YACP,UAAU,OAAO,QAAQ,OAAO,OAAO,IAAI,SAAS;AAAA,YACpD,gBAAgB,OAAO;AAAA,YACvB;AAAA,UACF;AAAA,UACA;AAAA,QACF;AACA,eAAO;AAAA,MACT,CAAC,EACA,UAAM,gCAAY,EAAE,KAAK,OAAO,CAAC,CAAC;AAAA,IACvC;AAAA,IAEA,kBAAkB,KAAK,SAAS;AAC9B,aAAO,MAAM,EAAE,KAAK,OAAO,WAAW,GAAG,gCAAgC;AACzE,YAAM,YAAY,QAAQ,OAAO,OAAO;AACxC,YAAM,aAAS;AAAA,QACb,eAAe;AAAA,QACf;AAAA,QACA,WAAW,QAAQ;AAAA,MACrB;AACA,aAAO,GAAG,UAAU,MAAM;AACxB,eAAO;AAAA,UACL;AAAA,YACE;AAAA,YACA,OAAO;AAAA,YACP,UAAU,OAAO,QAAQ,OAAO,OAAO,IAAI,SAAS;AAAA,UACtD;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAEA,YAAY,KAAK,YAAY;AAC3B,YAAM,UAAU,cAAc,CAAC,GAAG,IAAI,CAAC,QAAQ;AAC7C,eAAO,IAAI,IAAI,iBAAiB;AAAA,MAClC,CAAC;AAED,YAAM,aAAa,KAAK,UAAU,MAAM;AACxC,aAAO;AAAA,QACL,EAAE,KAAK,OAAO,YAAY,gBAAgB,OAAO,OAAO;AAAA,QACxD;AAAA,MACF;AACA,YAAM,YAAY,QAAQ,OAAO,OAAO;AACxC,aAAO,eACJ,YAAY,KAAK,UAAU,EAC3B,KAAK,CAAC,QAAQ;AACb,cAAM,SAAS,MAAM,KAAK,GAAG;AAC7B,eAAO;AAAA,UACL;AAAA,YACE;AAAA,YACA,OAAO;AAAA,YACP,UAAU,OAAO,QAAQ,OAAO,OAAO,IAAI,SAAS;AAAA,YACpD,gBAAgB,OAAO;AAAA,YACvB;AAAA,UACF;AAAA,UACA;AAAA,QACF;AACA,eAAO;AAAA,MACT,CAAC,EACA,UAAM,gCAAY,EAAE,KAAK,OAAO,CAAC,CAAC;AAAA,IACvC;AAAA,IAEA,eAAe,KAAK,SAAS,CAAC,GAAG;AAC/B,YAAM,aAAa,aAAa,MAAM;AACtC,aAAO;AAAA,QACL,EAAE,KAAK,OAAO,YAAY,gBAAgB,OAAO,OAAO;AAAA,QACxD;AAAA,MACF;AACA,YAAM,YAAY,QAAQ,OAAO,OAAO;AACxC,aAAO,eACJ,eAAe,KAAK,UAAU,EAC9B,KAAK,CAAC,WAAW;AAChB,eAAO;AAAA,UACL;AAAA,YACE;AAAA,YACA,OAAO;AAAA,YACP,UAAU,OAAO,QAAQ,OAAO,OAAO,IAAI,SAAS;AAAA,YACpD,gBAAgB,OAAO;AAAA,UACzB;AAAA,UACA;AAAA,QACF;AACA,eAAO;AAAA,MACT,CAAC,EACA,UAAM,gCAAY,EAAE,KAAK,OAAO,CAAC,CAAC;AAAA,IACvC;AAAA,IAEA,WAAW,WAAW,UAAU,MAAM;AACpC,aAAO,cAAc,cAAc,EAAE,WAAW,UAAU,IAAI;AAAA,IAChE;AAAA,IAEA,aAAa;AACX,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
@@ -11,7 +11,9 @@ interface BLOB {
11
11
  }
12
12
  type Param = string | number | Date | null | CLOB | BLOB;
13
13
  interface QueryOptions {
14
- trim: boolean;
14
+ trim?: boolean;
15
+ cursor?: boolean;
16
+ fetchSize?: number;
15
17
  }
16
18
  interface Metadata {
17
19
  name: string;
@@ -20,6 +22,7 @@ interface Metadata {
20
22
  scale: number;
21
23
  }
22
24
  interface Statement {
25
+ prepare: (sql: string) => Promise<void>;
23
26
  isQuery: () => boolean;
24
27
  metadata: () => Promise<Metadata[]>;
25
28
  asArray: () => Promise<string[][]>;
@@ -30,7 +33,9 @@ interface Statement {
30
33
  close: Close;
31
34
  }
32
35
  type Execute = (sql: string, params?: Param[]) => Promise<Statement>;
33
- type Query = <T>(sql: string, params?: Param[], options?: QueryOptions) => Promise<T[]>;
36
+ type Query = {
37
+ <T>(sql: string, params?: Param[] | undefined, options?: QueryOptions, callback?: (error: any, cursor: any) => void): Promise<T[]>;
38
+ };
34
39
  type Update = (sql: string, params?: Param[]) => Promise<number>;
35
40
  type CreateReadStream = (sql: string, params?: Param[]) => Readable;
36
41
  type InsertAndGetId = (sql: string, params?: Param[]) => Promise<number>;
@@ -51,6 +56,9 @@ interface BaseConnection {
51
56
  createWriteStream: CreateWriteStream;
52
57
  batchUpdate: BatchUpdate;
53
58
  execute: Execute;
59
+ commit: () => Promise<void>;
60
+ rollback: () => Promise<void>;
61
+ createStatement: () => Promise<Statement>;
54
62
  }
55
63
 
56
64
  export type { BLOB, BaseConnection, BatchUpdate, CLOB, Close, CreateReadStream, CreateWriteStream, Execute, InsertAndGetId, InsertList, Metadata, Param, Query, QueryOptions, Statement, 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}\n\nexport interface Metadata {\n name: string\n typeName: string\n precision: number\n scale: number\n}\nexport interface Statement {\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 = <T>(\n sql: string,\n params?: Param[],\n options?: QueryOptions,\n) => Promise<T[]>\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"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmC;","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 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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmC;","names":[]}
@@ -31,7 +31,7 @@ __export(connection_exports, {
31
31
  });
32
32
  module.exports = __toCommonJS(connection_exports);
33
33
  var import_util = require("util");
34
- var import_baseConnection = require("./baseConnection");
34
+ var import_baseConnection = require("./baseConnection.js");
35
35
  var import_handleError = require("./handleError.js");
36
36
  var import_ifs = require("./ifs/index.js");
37
37
  var import_jdbcstream = require("./jdbcstream.js");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ts-src/lib/connection.ts"],"sourcesContent":["import { deprecate } from 'util'\nimport { JT400 } from '../java/JT400'\nimport { createBaseConnection } from './baseConnection'\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":["JSONStream","data","createIfs"]}
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA0B;AAE1B,4BAAqC;AAQrC,yBAA4B;AAC5B,iBAAiC;AAEjC,wBAA2B;AAC3B,wBAAuB;AAGvB,MAAM,qBAAqB,SACzB,KACyB;AACzB,SAAQ,IAAyB,SAAS;AAC5C;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKe;AACb,QAAM,qBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,QAAoB;AAAA,IACxB,GAAG;AAAA,IACH,MAAM,YAAY,qBAAqB;AACrC,YAAM,IAAI,WAAW,sBAAsB;AAC3C,YAAM,yBAAqB;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,UAAI;AACF,cAAM,MAAM,MAAM,oBAAoB,kBAAkB;AACxD,cAAM,EAAE,OAAO;AACf,eAAO;AAAA,MACT,SAAS,KAAK;AACZ,cAAM,EAAE,SAAS;AACjB,cAAM;AAAA,MACR,UAAE;AACA,cAAM,EAAE,IAAI;AAAA,MACd;AAAA,IACF;AAAA,IACA,kBAAkB,KAAK;AACrB,aAAO,IAAI,6BAAW;AAAA,QACpB,YAAY,WAAW;AAAA,UACrB,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI,SAAS;AAAA,QACf;AAAA,MACF,CAAC,EAAE,KAAK,kBAAAA,QAAW,MAAM,CAAC,IAAI,CAAC,CAAC;AAAA,IAClC;AAAA,IACA,WAAW,KAAK;AACd,aAAO,WACJ,WAAW,IAAI,SAAS,IAAI,QAAQ,IAAI,OAAO,IAAI,WAAW,GAAG,EACjE,KAAK,KAAK,KAAK;AAAA,IACpB;AAAA,IACA,eAAe,KAAK;AAClB,aAAO,WACJ,eAAe,IAAI,SAAS,IAAI,QAAQ,IAAI,KAAK,EACjD,KAAK,KAAK,KAAK;AAAA,IACpB;AAAA,IACA,MAAM,aAAa,KAAK;AACtB,YAAM,UAAU,CAAC,mBAAmB,GAAG;AACvC,YAAM,OAAO,mBAAmB,GAAG,IAAI,IAAI,OAAO,IAAI;AACtD,YAAM,KAAK,MAAM,WAAW,aAAa,MAAM,OAAO;AACtD,aAAO;AAAA;AAAA;AAAA;AAAA,QAIL,OAAO;AACL,cAAI,OAAO;AACX,cAAI,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC,GAAG;AACzC,mBAAO,UAAU,CAAC,EAAE,QAAQ;AAAA,UAC9B;AACA,iBAAO,GAAG,KAAK,IAAI;AAAA,QACrB;AAAA,QACA,kBAAkB,aAAa;AAC7B,iBAAO,GAAG,kBAAkB,WAAW;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAAA,IACA,iBAAiB,KAAK;AACpB,YAAM,KAAK,WAAW,qBAAqB,IAAI,IAAI;AACnD,YAAM,UAAU,eAAgB,KAAK,MAAM,gBAAgB;AACzD,cAAM,MAAM,MAAM,GAAG,aAAa,KAAK,MAAM,cAAc;AAC3D,cAAM,OAAO,MAAM,IAAI,QAAQ;AAC/B,eAAO;AAAA,UACL;AAAA,UACA,OAAO,CAACC,UAAiB,IAAI,MAAMA,KAAI;AAAA,QACzC;AAAA,MACF;AACA,aAAO;AAAA,QACL,MAAM,KAAK,MAAM;AACf,iBAAO,GAAG,MAAM,KAAK,IAAI;AAAA,QAC3B;AAAA,QACA,OAAO;AACL,cAAI,OAAO;AACX,cAAI;AACJ,cAAI;AACJ,cAAI,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC,GAAG;AACzC,kBAAM,UAAU,CAAC,EAAE;AACnB,mBAAO,UAAU,CAAC,EAAE,QAAQ;AAC5B,6BAAiB,UAAU,CAAC,EAAE;AAAA,UAChC,OAAO;AACL,kBAAM,UAAU,CAAC;AAAA,UACnB;AACA,iBAAO,iBACH,QAAQ,KAAK,MAAM,cAAc,IACjC,GAAG,KAAK,KAAK,IAAI;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,gBAAgB,KAAgC;AACpD,YAAM,cAAc,MAAM,WAAW,gBAAgB,IAAI,IAAI;AAC7D,aAAO;AAAA,QACL,OAAO;AACL,gBAAM,YAAY,UAAU,CAAC,EAAE;AAC/B,iBAAO,YAAY,KAAK,SAAS;AAAA,QACnC;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM;AACJ,iBAAO,WAAAC,KAAU,UAAU;AAAA,IAC7B;AAAA,IACA,cAAc,KAA+B;AAC3C,YAAM,MAAM,WAAW;AAAA,QACrB,IAAI;AAAA,QACJ,KAAK,UAAU,IAAI,YAAY;AAAA,QAC/B,IAAI,eAAe;AAAA,QACnB,IAAI;AAAA,MACN;AACA,aAAO,SAAS,IAAI,QAAQ,UAAU,GAAG;AACvC,eAAO,IACJ,IAAI,KAAK,UAAU,MAAM,GAAG,OAAO,EACnC,KAAK,KAAK,KAAK,EACf,UAAM,gCAAY,EAAE,aAAa,IAAI,aAAa,QAAQ,QAAQ,CAAC,CAAC;AAAA,MACzE;AAAA,IACF;AAAA,IACA,SAAK,uBAAU,SAAU,aAAa,cAAc,aAAa;AAC/D,aAAO,KAAK,cAAc;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,GAAG,0FAA0F;AAAA,IAC7F,QAAQ;AACN,aAAO,WAAW,MAAM;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO;AACT;","names":["JSONStream","data","createIfs"]}
@@ -21,8 +21,8 @@ __export(ifs_exports, {
21
21
  });
22
22
  module.exports = __toCommonJS(ifs_exports);
23
23
  var import_path = require("path");
24
- var import_read_stream = require("./read_stream");
25
- var import_write_stream = require("./write_stream");
24
+ var import_read_stream = require("./read_stream.js");
25
+ var import_write_stream = require("./write_stream.js");
26
26
  function ifs(connection) {
27
27
  return {
28
28
  createReadStream: function(fileName) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../ts-src/lib/ifs/index.ts"],"sourcesContent":["import { basename, dirname } from 'path'\nimport { JT400 } from '../../java/JT400'\nimport { IfsReadStream } from './read_stream'\nimport { Ifs } from './types'\nimport { IfsWriteStream } from './write_stream'\n\nexport function ifs(\n connection: JT400,\n): Ifs {\n return {\n createReadStream: function (fileName: string | Promise<string>) {\n const javaStream = Promise.resolve(fileName).then(function (file) {\n return connection.createIfsReadStream(file)\n })\n return new IfsReadStream({\n ifsReadStream: javaStream\n })\n },\n createWriteStream: function (\n fileName: string | Promise<string>,\n options: { append: boolean; ccsid?: number } = { append: false },\n ) {\n const javaStream = Promise.resolve(fileName).then(function (file) {\n const folderPath = dirname(file)\n const fileName = basename(file)\n return connection.createIfsWriteStream(\n folderPath,\n fileName,\n options.append,\n options.ccsid,\n )\n })\n return new IfsWriteStream({\n ifsWriteStream: javaStream\n })\n },\n listFiles: async (folderName: string) => {\n const files = await connection.listIfsFiles(folderName)\n return files || []\n },\n moveFile: (fileName: string, newFileName: string) =>\n connection.moveIfsFile(fileName, newFileName),\n deleteFile: (fileName: string) => connection.deleteIfsFile(fileName),\n fileMetadata: (fileName: string) =>\n connection.getIfsFileMetadata(fileName).then(JSON.parse),\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAkC;AAElC,yBAA8B;AAE9B,0BAA+B;AAExB,SAAS,IACd,YACK;AACL,SAAO;AAAA,IACL,kBAAkB,SAAU,UAAoC;AAC9D,YAAM,aAAa,QAAQ,QAAQ,QAAQ,EAAE,KAAK,SAAU,MAAM;AAChE,eAAO,WAAW,oBAAoB,IAAI;AAAA,MAC5C,CAAC;AACD,aAAO,IAAI,iCAAc;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IACA,mBAAmB,SACjB,UACA,UAA+C,EAAE,QAAQ,MAAM,GAC/D;AACA,YAAM,aAAa,QAAQ,QAAQ,QAAQ,EAAE,KAAK,SAAU,MAAM;AAChE,cAAM,iBAAa,qBAAQ,IAAI;AAC/B,cAAMA,gBAAW,sBAAS,IAAI;AAC9B,eAAO,WAAW;AAAA,UAChB;AAAA,UACAA;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ;AAAA,QACV;AAAA,MACF,CAAC;AACD,aAAO,IAAI,mCAAe;AAAA,QACxB,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,WAAW,OAAO,eAAuB;AACvC,YAAM,QAAQ,MAAM,WAAW,aAAa,UAAU;AACtD,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,IACA,UAAU,CAAC,UAAkB,gBAC3B,WAAW,YAAY,UAAU,WAAW;AAAA,IAC9C,YAAY,CAAC,aAAqB,WAAW,cAAc,QAAQ;AAAA,IACnE,cAAc,CAAC,aACb,WAAW,mBAAmB,QAAQ,EAAE,KAAK,KAAK,KAAK;AAAA,EAC3D;AACF;","names":["fileName"]}
1
+ {"version":3,"sources":["../../../ts-src/lib/ifs/index.ts"],"sourcesContent":["import { basename, dirname } from 'path'\nimport { JT400 } from '../../java/JT400'\nimport { IfsReadStream } from './read_stream.js'\nimport { Ifs } from './types'\nimport { IfsWriteStream } from './write_stream.js'\n\nexport function ifs(\n connection: JT400,\n): Ifs {\n return {\n createReadStream: function (fileName: string | Promise<string>) {\n const javaStream = Promise.resolve(fileName).then(function (file) {\n return connection.createIfsReadStream(file)\n })\n return new IfsReadStream({\n ifsReadStream: javaStream,\n })\n },\n createWriteStream: function (\n fileName: string | Promise<string>,\n options: { append: boolean; ccsid?: number } = { append: false },\n ) {\n const javaStream = Promise.resolve(fileName).then(function (file) {\n const folderPath = dirname(file)\n const fileName = basename(file)\n return connection.createIfsWriteStream(\n folderPath,\n fileName,\n options.append,\n options.ccsid,\n )\n })\n return new IfsWriteStream({\n ifsWriteStream: javaStream,\n })\n },\n listFiles: async (folderName: string) => {\n const files = await connection.listIfsFiles(folderName)\n return files || []\n },\n moveFile: (fileName: string, newFileName: string) =>\n connection.moveIfsFile(fileName, newFileName),\n deleteFile: (fileName: string) => connection.deleteIfsFile(fileName),\n fileMetadata: (fileName: string) =>\n connection.getIfsFileMetadata(fileName).then(JSON.parse),\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAkC;AAElC,yBAA8B;AAE9B,0BAA+B;AAExB,SAAS,IACd,YACK;AACL,SAAO;AAAA,IACL,kBAAkB,SAAU,UAAoC;AAC9D,YAAM,aAAa,QAAQ,QAAQ,QAAQ,EAAE,KAAK,SAAU,MAAM;AAChE,eAAO,WAAW,oBAAoB,IAAI;AAAA,MAC5C,CAAC;AACD,aAAO,IAAI,iCAAc;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IACA,mBAAmB,SACjB,UACA,UAA+C,EAAE,QAAQ,MAAM,GAC/D;AACA,YAAM,aAAa,QAAQ,QAAQ,QAAQ,EAAE,KAAK,SAAU,MAAM;AAChE,cAAM,iBAAa,qBAAQ,IAAI;AAC/B,cAAMA,gBAAW,sBAAS,IAAI;AAC9B,eAAO,WAAW;AAAA,UAChB;AAAA,UACAA;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ;AAAA,QACV;AAAA,MACF,CAAC;AACD,aAAO,IAAI,mCAAe;AAAA,QACxB,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,WAAW,OAAO,eAAuB;AACvC,YAAM,QAAQ,MAAM,WAAW,aAAa,UAAU;AACtD,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,IACA,UAAU,CAAC,UAAkB,gBAC3B,WAAW,YAAY,UAAU,WAAW;AAAA,IAC9C,YAAY,CAAC,aAAqB,WAAW,cAAc,QAAQ;AAAA,IACnE,cAAc,CAAC,aACb,WAAW,mBAAmB,QAAQ,EAAE,KAAK,KAAK,KAAK;AAAA,EAC3D;AACF;","names":["fileName"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../ts-src/lib/ifs/read_stream.ts"],"sourcesContent":["import util from 'util'\nimport { Readable } from 'stream'\nimport { IfsReadStream as IfsReadStreamType } from '../../java/JT400'\n\ntype Opt = {\n ifsReadStream: Promise<IfsReadStreamType>\n}\n\nexport function IfsReadStream(opt: Opt) {\n Readable.call(this, { objectMode: false })\n this._ifsReadStream = opt.ifsReadStream\n}\n\nutil.inherits(IfsReadStream, Readable)\n\nIfsReadStream.prototype._read = function () {\n const streamPromise: Promise<IfsReadStreamType> = this._ifsReadStream\n streamPromise\n .then((stream) =>\n stream.read().then((res: any) => {\n // java-bridge convierte byte[] -> Buffer automáticamente\n if (res == null) {\n this.push(null) // EOF\n return\n }\n\n const buf =\n Buffer.isBuffer(res) ? res : res instanceof Uint8Array ? Buffer.from(res) : Buffer.from(res as any)\n\n if (buf.length === 0) {\n this.push(null) // EOF defensivo si llega vacío\n return\n }\n\n this.push(buf)\n }),\n )\n .catch((err: any) => this.emit('error', err))\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,oBAAyB;AAOlB,SAAS,cAAc,KAAU;AACtC,yBAAS,KAAK,MAAM,EAAE,YAAY,MAAM,CAAC;AACzC,OAAK,iBAAiB,IAAI;AAC5B;AAEA,YAAAA,QAAK,SAAS,eAAe,sBAAQ;AAErC,cAAc,UAAU,QAAQ,WAAY;AAC1C,QAAM,gBAA4C,KAAK;AACvD,gBACG;AAAA,IAAK,CAAC,WACL,OAAO,KAAK,EAAE,KAAK,CAAC,QAAa;AAE/B,UAAI,OAAO,MAAM;AACf,aAAK,KAAK,IAAI;AACd;AAAA,MACF;AAEA,YAAM,MACJ,OAAO,SAAS,GAAG,IAAI,MAAM,eAAe,aAAa,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAU;AAEpG,UAAI,IAAI,WAAW,GAAG;AACpB,aAAK,KAAK,IAAI;AACd;AAAA,MACF;AAEA,WAAK,KAAK,GAAG;AAAA,IACf,CAAC;AAAA,EACH,EACC,MAAM,CAAC,QAAa,KAAK,KAAK,SAAS,GAAG,CAAC;AAChD;","names":["util"]}
1
+ {"version":3,"sources":["../../../ts-src/lib/ifs/read_stream.ts"],"sourcesContent":["import util from 'util'\nimport { Readable } from 'stream'\nimport { IfsReadStream as IfsReadStreamType } from '../../java/JT400.js'\n\ntype Opt = {\n ifsReadStream: Promise<IfsReadStreamType>\n}\n\nexport function IfsReadStream(opt: Opt) {\n Readable.call(this, { objectMode: false })\n this._ifsReadStream = opt.ifsReadStream\n}\n\nutil.inherits(IfsReadStream, Readable)\n\nIfsReadStream.prototype._read = function () {\n const streamPromise: Promise<IfsReadStreamType> = this._ifsReadStream\n streamPromise\n .then((stream) =>\n stream.read().then((res: any) => {\n // java-bridge convierte byte[] -> Buffer automáticamente\n if (res == null) {\n this.push(null) // EOF\n return\n }\n\n const buf =\n Buffer.isBuffer(res) ? res : res instanceof Uint8Array ? Buffer.from(res) : Buffer.from(res as any)\n\n if (buf.length === 0) {\n this.push(null) // EOF defensivo si llega vacío\n return\n }\n\n this.push(buf)\n }),\n )\n .catch((err: any) => this.emit('error', err))\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AACjB,oBAAyB;AAOlB,SAAS,cAAc,KAAU;AACtC,yBAAS,KAAK,MAAM,EAAE,YAAY,MAAM,CAAC;AACzC,OAAK,iBAAiB,IAAI;AAC5B;AAEA,YAAAA,QAAK,SAAS,eAAe,sBAAQ;AAErC,cAAc,UAAU,QAAQ,WAAY;AAC1C,QAAM,gBAA4C,KAAK;AACvD,gBACG;AAAA,IAAK,CAAC,WACL,OAAO,KAAK,EAAE,KAAK,CAAC,QAAa;AAE/B,UAAI,OAAO,MAAM;AACf,aAAK,KAAK,IAAI;AACd;AAAA,MACF;AAEA,YAAM,MACJ,OAAO,SAAS,GAAG,IAAI,MAAM,eAAe,aAAa,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAU;AAEpG,UAAI,IAAI,WAAW,GAAG;AACpB,aAAK,KAAK,IAAI;AACd;AAAA,MACF;AAEA,WAAK,KAAK,GAAG;AAAA,IACf,CAAC;AAAA,EACH,EACC,MAAM,CAAC,QAAa,KAAK,KAAK,SAAS,GAAG,CAAC;AAChD;","names":["util"]}
@@ -77,7 +77,7 @@ describe("hsql in memory", () => {
77
77
  try {
78
78
  import_assert.default.strictEqual(
79
79
  err.message,
80
- "Invalid argument in JDBC call: parameter index out of range: 1"
80
+ "Argumento incorrecto en una llamada JDBC: parameter index out of range: 1"
81
81
  );
82
82
  done();
83
83
  } catch (e) {
@@ -159,7 +159,7 @@ describe("hsql in memory", () => {
159
159
  }).catch((error) => {
160
160
  import_assert.default.strictEqual(
161
161
  error.message,
162
- "data exception: invalid datetime format"
162
+ "excepci\xF3n de datos: formato fecha/hora incorrecto"
163
163
  );
164
164
  import_assert.default.ok(error.cause.stack.includes("JdbcJsonClient.setParams"));
165
165
  import_assert.default.strictEqual(error.context.sql, sql);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ts-src/unit-test/hsql-spec.ts"],"sourcesContent":["import { useInMemoryDb } from '../index.js'\nimport { Readable } from 'stream'\nimport { parse } from 'JSONStream'\nimport assert from 'assert'\n\nconst jt400 = useInMemoryDb()\ndescribe('hsql in memory', () => {\n beforeEach(() => {\n return jt400\n .update(\n 'create table testtbl (ID DECIMAL(15, 0) GENERATED BY DEFAULT AS IDENTITY(START WITH 1234567891234), NAME VARCHAR(300), START DATE, STAMP TIMESTAMP, PRIMARY KEY(ID))',\n )\n .then(() =>\n jt400.update(\"insert into testtbl (NAME) values('Foo bar baz')\"),\n )\n })\n\n afterEach(() => {\n return jt400.update('drop table testtbl')\n })\n\n describe('query', () => {\n it('should be in memory', () => {\n assert.strictEqual(jt400.isInMemory(), true)\n })\n\n it('should select form testtbl', async () => {\n const res = await jt400.query<any>('select * from testtbl')\n assert.strictEqual(res.length, 1)\n })\n\n it('should use column alias when selecting', async () => {\n const res = await jt400.query<any>('select ID, NAME MYNAME from testtbl')\n assert.ok('MYNAME' in res[0])\n })\n\n it('should query as stream', (done) => {\n const stream = jt400.createReadStream('select * from testtbl')\n const jsonStream = stream.pipe(parse([true]))\n const data: any[] = []\n\n jsonStream.on('data', (row) => {\n data.push(row)\n })\n\n jsonStream.on('end', () => {\n try {\n assert.strictEqual(data.length, 1)\n done()\n } catch (e) {\n done(e)\n }\n })\n\n stream.on('error', done)\n })\n\n it('should fail queryAsStream with oops error', (done) => {\n const sql = 'select * from testtbl'\n const params = ['a']\n const stream = jt400.createReadStream(sql, params)\n const jsonStream = stream.pipe(parse([true]))\n\n jsonStream.on('end', () => {\n stream.emit('error', new Error('wrong error'))\n })\n\n stream.on('error', (err) => {\n try {\n assert.strictEqual(\n err.message,\n 'Invalid argument in JDBC call: parameter index out of range: 1',\n )\n done()\n } catch (e) {\n done(e)\n }\n })\n })\n })\n\n describe('insert', () => {\n it('should insert and return id', async () => {\n const res = await jt400.insertAndGetId(\n 'insert into testtbl (NAME) values(?)',\n ['foo'],\n )\n assert.strictEqual(res, 1234567891235)\n })\n\n it('should insert list', async () => {\n const res = await jt400.insertList('testtbl', 'ID', [\n {\n NAME: 'foo',\n },\n {\n NAME: 'bar',\n },\n ])\n\n assert.deepStrictEqual(res, [1234567891235, 1234567891236])\n\n const select = await jt400.query('select * from testtbl')\n assert.strictEqual(select.length, 3)\n })\n\n it('should insert date and timestamp', async () => {\n const ids = await jt400.insertList('testtbl', 'ID', [\n {\n START: new Date().toISOString().substr(0, 10),\n STAMP: new Date(),\n },\n ])\n\n assert.deepStrictEqual(ids, [1234567891235])\n })\n\n it('should create write stream', (done) => {\n const dataStream = new Readable({ objectMode: true })\n let c = 97\n dataStream._read = function () {\n dataStream.push([String.fromCharCode(c++)])\n if (c > 'z'.charCodeAt(0)) {\n dataStream.push(null)\n }\n }\n\n const ws = jt400.createWriteStream(\n 'insert into testtbl (NAME) VALUES(?)',\n { bufferSize: 10 },\n )\n dataStream\n .pipe(ws)\n .on('finish', () => {\n jt400\n .query('select name from testtbl')\n .then((res) => {\n assert.strictEqual(res.length, 27)\n })\n .then(done, done)\n })\n .on('error', done)\n })\n })\n\n describe('batch update', () => {\n it('should insert batch', async () => {\n const res = await jt400.batchUpdate(\n 'insert into testtbl (NAME,START) values(?, ?)',\n [\n ['foo', '2015-01-02'],\n ['bar', '2015-03-04'],\n ],\n )\n\n assert.deepStrictEqual(res, [1, 1])\n })\n\n it('should fail insert batch with oops-error', () => {\n const sql = 'insert into testtbl (NAME,START) values(?, ?)'\n const params = [\n ['foo', '2015-01-02'],\n ['bar', '2015-03-04'],\n ['a', 'b', 'c', 'd'],\n ]\n\n return jt400\n .batchUpdate(sql, params)\n .then(() => {\n throw new Error('wrong error')\n })\n .catch((error) => {\n assert.strictEqual(\n error.message,\n 'data exception: invalid datetime format',\n )\n assert.ok(error.cause.stack.includes('JdbcJsonClient.setParams'))\n assert.strictEqual(error.context.sql, sql)\n assert.deepStrictEqual(error.context.params, params)\n assert.strictEqual(error.category, 'ProgrammerError')\n })\n })\n })\n\n describe('pgm call mock', () => {\n let callFoo\n let input\n\n beforeEach(() => {\n callFoo = jt400.defineProgram({\n programName: 'foo',\n paramsSchema: [\n {\n name: 'bar',\n size: 10,\n },\n {\n name: 'baz',\n size: 9,\n decimals: 2,\n },\n ],\n })\n\n input = {\n bar: 'a',\n baz: 10,\n }\n })\n\n it('should return input by default', async () => {\n const res = await callFoo(input)\n assert.deepStrictEqual(res, input)\n })\n\n it('should register mock', async () => {\n jt400.mockPgm('foo', (input) => {\n input.baz = 20\n return input\n })\n\n const res = await callFoo(input)\n assert.strictEqual(res.baz, 20)\n })\n })\n\n describe('should mock ifs', () => {\n it('should get metadata', async () => {\n const metadata = await jt400.ifs().fileMetadata('/foo/bar.txt')\n assert.deepStrictEqual(metadata, {\n exists: false,\n length: 0,\n })\n })\n })\n\n describe('execute', () => {\n it('should get metadata', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const metadata = await statement.metadata()\n\n assert.deepStrictEqual(metadata, [\n {\n name: 'ID',\n typeName: 'DECIMAL',\n precision: 15,\n scale: 0,\n },\n {\n name: 'NAME',\n typeName: 'VARCHAR',\n precision: 300,\n scale: 0,\n },\n {\n name: 'START',\n typeName: 'DATE',\n precision: 10,\n scale: 0,\n },\n {\n name: 'STAMP',\n typeName: 'TIMESTAMP',\n precision: 26,\n scale: 6,\n },\n ])\n })\n\n it('should get result as stream', (done) => {\n jt400\n .execute('select * from testtbl')\n .then((statement) => {\n const stream = statement.asStream()\n let data = ''\n assert.strictEqual(statement.isQuery(), true)\n\n stream.on('data', (chunk) => {\n data += chunk\n })\n\n stream.on('end', () => {\n try {\n assert.strictEqual(\n data,\n '[[\"1234567891234\",\"Foo bar baz\",null,null]]',\n )\n done()\n } catch (err) {\n done(err)\n }\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get result as object stream', (done) => {\n jt400\n .execute('select * from testtbl')\n .then((statement) => statement.asObjectStream())\n .then((stream) => {\n const data: any[] = []\n stream.on('data', (chunk) => {\n data.push(chunk)\n })\n\n stream.on('end', () => {\n try {\n assert.deepStrictEqual(data, [\n {\n ID: '1234567891234',\n NAME: 'Foo bar baz',\n START: null,\n STAMP: null,\n },\n ])\n done()\n } catch (err) {\n done(err)\n }\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get result as array', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const data = await statement.asArray()\n assert.deepStrictEqual(data, [\n ['1234567891234', 'Foo bar baz', null, null],\n ])\n })\n it('should get result as iterable', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const rows = statement.asIterable()\n let count = 0\n for await (const row of rows) {\n count++\n assert.deepStrictEqual(row, [\n '1234567891234',\n 'Foo bar baz',\n null,\n null,\n ])\n }\n assert.strictEqual(count, 1)\n })\n\n it('should pipe to JSONStream', (done) => {\n let i = 1\n const data: any[] = []\n\n while (i < 110) {\n data.push(i++)\n }\n\n data\n .reduce((memo, item) => {\n return memo.then(() =>\n jt400.update('insert into testtbl (NAME) values(?)', ['n' + item]),\n )\n }, Promise.resolve())\n .then(() => jt400.execute('select NAME from testtbl order by ID'))\n .then((statement) => statement.asStream().pipe(parse([true])))\n .then((stream) => {\n const res: any[] = []\n stream.on('data', (row) => {\n res.push(row)\n })\n\n stream.on('end', () => {\n assert.strictEqual(res.length, 110)\n res.forEach((row, index) => {\n if (index > 0) {\n assert.deepStrictEqual(row[0], 'n' + index)\n }\n })\n done()\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get update count', async () => {\n const statement = await jt400.execute('update testtbl set NAME=?', [\n 'testing',\n ])\n assert.strictEqual(statement.isQuery(), false)\n const updated = await statement.updated()\n assert.strictEqual(updated, 1)\n })\n\n it('should close stream', (done) => {\n let i = 1\n const data: any[] = []\n\n while (i < 40) {\n data.push(i++)\n }\n\n Promise.all(\n data.map((item) =>\n jt400.update('insert into testtbl (NAME) values(?)', ['n' + item]),\n ),\n )\n .then(() => {\n const res: any[] = []\n return jt400.execute('select NAME from testtbl').then((statement) => {\n const stream = statement\n .asStream({\n bufferSize: 10,\n })\n .pipe(parse([true]))\n\n stream.on('data', (row) => {\n res.push(row)\n if (res.length >= 10) {\n statement.close()\n }\n })\n\n stream.on('end', () => {\n assert.ok(res.length < 21)\n done()\n })\n\n stream.on('error', done)\n })\n })\n .catch(done)\n })\n })\n\n describe('metadata', () => {\n it('should return table metadata as stream', (done) => {\n const stream = jt400.getTablesAsStream({\n schema: 'PUBLIC',\n })\n\n const schema: any[] = []\n stream.on('data', (data) => {\n schema.push(data)\n })\n\n stream.on('end', () => {\n assert.deepStrictEqual(schema, [\n {\n schema: 'PUBLIC',\n table: 'TESTTBL',\n remarks: '',\n },\n ])\n done()\n })\n\n stream.on('error', done)\n })\n\n it('should return columns', async () => {\n const res = await jt400.getColumns({\n schema: 'PUBLIC',\n table: 'TESTTBL',\n })\n\n assert.deepStrictEqual(res, [\n {\n name: 'ID',\n typeName: 'DECIMAL',\n precision: 15,\n scale: 0,\n },\n {\n name: 'NAME',\n typeName: 'VARCHAR',\n precision: 300,\n scale: 0,\n },\n {\n name: 'START',\n typeName: 'DATE',\n precision: 10,\n scale: 0,\n },\n {\n name: 'STAMP',\n typeName: 'TIMESTAMP',\n precision: 26,\n scale: 0,\n },\n ])\n })\n\n it('should return primary key', async () => {\n const res = await jt400.getPrimaryKeys({\n table: 'TESTTBL',\n })\n\n assert.strictEqual(res.length, 1)\n assert.strictEqual(res[0].name, 'ID')\n })\n })\n\n describe('transaction', () => {\n it('should commit', () => {\n let rowId\n return jt400\n .transaction((transaction) => {\n return transaction\n .insertAndGetId(\n \"insert into testtbl (NAME) values('Transaction 1')\",\n )\n .then((res) => {\n rowId = res\n return transaction.update(\n \"update testtbl set NAME='Transaction 2' where id=?\",\n [rowId],\n )\n })\n })\n .then(() =>\n jt400.query<any>('select NAME from testtbl where id=?', [rowId]),\n )\n .then((res) => {\n assert.deepStrictEqual(res[0].NAME, 'Transaction 2')\n })\n })\n\n it('should rollback', () => {\n const fakeError = new Error('fake error')\n let rowId\n return jt400\n .transaction((transaction) => {\n return transaction\n .insertAndGetId(\n \"insert into testtbl (NAME) values('Transaction 1')\",\n )\n .then((res) => {\n rowId = res\n throw fakeError\n })\n })\n .catch((err) => {\n assert.strictEqual(err, fakeError)\n })\n .then(() => jt400.query('select NAME from testtbl where id=?', [rowId]))\n .then((res) => {\n assert.strictEqual(res.length, 0)\n })\n })\n\n it('should batch update', async () => {\n const res = await jt400.transaction((transaction) => {\n return transaction.batchUpdate('insert into testtbl (NAME) values(?)', [\n ['Foo'],\n ['Bar'],\n ])\n })\n assert.deepStrictEqual(res, [1, 1])\n })\n })\n})\n"],"mappings":"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","names":["assert","input"]}
1
+ {"version":3,"sources":["../../ts-src/unit-test/hsql-spec.ts"],"sourcesContent":["import { useInMemoryDb } from '../index.js'\nimport { Readable } from 'stream'\nimport { parse } from 'JSONStream'\nimport assert from 'assert'\n\nconst jt400 = useInMemoryDb()\ndescribe('hsql in memory', () => {\n beforeEach(() => {\n return jt400\n .update(\n 'create table testtbl (ID DECIMAL(15, 0) GENERATED BY DEFAULT AS IDENTITY(START WITH 1234567891234), NAME VARCHAR(300), START DATE, STAMP TIMESTAMP, PRIMARY KEY(ID))',\n )\n .then(() =>\n jt400.update(\"insert into testtbl (NAME) values('Foo bar baz')\"),\n )\n })\n\n afterEach(() => {\n return jt400.update('drop table testtbl')\n })\n\n describe('query', () => {\n it('should be in memory', () => {\n assert.strictEqual(jt400.isInMemory(), true)\n })\n\n it('should select form testtbl', async () => {\n const res = await jt400.query<any>('select * from testtbl')\n assert.strictEqual(res.length, 1)\n })\n\n it('should use column alias when selecting', async () => {\n const res = await jt400.query<any>('select ID, NAME MYNAME from testtbl')\n assert.ok('MYNAME' in res[0])\n })\n\n it('should query as stream', (done) => {\n const stream = jt400.createReadStream('select * from testtbl')\n const jsonStream = stream.pipe(parse([true]))\n const data: any[] = []\n\n jsonStream.on('data', (row) => {\n data.push(row)\n })\n\n jsonStream.on('end', () => {\n try {\n assert.strictEqual(data.length, 1)\n done()\n } catch (e) {\n done(e)\n }\n })\n\n stream.on('error', done)\n })\n\n it('should fail queryAsStream with oops error', (done) => {\n const sql = 'select * from testtbl'\n const params = ['a']\n const stream = jt400.createReadStream(sql, params)\n const jsonStream = stream.pipe(parse([true]))\n\n jsonStream.on('end', () => {\n stream.emit('error', new Error('wrong error'))\n })\n\n stream.on('error', (err) => {\n try {\n assert.strictEqual(\n err.message,\n 'Argumento incorrecto en una llamada JDBC: parameter index out of range: 1',\n )\n done()\n } catch (e) {\n done(e)\n }\n })\n })\n })\n\n describe('insert', () => {\n it('should insert and return id', async () => {\n const res = await jt400.insertAndGetId(\n 'insert into testtbl (NAME) values(?)',\n ['foo'],\n )\n assert.strictEqual(res, 1234567891235)\n })\n\n it('should insert list', async () => {\n const res = await jt400.insertList('testtbl', 'ID', [\n {\n NAME: 'foo',\n },\n {\n NAME: 'bar',\n },\n ])\n\n assert.deepStrictEqual(res, [1234567891235, 1234567891236])\n\n const select = await jt400.query('select * from testtbl')\n assert.strictEqual(select.length, 3)\n })\n\n it('should insert date and timestamp', async () => {\n const ids = await jt400.insertList('testtbl', 'ID', [\n {\n START: new Date().toISOString().substr(0, 10),\n STAMP: new Date(),\n },\n ])\n\n assert.deepStrictEqual(ids, [1234567891235])\n })\n\n it('should create write stream', (done) => {\n const dataStream = new Readable({ objectMode: true })\n let c = 97\n dataStream._read = function () {\n dataStream.push([String.fromCharCode(c++)])\n if (c > 'z'.charCodeAt(0)) {\n dataStream.push(null)\n }\n }\n\n const ws = jt400.createWriteStream(\n 'insert into testtbl (NAME) VALUES(?)',\n { bufferSize: 10 },\n )\n dataStream\n .pipe(ws)\n .on('finish', () => {\n jt400\n .query('select name from testtbl')\n .then((res) => {\n assert.strictEqual(res.length, 27)\n })\n .then(done, done)\n })\n .on('error', done)\n })\n })\n\n describe('batch update', () => {\n it('should insert batch', async () => {\n const res = await jt400.batchUpdate(\n 'insert into testtbl (NAME,START) values(?, ?)',\n [\n ['foo', '2015-01-02'],\n ['bar', '2015-03-04'],\n ],\n )\n\n assert.deepStrictEqual(res, [1, 1])\n })\n\n it('should fail insert batch with oops-error', () => {\n const sql = 'insert into testtbl (NAME,START) values(?, ?)'\n const params = [\n ['foo', '2015-01-02'],\n ['bar', '2015-03-04'],\n ['a', 'b', 'c', 'd'],\n ]\n\n return jt400\n .batchUpdate(sql, params)\n .then(() => {\n throw new Error('wrong error')\n })\n .catch((error) => {\n assert.strictEqual(\n error.message,\n 'excepción de datos: formato fecha/hora incorrecto',\n )\n assert.ok(error.cause.stack.includes('JdbcJsonClient.setParams'))\n assert.strictEqual(error.context.sql, sql)\n assert.deepStrictEqual(error.context.params, params)\n assert.strictEqual(error.category, 'ProgrammerError')\n })\n })\n })\n\n describe('pgm call mock', () => {\n let callFoo\n let input\n\n beforeEach(() => {\n callFoo = jt400.defineProgram({\n programName: 'foo',\n paramsSchema: [\n {\n name: 'bar',\n size: 10,\n },\n {\n name: 'baz',\n size: 9,\n decimals: 2,\n },\n ],\n })\n\n input = {\n bar: 'a',\n baz: 10,\n }\n })\n\n it('should return input by default', async () => {\n const res = await callFoo(input)\n assert.deepStrictEqual(res, input)\n })\n\n it('should register mock', async () => {\n jt400.mockPgm('foo', (input) => {\n input.baz = 20\n return input\n })\n\n const res = await callFoo(input)\n assert.strictEqual(res.baz, 20)\n })\n })\n\n describe('should mock ifs', () => {\n it('should get metadata', async () => {\n const metadata = await jt400.ifs().fileMetadata('/foo/bar.txt')\n assert.deepStrictEqual(metadata, {\n exists: false,\n length: 0,\n })\n })\n })\n\n describe('execute', () => {\n it('should get metadata', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const metadata = await statement.metadata()\n\n assert.deepStrictEqual(metadata, [\n {\n name: 'ID',\n typeName: 'DECIMAL',\n precision: 15,\n scale: 0,\n },\n {\n name: 'NAME',\n typeName: 'VARCHAR',\n precision: 300,\n scale: 0,\n },\n {\n name: 'START',\n typeName: 'DATE',\n precision: 10,\n scale: 0,\n },\n {\n name: 'STAMP',\n typeName: 'TIMESTAMP',\n precision: 26,\n scale: 6,\n },\n ])\n })\n\n it('should get result as stream', (done) => {\n jt400\n .execute('select * from testtbl')\n .then((statement) => {\n const stream = statement.asStream()\n let data = ''\n assert.strictEqual(statement.isQuery(), true)\n\n stream.on('data', (chunk) => {\n data += chunk\n })\n\n stream.on('end', () => {\n try {\n assert.strictEqual(\n data,\n '[[\"1234567891234\",\"Foo bar baz\",null,null]]',\n )\n done()\n } catch (err) {\n done(err)\n }\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get result as object stream', (done) => {\n jt400\n .execute('select * from testtbl')\n .then((statement) => statement.asObjectStream())\n .then((stream) => {\n const data: any[] = []\n stream.on('data', (chunk) => {\n data.push(chunk)\n })\n\n stream.on('end', () => {\n try {\n assert.deepStrictEqual(data, [\n {\n ID: '1234567891234',\n NAME: 'Foo bar baz',\n START: null,\n STAMP: null,\n },\n ])\n done()\n } catch (err) {\n done(err)\n }\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get result as array', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const data = await statement.asArray()\n assert.deepStrictEqual(data, [\n ['1234567891234', 'Foo bar baz', null, null],\n ])\n })\n it('should get result as iterable', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const rows = statement.asIterable()\n let count = 0\n for await (const row of rows) {\n count++\n assert.deepStrictEqual(row, [\n '1234567891234',\n 'Foo bar baz',\n null,\n null,\n ])\n }\n assert.strictEqual(count, 1)\n })\n\n it('should pipe to JSONStream', (done) => {\n let i = 1\n const data: any[] = []\n\n while (i < 110) {\n data.push(i++)\n }\n\n data\n .reduce((memo, item) => {\n return memo.then(() =>\n jt400.update('insert into testtbl (NAME) values(?)', ['n' + item]),\n )\n }, Promise.resolve())\n .then(() => jt400.execute('select NAME from testtbl order by ID'))\n .then((statement) => statement.asStream().pipe(parse([true])))\n .then((stream) => {\n const res: any[] = []\n stream.on('data', (row) => {\n res.push(row)\n })\n\n stream.on('end', () => {\n assert.strictEqual(res.length, 110)\n res.forEach((row, index) => {\n if (index > 0) {\n assert.deepStrictEqual(row[0], 'n' + index)\n }\n })\n done()\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get update count', async () => {\n const statement = await jt400.execute('update testtbl set NAME=?', [\n 'testing',\n ])\n assert.strictEqual(statement.isQuery(), false)\n const updated = await statement.updated()\n assert.strictEqual(updated, 1)\n })\n\n it('should close stream', (done) => {\n let i = 1\n const data: any[] = []\n\n while (i < 40) {\n data.push(i++)\n }\n\n Promise.all(\n data.map((item) =>\n jt400.update('insert into testtbl (NAME) values(?)', ['n' + item]),\n ),\n )\n .then(() => {\n const res: any[] = []\n return jt400.execute('select NAME from testtbl').then((statement) => {\n const stream = statement\n .asStream({\n bufferSize: 10,\n })\n .pipe(parse([true]))\n\n stream.on('data', (row) => {\n res.push(row)\n if (res.length >= 10) {\n statement.close()\n }\n })\n\n stream.on('end', () => {\n assert.ok(res.length < 21)\n done()\n })\n\n stream.on('error', done)\n })\n })\n .catch(done)\n })\n })\n\n describe('metadata', () => {\n it('should return table metadata as stream', (done) => {\n const stream = jt400.getTablesAsStream({\n schema: 'PUBLIC',\n })\n\n const schema: any[] = []\n stream.on('data', (data) => {\n schema.push(data)\n })\n\n stream.on('end', () => {\n assert.deepStrictEqual(schema, [\n {\n schema: 'PUBLIC',\n table: 'TESTTBL',\n remarks: '',\n },\n ])\n done()\n })\n\n stream.on('error', done)\n })\n\n it('should return columns', async () => {\n const res = await jt400.getColumns({\n schema: 'PUBLIC',\n table: 'TESTTBL',\n })\n\n assert.deepStrictEqual(res, [\n {\n name: 'ID',\n typeName: 'DECIMAL',\n precision: 15,\n scale: 0,\n },\n {\n name: 'NAME',\n typeName: 'VARCHAR',\n precision: 300,\n scale: 0,\n },\n {\n name: 'START',\n typeName: 'DATE',\n precision: 10,\n scale: 0,\n },\n {\n name: 'STAMP',\n typeName: 'TIMESTAMP',\n precision: 26,\n scale: 0,\n },\n ])\n })\n\n it('should return primary key', async () => {\n const res = await jt400.getPrimaryKeys({\n table: 'TESTTBL',\n })\n\n assert.strictEqual(res.length, 1)\n assert.strictEqual(res[0].name, 'ID')\n })\n })\n\n describe('transaction', () => {\n it('should commit', () => {\n let rowId\n return jt400\n .transaction((transaction) => {\n return transaction\n .insertAndGetId(\n \"insert into testtbl (NAME) values('Transaction 1')\",\n )\n .then((res) => {\n rowId = res\n return transaction.update(\n \"update testtbl set NAME='Transaction 2' where id=?\",\n [rowId],\n )\n })\n })\n .then(() =>\n jt400.query<any>('select NAME from testtbl where id=?', [rowId]),\n )\n .then((res) => {\n assert.deepStrictEqual(res[0].NAME, 'Transaction 2')\n })\n })\n\n it('should rollback', () => {\n const fakeError = new Error('fake error')\n let rowId\n return jt400\n .transaction((transaction) => {\n return transaction\n .insertAndGetId(\n \"insert into testtbl (NAME) values('Transaction 1')\",\n )\n .then((res) => {\n rowId = res\n throw fakeError\n })\n })\n .catch((err) => {\n assert.strictEqual(err, fakeError)\n })\n .then(() => jt400.query('select NAME from testtbl where id=?', [rowId]))\n .then((res) => {\n assert.strictEqual(res.length, 0)\n })\n })\n\n it('should batch update', async () => {\n const res = await jt400.transaction((transaction) => {\n return transaction.batchUpdate('insert into testtbl (NAME) values(?)', [\n ['Foo'],\n ['Bar'],\n ])\n })\n assert.deepStrictEqual(res, [1, 1])\n })\n })\n})\n"],"mappings":"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","names":["assert","input"]}
@@ -3,6 +3,7 @@ interface ResultStream {
3
3
  read: () => Promise<string>;
4
4
  }
5
5
  interface StatementWrap {
6
+ prepare: (sql: string) => Promise<void>;
6
7
  isQuerySync: () => boolean;
7
8
  close: () => Promise<void>;
8
9
  updated: () => Promise<number>;
@@ -25,6 +26,14 @@ interface JDBCConnection {
25
26
  update: (sql: string, jsonParams: string) => Promise<number>;
26
27
  batchUpdate: (sql: string, jsonParams: string) => Promise<number[]>;
27
28
  insertAndGetId: (sql: string, jsonParams: string) => Promise<number>;
29
+ commit: () => Promise<void>;
30
+ rollback: () => Promise<void>;
31
+ createStatement: () => Promise<StatementWrap>;
32
+ queryAsCursor: (sql: string, jsonParams: string, fetchSize: number, trim: boolean) => Promise<CursorWrap>;
33
+ }
34
+ interface CursorWrap {
35
+ next: () => Promise<string>;
36
+ close: () => Promise<void>;
28
37
  }
29
38
  interface Transaction extends JDBCConnection {
30
39
  commit: () => Promise<void>;
@@ -76,4 +85,4 @@ interface JT400 extends JDBCConnection {
76
85
  close: () => Promise<void>;
77
86
  }
78
87
 
79
- export type { AS400Message, IfsReadStream, IfsWriteStream, JDBCConnection, JT400, KeyedDataQ, KeyedDataQueueResponse, MessageFileHandler, MessageQ, Pgm, ResultStream, StatementWrap, TablesReadStream, Transaction };
88
+ export type { AS400Message, CursorWrap, IfsReadStream, IfsWriteStream, JDBCConnection, JT400, KeyedDataQ, KeyedDataQueueResponse, MessageFileHandler, MessageQ, Pgm, ResultStream, StatementWrap, TablesReadStream, Transaction };
@@ -4,25 +4,25 @@ var getFilename = () => fileURLToPath(import.meta.url);
4
4
  var getDirname = () => path.dirname(getFilename());
5
5
  var __dirname = /* @__PURE__ */ getDirname();
6
6
  var __filename = /* @__PURE__ */ getFilename();
7
- import { appendClasspath, ensureJvm, importClass } from "java-bridge";
7
+ import java from "java-bridge";
8
8
  import { join as joinPath } from "path";
9
9
  const initJavaBridge = () => {
10
10
  const JAR_DIR = joinPath(__dirname, "/../../java/lib");
11
- appendClasspath([
11
+ java.appendClasspath([
12
12
  joinPath(JAR_DIR, "jt400.jar"),
13
13
  joinPath(JAR_DIR, "jt400wrap.jar"),
14
14
  joinPath(JAR_DIR, "json-simple-1.1.1.jar"),
15
15
  joinPath(JAR_DIR, "hsqldb.jar")
16
16
  ]);
17
- ensureJvm({
17
+ java.ensureJvm({
18
18
  opts: [
19
19
  "-Xrs",
20
20
  "-Dcom.ibm.as400.access.AS400.guiAvailable=false",
21
21
  "--enable-native-access=ALL-UNNAMED"
22
22
  ]
23
23
  });
24
- const JT400Class = importClass("nodejt400.JT400");
25
- const HsqlClientClass = importClass("nodejt400.HsqlClient");
24
+ const JT400Class = java.importClass("nodejt400.JT400");
25
+ const HsqlClientClass = java.importClass("nodejt400.HsqlClient");
26
26
  return {
27
27
  createConnection: (config) => JT400Class.createConnection(config),
28
28
  // async
@@ -1 +1 @@
1
- {"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../../ts-src/java/index.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","// src/common/libs/jt400/javaBridge.ts\nimport { appendClasspath, ensureJvm, importClass } from 'java-bridge'\nimport { join as joinPath } from 'path'\nimport type { JT400 } from './JT400'\n\nexport interface JavaBridge {\n createConnection: (config: string) => Promise<JT400>\n createPool: (config: string) => JT400\n createInMemoryConnection: () => JT400\n}\n\nexport const initJavaBridge = (): JavaBridge => {\n const JAR_DIR = joinPath(__dirname, '/../../java/lib')\n\n appendClasspath([\n joinPath(JAR_DIR, 'jt400.jar'),\n joinPath(JAR_DIR, 'jt400wrap.jar'),\n joinPath(JAR_DIR, 'json-simple-1.1.1.jar'),\n joinPath(JAR_DIR, 'hsqldb.jar'),\n ])\n\n // Opciones JVM (esto te funcionó)\n ensureJvm({\n opts: [\n '-Xrs',\n '-Dcom.ibm.as400.access.AS400.guiAvailable=false',\n '--enable-native-access=ALL-UNNAMED',\n ],\n })\n\n // Clases del wrapper Java\n const JT400Class: any = importClass('nodejt400.JT400')\n const HsqlClientClass: any = importClass('nodejt400.HsqlClient')\n\n return {\n createConnection: (config: string) =>\n JT400Class.createConnection(config) as Promise<JT400>, // async\n createPool: (config: string) => JT400Class.createPoolSync(config) as JT400, // sync si tu wrapper lo expone\n createInMemoryConnection: () => {\n // En java-bridge se instancia con `new`\n const instance = new HsqlClientClass()\n return instance as JT400\n },\n }\n}\n\n// export const initNewJavaBridge = (): JavaBridge => {\n// ensureJvm({\n// // This option should not have any effect when not using electron or not having the application packaged.\n// // https://github.com/MarkusJx/node-java-bridge?tab=readme-ov-file#notes-on-electron\n// isPackagedElectron: true,\n\n// opts: [\n// '-Xrs',\n// '-Dcom.ibm.as400.access.AS400.guiAvailable=false', // Removes gui prompts\n// ],\n// })\n// appendClasspath(\n// ['jt400.jar', 'jt400wrap.jar', 'json-simple-1.1.1.jar', 'hsqldb.jar'].map(\n// (jar) => joinPath(currentDir, '/../../java/lib/', jar)\n// )\n// )\n\n// const JT400Class = importClass('nodejt400.JT400')\n// return {\n// createConnection: (config: string) => JT400Class.createConnection(config),\n// createInMemoryConnection: () => {\n// const HsqlClientClass = importClass('nodejt400.HsqlClient')\n// const instance: any = new HsqlClientClass()\n// return instance\n// },\n// createPool: (config: string) => JT400Class.createPoolSync(config),\n// bufferToJavaType: (buffer: Buffer) => buffer,\n// javaTypeToBuffer: (javaType: any) => javaType,\n// }\n// }\n"],"mappings":"AACA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAE9B,IAAM,cAAc,MAAM,cAAc,YAAY,GAAG;AACvD,IAAM,aAAa,MAAM,KAAK,QAAQ,YAAY,CAAC;AAE5C,IAAM,YAA4B,2BAAW;AAC7C,IAAM,aAA6B,4BAAY;ACPtD,SAAS,iBAAiB,WAAW,mBAAmB;AACxD,SAAS,QAAQ,gBAAgB;AAS1B,MAAM,iBAAiB,MAAkB;AAC9C,QAAM,UAAU,SAAS,WAAW,iBAAiB;AAErD,kBAAgB;AAAA,IACd,SAAS,SAAS,WAAW;AAAA,IAC7B,SAAS,SAAS,eAAe;AAAA,IACjC,SAAS,SAAS,uBAAuB;AAAA,IACzC,SAAS,SAAS,YAAY;AAAA,EAChC,CAAC;AAGD,YAAU;AAAA,IACR,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AAGD,QAAM,aAAkB,YAAY,iBAAiB;AACrD,QAAM,kBAAuB,YAAY,sBAAsB;AAE/D,SAAO;AAAA,IACL,kBAAkB,CAAC,WACjB,WAAW,iBAAiB,MAAM;AAAA;AAAA,IACpC,YAAY,CAAC,WAAmB,WAAW,eAAe,MAAM;AAAA;AAAA,IAChE,0BAA0B,MAAM;AAE9B,YAAM,WAAW,IAAI,gBAAgB;AACrC,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../../ts-src/java/index.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","// src/common/libs/jt400/javaBridge.ts\nimport java from 'java-bridge'\nimport { join as joinPath } from 'path'\nimport type { JT400 } from './JT400.js'\n\nexport interface JavaBridge {\n createConnection: (config: string) => Promise<JT400>\n createPool: (config: string) => JT400\n createInMemoryConnection: () => JT400\n}\n\nexport const initJavaBridge = (): JavaBridge => {\n const JAR_DIR = joinPath(__dirname, '/../../java/lib')\n\n java.appendClasspath([\n joinPath(JAR_DIR, 'jt400.jar'),\n joinPath(JAR_DIR, 'jt400wrap.jar'),\n joinPath(JAR_DIR, 'json-simple-1.1.1.jar'),\n joinPath(JAR_DIR, 'hsqldb.jar'),\n ])\n\n // Opciones JVM (esto te funcionó)\n java.ensureJvm({\n opts: [\n '-Xrs',\n '-Dcom.ibm.as400.access.AS400.guiAvailable=false',\n '--enable-native-access=ALL-UNNAMED',\n ],\n })\n\n // Clases del wrapper Java\n const JT400Class = java.importClass('nodejt400.JT400')\n const HsqlClientClass = java.importClass('nodejt400.HsqlClient')\n\n return {\n createConnection: (config: string) =>\n JT400Class.createConnection(config) as Promise<JT400>, // async\n createPool: (config: string) => JT400Class.createPoolSync(config) as JT400, // sync si tu wrapper lo expone\n createInMemoryConnection: () => {\n // En java-bridge se instancia con `new`\n const instance = new HsqlClientClass()\n return instance as unknown as JT400\n },\n }\n}\n\n// export const initNewJavaBridge = (): JavaBridge => {\n// ensureJvm({\n// // This option should not have any effect when not using electron or not having the application packaged.\n// // https://github.com/MarkusJx/node-java-bridge?tab=readme-ov-file#notes-on-electron\n// isPackagedElectron: true,\n\n// opts: [\n// '-Xrs',\n// '-Dcom.ibm.as400.access.AS400.guiAvailable=false', // Removes gui prompts\n// ],\n// })\n// appendClasspath(\n// ['jt400.jar', 'jt400wrap.jar', 'json-simple-1.1.1.jar', 'hsqldb.jar'].map(\n// (jar) => joinPath(currentDir, '/../../java/lib/', jar)\n// )\n// )\n\n// const JT400Class = importClass('nodejt400.JT400')\n// return {\n// createConnection: (config: string) => JT400Class.createConnection(config),\n// createInMemoryConnection: () => {\n// const HsqlClientClass = importClass('nodejt400.HsqlClient')\n// const instance: any = new HsqlClientClass()\n// return instance\n// },\n// createPool: (config: string) => JT400Class.createPoolSync(config),\n// bufferToJavaType: (buffer: Buffer) => buffer,\n// javaTypeToBuffer: (javaType: any) => javaType,\n// }\n// }\n"],"mappings":"AACA,OAAO,UAAU;AACjB,SAAS,qBAAqB;AAE9B,IAAM,cAAc,MAAM,cAAc,YAAY,GAAG;AACvD,IAAM,aAAa,MAAM,KAAK,QAAQ,YAAY,CAAC;AAE5C,IAAM,YAA4B,2BAAW;AAC7C,IAAM,aAA6B,4BAAY;ACPtD,OAAO,UAAU;AACjB,SAAS,QAAQ,gBAAgB;AAS1B,MAAM,iBAAiB,MAAkB;AAC9C,QAAM,UAAU,SAAS,WAAW,iBAAiB;AAErD,OAAK,gBAAgB;AAAA,IACnB,SAAS,SAAS,WAAW;AAAA,IAC7B,SAAS,SAAS,eAAe;AAAA,IACjC,SAAS,SAAS,uBAAuB;AAAA,IACzC,SAAS,SAAS,YAAY;AAAA,EAChC,CAAC;AAGD,OAAK,UAAU;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AAGD,QAAM,aAAa,KAAK,YAAY,iBAAiB;AACrD,QAAM,kBAAkB,KAAK,YAAY,sBAAsB;AAE/D,SAAO;AAAA,IACL,kBAAkB,CAAC,WACjB,WAAW,iBAAiB,MAAM;AAAA;AAAA,IACpC,YAAY,CAAC,WAAmB,WAAW,eAAe,MAAM;AAAA;AAAA,IAChE,0BAA0B,MAAM;AAE9B,YAAM,WAAW,IAAI,gBAAgB;AACrC,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":[]}
@@ -11,6 +11,70 @@ function paramsToJson(params) {
11
11
  }
12
12
  const createBaseConnection = function(jdbcConnection, insertListFun, logger, inMemory) {
13
13
  const baseConnection = {
14
+ async commit() {
15
+ return jdbcConnection.commit().catch((err) => {
16
+ throw handleError({})(err);
17
+ });
18
+ },
19
+ async rollback() {
20
+ return jdbcConnection.rollback().catch((err) => {
21
+ throw handleError({})(err);
22
+ });
23
+ },
24
+ async createStatement() {
25
+ if (!jdbcConnection.createStatement) {
26
+ throw new Error(
27
+ "createStatement is not supported by this JDBCConnection"
28
+ );
29
+ }
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
+ });
77
+ },
14
78
  query(sql, params = [], options) {
15
79
  const jsonParams = paramsToJson(params);
16
80
  const trim = options && options.trim !== void 0 ? options.trim : true;
@@ -66,6 +130,9 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
66
130
  const isQuery = statement.isQuerySync();
67
131
  let stream;
68
132
  const stWrap = {
133
+ prepare(prepSql) {
134
+ return statement.prepare(prepSql);
135
+ },
69
136
  isQuery() {
70
137
  return isQuery;
71
138
  },
@@ -168,10 +235,9 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
168
235
  },
169
236
  close() {
170
237
  if (stream) {
171
- stream.close();
172
- } else {
173
- return statement.close();
238
+ return stream.close();
174
239
  }
240
+ return statement.close();
175
241
  }
176
242
  };
177
243
  return stWrap;
@@ -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 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 return jdbcConnection\n .execute(sql, jsonParams)\n .then((statement) => {\n const isQuery = statement.isQuerySync()\n let stream\n const stWrap = {\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 stream.close()\n } else {\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 } 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":[]}
@@ -11,7 +11,9 @@ interface BLOB {
11
11
  }
12
12
  type Param = string | number | Date | null | CLOB | BLOB;
13
13
  interface QueryOptions {
14
- trim: boolean;
14
+ trim?: boolean;
15
+ cursor?: boolean;
16
+ fetchSize?: number;
15
17
  }
16
18
  interface Metadata {
17
19
  name: string;
@@ -20,6 +22,7 @@ interface Metadata {
20
22
  scale: number;
21
23
  }
22
24
  interface Statement {
25
+ prepare: (sql: string) => Promise<void>;
23
26
  isQuery: () => boolean;
24
27
  metadata: () => Promise<Metadata[]>;
25
28
  asArray: () => Promise<string[][]>;
@@ -30,7 +33,9 @@ interface Statement {
30
33
  close: Close;
31
34
  }
32
35
  type Execute = (sql: string, params?: Param[]) => Promise<Statement>;
33
- type Query = <T>(sql: string, params?: Param[], options?: QueryOptions) => Promise<T[]>;
36
+ type Query = {
37
+ <T>(sql: string, params?: Param[] | undefined, options?: QueryOptions, callback?: (error: any, cursor: any) => void): Promise<T[]>;
38
+ };
34
39
  type Update = (sql: string, params?: Param[]) => Promise<number>;
35
40
  type CreateReadStream = (sql: string, params?: Param[]) => Readable;
36
41
  type InsertAndGetId = (sql: string, params?: Param[]) => Promise<number>;
@@ -51,6 +56,9 @@ interface BaseConnection {
51
56
  createWriteStream: CreateWriteStream;
52
57
  batchUpdate: BatchUpdate;
53
58
  execute: Execute;
59
+ commit: () => Promise<void>;
60
+ rollback: () => Promise<void>;
61
+ createStatement: () => Promise<Statement>;
54
62
  }
55
63
 
56
64
  export type { BLOB, BaseConnection, BatchUpdate, CLOB, Close, CreateReadStream, CreateWriteStream, Execute, InsertAndGetId, InsertList, Metadata, Param, Query, QueryOptions, Statement, 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}\n\nexport interface Metadata {\n name: string\n typeName: string\n precision: number\n scale: number\n}\nexport interface Statement {\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 = <T>(\n sql: string,\n params?: Param[],\n options?: QueryOptions,\n) => Promise<T[]>\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"],"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 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,5 +1,5 @@
1
1
  import { deprecate } from "util";
2
- import { createBaseConnection } from "./baseConnection";
2
+ import { createBaseConnection } from "./baseConnection.js";
3
3
  import { handleError } from "./handleError.js";
4
4
  import { ifs as createIfs } from "./ifs/index.js";
5
5
  import { JdbcStream } from "./jdbcstream.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ts-src/lib/connection.ts"],"sourcesContent":["import { deprecate } from 'util'\nimport { JT400 } from '../java/JT400'\nimport { createBaseConnection } from './baseConnection'\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 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,6 +1,6 @@
1
1
  import { basename, dirname } from "path";
2
- import { IfsReadStream } from "./read_stream";
3
- import { IfsWriteStream } from "./write_stream";
2
+ import { IfsReadStream } from "./read_stream.js";
3
+ import { IfsWriteStream } from "./write_stream.js";
4
4
  function ifs(connection) {
5
5
  return {
6
6
  createReadStream: function(fileName) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../ts-src/lib/ifs/index.ts"],"sourcesContent":["import { basename, dirname } from 'path'\nimport { JT400 } from '../../java/JT400'\nimport { IfsReadStream } from './read_stream'\nimport { Ifs } from './types'\nimport { IfsWriteStream } from './write_stream'\n\nexport function ifs(\n connection: JT400,\n): Ifs {\n return {\n createReadStream: function (fileName: string | Promise<string>) {\n const javaStream = Promise.resolve(fileName).then(function (file) {\n return connection.createIfsReadStream(file)\n })\n return new IfsReadStream({\n ifsReadStream: javaStream\n })\n },\n createWriteStream: function (\n fileName: string | Promise<string>,\n options: { append: boolean; ccsid?: number } = { append: false },\n ) {\n const javaStream = Promise.resolve(fileName).then(function (file) {\n const folderPath = dirname(file)\n const fileName = basename(file)\n return connection.createIfsWriteStream(\n folderPath,\n fileName,\n options.append,\n options.ccsid,\n )\n })\n return new IfsWriteStream({\n ifsWriteStream: javaStream\n })\n },\n listFiles: async (folderName: string) => {\n const files = await connection.listIfsFiles(folderName)\n return files || []\n },\n moveFile: (fileName: string, newFileName: string) =>\n connection.moveIfsFile(fileName, newFileName),\n deleteFile: (fileName: string) => connection.deleteIfsFile(fileName),\n fileMetadata: (fileName: string) =>\n connection.getIfsFileMetadata(fileName).then(JSON.parse),\n }\n}\n"],"mappings":"AAAA,SAAS,UAAU,eAAe;AAElC,SAAS,qBAAqB;AAE9B,SAAS,sBAAsB;AAExB,SAAS,IACd,YACK;AACL,SAAO;AAAA,IACL,kBAAkB,SAAU,UAAoC;AAC9D,YAAM,aAAa,QAAQ,QAAQ,QAAQ,EAAE,KAAK,SAAU,MAAM;AAChE,eAAO,WAAW,oBAAoB,IAAI;AAAA,MAC5C,CAAC;AACD,aAAO,IAAI,cAAc;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IACA,mBAAmB,SACjB,UACA,UAA+C,EAAE,QAAQ,MAAM,GAC/D;AACA,YAAM,aAAa,QAAQ,QAAQ,QAAQ,EAAE,KAAK,SAAU,MAAM;AAChE,cAAM,aAAa,QAAQ,IAAI;AAC/B,cAAMA,YAAW,SAAS,IAAI;AAC9B,eAAO,WAAW;AAAA,UAChB;AAAA,UACAA;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ;AAAA,QACV;AAAA,MACF,CAAC;AACD,aAAO,IAAI,eAAe;AAAA,QACxB,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,WAAW,OAAO,eAAuB;AACvC,YAAM,QAAQ,MAAM,WAAW,aAAa,UAAU;AACtD,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,IACA,UAAU,CAAC,UAAkB,gBAC3B,WAAW,YAAY,UAAU,WAAW;AAAA,IAC9C,YAAY,CAAC,aAAqB,WAAW,cAAc,QAAQ;AAAA,IACnE,cAAc,CAAC,aACb,WAAW,mBAAmB,QAAQ,EAAE,KAAK,KAAK,KAAK;AAAA,EAC3D;AACF;","names":["fileName"]}
1
+ {"version":3,"sources":["../../../ts-src/lib/ifs/index.ts"],"sourcesContent":["import { basename, dirname } from 'path'\nimport { JT400 } from '../../java/JT400'\nimport { IfsReadStream } from './read_stream.js'\nimport { Ifs } from './types'\nimport { IfsWriteStream } from './write_stream.js'\n\nexport function ifs(\n connection: JT400,\n): Ifs {\n return {\n createReadStream: function (fileName: string | Promise<string>) {\n const javaStream = Promise.resolve(fileName).then(function (file) {\n return connection.createIfsReadStream(file)\n })\n return new IfsReadStream({\n ifsReadStream: javaStream,\n })\n },\n createWriteStream: function (\n fileName: string | Promise<string>,\n options: { append: boolean; ccsid?: number } = { append: false },\n ) {\n const javaStream = Promise.resolve(fileName).then(function (file) {\n const folderPath = dirname(file)\n const fileName = basename(file)\n return connection.createIfsWriteStream(\n folderPath,\n fileName,\n options.append,\n options.ccsid,\n )\n })\n return new IfsWriteStream({\n ifsWriteStream: javaStream,\n })\n },\n listFiles: async (folderName: string) => {\n const files = await connection.listIfsFiles(folderName)\n return files || []\n },\n moveFile: (fileName: string, newFileName: string) =>\n connection.moveIfsFile(fileName, newFileName),\n deleteFile: (fileName: string) => connection.deleteIfsFile(fileName),\n fileMetadata: (fileName: string) =>\n connection.getIfsFileMetadata(fileName).then(JSON.parse),\n }\n}\n"],"mappings":"AAAA,SAAS,UAAU,eAAe;AAElC,SAAS,qBAAqB;AAE9B,SAAS,sBAAsB;AAExB,SAAS,IACd,YACK;AACL,SAAO;AAAA,IACL,kBAAkB,SAAU,UAAoC;AAC9D,YAAM,aAAa,QAAQ,QAAQ,QAAQ,EAAE,KAAK,SAAU,MAAM;AAChE,eAAO,WAAW,oBAAoB,IAAI;AAAA,MAC5C,CAAC;AACD,aAAO,IAAI,cAAc;AAAA,QACvB,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IACA,mBAAmB,SACjB,UACA,UAA+C,EAAE,QAAQ,MAAM,GAC/D;AACA,YAAM,aAAa,QAAQ,QAAQ,QAAQ,EAAE,KAAK,SAAU,MAAM;AAChE,cAAM,aAAa,QAAQ,IAAI;AAC/B,cAAMA,YAAW,SAAS,IAAI;AAC9B,eAAO,WAAW;AAAA,UAChB;AAAA,UACAA;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ;AAAA,QACV;AAAA,MACF,CAAC;AACD,aAAO,IAAI,eAAe;AAAA,QACxB,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA,IACA,WAAW,OAAO,eAAuB;AACvC,YAAM,QAAQ,MAAM,WAAW,aAAa,UAAU;AACtD,aAAO,SAAS,CAAC;AAAA,IACnB;AAAA,IACA,UAAU,CAAC,UAAkB,gBAC3B,WAAW,YAAY,UAAU,WAAW;AAAA,IAC9C,YAAY,CAAC,aAAqB,WAAW,cAAc,QAAQ;AAAA,IACnE,cAAc,CAAC,aACb,WAAW,mBAAmB,QAAQ,EAAE,KAAK,KAAK,KAAK;AAAA,EAC3D;AACF;","names":["fileName"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../ts-src/lib/ifs/read_stream.ts"],"sourcesContent":["import util from 'util'\nimport { Readable } from 'stream'\nimport { IfsReadStream as IfsReadStreamType } from '../../java/JT400'\n\ntype Opt = {\n ifsReadStream: Promise<IfsReadStreamType>\n}\n\nexport function IfsReadStream(opt: Opt) {\n Readable.call(this, { objectMode: false })\n this._ifsReadStream = opt.ifsReadStream\n}\n\nutil.inherits(IfsReadStream, Readable)\n\nIfsReadStream.prototype._read = function () {\n const streamPromise: Promise<IfsReadStreamType> = this._ifsReadStream\n streamPromise\n .then((stream) =>\n stream.read().then((res: any) => {\n // java-bridge convierte byte[] -> Buffer automáticamente\n if (res == null) {\n this.push(null) // EOF\n return\n }\n\n const buf =\n Buffer.isBuffer(res) ? res : res instanceof Uint8Array ? Buffer.from(res) : Buffer.from(res as any)\n\n if (buf.length === 0) {\n this.push(null) // EOF defensivo si llega vacío\n return\n }\n\n this.push(buf)\n }),\n )\n .catch((err: any) => this.emit('error', err))\n}"],"mappings":"AAAA,OAAO,UAAU;AACjB,SAAS,gBAAgB;AAOlB,SAAS,cAAc,KAAU;AACtC,WAAS,KAAK,MAAM,EAAE,YAAY,MAAM,CAAC;AACzC,OAAK,iBAAiB,IAAI;AAC5B;AAEA,KAAK,SAAS,eAAe,QAAQ;AAErC,cAAc,UAAU,QAAQ,WAAY;AAC1C,QAAM,gBAA4C,KAAK;AACvD,gBACG;AAAA,IAAK,CAAC,WACL,OAAO,KAAK,EAAE,KAAK,CAAC,QAAa;AAE/B,UAAI,OAAO,MAAM;AACf,aAAK,KAAK,IAAI;AACd;AAAA,MACF;AAEA,YAAM,MACJ,OAAO,SAAS,GAAG,IAAI,MAAM,eAAe,aAAa,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAU;AAEpG,UAAI,IAAI,WAAW,GAAG;AACpB,aAAK,KAAK,IAAI;AACd;AAAA,MACF;AAEA,WAAK,KAAK,GAAG;AAAA,IACf,CAAC;AAAA,EACH,EACC,MAAM,CAAC,QAAa,KAAK,KAAK,SAAS,GAAG,CAAC;AAChD;","names":[]}
1
+ {"version":3,"sources":["../../../ts-src/lib/ifs/read_stream.ts"],"sourcesContent":["import util from 'util'\nimport { Readable } from 'stream'\nimport { IfsReadStream as IfsReadStreamType } from '../../java/JT400.js'\n\ntype Opt = {\n ifsReadStream: Promise<IfsReadStreamType>\n}\n\nexport function IfsReadStream(opt: Opt) {\n Readable.call(this, { objectMode: false })\n this._ifsReadStream = opt.ifsReadStream\n}\n\nutil.inherits(IfsReadStream, Readable)\n\nIfsReadStream.prototype._read = function () {\n const streamPromise: Promise<IfsReadStreamType> = this._ifsReadStream\n streamPromise\n .then((stream) =>\n stream.read().then((res: any) => {\n // java-bridge convierte byte[] -> Buffer automáticamente\n if (res == null) {\n this.push(null) // EOF\n return\n }\n\n const buf =\n Buffer.isBuffer(res) ? res : res instanceof Uint8Array ? Buffer.from(res) : Buffer.from(res as any)\n\n if (buf.length === 0) {\n this.push(null) // EOF defensivo si llega vacío\n return\n }\n\n this.push(buf)\n }),\n )\n .catch((err: any) => this.emit('error', err))\n}\n"],"mappings":"AAAA,OAAO,UAAU;AACjB,SAAS,gBAAgB;AAOlB,SAAS,cAAc,KAAU;AACtC,WAAS,KAAK,MAAM,EAAE,YAAY,MAAM,CAAC;AACzC,OAAK,iBAAiB,IAAI;AAC5B;AAEA,KAAK,SAAS,eAAe,QAAQ;AAErC,cAAc,UAAU,QAAQ,WAAY;AAC1C,QAAM,gBAA4C,KAAK;AACvD,gBACG;AAAA,IAAK,CAAC,WACL,OAAO,KAAK,EAAE,KAAK,CAAC,QAAa;AAE/B,UAAI,OAAO,MAAM;AACf,aAAK,KAAK,IAAI;AACd;AAAA,MACF;AAEA,YAAM,MACJ,OAAO,SAAS,GAAG,IAAI,MAAM,eAAe,aAAa,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAU;AAEpG,UAAI,IAAI,WAAW,GAAG;AACpB,aAAK,KAAK,IAAI;AACd;AAAA,MACF;AAEA,WAAK,KAAK,GAAG;AAAA,IACf,CAAC;AAAA,EACH,EACC,MAAM,CAAC,QAAa,KAAK,KAAK,SAAS,GAAG,CAAC;AAChD;","names":[]}
@@ -55,7 +55,7 @@ describe("hsql in memory", () => {
55
55
  try {
56
56
  assert.strictEqual(
57
57
  err.message,
58
- "Invalid argument in JDBC call: parameter index out of range: 1"
58
+ "Argumento incorrecto en una llamada JDBC: parameter index out of range: 1"
59
59
  );
60
60
  done();
61
61
  } catch (e) {
@@ -137,7 +137,7 @@ describe("hsql in memory", () => {
137
137
  }).catch((error) => {
138
138
  assert.strictEqual(
139
139
  error.message,
140
- "data exception: invalid datetime format"
140
+ "excepci\xF3n de datos: formato fecha/hora incorrecto"
141
141
  );
142
142
  assert.ok(error.cause.stack.includes("JdbcJsonClient.setParams"));
143
143
  assert.strictEqual(error.context.sql, sql);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ts-src/unit-test/hsql-spec.ts"],"sourcesContent":["import { useInMemoryDb } from '../index.js'\nimport { Readable } from 'stream'\nimport { parse } from 'JSONStream'\nimport assert from 'assert'\n\nconst jt400 = useInMemoryDb()\ndescribe('hsql in memory', () => {\n beforeEach(() => {\n return jt400\n .update(\n 'create table testtbl (ID DECIMAL(15, 0) GENERATED BY DEFAULT AS IDENTITY(START WITH 1234567891234), NAME VARCHAR(300), START DATE, STAMP TIMESTAMP, PRIMARY KEY(ID))',\n )\n .then(() =>\n jt400.update(\"insert into testtbl (NAME) values('Foo bar baz')\"),\n )\n })\n\n afterEach(() => {\n return jt400.update('drop table testtbl')\n })\n\n describe('query', () => {\n it('should be in memory', () => {\n assert.strictEqual(jt400.isInMemory(), true)\n })\n\n it('should select form testtbl', async () => {\n const res = await jt400.query<any>('select * from testtbl')\n assert.strictEqual(res.length, 1)\n })\n\n it('should use column alias when selecting', async () => {\n const res = await jt400.query<any>('select ID, NAME MYNAME from testtbl')\n assert.ok('MYNAME' in res[0])\n })\n\n it('should query as stream', (done) => {\n const stream = jt400.createReadStream('select * from testtbl')\n const jsonStream = stream.pipe(parse([true]))\n const data: any[] = []\n\n jsonStream.on('data', (row) => {\n data.push(row)\n })\n\n jsonStream.on('end', () => {\n try {\n assert.strictEqual(data.length, 1)\n done()\n } catch (e) {\n done(e)\n }\n })\n\n stream.on('error', done)\n })\n\n it('should fail queryAsStream with oops error', (done) => {\n const sql = 'select * from testtbl'\n const params = ['a']\n const stream = jt400.createReadStream(sql, params)\n const jsonStream = stream.pipe(parse([true]))\n\n jsonStream.on('end', () => {\n stream.emit('error', new Error('wrong error'))\n })\n\n stream.on('error', (err) => {\n try {\n assert.strictEqual(\n err.message,\n 'Invalid argument in JDBC call: parameter index out of range: 1',\n )\n done()\n } catch (e) {\n done(e)\n }\n })\n })\n })\n\n describe('insert', () => {\n it('should insert and return id', async () => {\n const res = await jt400.insertAndGetId(\n 'insert into testtbl (NAME) values(?)',\n ['foo'],\n )\n assert.strictEqual(res, 1234567891235)\n })\n\n it('should insert list', async () => {\n const res = await jt400.insertList('testtbl', 'ID', [\n {\n NAME: 'foo',\n },\n {\n NAME: 'bar',\n },\n ])\n\n assert.deepStrictEqual(res, [1234567891235, 1234567891236])\n\n const select = await jt400.query('select * from testtbl')\n assert.strictEqual(select.length, 3)\n })\n\n it('should insert date and timestamp', async () => {\n const ids = await jt400.insertList('testtbl', 'ID', [\n {\n START: new Date().toISOString().substr(0, 10),\n STAMP: new Date(),\n },\n ])\n\n assert.deepStrictEqual(ids, [1234567891235])\n })\n\n it('should create write stream', (done) => {\n const dataStream = new Readable({ objectMode: true })\n let c = 97\n dataStream._read = function () {\n dataStream.push([String.fromCharCode(c++)])\n if (c > 'z'.charCodeAt(0)) {\n dataStream.push(null)\n }\n }\n\n const ws = jt400.createWriteStream(\n 'insert into testtbl (NAME) VALUES(?)',\n { bufferSize: 10 },\n )\n dataStream\n .pipe(ws)\n .on('finish', () => {\n jt400\n .query('select name from testtbl')\n .then((res) => {\n assert.strictEqual(res.length, 27)\n })\n .then(done, done)\n })\n .on('error', done)\n })\n })\n\n describe('batch update', () => {\n it('should insert batch', async () => {\n const res = await jt400.batchUpdate(\n 'insert into testtbl (NAME,START) values(?, ?)',\n [\n ['foo', '2015-01-02'],\n ['bar', '2015-03-04'],\n ],\n )\n\n assert.deepStrictEqual(res, [1, 1])\n })\n\n it('should fail insert batch with oops-error', () => {\n const sql = 'insert into testtbl (NAME,START) values(?, ?)'\n const params = [\n ['foo', '2015-01-02'],\n ['bar', '2015-03-04'],\n ['a', 'b', 'c', 'd'],\n ]\n\n return jt400\n .batchUpdate(sql, params)\n .then(() => {\n throw new Error('wrong error')\n })\n .catch((error) => {\n assert.strictEqual(\n error.message,\n 'data exception: invalid datetime format',\n )\n assert.ok(error.cause.stack.includes('JdbcJsonClient.setParams'))\n assert.strictEqual(error.context.sql, sql)\n assert.deepStrictEqual(error.context.params, params)\n assert.strictEqual(error.category, 'ProgrammerError')\n })\n })\n })\n\n describe('pgm call mock', () => {\n let callFoo\n let input\n\n beforeEach(() => {\n callFoo = jt400.defineProgram({\n programName: 'foo',\n paramsSchema: [\n {\n name: 'bar',\n size: 10,\n },\n {\n name: 'baz',\n size: 9,\n decimals: 2,\n },\n ],\n })\n\n input = {\n bar: 'a',\n baz: 10,\n }\n })\n\n it('should return input by default', async () => {\n const res = await callFoo(input)\n assert.deepStrictEqual(res, input)\n })\n\n it('should register mock', async () => {\n jt400.mockPgm('foo', (input) => {\n input.baz = 20\n return input\n })\n\n const res = await callFoo(input)\n assert.strictEqual(res.baz, 20)\n })\n })\n\n describe('should mock ifs', () => {\n it('should get metadata', async () => {\n const metadata = await jt400.ifs().fileMetadata('/foo/bar.txt')\n assert.deepStrictEqual(metadata, {\n exists: false,\n length: 0,\n })\n })\n })\n\n describe('execute', () => {\n it('should get metadata', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const metadata = await statement.metadata()\n\n assert.deepStrictEqual(metadata, [\n {\n name: 'ID',\n typeName: 'DECIMAL',\n precision: 15,\n scale: 0,\n },\n {\n name: 'NAME',\n typeName: 'VARCHAR',\n precision: 300,\n scale: 0,\n },\n {\n name: 'START',\n typeName: 'DATE',\n precision: 10,\n scale: 0,\n },\n {\n name: 'STAMP',\n typeName: 'TIMESTAMP',\n precision: 26,\n scale: 6,\n },\n ])\n })\n\n it('should get result as stream', (done) => {\n jt400\n .execute('select * from testtbl')\n .then((statement) => {\n const stream = statement.asStream()\n let data = ''\n assert.strictEqual(statement.isQuery(), true)\n\n stream.on('data', (chunk) => {\n data += chunk\n })\n\n stream.on('end', () => {\n try {\n assert.strictEqual(\n data,\n '[[\"1234567891234\",\"Foo bar baz\",null,null]]',\n )\n done()\n } catch (err) {\n done(err)\n }\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get result as object stream', (done) => {\n jt400\n .execute('select * from testtbl')\n .then((statement) => statement.asObjectStream())\n .then((stream) => {\n const data: any[] = []\n stream.on('data', (chunk) => {\n data.push(chunk)\n })\n\n stream.on('end', () => {\n try {\n assert.deepStrictEqual(data, [\n {\n ID: '1234567891234',\n NAME: 'Foo bar baz',\n START: null,\n STAMP: null,\n },\n ])\n done()\n } catch (err) {\n done(err)\n }\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get result as array', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const data = await statement.asArray()\n assert.deepStrictEqual(data, [\n ['1234567891234', 'Foo bar baz', null, null],\n ])\n })\n it('should get result as iterable', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const rows = statement.asIterable()\n let count = 0\n for await (const row of rows) {\n count++\n assert.deepStrictEqual(row, [\n '1234567891234',\n 'Foo bar baz',\n null,\n null,\n ])\n }\n assert.strictEqual(count, 1)\n })\n\n it('should pipe to JSONStream', (done) => {\n let i = 1\n const data: any[] = []\n\n while (i < 110) {\n data.push(i++)\n }\n\n data\n .reduce((memo, item) => {\n return memo.then(() =>\n jt400.update('insert into testtbl (NAME) values(?)', ['n' + item]),\n )\n }, Promise.resolve())\n .then(() => jt400.execute('select NAME from testtbl order by ID'))\n .then((statement) => statement.asStream().pipe(parse([true])))\n .then((stream) => {\n const res: any[] = []\n stream.on('data', (row) => {\n res.push(row)\n })\n\n stream.on('end', () => {\n assert.strictEqual(res.length, 110)\n res.forEach((row, index) => {\n if (index > 0) {\n assert.deepStrictEqual(row[0], 'n' + index)\n }\n })\n done()\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get update count', async () => {\n const statement = await jt400.execute('update testtbl set NAME=?', [\n 'testing',\n ])\n assert.strictEqual(statement.isQuery(), false)\n const updated = await statement.updated()\n assert.strictEqual(updated, 1)\n })\n\n it('should close stream', (done) => {\n let i = 1\n const data: any[] = []\n\n while (i < 40) {\n data.push(i++)\n }\n\n Promise.all(\n data.map((item) =>\n jt400.update('insert into testtbl (NAME) values(?)', ['n' + item]),\n ),\n )\n .then(() => {\n const res: any[] = []\n return jt400.execute('select NAME from testtbl').then((statement) => {\n const stream = statement\n .asStream({\n bufferSize: 10,\n })\n .pipe(parse([true]))\n\n stream.on('data', (row) => {\n res.push(row)\n if (res.length >= 10) {\n statement.close()\n }\n })\n\n stream.on('end', () => {\n assert.ok(res.length < 21)\n done()\n })\n\n stream.on('error', done)\n })\n })\n .catch(done)\n })\n })\n\n describe('metadata', () => {\n it('should return table metadata as stream', (done) => {\n const stream = jt400.getTablesAsStream({\n schema: 'PUBLIC',\n })\n\n const schema: any[] = []\n stream.on('data', (data) => {\n schema.push(data)\n })\n\n stream.on('end', () => {\n assert.deepStrictEqual(schema, [\n {\n schema: 'PUBLIC',\n table: 'TESTTBL',\n remarks: '',\n },\n ])\n done()\n })\n\n stream.on('error', done)\n })\n\n it('should return columns', async () => {\n const res = await jt400.getColumns({\n schema: 'PUBLIC',\n table: 'TESTTBL',\n })\n\n assert.deepStrictEqual(res, [\n {\n name: 'ID',\n typeName: 'DECIMAL',\n precision: 15,\n scale: 0,\n },\n {\n name: 'NAME',\n typeName: 'VARCHAR',\n precision: 300,\n scale: 0,\n },\n {\n name: 'START',\n typeName: 'DATE',\n precision: 10,\n scale: 0,\n },\n {\n name: 'STAMP',\n typeName: 'TIMESTAMP',\n precision: 26,\n scale: 0,\n },\n ])\n })\n\n it('should return primary key', async () => {\n const res = await jt400.getPrimaryKeys({\n table: 'TESTTBL',\n })\n\n assert.strictEqual(res.length, 1)\n assert.strictEqual(res[0].name, 'ID')\n })\n })\n\n describe('transaction', () => {\n it('should commit', () => {\n let rowId\n return jt400\n .transaction((transaction) => {\n return transaction\n .insertAndGetId(\n \"insert into testtbl (NAME) values('Transaction 1')\",\n )\n .then((res) => {\n rowId = res\n return transaction.update(\n \"update testtbl set NAME='Transaction 2' where id=?\",\n [rowId],\n )\n })\n })\n .then(() =>\n jt400.query<any>('select NAME from testtbl where id=?', [rowId]),\n )\n .then((res) => {\n assert.deepStrictEqual(res[0].NAME, 'Transaction 2')\n })\n })\n\n it('should rollback', () => {\n const fakeError = new Error('fake error')\n let rowId\n return jt400\n .transaction((transaction) => {\n return transaction\n .insertAndGetId(\n \"insert into testtbl (NAME) values('Transaction 1')\",\n )\n .then((res) => {\n rowId = res\n throw fakeError\n })\n })\n .catch((err) => {\n assert.strictEqual(err, fakeError)\n })\n .then(() => jt400.query('select NAME from testtbl where id=?', [rowId]))\n .then((res) => {\n assert.strictEqual(res.length, 0)\n })\n })\n\n it('should batch update', async () => {\n const res = await jt400.transaction((transaction) => {\n return transaction.batchUpdate('insert into testtbl (NAME) values(?)', [\n ['Foo'],\n ['Bar'],\n ])\n })\n assert.deepStrictEqual(res, [1, 1])\n })\n })\n})\n"],"mappings":"AAAA,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,aAAa;AACtB,OAAO,YAAY;AAEnB,MAAM,QAAQ,cAAc;AAC5B,SAAS,kBAAkB,MAAM;AAC/B,aAAW,MAAM;AACf,WAAO,MACJ;AAAA,MACC;AAAA,IACF,EACC;AAAA,MAAK,MACJ,MAAM,OAAO,kDAAkD;AAAA,IACjE;AAAA,EACJ,CAAC;AAED,YAAU,MAAM;AACd,WAAO,MAAM,OAAO,oBAAoB;AAAA,EAC1C,CAAC;AAED,WAAS,SAAS,MAAM;AACtB,OAAG,uBAAuB,MAAM;AAC9B,aAAO,YAAY,MAAM,WAAW,GAAG,IAAI;AAAA,IAC7C,CAAC;AAED,OAAG,8BAA8B,YAAY;AAC3C,YAAM,MAAM,MAAM,MAAM,MAAW,uBAAuB;AAC1D,aAAO,YAAY,IAAI,QAAQ,CAAC;AAAA,IAClC,CAAC;AAED,OAAG,0CAA0C,YAAY;AACvD,YAAM,MAAM,MAAM,MAAM,MAAW,qCAAqC;AACxE,aAAO,GAAG,YAAY,IAAI,CAAC,CAAC;AAAA,IAC9B,CAAC;AAED,OAAG,0BAA0B,CAAC,SAAS;AACrC,YAAM,SAAS,MAAM,iBAAiB,uBAAuB;AAC7D,YAAM,aAAa,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,YAAM,OAAc,CAAC;AAErB,iBAAW,GAAG,QAAQ,CAAC,QAAQ;AAC7B,aAAK,KAAK,GAAG;AAAA,MACf,CAAC;AAED,iBAAW,GAAG,OAAO,MAAM;AACzB,YAAI;AACF,iBAAO,YAAY,KAAK,QAAQ,CAAC;AACjC,eAAK;AAAA,QACP,SAAS,GAAG;AACV,eAAK,CAAC;AAAA,QACR;AAAA,MACF,CAAC;AAED,aAAO,GAAG,SAAS,IAAI;AAAA,IACzB,CAAC;AAED,OAAG,6CAA6C,CAAC,SAAS;AACxD,YAAM,MAAM;AACZ,YAAM,SAAS,CAAC,GAAG;AACnB,YAAM,SAAS,MAAM,iBAAiB,KAAK,MAAM;AACjD,YAAM,aAAa,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;AAE5C,iBAAW,GAAG,OAAO,MAAM;AACzB,eAAO,KAAK,SAAS,IAAI,MAAM,aAAa,CAAC;AAAA,MAC/C,CAAC;AAED,aAAO,GAAG,SAAS,CAAC,QAAQ;AAC1B,YAAI;AACF,iBAAO;AAAA,YACL,IAAI;AAAA,YACJ;AAAA,UACF;AACA,eAAK;AAAA,QACP,SAAS,GAAG;AACV,eAAK,CAAC;AAAA,QACR;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAED,WAAS,UAAU,MAAM;AACvB,OAAG,+BAA+B,YAAY;AAC5C,YAAM,MAAM,MAAM,MAAM;AAAA,QACtB;AAAA,QACA,CAAC,KAAK;AAAA,MACR;AACA,aAAO,YAAY,KAAK,aAAa;AAAA,IACvC,CAAC;AAED,OAAG,sBAAsB,YAAY;AACnC,YAAM,MAAM,MAAM,MAAM,WAAW,WAAW,MAAM;AAAA,QAClD;AAAA,UACE,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACE,MAAM;AAAA,QACR;AAAA,MACF,CAAC;AAED,aAAO,gBAAgB,KAAK,CAAC,eAAe,aAAa,CAAC;AAE1D,YAAM,SAAS,MAAM,MAAM,MAAM,uBAAuB;AACxD,aAAO,YAAY,OAAO,QAAQ,CAAC;AAAA,IACrC,CAAC;AAED,OAAG,oCAAoC,YAAY;AACjD,YAAM,MAAM,MAAM,MAAM,WAAW,WAAW,MAAM;AAAA,QAClD;AAAA,UACE,QAAO,oBAAI,KAAK,GAAE,YAAY,EAAE,OAAO,GAAG,EAAE;AAAA,UAC5C,OAAO,oBAAI,KAAK;AAAA,QAClB;AAAA,MACF,CAAC;AAED,aAAO,gBAAgB,KAAK,CAAC,aAAa,CAAC;AAAA,IAC7C,CAAC;AAED,OAAG,8BAA8B,CAAC,SAAS;AACzC,YAAM,aAAa,IAAI,SAAS,EAAE,YAAY,KAAK,CAAC;AACpD,UAAI,IAAI;AACR,iBAAW,QAAQ,WAAY;AAC7B,mBAAW,KAAK,CAAC,OAAO,aAAa,GAAG,CAAC,CAAC;AAC1C,YAAI,IAAI,IAAI,WAAW,CAAC,GAAG;AACzB,qBAAW,KAAK,IAAI;AAAA,QACtB;AAAA,MACF;AAEA,YAAM,KAAK,MAAM;AAAA,QACf;AAAA,QACA,EAAE,YAAY,GAAG;AAAA,MACnB;AACA,iBACG,KAAK,EAAE,EACP,GAAG,UAAU,MAAM;AAClB,cACG,MAAM,0BAA0B,EAChC,KAAK,CAAC,QAAQ;AACb,iBAAO,YAAY,IAAI,QAAQ,EAAE;AAAA,QACnC,CAAC,EACA,KAAK,MAAM,IAAI;AAAA,MACpB,CAAC,EACA,GAAG,SAAS,IAAI;AAAA,IACrB,CAAC;AAAA,EACH,CAAC;AAED,WAAS,gBAAgB,MAAM;AAC7B,OAAG,uBAAuB,YAAY;AACpC,YAAM,MAAM,MAAM,MAAM;AAAA,QACtB;AAAA,QACA;AAAA,UACE,CAAC,OAAO,YAAY;AAAA,UACpB,CAAC,OAAO,YAAY;AAAA,QACtB;AAAA,MACF;AAEA,aAAO,gBAAgB,KAAK,CAAC,GAAG,CAAC,CAAC;AAAA,IACpC,CAAC;AAED,OAAG,4CAA4C,MAAM;AACnD,YAAM,MAAM;AACZ,YAAM,SAAS;AAAA,QACb,CAAC,OAAO,YAAY;AAAA,QACpB,CAAC,OAAO,YAAY;AAAA,QACpB,CAAC,KAAK,KAAK,KAAK,GAAG;AAAA,MACrB;AAEA,aAAO,MACJ,YAAY,KAAK,MAAM,EACvB,KAAK,MAAM;AACV,cAAM,IAAI,MAAM,aAAa;AAAA,MAC/B,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,eAAO;AAAA,UACL,MAAM;AAAA,UACN;AAAA,QACF;AACA,eAAO,GAAG,MAAM,MAAM,MAAM,SAAS,0BAA0B,CAAC;AAChE,eAAO,YAAY,MAAM,QAAQ,KAAK,GAAG;AACzC,eAAO,gBAAgB,MAAM,QAAQ,QAAQ,MAAM;AACnD,eAAO,YAAY,MAAM,UAAU,iBAAiB;AAAA,MACtD,CAAC;AAAA,IACL,CAAC;AAAA,EACH,CAAC;AAED,WAAS,iBAAiB,MAAM;AAC9B,QAAI;AACJ,QAAI;AAEJ,eAAW,MAAM;AACf,gBAAU,MAAM,cAAc;AAAA,QAC5B,aAAa;AAAA,QACb,cAAc;AAAA,UACZ;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,UACZ;AAAA,QACF;AAAA,MACF,CAAC;AAED,cAAQ;AAAA,QACN,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA,IACF,CAAC;AAED,OAAG,kCAAkC,YAAY;AAC/C,YAAM,MAAM,MAAM,QAAQ,KAAK;AAC/B,aAAO,gBAAgB,KAAK,KAAK;AAAA,IACnC,CAAC;AAED,OAAG,wBAAwB,YAAY;AACrC,YAAM,QAAQ,OAAO,CAACA,WAAU;AAC9B,QAAAA,OAAM,MAAM;AACZ,eAAOA;AAAA,MACT,CAAC;AAED,YAAM,MAAM,MAAM,QAAQ,KAAK;AAC/B,aAAO,YAAY,IAAI,KAAK,EAAE;AAAA,IAChC,CAAC;AAAA,EACH,CAAC;AAED,WAAS,mBAAmB,MAAM;AAChC,OAAG,uBAAuB,YAAY;AACpC,YAAM,WAAW,MAAM,MAAM,IAAI,EAAE,aAAa,cAAc;AAC9D,aAAO,gBAAgB,UAAU;AAAA,QAC/B,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AAED,WAAS,WAAW,MAAM;AACxB,OAAG,uBAAuB,YAAY;AACpC,YAAM,YAAY,MAAM,MAAM,QAAQ,uBAAuB;AAC7D,YAAM,WAAW,MAAM,UAAU,SAAS;AAE1C,aAAO,gBAAgB,UAAU;AAAA,QAC/B;AAAA,UACE,MAAM;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,OAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,OAAG,+BAA+B,CAAC,SAAS;AAC1C,YACG,QAAQ,uBAAuB,EAC/B,KAAK,CAAC,cAAc;AACnB,cAAM,SAAS,UAAU,SAAS;AAClC,YAAI,OAAO;AACX,eAAO,YAAY,UAAU,QAAQ,GAAG,IAAI;AAE5C,eAAO,GAAG,QAAQ,CAAC,UAAU;AAC3B,kBAAQ;AAAA,QACV,CAAC;AAED,eAAO,GAAG,OAAO,MAAM;AACrB,cAAI;AACF,mBAAO;AAAA,cACL;AAAA,cACA;AAAA,YACF;AACA,iBAAK;AAAA,UACP,SAAS,KAAK;AACZ,iBAAK,GAAG;AAAA,UACV;AAAA,QACF,CAAC;AAED,eAAO,GAAG,SAAS,IAAI;AAAA,MACzB,CAAC,EACA,MAAM,IAAI;AAAA,IACf,CAAC;AAED,OAAG,sCAAsC,CAAC,SAAS;AACjD,YACG,QAAQ,uBAAuB,EAC/B,KAAK,CAAC,cAAc,UAAU,eAAe,CAAC,EAC9C,KAAK,CAAC,WAAW;AAChB,cAAM,OAAc,CAAC;AACrB,eAAO,GAAG,QAAQ,CAAC,UAAU;AAC3B,eAAK,KAAK,KAAK;AAAA,QACjB,CAAC;AAED,eAAO,GAAG,OAAO,MAAM;AACrB,cAAI;AACF,mBAAO,gBAAgB,MAAM;AAAA,cAC3B;AAAA,gBACE,IAAI;AAAA,gBACJ,MAAM;AAAA,gBACN,OAAO;AAAA,gBACP,OAAO;AAAA,cACT;AAAA,YACF,CAAC;AACD,iBAAK;AAAA,UACP,SAAS,KAAK;AACZ,iBAAK,GAAG;AAAA,UACV;AAAA,QACF,CAAC;AAED,eAAO,GAAG,SAAS,IAAI;AAAA,MACzB,CAAC,EACA,MAAM,IAAI;AAAA,IACf,CAAC;AAED,OAAG,8BAA8B,YAAY;AAC3C,YAAM,YAAY,MAAM,MAAM,QAAQ,uBAAuB;AAC7D,YAAM,OAAO,MAAM,UAAU,QAAQ;AACrC,aAAO,gBAAgB,MAAM;AAAA,QAC3B,CAAC,iBAAiB,eAAe,MAAM,IAAI;AAAA,MAC7C,CAAC;AAAA,IACH,CAAC;AACD,OAAG,iCAAiC,YAAY;AAC9C,YAAM,YAAY,MAAM,MAAM,QAAQ,uBAAuB;AAC7D,YAAM,OAAO,UAAU,WAAW;AAClC,UAAI,QAAQ;AACZ,uBAAiB,OAAO,MAAM;AAC5B;AACA,eAAO,gBAAgB,KAAK;AAAA,UAC1B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AACA,aAAO,YAAY,OAAO,CAAC;AAAA,IAC7B,CAAC;AAED,OAAG,6BAA6B,CAAC,SAAS;AACxC,UAAI,IAAI;AACR,YAAM,OAAc,CAAC;AAErB,aAAO,IAAI,KAAK;AACd,aAAK,KAAK,GAAG;AAAA,MACf;AAEA,WACG,OAAO,CAAC,MAAM,SAAS;AACtB,eAAO,KAAK;AAAA,UAAK,MACf,MAAM,OAAO,wCAAwC,CAAC,MAAM,IAAI,CAAC;AAAA,QACnE;AAAA,MACF,GAAG,QAAQ,QAAQ,CAAC,EACnB,KAAK,MAAM,MAAM,QAAQ,sCAAsC,CAAC,EAChE,KAAK,CAAC,cAAc,UAAU,SAAS,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAC5D,KAAK,CAAC,WAAW;AAChB,cAAM,MAAa,CAAC;AACpB,eAAO,GAAG,QAAQ,CAAC,QAAQ;AACzB,cAAI,KAAK,GAAG;AAAA,QACd,CAAC;AAED,eAAO,GAAG,OAAO,MAAM;AACrB,iBAAO,YAAY,IAAI,QAAQ,GAAG;AAClC,cAAI,QAAQ,CAAC,KAAK,UAAU;AAC1B,gBAAI,QAAQ,GAAG;AACb,qBAAO,gBAAgB,IAAI,CAAC,GAAG,MAAM,KAAK;AAAA,YAC5C;AAAA,UACF,CAAC;AACD,eAAK;AAAA,QACP,CAAC;AAED,eAAO,GAAG,SAAS,IAAI;AAAA,MACzB,CAAC,EACA,MAAM,IAAI;AAAA,IACf,CAAC;AAED,OAAG,2BAA2B,YAAY;AACxC,YAAM,YAAY,MAAM,MAAM,QAAQ,6BAA6B;AAAA,QACjE;AAAA,MACF,CAAC;AACD,aAAO,YAAY,UAAU,QAAQ,GAAG,KAAK;AAC7C,YAAM,UAAU,MAAM,UAAU,QAAQ;AACxC,aAAO,YAAY,SAAS,CAAC;AAAA,IAC/B,CAAC;AAED,OAAG,uBAAuB,CAAC,SAAS;AAClC,UAAI,IAAI;AACR,YAAM,OAAc,CAAC;AAErB,aAAO,IAAI,IAAI;AACb,aAAK,KAAK,GAAG;AAAA,MACf;AAEA,cAAQ;AAAA,QACN,KAAK;AAAA,UAAI,CAAC,SACR,MAAM,OAAO,wCAAwC,CAAC,MAAM,IAAI,CAAC;AAAA,QACnE;AAAA,MACF,EACG,KAAK,MAAM;AACV,cAAM,MAAa,CAAC;AACpB,eAAO,MAAM,QAAQ,0BAA0B,EAAE,KAAK,CAAC,cAAc;AACnE,gBAAM,SAAS,UACZ,SAAS;AAAA,YACR,YAAY;AAAA,UACd,CAAC,EACA,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;AAErB,iBAAO,GAAG,QAAQ,CAAC,QAAQ;AACzB,gBAAI,KAAK,GAAG;AACZ,gBAAI,IAAI,UAAU,IAAI;AACpB,wBAAU,MAAM;AAAA,YAClB;AAAA,UACF,CAAC;AAED,iBAAO,GAAG,OAAO,MAAM;AACrB,mBAAO,GAAG,IAAI,SAAS,EAAE;AACzB,iBAAK;AAAA,UACP,CAAC;AAED,iBAAO,GAAG,SAAS,IAAI;AAAA,QACzB,CAAC;AAAA,MACH,CAAC,EACA,MAAM,IAAI;AAAA,IACf,CAAC;AAAA,EACH,CAAC;AAED,WAAS,YAAY,MAAM;AACzB,OAAG,0CAA0C,CAAC,SAAS;AACrD,YAAM,SAAS,MAAM,kBAAkB;AAAA,QACrC,QAAQ;AAAA,MACV,CAAC;AAED,YAAM,SAAgB,CAAC;AACvB,aAAO,GAAG,QAAQ,CAAC,SAAS;AAC1B,eAAO,KAAK,IAAI;AAAA,MAClB,CAAC;AAED,aAAO,GAAG,OAAO,MAAM;AACrB,eAAO,gBAAgB,QAAQ;AAAA,UAC7B;AAAA,YACE,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,SAAS;AAAA,UACX;AAAA,QACF,CAAC;AACD,aAAK;AAAA,MACP,CAAC;AAED,aAAO,GAAG,SAAS,IAAI;AAAA,IACzB,CAAC;AAED,OAAG,yBAAyB,YAAY;AACtC,YAAM,MAAM,MAAM,MAAM,WAAW;AAAA,QACjC,QAAQ;AAAA,QACR,OAAO;AAAA,MACT,CAAC;AAED,aAAO,gBAAgB,KAAK;AAAA,QAC1B;AAAA,UACE,MAAM;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,OAAO;AAAA,QACT;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,OAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,OAAG,6BAA6B,YAAY;AAC1C,YAAM,MAAM,MAAM,MAAM,eAAe;AAAA,QACrC,OAAO;AAAA,MACT,CAAC;AAED,aAAO,YAAY,IAAI,QAAQ,CAAC;AAChC,aAAO,YAAY,IAAI,CAAC,EAAE,MAAM,IAAI;AAAA,IACtC,CAAC;AAAA,EACH,CAAC;AAED,WAAS,eAAe,MAAM;AAC5B,OAAG,iBAAiB,MAAM;AACxB,UAAI;AACJ,aAAO,MACJ,YAAY,CAAC,gBAAgB;AAC5B,eAAO,YACJ;AAAA,UACC;AAAA,QACF,EACC,KAAK,CAAC,QAAQ;AACb,kBAAQ;AACR,iBAAO,YAAY;AAAA,YACjB;AAAA,YACA,CAAC,KAAK;AAAA,UACR;AAAA,QACF,CAAC;AAAA,MACL,CAAC,EACA;AAAA,QAAK,MACJ,MAAM,MAAW,uCAAuC,CAAC,KAAK,CAAC;AAAA,MACjE,EACC,KAAK,CAAC,QAAQ;AACb,eAAO,gBAAgB,IAAI,CAAC,EAAE,MAAM,eAAe;AAAA,MACrD,CAAC;AAAA,IACL,CAAC;AAED,OAAG,mBAAmB,MAAM;AAC1B,YAAM,YAAY,IAAI,MAAM,YAAY;AACxC,UAAI;AACJ,aAAO,MACJ,YAAY,CAAC,gBAAgB;AAC5B,eAAO,YACJ;AAAA,UACC;AAAA,QACF,EACC,KAAK,CAAC,QAAQ;AACb,kBAAQ;AACR,gBAAM;AAAA,QACR,CAAC;AAAA,MACL,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,eAAO,YAAY,KAAK,SAAS;AAAA,MACnC,CAAC,EACA,KAAK,MAAM,MAAM,MAAM,uCAAuC,CAAC,KAAK,CAAC,CAAC,EACtE,KAAK,CAAC,QAAQ;AACb,eAAO,YAAY,IAAI,QAAQ,CAAC;AAAA,MAClC,CAAC;AAAA,IACL,CAAC;AAED,OAAG,uBAAuB,YAAY;AACpC,YAAM,MAAM,MAAM,MAAM,YAAY,CAAC,gBAAgB;AACnD,eAAO,YAAY,YAAY,wCAAwC;AAAA,UACrE,CAAC,KAAK;AAAA,UACN,CAAC,KAAK;AAAA,QACR,CAAC;AAAA,MACH,CAAC;AACD,aAAO,gBAAgB,KAAK,CAAC,GAAG,CAAC,CAAC;AAAA,IACpC,CAAC;AAAA,EACH,CAAC;AACH,CAAC;","names":["input"]}
1
+ {"version":3,"sources":["../../ts-src/unit-test/hsql-spec.ts"],"sourcesContent":["import { useInMemoryDb } from '../index.js'\nimport { Readable } from 'stream'\nimport { parse } from 'JSONStream'\nimport assert from 'assert'\n\nconst jt400 = useInMemoryDb()\ndescribe('hsql in memory', () => {\n beforeEach(() => {\n return jt400\n .update(\n 'create table testtbl (ID DECIMAL(15, 0) GENERATED BY DEFAULT AS IDENTITY(START WITH 1234567891234), NAME VARCHAR(300), START DATE, STAMP TIMESTAMP, PRIMARY KEY(ID))',\n )\n .then(() =>\n jt400.update(\"insert into testtbl (NAME) values('Foo bar baz')\"),\n )\n })\n\n afterEach(() => {\n return jt400.update('drop table testtbl')\n })\n\n describe('query', () => {\n it('should be in memory', () => {\n assert.strictEqual(jt400.isInMemory(), true)\n })\n\n it('should select form testtbl', async () => {\n const res = await jt400.query<any>('select * from testtbl')\n assert.strictEqual(res.length, 1)\n })\n\n it('should use column alias when selecting', async () => {\n const res = await jt400.query<any>('select ID, NAME MYNAME from testtbl')\n assert.ok('MYNAME' in res[0])\n })\n\n it('should query as stream', (done) => {\n const stream = jt400.createReadStream('select * from testtbl')\n const jsonStream = stream.pipe(parse([true]))\n const data: any[] = []\n\n jsonStream.on('data', (row) => {\n data.push(row)\n })\n\n jsonStream.on('end', () => {\n try {\n assert.strictEqual(data.length, 1)\n done()\n } catch (e) {\n done(e)\n }\n })\n\n stream.on('error', done)\n })\n\n it('should fail queryAsStream with oops error', (done) => {\n const sql = 'select * from testtbl'\n const params = ['a']\n const stream = jt400.createReadStream(sql, params)\n const jsonStream = stream.pipe(parse([true]))\n\n jsonStream.on('end', () => {\n stream.emit('error', new Error('wrong error'))\n })\n\n stream.on('error', (err) => {\n try {\n assert.strictEqual(\n err.message,\n 'Argumento incorrecto en una llamada JDBC: parameter index out of range: 1',\n )\n done()\n } catch (e) {\n done(e)\n }\n })\n })\n })\n\n describe('insert', () => {\n it('should insert and return id', async () => {\n const res = await jt400.insertAndGetId(\n 'insert into testtbl (NAME) values(?)',\n ['foo'],\n )\n assert.strictEqual(res, 1234567891235)\n })\n\n it('should insert list', async () => {\n const res = await jt400.insertList('testtbl', 'ID', [\n {\n NAME: 'foo',\n },\n {\n NAME: 'bar',\n },\n ])\n\n assert.deepStrictEqual(res, [1234567891235, 1234567891236])\n\n const select = await jt400.query('select * from testtbl')\n assert.strictEqual(select.length, 3)\n })\n\n it('should insert date and timestamp', async () => {\n const ids = await jt400.insertList('testtbl', 'ID', [\n {\n START: new Date().toISOString().substr(0, 10),\n STAMP: new Date(),\n },\n ])\n\n assert.deepStrictEqual(ids, [1234567891235])\n })\n\n it('should create write stream', (done) => {\n const dataStream = new Readable({ objectMode: true })\n let c = 97\n dataStream._read = function () {\n dataStream.push([String.fromCharCode(c++)])\n if (c > 'z'.charCodeAt(0)) {\n dataStream.push(null)\n }\n }\n\n const ws = jt400.createWriteStream(\n 'insert into testtbl (NAME) VALUES(?)',\n { bufferSize: 10 },\n )\n dataStream\n .pipe(ws)\n .on('finish', () => {\n jt400\n .query('select name from testtbl')\n .then((res) => {\n assert.strictEqual(res.length, 27)\n })\n .then(done, done)\n })\n .on('error', done)\n })\n })\n\n describe('batch update', () => {\n it('should insert batch', async () => {\n const res = await jt400.batchUpdate(\n 'insert into testtbl (NAME,START) values(?, ?)',\n [\n ['foo', '2015-01-02'],\n ['bar', '2015-03-04'],\n ],\n )\n\n assert.deepStrictEqual(res, [1, 1])\n })\n\n it('should fail insert batch with oops-error', () => {\n const sql = 'insert into testtbl (NAME,START) values(?, ?)'\n const params = [\n ['foo', '2015-01-02'],\n ['bar', '2015-03-04'],\n ['a', 'b', 'c', 'd'],\n ]\n\n return jt400\n .batchUpdate(sql, params)\n .then(() => {\n throw new Error('wrong error')\n })\n .catch((error) => {\n assert.strictEqual(\n error.message,\n 'excepción de datos: formato fecha/hora incorrecto',\n )\n assert.ok(error.cause.stack.includes('JdbcJsonClient.setParams'))\n assert.strictEqual(error.context.sql, sql)\n assert.deepStrictEqual(error.context.params, params)\n assert.strictEqual(error.category, 'ProgrammerError')\n })\n })\n })\n\n describe('pgm call mock', () => {\n let callFoo\n let input\n\n beforeEach(() => {\n callFoo = jt400.defineProgram({\n programName: 'foo',\n paramsSchema: [\n {\n name: 'bar',\n size: 10,\n },\n {\n name: 'baz',\n size: 9,\n decimals: 2,\n },\n ],\n })\n\n input = {\n bar: 'a',\n baz: 10,\n }\n })\n\n it('should return input by default', async () => {\n const res = await callFoo(input)\n assert.deepStrictEqual(res, input)\n })\n\n it('should register mock', async () => {\n jt400.mockPgm('foo', (input) => {\n input.baz = 20\n return input\n })\n\n const res = await callFoo(input)\n assert.strictEqual(res.baz, 20)\n })\n })\n\n describe('should mock ifs', () => {\n it('should get metadata', async () => {\n const metadata = await jt400.ifs().fileMetadata('/foo/bar.txt')\n assert.deepStrictEqual(metadata, {\n exists: false,\n length: 0,\n })\n })\n })\n\n describe('execute', () => {\n it('should get metadata', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const metadata = await statement.metadata()\n\n assert.deepStrictEqual(metadata, [\n {\n name: 'ID',\n typeName: 'DECIMAL',\n precision: 15,\n scale: 0,\n },\n {\n name: 'NAME',\n typeName: 'VARCHAR',\n precision: 300,\n scale: 0,\n },\n {\n name: 'START',\n typeName: 'DATE',\n precision: 10,\n scale: 0,\n },\n {\n name: 'STAMP',\n typeName: 'TIMESTAMP',\n precision: 26,\n scale: 6,\n },\n ])\n })\n\n it('should get result as stream', (done) => {\n jt400\n .execute('select * from testtbl')\n .then((statement) => {\n const stream = statement.asStream()\n let data = ''\n assert.strictEqual(statement.isQuery(), true)\n\n stream.on('data', (chunk) => {\n data += chunk\n })\n\n stream.on('end', () => {\n try {\n assert.strictEqual(\n data,\n '[[\"1234567891234\",\"Foo bar baz\",null,null]]',\n )\n done()\n } catch (err) {\n done(err)\n }\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get result as object stream', (done) => {\n jt400\n .execute('select * from testtbl')\n .then((statement) => statement.asObjectStream())\n .then((stream) => {\n const data: any[] = []\n stream.on('data', (chunk) => {\n data.push(chunk)\n })\n\n stream.on('end', () => {\n try {\n assert.deepStrictEqual(data, [\n {\n ID: '1234567891234',\n NAME: 'Foo bar baz',\n START: null,\n STAMP: null,\n },\n ])\n done()\n } catch (err) {\n done(err)\n }\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get result as array', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const data = await statement.asArray()\n assert.deepStrictEqual(data, [\n ['1234567891234', 'Foo bar baz', null, null],\n ])\n })\n it('should get result as iterable', async () => {\n const statement = await jt400.execute('select * from testtbl')\n const rows = statement.asIterable()\n let count = 0\n for await (const row of rows) {\n count++\n assert.deepStrictEqual(row, [\n '1234567891234',\n 'Foo bar baz',\n null,\n null,\n ])\n }\n assert.strictEqual(count, 1)\n })\n\n it('should pipe to JSONStream', (done) => {\n let i = 1\n const data: any[] = []\n\n while (i < 110) {\n data.push(i++)\n }\n\n data\n .reduce((memo, item) => {\n return memo.then(() =>\n jt400.update('insert into testtbl (NAME) values(?)', ['n' + item]),\n )\n }, Promise.resolve())\n .then(() => jt400.execute('select NAME from testtbl order by ID'))\n .then((statement) => statement.asStream().pipe(parse([true])))\n .then((stream) => {\n const res: any[] = []\n stream.on('data', (row) => {\n res.push(row)\n })\n\n stream.on('end', () => {\n assert.strictEqual(res.length, 110)\n res.forEach((row, index) => {\n if (index > 0) {\n assert.deepStrictEqual(row[0], 'n' + index)\n }\n })\n done()\n })\n\n stream.on('error', done)\n })\n .catch(done)\n })\n\n it('should get update count', async () => {\n const statement = await jt400.execute('update testtbl set NAME=?', [\n 'testing',\n ])\n assert.strictEqual(statement.isQuery(), false)\n const updated = await statement.updated()\n assert.strictEqual(updated, 1)\n })\n\n it('should close stream', (done) => {\n let i = 1\n const data: any[] = []\n\n while (i < 40) {\n data.push(i++)\n }\n\n Promise.all(\n data.map((item) =>\n jt400.update('insert into testtbl (NAME) values(?)', ['n' + item]),\n ),\n )\n .then(() => {\n const res: any[] = []\n return jt400.execute('select NAME from testtbl').then((statement) => {\n const stream = statement\n .asStream({\n bufferSize: 10,\n })\n .pipe(parse([true]))\n\n stream.on('data', (row) => {\n res.push(row)\n if (res.length >= 10) {\n statement.close()\n }\n })\n\n stream.on('end', () => {\n assert.ok(res.length < 21)\n done()\n })\n\n stream.on('error', done)\n })\n })\n .catch(done)\n })\n })\n\n describe('metadata', () => {\n it('should return table metadata as stream', (done) => {\n const stream = jt400.getTablesAsStream({\n schema: 'PUBLIC',\n })\n\n const schema: any[] = []\n stream.on('data', (data) => {\n schema.push(data)\n })\n\n stream.on('end', () => {\n assert.deepStrictEqual(schema, [\n {\n schema: 'PUBLIC',\n table: 'TESTTBL',\n remarks: '',\n },\n ])\n done()\n })\n\n stream.on('error', done)\n })\n\n it('should return columns', async () => {\n const res = await jt400.getColumns({\n schema: 'PUBLIC',\n table: 'TESTTBL',\n })\n\n assert.deepStrictEqual(res, [\n {\n name: 'ID',\n typeName: 'DECIMAL',\n precision: 15,\n scale: 0,\n },\n {\n name: 'NAME',\n typeName: 'VARCHAR',\n precision: 300,\n scale: 0,\n },\n {\n name: 'START',\n typeName: 'DATE',\n precision: 10,\n scale: 0,\n },\n {\n name: 'STAMP',\n typeName: 'TIMESTAMP',\n precision: 26,\n scale: 0,\n },\n ])\n })\n\n it('should return primary key', async () => {\n const res = await jt400.getPrimaryKeys({\n table: 'TESTTBL',\n })\n\n assert.strictEqual(res.length, 1)\n assert.strictEqual(res[0].name, 'ID')\n })\n })\n\n describe('transaction', () => {\n it('should commit', () => {\n let rowId\n return jt400\n .transaction((transaction) => {\n return transaction\n .insertAndGetId(\n \"insert into testtbl (NAME) values('Transaction 1')\",\n )\n .then((res) => {\n rowId = res\n return transaction.update(\n \"update testtbl set NAME='Transaction 2' where id=?\",\n [rowId],\n )\n })\n })\n .then(() =>\n jt400.query<any>('select NAME from testtbl where id=?', [rowId]),\n )\n .then((res) => {\n assert.deepStrictEqual(res[0].NAME, 'Transaction 2')\n })\n })\n\n it('should rollback', () => {\n const fakeError = new Error('fake error')\n let rowId\n return jt400\n .transaction((transaction) => {\n return transaction\n .insertAndGetId(\n \"insert into testtbl (NAME) values('Transaction 1')\",\n )\n .then((res) => {\n rowId = res\n throw fakeError\n })\n })\n .catch((err) => {\n assert.strictEqual(err, fakeError)\n })\n .then(() => jt400.query('select NAME from testtbl where id=?', [rowId]))\n .then((res) => {\n assert.strictEqual(res.length, 0)\n })\n })\n\n it('should batch update', async () => {\n const res = await jt400.transaction((transaction) => {\n return transaction.batchUpdate('insert into testtbl (NAME) values(?)', [\n ['Foo'],\n ['Bar'],\n ])\n })\n assert.deepStrictEqual(res, [1, 1])\n })\n })\n})\n"],"mappings":"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","names":["input"]}
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nesgarbo/node-jt400",
3
3
  "author": "Néstor García Bou <nesgarbo@icloud.com>",
4
- "version": "6.0.1",
4
+ "version": "6.0.3",
5
5
  "description": "JT400 (IBM Toolbox) for NodeJS",
6
6
  "type": "module",
7
7
  "main": "dist-cjs/index.js",