@nesgarbo/node-jt400 6.0.2 → 6.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/README.md +330 -369
  2. package/dist-cjs/index.d.cts +12 -5
  3. package/dist-cjs/index.js.map +1 -1
  4. package/dist-cjs/java/JT400.d.cts +3 -3
  5. package/dist-cjs/java/JT400.js.map +1 -1
  6. package/dist-cjs/java/index.js +4 -3
  7. package/dist-cjs/java/index.js.map +1 -1
  8. package/dist-cjs/lib/baseConnection.js +124 -166
  9. package/dist-cjs/lib/baseConnection.js.map +1 -1
  10. package/dist-cjs/lib/baseConnection.types.d.cts +12 -6
  11. package/dist-cjs/lib/baseConnection.types.js.map +1 -1
  12. package/dist-cjs/lib/connection.js +12 -25
  13. package/dist-cjs/lib/connection.js.map +1 -1
  14. package/dist-cjs/lib/connection.types.d.cts +39 -12
  15. package/dist-cjs/lib/connection.types.js.map +1 -1
  16. package/dist-cjs/lib/handleError.d.cts +1 -3
  17. package/dist-cjs/lib/handleError.js +3 -2
  18. package/dist-cjs/lib/handleError.js.map +1 -1
  19. package/dist-cjs/lib/ifs/read_stream.d.cts +6 -1
  20. package/dist-cjs/lib/ifs/read_stream.js +23 -32
  21. package/dist-cjs/lib/ifs/read_stream.js.map +1 -1
  22. package/dist-cjs/lib/ifs/write_stream.d.cts +7 -1
  23. package/dist-cjs/lib/ifs/write_stream.js +13 -24
  24. package/dist-cjs/lib/ifs/write_stream.js.map +1 -1
  25. package/dist-cjs/lib/inMemoryConnection.d.cts +1 -1
  26. package/dist-cjs/lib/inMemoryConnection.js +4 -4
  27. package/dist-cjs/lib/inMemoryConnection.js.map +1 -1
  28. package/dist-cjs/lib/insertList.js +12 -13
  29. package/dist-cjs/lib/insertList.js.map +1 -1
  30. package/dist-cjs/lib/jdbcstream.d.cts +16 -1
  31. package/dist-cjs/lib/jdbcstream.js +31 -36
  32. package/dist-cjs/lib/jdbcstream.js.map +1 -1
  33. package/dist-cjs/lib/jdbcwritestream.d.cts +4 -1
  34. package/dist-cjs/lib/jdbcwritestream.js +7 -20
  35. package/dist-cjs/lib/jdbcwritestream.js.map +1 -1
  36. package/dist-cjs/lib/logger.d.cts +4 -4
  37. package/dist-cjs/lib/logger.js.map +1 -1
  38. package/dist-cjs/lib/sqlutil.d.cts +4 -1
  39. package/dist-cjs/lib/sqlutil.js +1 -0
  40. package/dist-cjs/lib/sqlutil.js.map +1 -1
  41. package/dist-cjs/lib/streamTransformers.d.cts +2 -1
  42. package/dist-cjs/lib/streamTransformers.js +1 -1
  43. package/dist-cjs/lib/streamTransformers.js.map +1 -1
  44. package/dist-cjs/typings/jsonstream.d.js +1 -0
  45. package/dist-cjs/typings/jsonstream.d.js.map +1 -0
  46. package/dist-esm/index.d.ts +12 -5
  47. package/dist-esm/index.js.map +1 -1
  48. package/dist-esm/java/JT400.d.ts +3 -3
  49. package/dist-esm/java/index.js +3 -10
  50. package/dist-esm/java/index.js.map +1 -1
  51. package/dist-esm/lib/baseConnection.js +124 -166
  52. package/dist-esm/lib/baseConnection.js.map +1 -1
  53. package/dist-esm/lib/baseConnection.types.d.ts +12 -6
  54. package/dist-esm/lib/baseConnection.types.js.map +1 -1
  55. package/dist-esm/lib/connection.js +12 -25
  56. package/dist-esm/lib/connection.js.map +1 -1
  57. package/dist-esm/lib/connection.types.d.ts +39 -12
  58. package/dist-esm/lib/handleError.d.ts +1 -3
  59. package/dist-esm/lib/handleError.js +3 -2
  60. package/dist-esm/lib/handleError.js.map +1 -1
  61. package/dist-esm/lib/ifs/read_stream.d.ts +6 -1
  62. package/dist-esm/lib/ifs/read_stream.js +23 -22
  63. package/dist-esm/lib/ifs/read_stream.js.map +1 -1
  64. package/dist-esm/lib/ifs/write_stream.d.ts +7 -1
  65. package/dist-esm/lib/ifs/write_stream.js +13 -14
  66. package/dist-esm/lib/ifs/write_stream.js.map +1 -1
  67. package/dist-esm/lib/inMemoryConnection.d.ts +1 -1
  68. package/dist-esm/lib/inMemoryConnection.js +4 -4
  69. package/dist-esm/lib/inMemoryConnection.js.map +1 -1
  70. package/dist-esm/lib/insertList.js +12 -13
  71. package/dist-esm/lib/insertList.js.map +1 -1
  72. package/dist-esm/lib/jdbcstream.d.ts +16 -1
  73. package/dist-esm/lib/jdbcstream.js +31 -36
  74. package/dist-esm/lib/jdbcstream.js.map +1 -1
  75. package/dist-esm/lib/jdbcwritestream.d.ts +4 -1
  76. package/dist-esm/lib/jdbcwritestream.js +7 -10
  77. package/dist-esm/lib/jdbcwritestream.js.map +1 -1
  78. package/dist-esm/lib/logger.d.ts +4 -4
  79. package/dist-esm/lib/logger.js.map +1 -1
  80. package/dist-esm/lib/sqlutil.d.ts +4 -1
  81. package/dist-esm/lib/sqlutil.js +1 -0
  82. package/dist-esm/lib/sqlutil.js.map +1 -1
  83. package/dist-esm/lib/streamTransformers.d.ts +2 -1
  84. package/dist-esm/lib/streamTransformers.js +1 -1
  85. package/dist-esm/lib/streamTransformers.js.map +1 -1
  86. package/java/lib/jt400wrap.jar +0 -0
  87. package/package.json +16 -21
  88. package/dist-cjs/integration-test/call-rpg-spec.d.cts +0 -2
  89. package/dist-cjs/integration-test/call-rpg-spec.js +0 -101
  90. package/dist-cjs/integration-test/call-rpg-spec.js.map +0 -1
  91. package/dist-cjs/integration-test/dataq-spec.d.cts +0 -2
  92. package/dist-cjs/integration-test/dataq-spec.js +0 -57
  93. package/dist-cjs/integration-test/dataq-spec.js.map +0 -1
  94. package/dist-cjs/integration-test/db.d.cts +0 -8
  95. package/dist-cjs/integration-test/db.js +0 -31
  96. package/dist-cjs/integration-test/db.js.map +0 -1
  97. package/dist-cjs/integration-test/db2-connect-spec.d.cts +0 -2
  98. package/dist-cjs/integration-test/db2-connect-spec.js +0 -42
  99. package/dist-cjs/integration-test/db2-connect-spec.js.map +0 -1
  100. package/dist-cjs/integration-test/db2-pool-spec.d.cts +0 -2
  101. package/dist-cjs/integration-test/db2-pool-spec.js +0 -213
  102. package/dist-cjs/integration-test/db2-pool-spec.js.map +0 -1
  103. package/dist-cjs/integration-test/ifs-spec.d.cts +0 -2
  104. package/dist-cjs/integration-test/ifs-spec.js +0 -140
  105. package/dist-cjs/integration-test/ifs-spec.js.map +0 -1
  106. package/dist-cjs/integration-test/msgf-spec.d.cts +0 -2
  107. package/dist-cjs/integration-test/msgf-spec.js +0 -34
  108. package/dist-cjs/integration-test/msgf-spec.js.map +0 -1
  109. package/dist-cjs/integration-test/msgq-spec.d.cts +0 -2
  110. package/dist-cjs/integration-test/msgq-spec.js +0 -45
  111. package/dist-cjs/integration-test/msgq-spec.js.map +0 -1
  112. package/dist-cjs/unit-test/hsql-spec.d.cts +0 -2
  113. package/dist-cjs/unit-test/hsql-spec.js +0 -488
  114. package/dist-cjs/unit-test/hsql-spec.js.map +0 -1
  115. package/dist-cjs/unit-test/sqlutil-spec.d.cts +0 -2
  116. package/dist-cjs/unit-test/sqlutil-spec.js +0 -43
  117. package/dist-cjs/unit-test/sqlutil-spec.js.map +0 -1
  118. package/dist-cjs/unit-test/streamTransformers-spec.d.cts +0 -2
  119. package/dist-cjs/unit-test/streamTransformers-spec.js +0 -121
  120. package/dist-cjs/unit-test/streamTransformers-spec.js.map +0 -1
  121. package/dist-esm/integration-test/call-rpg-spec.d.ts +0 -2
  122. package/dist-esm/integration-test/call-rpg-spec.js +0 -79
  123. package/dist-esm/integration-test/call-rpg-spec.js.map +0 -1
  124. package/dist-esm/integration-test/dataq-spec.d.ts +0 -2
  125. package/dist-esm/integration-test/dataq-spec.js +0 -35
  126. package/dist-esm/integration-test/dataq-spec.js.map +0 -1
  127. package/dist-esm/integration-test/db.d.ts +0 -8
  128. package/dist-esm/integration-test/db.js +0 -8
  129. package/dist-esm/integration-test/db.js.map +0 -1
  130. package/dist-esm/integration-test/db2-connect-spec.d.ts +0 -2
  131. package/dist-esm/integration-test/db2-connect-spec.js +0 -20
  132. package/dist-esm/integration-test/db2-connect-spec.js.map +0 -1
  133. package/dist-esm/integration-test/db2-pool-spec.d.ts +0 -2
  134. package/dist-esm/integration-test/db2-pool-spec.js +0 -197
  135. package/dist-esm/integration-test/db2-pool-spec.js.map +0 -1
  136. package/dist-esm/integration-test/ifs-spec.d.ts +0 -2
  137. package/dist-esm/integration-test/ifs-spec.js +0 -118
  138. package/dist-esm/integration-test/ifs-spec.js.map +0 -1
  139. package/dist-esm/integration-test/msgf-spec.d.ts +0 -2
  140. package/dist-esm/integration-test/msgf-spec.js +0 -12
  141. package/dist-esm/integration-test/msgf-spec.js.map +0 -1
  142. package/dist-esm/integration-test/msgq-spec.d.ts +0 -2
  143. package/dist-esm/integration-test/msgq-spec.js +0 -23
  144. package/dist-esm/integration-test/msgq-spec.js.map +0 -1
  145. package/dist-esm/unit-test/hsql-spec.d.ts +0 -2
  146. package/dist-esm/unit-test/hsql-spec.js +0 -466
  147. package/dist-esm/unit-test/hsql-spec.js.map +0 -1
  148. package/dist-esm/unit-test/sqlutil-spec.d.ts +0 -2
  149. package/dist-esm/unit-test/sqlutil-spec.js +0 -21
  150. package/dist-esm/unit-test/sqlutil-spec.js.map +0 -1
  151. package/dist-esm/unit-test/streamTransformers-spec.d.ts +0 -2
  152. package/dist-esm/unit-test/streamTransformers-spec.js +0 -99
  153. package/dist-esm/unit-test/streamTransformers-spec.js.map +0 -1
@@ -1,18 +1,25 @@
1
1
  import { Connection } from './lib/connection.types.cjs';
2
- export { AS400Message, DataQOptions, DataQReadOptions, JustNameMessageQ, JustPathMessageQ, KeyedDataQ, MessageFileHandler, MessageFileHandlerOptions, MessageFileReadOptions, MessageQ, MessageQOptions, MessageQReadOptions, PgmParamStructType, PgmParamType, PgmParamType1, PgmParamType2, ProgramDefinitionOptions, TransactionFun } from './lib/connection.types.cjs';
2
+ export { AS400Message, ColumnInfo, DataQOptions, DataQReadOptions, DataQReadResult, GetTablesParams, JustNameMessageQ, JustPathMessageQ, KeyedDataQ, MessageFileHandler, MessageFileHandlerOptions, MessageFileReadOptions, MessageQ, MessageQMessage, MessageQOptions, MessageQReadOptions, PgmParamStructType, PgmParamType, PgmParamType1, PgmParamType2, PrimaryKeyInfo, ProgramDefinitionOptions, TransactionFun } from './lib/connection.types.cjs';
3
3
  import { InMemoryConnection } from './lib/inMemoryConnection.cjs';
4
4
  import { Logger } from './lib/logger.cjs';
5
- export { BLOB, BaseConnection, BatchUpdate, CLOB, Close, CreateReadStream, CreateWriteStream, Execute, InsertAndGetId, InsertList, Metadata, Param, Query, QueryOptions, Statement, Update, WriteStreamOptions } from './lib/baseConnection.types.cjs';
5
+ export { BLOB, BaseConnection, BatchUpdate, CLOB, Close, CreateReadStream, CreateWriteStream, CursorOptions, Execute, InsertAndGetId, InsertList, Metadata, Param, Query, QueryOptions, Statement, StreamOptions, Update, WriteStreamOptions } from './lib/baseConnection.types.cjs';
6
6
  export { Ifs, IfsFileMetadata } from './lib/ifs/types.cjs';
7
7
  export { Readable, Writable } from 'stream';
8
8
  import './java/index.cjs';
9
9
  import './java/JT400.cjs';
10
10
 
11
+ interface JT400Config {
12
+ host?: string;
13
+ user?: string;
14
+ password?: string;
15
+ naming?: string;
16
+ [key: string]: unknown;
17
+ }
11
18
  type JT400Options = {
12
19
  logger?: Logger;
13
20
  };
14
- declare function pool(config?: {}, options?: JT400Options): Connection;
15
- declare function connect(config?: {}, options?: JT400Options): Promise<Connection>;
21
+ declare function pool(config?: JT400Config, options?: JT400Options): Connection;
22
+ declare function connect(config?: JT400Config, options?: JT400Options): Promise<Connection>;
16
23
  declare function useInMemoryDb(options?: JT400Options): InMemoryConnection;
17
24
 
18
- export { Connection, InMemoryConnection, type JT400Options, Logger, connect, pool, useInMemoryDb };
25
+ export { Connection, InMemoryConnection, type JT400Config, type JT400Options, Logger, connect, pool, useInMemoryDb };
@@ -1 +1 @@
1
- {"version":3,"sources":["../ts-src/index.ts"],"sourcesContent":["import { initJavaBridge } from './java/index.js'\nimport { createConnection } from './lib/connection.js'\nimport { Connection } from './lib/connection.types.js'\nimport {\n createInMemoryConnection,\n type InMemoryConnection,\n} from './lib/inMemoryConnection.js'\nimport { createInsertListInOneStatment } from './lib/insertList.js'\nimport { createDefaultLogger, type Logger } from './lib/logger.js'\n\nexport * from './lib/baseConnection.types.js'\nexport * from './lib/connection.types.js'\nexport * from './lib/ifs/types.js'\nexport type { InMemoryConnection, Logger }\n\nconst defaultConfig = {\n host: process.env.AS400_HOST,\n user: process.env.AS400_USERNAME,\n password: process.env.AS400_PASSWORD,\n naming: 'system',\n}\n\nlet javaBridge: ReturnType<typeof initJavaBridge> | null = null\n\nfunction getJavaBridge() {\n if (!javaBridge) {\n javaBridge = initJavaBridge()\n }\n return javaBridge\n}\nexport type JT400Options = {\n logger?: Logger\n}\nexport function pool(config = {}, options: JT400Options = {}): Connection {\n const bridge = getJavaBridge()\n const javaCon = bridge.createPool(\n JSON.stringify({ ...defaultConfig, ...config }),\n )\n return createConnection({\n connection: javaCon,\n insertListFun: createInsertListInOneStatment,\n logger: options.logger || createDefaultLogger(),\n inMemory: false,\n })\n}\nexport async function connect(\n config = {},\n options: JT400Options = {},\n): Promise<Connection> {\n const bridge = getJavaBridge()\n const javaCon = await bridge.createConnection(\n JSON.stringify({ ...defaultConfig, ...config }),\n )\n return createConnection({\n connection: javaCon,\n insertListFun: createInsertListInOneStatment,\n logger: options.logger || createDefaultLogger(),\n inMemory: false,\n })\n}\n\nexport function useInMemoryDb(options: JT400Options = {}): InMemoryConnection {\n return createInMemoryConnection(\n getJavaBridge(),\n options.logger || createDefaultLogger(),\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA+B;AAC/B,wBAAiC;AAEjC,gCAGO;AACP,wBAA8C;AAC9C,oBAAiD;AAEjD,0BAAc,0CAVd;AAWA,0BAAc,sCAXd;AAYA,0BAAc,+BAZd;AAeA,MAAM,gBAAgB;AAAA,EACpB,MAAM,QAAQ,IAAI;AAAA,EAClB,MAAM,QAAQ,IAAI;AAAA,EAClB,UAAU,QAAQ,IAAI;AAAA,EACtB,QAAQ;AACV;AAEA,IAAI,aAAuD;AAE3D,SAAS,gBAAgB;AACvB,MAAI,CAAC,YAAY;AACf,qBAAa,4BAAe;AAAA,EAC9B;AACA,SAAO;AACT;AAIO,SAAS,KAAK,SAAS,CAAC,GAAG,UAAwB,CAAC,GAAe;AACxE,QAAM,SAAS,cAAc;AAC7B,QAAM,UAAU,OAAO;AAAA,IACrB,KAAK,UAAU,EAAE,GAAG,eAAe,GAAG,OAAO,CAAC;AAAA,EAChD;AACA,aAAO,oCAAiB;AAAA,IACtB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ,QAAQ,cAAU,mCAAoB;AAAA,IAC9C,UAAU;AAAA,EACZ,CAAC;AACH;AACA,eAAsB,QACpB,SAAS,CAAC,GACV,UAAwB,CAAC,GACJ;AACrB,QAAM,SAAS,cAAc;AAC7B,QAAM,UAAU,MAAM,OAAO;AAAA,IAC3B,KAAK,UAAU,EAAE,GAAG,eAAe,GAAG,OAAO,CAAC;AAAA,EAChD;AACA,aAAO,oCAAiB;AAAA,IACtB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ,QAAQ,cAAU,mCAAoB;AAAA,IAC9C,UAAU;AAAA,EACZ,CAAC;AACH;AAEO,SAAS,cAAc,UAAwB,CAAC,GAAuB;AAC5E,aAAO;AAAA,IACL,cAAc;AAAA,IACd,QAAQ,cAAU,mCAAoB;AAAA,EACxC;AACF;","names":[]}
1
+ {"version":3,"sources":["../ts-src/index.ts"],"sourcesContent":["import { initJavaBridge } from './java/index.js'\nimport { createConnection } from './lib/connection.js'\nimport { Connection } from './lib/connection.types.js'\nimport {\n createInMemoryConnection,\n type InMemoryConnection,\n} from './lib/inMemoryConnection.js'\nimport { createInsertListInOneStatment } from './lib/insertList.js'\nimport { createDefaultLogger, type Logger } from './lib/logger.js'\n\nexport * from './lib/baseConnection.types.js'\nexport * from './lib/connection.types.js'\nexport * from './lib/ifs/types.js'\nexport type { InMemoryConnection, Logger }\n\nconst defaultConfig = {\n host: process.env.AS400_HOST,\n user: process.env.AS400_USERNAME,\n password: process.env.AS400_PASSWORD,\n naming: 'system',\n}\n\nlet javaBridge: ReturnType<typeof initJavaBridge> | null = null\n\nfunction getJavaBridge() {\n if (!javaBridge) {\n javaBridge = initJavaBridge()\n }\n return javaBridge\n}\nexport interface JT400Config {\n host?: string\n user?: string\n password?: string\n naming?: string\n [key: string]: unknown\n}\n\nexport type JT400Options = {\n logger?: Logger\n}\nexport function pool(config: JT400Config = {}, options: JT400Options = {}): Connection {\n const bridge = getJavaBridge()\n const javaCon = bridge.createPool(\n JSON.stringify({ ...defaultConfig, ...config }),\n )\n return createConnection({\n connection: javaCon,\n insertListFun: createInsertListInOneStatment,\n logger: options.logger || createDefaultLogger(),\n inMemory: false,\n })\n}\nexport async function connect(\n config: JT400Config = {},\n options: JT400Options = {},\n): Promise<Connection> {\n const bridge = getJavaBridge()\n const javaCon = await bridge.createConnection(\n JSON.stringify({ ...defaultConfig, ...config }),\n )\n return createConnection({\n connection: javaCon,\n insertListFun: createInsertListInOneStatment,\n logger: options.logger || createDefaultLogger(),\n inMemory: false,\n })\n}\n\nexport function useInMemoryDb(options: JT400Options = {}): InMemoryConnection {\n return createInMemoryConnection(\n getJavaBridge(),\n options.logger || createDefaultLogger(),\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA+B;AAC/B,wBAAiC;AAEjC,gCAGO;AACP,wBAA8C;AAC9C,oBAAiD;AAEjD,0BAAc,0CAVd;AAWA,0BAAc,sCAXd;AAYA,0BAAc,+BAZd;AAeA,MAAM,gBAAgB;AAAA,EACpB,MAAM,QAAQ,IAAI;AAAA,EAClB,MAAM,QAAQ,IAAI;AAAA,EAClB,UAAU,QAAQ,IAAI;AAAA,EACtB,QAAQ;AACV;AAEA,IAAI,aAAuD;AAE3D,SAAS,gBAAgB;AACvB,MAAI,CAAC,YAAY;AACf,qBAAa,4BAAe;AAAA,EAC9B;AACA,SAAO;AACT;AAYO,SAAS,KAAK,SAAsB,CAAC,GAAG,UAAwB,CAAC,GAAe;AACrF,QAAM,SAAS,cAAc;AAC7B,QAAM,UAAU,OAAO;AAAA,IACrB,KAAK,UAAU,EAAE,GAAG,eAAe,GAAG,OAAO,CAAC;AAAA,EAChD;AACA,aAAO,oCAAiB;AAAA,IACtB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ,QAAQ,cAAU,mCAAoB;AAAA,IAC9C,UAAU;AAAA,EACZ,CAAC;AACH;AACA,eAAsB,QACpB,SAAsB,CAAC,GACvB,UAAwB,CAAC,GACJ;AACrB,QAAM,SAAS,cAAc;AAC7B,QAAM,UAAU,MAAM,OAAO;AAAA,IAC3B,KAAK,UAAU,EAAE,GAAG,eAAe,GAAG,OAAO,CAAC;AAAA,EAChD;AACA,aAAO,oCAAiB;AAAA,IACtB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ,QAAQ,cAAU,mCAAoB;AAAA,IAC9C,UAAU;AAAA,EACZ,CAAC;AACH;AAEO,SAAS,cAAc,UAAwB,CAAC,GAAuB;AAC5E,aAAO;AAAA,IACL,cAAc;AAAA,IACd,QAAQ,cAAU,mCAAoB;AAAA,EACxC;AACF;","names":[]}
@@ -21,8 +21,8 @@ interface JDBCConnection {
21
21
  query: (sql: string, jsonParams: string, trim: boolean) => Promise<string>;
22
22
  queryAsStream: (sql: string, jsonParams: string, bufferSize: number) => Promise<ResultStream>;
23
23
  execute: (sql: string, jsonParams: string) => Promise<StatementWrap>;
24
- getTablesAsStreamSync: (catalog: string, schema: string, tableName: string) => TablesReadStream;
25
- getColumns: (catalog: string, schema: string, tableNamePattern: string, columnNamePattern: string) => Promise<string>;
24
+ getTablesAsStreamSync: (catalog: string | undefined, schema: string, tableName: string) => TablesReadStream;
25
+ getColumns: (catalog: string | undefined, schema: string, tableNamePattern: string, columnNamePattern: string) => Promise<string>;
26
26
  update: (sql: string, jsonParams: string) => Promise<number>;
27
27
  batchUpdate: (sql: string, jsonParams: string) => Promise<number[]>;
28
28
  insertAndGetId: (sql: string, jsonParams: string) => Promise<number>;
@@ -71,7 +71,7 @@ interface IfsWriteStream {
71
71
  }
72
72
  interface JT400 extends JDBCConnection {
73
73
  createTransactionSync: () => Transaction;
74
- getPrimaryKeys: (catalog: string, schema: string, table: string) => Promise<string>;
74
+ getPrimaryKeys: (catalog: string | undefined, schema: string | undefined, table: string) => Promise<string>;
75
75
  pgmSync: (programName: string, paramsSchemaJsonStr: string, libraryName?: string, ccsid?: number) => Pgm;
76
76
  openMessageQ: (name: string, isPath: boolean) => Promise<MessageQ>;
77
77
  createKeyedDataQSync: (name: string) => KeyedDataQ;
@@ -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 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
+ {"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 | undefined,\n schema: string,\n tableName: string,\n ) => TablesReadStream\n getColumns: (\n catalog: string | undefined,\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 commit: () => Promise<void>\n rollback: () => Promise<void>\n createStatement: () => Promise<StatementWrap>\n /** CursorWrap not yet used in current implementation */\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>\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 | undefined,\n schema: string | undefined,\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":[]}
@@ -30,10 +30,13 @@ __export(java_exports, {
30
30
  initJavaBridge: () => initJavaBridge
31
31
  });
32
32
  module.exports = __toCommonJS(java_exports);
33
+ var getImportMetaUrl = () => typeof document === "undefined" ? new URL(`file:${__filename}`).href : document.currentScript && document.currentScript.tagName.toUpperCase() === "SCRIPT" ? document.currentScript.src : new URL("main.js", document.baseURI).href;
34
+ var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
33
35
  var import_java_bridge = __toESM(require("java-bridge"), 1);
34
36
  var import_path = require("path");
37
+ var import_url = require("url");
35
38
  const initJavaBridge = () => {
36
- const JAR_DIR = (0, import_path.join)(__dirname, "/../../java/lib");
39
+ const JAR_DIR = (0, import_path.join)((0, import_path.dirname)((0, import_url.fileURLToPath)(importMetaUrl)), "/../../java/lib");
37
40
  import_java_bridge.default.appendClasspath([
38
41
  (0, import_path.join)(JAR_DIR, "jt400.jar"),
39
42
  (0, import_path.join)(JAR_DIR, "jt400wrap.jar"),
@@ -51,9 +54,7 @@ const initJavaBridge = () => {
51
54
  const HsqlClientClass = import_java_bridge.default.importClass("nodejt400.HsqlClient");
52
55
  return {
53
56
  createConnection: (config) => JT400Class.createConnection(config),
54
- // async
55
57
  createPool: (config) => JT400Class.createPoolSync(config),
56
- // sync si tu wrapper lo expone
57
58
  createInMemoryConnection: () => {
58
59
  const instance = new HsqlClientClass();
59
60
  return instance;
@@ -1 +1 @@
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"]}
1
+ {"version":3,"sources":["../../ts-src/java/index.ts","../../node_modules/tsup/assets/cjs_shims.js"],"sourcesContent":["import java from 'java-bridge'\nimport { dirname, join as joinPath } from 'path'\nimport { fileURLToPath } from 'url'\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(fileURLToPath(import.meta.url)), '/../../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 java.ensureJvm({\n opts: [\n '-Xrs',\n '-Dcom.ibm.as400.access.AS400.guiAvailable=false',\n '--enable-native-access=ALL-UNNAMED',\n ],\n })\n\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>,\n createPool: (config: string) => JT400Class.createPoolSync(config) as JT400,\n createInMemoryConnection: () => {\n const instance = new HsqlClientClass()\n return instance as unknown as JT400\n },\n }\n}\n","// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACKA,IAAM,mBAAmB,MACvB,OAAO,aAAa,cAChB,IAAI,IAAI,QAAQ,UAAU,EAAE,EAAE,OAC7B,SAAS,iBAAiB,SAAS,cAAc,QAAQ,YAAY,MAAM,WAC1E,SAAS,cAAc,MACvB,IAAI,IAAI,WAAW,SAAS,OAAO,EAAE;AAEtC,IAAM,gBAAgC,iCAAiB;ADZ9D,yBAAiB;AACjB,kBAA0C;AAC1C,iBAA8B;AASvB,MAAM,iBAAiB,MAAkB;AAC9C,QAAM,cAAU,YAAAA,UAAS,yBAAQ,0BAAc,aAAe,CAAC,GAAG,iBAAiB;AAEnF,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;AAED,qBAAAC,QAAK,UAAU;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AAED,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,IACpC,YAAY,CAAC,WAAmB,WAAW,eAAe,MAAM;AAAA,IAChE,0BAA0B,MAAM;AAC9B,YAAM,WAAW,IAAI,gBAAgB;AACrC,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["joinPath","java"]}
@@ -31,6 +31,105 @@ function convertDateValues(v) {
31
31
  function paramsToJson(params) {
32
32
  return JSON.stringify((params || []).map(convertDateValues));
33
33
  }
34
+ function buildStatementWrapper(st, ctx) {
35
+ let stream;
36
+ return {
37
+ prepare(sql) {
38
+ return st.prepare(sql);
39
+ },
40
+ isQuery() {
41
+ return st.isQuerySync();
42
+ },
43
+ async metadata() {
44
+ return st.getMetaData().then(JSON.parse);
45
+ },
46
+ async asArray() {
47
+ const startTime = ctx ? process.hrtime.bigint() : 0n;
48
+ return st.asArray().then(JSON.parse).then((result) => {
49
+ if (ctx) {
50
+ ctx.logger.info({
51
+ sql: ctx.sql,
52
+ state: "finished",
53
+ duration: Number(process.hrtime.bigint() - startTime),
54
+ parameterCount: ctx.params.length,
55
+ resultSize: result.length
56
+ }, "IBMI DB query executed");
57
+ }
58
+ return result;
59
+ });
60
+ },
61
+ asStream(options) {
62
+ const startTime = ctx ? process.hrtime.bigint() : 0n;
63
+ stream = new import_jdbcstream.JdbcStream({
64
+ jdbcStream: st.asStreamSync(options?.bufferSize ?? 100)
65
+ });
66
+ if (ctx) {
67
+ stream.on("end", () => {
68
+ ctx.logger.info({
69
+ sql: ctx.sql,
70
+ state: "finished",
71
+ duration: Number(process.hrtime.bigint() - startTime),
72
+ parameterCount: ctx.params.length
73
+ }, "IBMI DB query as stream ended");
74
+ });
75
+ }
76
+ return stream;
77
+ },
78
+ asObjectStream(options) {
79
+ const startTime = ctx ? process.hrtime.bigint() : 0n;
80
+ return st.getMetaData().then(JSON.parse).then((metadata) => {
81
+ const transformArrayToObject = (0, import_streamTransformers.arrayToObject)(metadata);
82
+ const parseJSON = (0, import_JSONStream.parse)("*");
83
+ stream = new import_jdbcstream.JdbcStream({
84
+ jdbcStream: st.asStreamSync(options?.bufferSize ?? 100)
85
+ });
86
+ if (ctx) {
87
+ stream.on("end", () => {
88
+ ctx.logger.info({
89
+ sql: ctx.sql,
90
+ state: "finished",
91
+ duration: Number(process.hrtime.bigint() - startTime),
92
+ parameterCount: ctx.params.length
93
+ }, "IBMI DB query as object stream ended");
94
+ });
95
+ }
96
+ return stream.pipe(parseJSON).pipe(transformArrayToObject);
97
+ });
98
+ },
99
+ asIterable() {
100
+ const startTime = ctx ? process.hrtime.bigint() : 0n;
101
+ return {
102
+ [Symbol.asyncIterator]() {
103
+ return {
104
+ async next() {
105
+ return st.next().then(JSON.parse).then((value) => {
106
+ const done = !value;
107
+ if (done && ctx) {
108
+ ctx.logger.info({
109
+ sql: ctx.sql,
110
+ state: "finished",
111
+ duration: Number(process.hrtime.bigint() - startTime),
112
+ parameterCount: ctx.params.length
113
+ }, "IBMI DB query as iterable executed");
114
+ }
115
+ return { done, value };
116
+ });
117
+ }
118
+ };
119
+ }
120
+ };
121
+ },
122
+ updated() {
123
+ return st.updated();
124
+ },
125
+ close() {
126
+ if (stream) {
127
+ return stream.close();
128
+ }
129
+ return st.close();
130
+ }
131
+ };
132
+ }
34
133
  const createBaseConnection = function(jdbcConnection, insertListFun, logger, inMemory) {
35
134
  const baseConnection = {
36
135
  async commit() {
@@ -49,57 +148,11 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
49
148
  "createStatement is not supported by this JDBCConnection"
50
149
  );
51
150
  }
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
- });
151
+ return jdbcConnection.createStatement().then((st) => buildStatementWrapper(st));
99
152
  },
100
153
  query(sql, params = [], options) {
101
154
  const jsonParams = paramsToJson(params);
102
- const trim = options && options.trim !== void 0 ? options.trim : true;
155
+ const trim = options?.trim !== void 0 ? options.trim : true;
103
156
  logger.debug(
104
157
  { sql, state: "starting", parameterCount: params.length },
105
158
  "Executing IBMI DB query"
@@ -148,122 +201,7 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
148
201
  { sql, state: "starting", parameterCount: params.length },
149
202
  "Executing IBMI DB sql statement"
150
203
  );
151
- return jdbcConnection.execute(sql, jsonParams).then((statement) => {
152
- const isQuery = statement.isQuerySync();
153
- let stream;
154
- const stWrap = {
155
- prepare(prepSql) {
156
- return statement.prepare(prepSql);
157
- },
158
- isQuery() {
159
- return isQuery;
160
- },
161
- metadata() {
162
- return statement.getMetaData().then(JSON.parse);
163
- },
164
- asArray() {
165
- const startTime = process.hrtime.bigint();
166
- return statement.asArray().then(JSON.parse).then((result) => {
167
- logger.info(
168
- {
169
- sql,
170
- state: "finished",
171
- duration: Number(process.hrtime.bigint() - startTime),
172
- parameterCount: params.length,
173
- resultSize: result.length
174
- },
175
- "IBMI DB query executed"
176
- );
177
- return result;
178
- });
179
- },
180
- asStream(options) {
181
- const startTime = process.hrtime.bigint();
182
- options = options || {};
183
- stream = new import_jdbcstream.JdbcStream({
184
- jdbcStream: statement.asStreamSync(options.bufferSize || 100)
185
- });
186
- stream.on("end", () => {
187
- logger.info(
188
- {
189
- sql,
190
- state: "finished",
191
- duration: Number(process.hrtime.bigint() - startTime),
192
- parameterCount: params.length
193
- },
194
- "IBMI DB query as stream ended"
195
- );
196
- });
197
- return stream;
198
- },
199
- asObjectStream(options) {
200
- const startTime = process.hrtime.bigint();
201
- options = options || {};
202
- const parseJSON = (0, import_JSONStream.parse)("*");
203
- return statement.getMetaData().then(JSON.parse).then((metadata) => {
204
- const transformArrayToObject = (0, import_streamTransformers.arrayToObject)(metadata);
205
- stream = new import_jdbcstream.JdbcStream({
206
- jdbcStream: statement.asStreamSync(
207
- options.bufferSize || 100
208
- )
209
- });
210
- stream.on("end", () => {
211
- logger.info(
212
- {
213
- sql,
214
- state: "finished",
215
- duration: Number(process.hrtime.bigint() - startTime),
216
- parameterCount: params.length
217
- },
218
- "IBMI DB query as object stream ended"
219
- );
220
- });
221
- return stream.pipe(parseJSON).pipe(transformArrayToObject);
222
- });
223
- },
224
- asIterable() {
225
- const startTime = process.hrtime.bigint();
226
- return {
227
- [Symbol.asyncIterator]() {
228
- return {
229
- async next() {
230
- return statement.next().then(JSON.parse).then((value) => {
231
- const done = !value;
232
- if (done) {
233
- logger.info(
234
- {
235
- sql,
236
- state: "finished",
237
- duration: Number(
238
- process.hrtime.bigint() - startTime
239
- ),
240
- parameterCount: jsonParams.length
241
- },
242
- "IBMI DB query as iterable executed"
243
- );
244
- }
245
- return {
246
- done,
247
- value
248
- };
249
- });
250
- }
251
- };
252
- }
253
- };
254
- },
255
- updated() {
256
- return statement.updated();
257
- },
258
- close() {
259
- if (stream) {
260
- return stream.close();
261
- }
262
- return statement.close();
263
- }
264
- };
265
- return stWrap;
266
- }).catch((0, import_handleError.handleError)({ sql, params }));
204
+ return jdbcConnection.execute(sql, jsonParams).then((st) => buildStatementWrapper(st, { sql, params, logger })).catch((0, import_handleError.handleError)({ sql, params }));
267
205
  },
268
206
  update(sql, params = []) {
269
207
  const jsonParams = paramsToJson(params);
@@ -292,7 +230,7 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
292
230
  const stream = (0, import_jdbcwritestream.createJdbcWriteStream)(
293
231
  baseConnection.batchUpdate,
294
232
  sql,
295
- options && options.bufferSize
233
+ options?.bufferSize
296
234
  );
297
235
  stream.on("finish", () => {
298
236
  logger.info(
@@ -307,7 +245,10 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
307
245
  return stream;
308
246
  },
309
247
  batchUpdate(sql, paramsList) {
310
- const params = (paramsList || []).map((row) => {
248
+ if (!paramsList || paramsList.length === 0) {
249
+ return Promise.resolve([]);
250
+ }
251
+ const params = paramsList.map((row) => {
311
252
  return row.map(convertDateValues);
312
253
  });
313
254
  const jsonParams = JSON.stringify(params);
@@ -354,6 +295,23 @@ const createBaseConnection = function(jdbcConnection, insertListFun, logger, inM
354
295
  insertList(tableName, idColumn, list) {
355
296
  return insertListFun(baseConnection)(tableName, idColumn, list);
356
297
  },
298
+ queryCursor(sql, params = []) {
299
+ const jsonParams = paramsToJson(params);
300
+ return (async function* () {
301
+ const st = await jdbcConnection.execute(sql, jsonParams).catch((0, import_handleError.handleError)({ sql, params }));
302
+ try {
303
+ while (true) {
304
+ const json = await st.next();
305
+ if (!json) break;
306
+ const row = JSON.parse(json);
307
+ if (row === null || row === void 0) break;
308
+ yield row;
309
+ }
310
+ } finally {
311
+ await st.close();
312
+ }
313
+ })();
314
+ },
357
315
  isInMemory() {
358
316
  return inMemory;
359
317
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ts-src/lib/baseConnection.ts"],"sourcesContent":["import { parse } from 'JSONStream'\nimport { JDBCConnection } from '../java/JT400.js'\nimport { BaseConnection, Param } from './baseConnection.types.js'\nimport { handleError } from './handleError.js'\nimport { CreateInsertList } from './insertList.js'\nimport { JdbcStream } from './jdbcstream.js'\nimport { createJdbcWriteStream } from './jdbcwritestream.js'\nimport { Logger } from './logger.js'\nimport { arrayToObject } from './streamTransformers.js'\n\nfunction convertDateValues(v: any) {\n return v instanceof Date\n ? v.toISOString().replace('T', ' ').replace('Z', '')\n : v\n}\n\nfunction paramsToJson(params: Param[]) {\n return JSON.stringify((params || []).map(convertDateValues))\n}\n\nexport const createBaseConnection = function (\n jdbcConnection: JDBCConnection,\n insertListFun: CreateInsertList,\n logger: Logger,\n inMemory: boolean,\n): BaseConnection {\n const baseConnection: BaseConnection = {\n async commit() {\n return jdbcConnection.commit().catch((err) => {\n throw handleError({})(err)\n })\n },\n async rollback() {\n return jdbcConnection.rollback().catch((err) => {\n throw handleError({})(err)\n })\n },\n async createStatement() {\n if (!jdbcConnection.createStatement) {\n throw new Error(\n 'createStatement is not supported by this JDBCConnection',\n )\n }\n\n return jdbcConnection.createStatement().then((st) => {\n return {\n prepare(sql: string) {\n return st.prepare(sql)\n },\n isQuery() {\n return st.isQuerySync()\n },\n async metadata() {\n return st.getMetaData().then(JSON.parse)\n },\n async asArray() {\n return st.asArray().then(JSON.parse)\n },\n asIterable() {\n return {\n [Symbol.asyncIterator]: async function * () {\n while (true) {\n const row = await st.next().then(JSON.parse)\n if (!row) break\n yield row\n }\n },\n }\n },\n asStream(options) {\n return new JdbcStream({\n jdbcStream: st.asStreamSync(options?.bufferSize ?? 100),\n })\n },\n asObjectStream(options) {\n return st\n .getMetaData()\n .then(JSON.parse)\n .then((metadata) => {\n const transform = arrayToObject(metadata)\n const stream = new JdbcStream({\n jdbcStream: st.asStreamSync(options?.bufferSize ?? 100),\n })\n return stream.pipe(parse('*')).pipe(transform)\n })\n },\n updated() {\n return st.updated()\n },\n close() {\n return st.close()\n },\n }\n })\n },\n query(sql, params = [], options) {\n const jsonParams = paramsToJson(params)\n\n // Sending default options to java\n const trim = options && options.trim !== undefined ? options.trim : true\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB query',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .query(sql, jsonParams, trim)\n .then(JSON.parse)\n .then((result: any[]) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n resultSize: result.length,\n },\n 'IBMI DB query executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n createReadStream(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB query as stream',\n )\n const startTime = process.hrtime.bigint()\n const stream = new JdbcStream({\n jdbcStreamPromise: jdbcConnection\n .queryAsStream(sql, jsonParams, 100)\n .catch(handleError({ sql, params })),\n })\n stream.on('end', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB query as stream ended',\n )\n })\n return stream\n },\n\n execute(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB sql statement',\n )\n\n return jdbcConnection\n .execute(sql, jsonParams)\n .then((statement) => {\n const isQuery = statement.isQuerySync()\n let stream\n\n const stWrap = {\n prepare(prepSql: string) {\n return statement.prepare(prepSql)\n },\n isQuery() {\n return isQuery\n },\n metadata() {\n return statement.getMetaData().then(JSON.parse)\n },\n asArray() {\n const startTime = process.hrtime.bigint()\n return statement\n .asArray()\n .then(JSON.parse)\n .then((result: any[]) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n resultSize: result.length,\n },\n 'IBMI DB query executed',\n )\n return result\n })\n },\n asStream(options) {\n const startTime = process.hrtime.bigint()\n options = options || {}\n stream = new JdbcStream({\n jdbcStream: statement.asStreamSync(options.bufferSize || 100),\n })\n stream.on('end', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB query as stream ended',\n )\n })\n return stream\n },\n asObjectStream(options) {\n const startTime = process.hrtime.bigint()\n options = options || {}\n const parseJSON = parse('*')\n\n return statement\n .getMetaData()\n .then(JSON.parse)\n .then((metadata) => {\n const transformArrayToObject = arrayToObject(metadata)\n stream = new JdbcStream({\n jdbcStream: statement.asStreamSync(\n options.bufferSize || 100,\n ),\n })\n stream.on('end', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB query as object stream ended',\n )\n })\n\n return stream.pipe(parseJSON).pipe(transformArrayToObject)\n })\n },\n asIterable() {\n const startTime = process.hrtime.bigint()\n return {\n [Symbol.asyncIterator]() {\n return {\n async next() {\n return statement\n .next()\n .then(JSON.parse)\n .then((value) => {\n const done = !value\n if (done) {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(\n process.hrtime.bigint() - startTime,\n ),\n parameterCount: jsonParams.length,\n },\n 'IBMI DB query as iterable executed',\n )\n }\n return {\n done,\n value,\n }\n })\n },\n }\n },\n }\n },\n updated() {\n return statement.updated()\n },\n close() {\n if (stream) {\n return stream.close()\n }\n return statement.close()\n },\n }\n\n return stWrap\n })\n .catch(handleError({ sql, params }))\n },\n update(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB update',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .update(sql, jsonParams)\n .then((result) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n result,\n },\n 'IBMI DB update executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n createWriteStream(sql, options) {\n logger.debug({ sql, state: 'starting' }, 'Executing IBMI DB write stream')\n const startTime = process.hrtime.bigint()\n const stream = createJdbcWriteStream(\n baseConnection.batchUpdate,\n sql,\n options && options.bufferSize,\n )\n stream.on('finish', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n },\n 'IBMI DB write stream ended',\n )\n })\n return stream\n },\n\n batchUpdate(sql, paramsList) {\n const params = (paramsList || []).map((row) => {\n return row.map(convertDateValues)\n })\n\n const jsonParams = JSON.stringify(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB batch update',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .batchUpdate(sql, jsonParams)\n .then((res) => {\n const result = Array.from(res)\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n result,\n },\n 'IBMI DB batch update executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n insertAndGetId(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB insert and get id',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .insertAndGetId(sql, jsonParams)\n .then((result) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB insert and get id executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n insertList(tableName, idColumn, list) {\n return insertListFun(baseConnection)(tableName, idColumn, list)\n },\n\n isInMemory() {\n return inMemory\n },\n }\n return baseConnection\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../ts-src/lib/baseConnection.ts"],"sourcesContent":["import { parse } from 'JSONStream'\nimport { JDBCConnection, StatementWrap } from '../java/JT400.js'\nimport { BaseConnection, Param, Statement, StreamOptions } from './baseConnection.types.js'\nimport { handleError } from './handleError.js'\nimport { CreateInsertList } from './insertList.js'\nimport { JdbcStream } from './jdbcstream.js'\nimport { createJdbcWriteStream } from './jdbcwritestream.js'\nimport { Logger } from './logger.js'\nimport { arrayToObject } from './streamTransformers.js'\n\nfunction convertDateValues(v: Param): Param {\n return v instanceof Date\n ? v.toISOString().replace('T', ' ').replace('Z', '')\n : v\n}\n\nfunction paramsToJson(params: Param[]) {\n return JSON.stringify((params || []).map(convertDateValues))\n}\n\ntype LogContext = { sql: string; params: Param[]; logger: Logger }\n\nfunction buildStatementWrapper(st: StatementWrap, ctx?: LogContext): Statement {\n let stream: JdbcStream | undefined\n\n return {\n prepare(sql: string) {\n return st.prepare(sql)\n },\n isQuery() {\n return st.isQuerySync()\n },\n async metadata() {\n return st.getMetaData().then(JSON.parse)\n },\n async asArray() {\n const startTime = ctx ? process.hrtime.bigint() : 0n\n return st.asArray().then(JSON.parse).then((result: unknown[]) => {\n if (ctx) {\n ctx.logger.info({\n sql: ctx.sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: ctx.params.length,\n resultSize: result.length,\n }, 'IBMI DB query executed')\n }\n return result as string[][]\n })\n },\n asStream(options?: StreamOptions) {\n const startTime = ctx ? process.hrtime.bigint() : 0n\n stream = new JdbcStream({\n jdbcStream: st.asStreamSync(options?.bufferSize ?? 100),\n })\n if (ctx) {\n stream.on('end', () => {\n ctx.logger.info({\n sql: ctx.sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: ctx.params.length,\n }, 'IBMI DB query as stream ended')\n })\n }\n return stream\n },\n asObjectStream(options?: StreamOptions) {\n const startTime = ctx ? process.hrtime.bigint() : 0n\n return st.getMetaData().then(JSON.parse).then((metadata) => {\n const transformArrayToObject = arrayToObject(metadata)\n const parseJSON = parse('*')\n stream = new JdbcStream({\n jdbcStream: st.asStreamSync(options?.bufferSize ?? 100),\n })\n if (ctx) {\n stream.on('end', () => {\n ctx.logger.info({\n sql: ctx.sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: ctx.params.length,\n }, 'IBMI DB query as object stream ended')\n })\n }\n return stream.pipe(parseJSON).pipe(transformArrayToObject)\n })\n },\n asIterable() {\n const startTime = ctx ? process.hrtime.bigint() : 0n\n return {\n [Symbol.asyncIterator]() {\n return {\n async next() {\n return st.next().then(JSON.parse).then((value) => {\n const done = !value\n if (done && ctx) {\n ctx.logger.info({\n sql: ctx.sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: ctx.params.length,\n }, 'IBMI DB query as iterable executed')\n }\n return { done, value }\n })\n },\n }\n },\n }\n },\n updated() {\n return st.updated()\n },\n close() {\n if (stream) {\n return stream.close()\n }\n return st.close()\n },\n }\n}\n\nexport const createBaseConnection = function (\n jdbcConnection: JDBCConnection,\n insertListFun: CreateInsertList,\n logger: Logger,\n inMemory: boolean,\n): BaseConnection {\n const baseConnection: BaseConnection = {\n async commit() {\n return jdbcConnection.commit().catch((err) => {\n throw handleError({})(err)\n })\n },\n async rollback() {\n return jdbcConnection.rollback().catch((err) => {\n throw handleError({})(err)\n })\n },\n async createStatement() {\n if (!jdbcConnection.createStatement) {\n throw new Error(\n 'createStatement is not supported by this JDBCConnection',\n )\n }\n return jdbcConnection.createStatement().then((st) => buildStatementWrapper(st))\n },\n query(sql, params = [], options) {\n const jsonParams = paramsToJson(params)\n const trim = options?.trim !== undefined ? options.trim : true\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB query',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .query(sql, jsonParams, trim)\n .then(JSON.parse)\n .then((result: unknown[]) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n resultSize: result.length,\n },\n 'IBMI DB query executed',\n )\n return result as never[]\n })\n .catch(handleError({ sql, params }))\n },\n\n createReadStream(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB query as stream',\n )\n const startTime = process.hrtime.bigint()\n const stream = new JdbcStream({\n jdbcStreamPromise: jdbcConnection\n .queryAsStream(sql, jsonParams, 100)\n .catch(handleError({ sql, params })),\n })\n stream.on('end', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB query as stream ended',\n )\n })\n return stream\n },\n\n execute(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.debug(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB sql statement',\n )\n return jdbcConnection\n .execute(sql, jsonParams)\n .then((st) => buildStatementWrapper(st, { sql, params, logger }))\n .catch(handleError({ sql, params }))\n },\n\n update(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB update',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .update(sql, jsonParams)\n .then((result) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n result,\n },\n 'IBMI DB update executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n createWriteStream(sql, options) {\n logger.debug({ sql, state: 'starting' }, 'Executing IBMI DB write stream')\n const startTime = process.hrtime.bigint()\n const stream = createJdbcWriteStream(\n baseConnection.batchUpdate,\n sql,\n options?.bufferSize,\n )\n stream.on('finish', () => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n },\n 'IBMI DB write stream ended',\n )\n })\n return stream\n },\n\n batchUpdate(sql, paramsList) {\n if (!paramsList || paramsList.length === 0) {\n return Promise.resolve([])\n }\n const params = paramsList.map((row) => {\n return row.map(convertDateValues)\n })\n\n const jsonParams = JSON.stringify(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB batch update',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .batchUpdate(sql, jsonParams)\n .then((res) => {\n const result = Array.from(res)\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n result,\n },\n 'IBMI DB batch update executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n insertAndGetId(sql, params = []) {\n const jsonParams = paramsToJson(params)\n logger.info(\n { sql, state: 'starting', parameterCount: params.length },\n 'Executing IBMI DB insert and get id',\n )\n const startTime = process.hrtime.bigint()\n return jdbcConnection\n .insertAndGetId(sql, jsonParams)\n .then((result) => {\n logger.info(\n {\n sql,\n state: 'finished',\n duration: Number(process.hrtime.bigint() - startTime),\n parameterCount: params.length,\n },\n 'IBMI DB insert and get id executed',\n )\n return result\n })\n .catch(handleError({ sql, params }))\n },\n\n insertList(tableName, idColumn, list) {\n return insertListFun(baseConnection)(tableName, idColumn, list)\n },\n\n queryCursor<T>(sql: string, params: Param[] = []) {\n const jsonParams = paramsToJson(params)\n return (async function* () {\n const st = await jdbcConnection\n .execute(sql, jsonParams)\n .catch(handleError({ sql, params }))\n try {\n while (true) {\n const json = await st.next()\n if (!json) break\n const row: T = JSON.parse(json)\n if (row === null || row === undefined) break\n yield row\n }\n } finally {\n await st.close()\n }\n })() as AsyncIterable<T>\n },\n\n isInMemory() {\n return inMemory\n },\n }\n return baseConnection\n}\n"],"mappings":"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","names":[]}
@@ -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
+ }
16
+ interface CursorOptions {
15
17
  }
16
18
  interface Metadata {
17
19
  name: string;
@@ -19,20 +21,23 @@ interface Metadata {
19
21
  precision: number;
20
22
  scale: number;
21
23
  }
24
+ interface StreamOptions {
25
+ bufferSize?: number;
26
+ }
22
27
  interface Statement {
23
28
  prepare: (sql: string) => Promise<void>;
24
29
  isQuery: () => boolean;
25
30
  metadata: () => Promise<Metadata[]>;
26
31
  asArray: () => Promise<string[][]>;
27
32
  asIterable: () => AsyncIterable<string[]>;
28
- asStream: (options?: any) => Readable;
29
- asObjectStream: (options?: any) => Promise<Readable>;
33
+ asStream: (options?: StreamOptions) => Readable;
34
+ asObjectStream: (options?: StreamOptions) => Promise<Readable>;
30
35
  updated: () => Promise<number>;
31
36
  close: Close;
32
37
  }
33
38
  type Execute = (sql: string, params?: Param[]) => Promise<Statement>;
34
39
  type Query = {
35
- <T>(sql: string, params?: Param[] | undefined, options?: QueryOptions, callback?: (error: any, cursor: any) => void): Promise<T[]>;
40
+ <T>(sql: string, params?: Param[] | undefined, options?: QueryOptions): Promise<T[]>;
36
41
  };
37
42
  type Update = (sql: string, params?: Param[]) => Promise<number>;
38
43
  type CreateReadStream = (sql: string, params?: Param[]) => Readable;
@@ -43,7 +48,7 @@ interface WriteStreamOptions {
43
48
  type CreateWriteStream = (sql: string, options?: WriteStreamOptions) => Writable;
44
49
  type BatchUpdate = (sql: string, params?: Param[][]) => Promise<number[]>;
45
50
  type Close = () => void;
46
- type InsertList = (tableName: string, idColumn: string, rows: any[]) => Promise<number[]>;
51
+ type InsertList = (tableName: string, idColumn: string, rows: Record<string, Param>[]) => Promise<number[]>;
47
52
  interface BaseConnection {
48
53
  query: Query;
49
54
  update: Update;
@@ -54,9 +59,10 @@ interface BaseConnection {
54
59
  createWriteStream: CreateWriteStream;
55
60
  batchUpdate: BatchUpdate;
56
61
  execute: Execute;
62
+ queryCursor: <T>(sql: string, params?: Param[], options?: CursorOptions) => AsyncIterable<T>;
57
63
  commit: () => Promise<void>;
58
64
  rollback: () => Promise<void>;
59
65
  createStatement: () => Promise<Statement>;
60
66
  }
61
67
 
62
- export type { BLOB, BaseConnection, BatchUpdate, CLOB, Close, CreateReadStream, CreateWriteStream, Execute, InsertAndGetId, InsertList, Metadata, Param, Query, QueryOptions, Statement, Update, WriteStreamOptions };
68
+ export type { BLOB, BaseConnection, BatchUpdate, CLOB, Close, CreateReadStream, CreateWriteStream, CursorOptions, Execute, InsertAndGetId, InsertList, Metadata, Param, Query, QueryOptions, Statement, StreamOptions, Update, WriteStreamOptions };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../ts-src/lib/baseConnection.types.ts"],"sourcesContent":["import { Readable, Writable } from 'stream'\nexport { Readable, Writable }\n\nexport interface CLOB {\n type: 'CLOB'\n value: string\n}\n\nexport interface BLOB {\n type: 'BLOB'\n value: string\n}\n\nexport type Param = string | number | Date | null | CLOB | BLOB\n\nexport interface QueryOptions {\n trim: boolean\n}\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":[]}
1
+ {"version":3,"sources":["../../ts-src/lib/baseConnection.types.ts"],"sourcesContent":["import { Readable, Writable } from 'stream'\nexport { Readable, Writable }\n\nexport interface CLOB {\n type: 'CLOB'\n value: string\n}\n\nexport interface BLOB {\n type: 'BLOB'\n value: string\n}\n\nexport type Param = string | number | Date | null | CLOB | BLOB\n\nexport interface QueryOptions {\n trim?: boolean\n}\n\nexport interface CursorOptions {\n // reserved for future options\n}\n\nexport interface Metadata {\n name: string\n typeName: string\n precision: number\n scale: number\n}\nexport interface StreamOptions {\n bufferSize?: number\n}\n\nexport interface Statement {\n prepare: (sql: string) => Promise<void>\n isQuery: () => boolean\n metadata: () => Promise<Metadata[]>\n asArray: () => Promise<string[][]>\n asIterable: () => AsyncIterable<string[]>\n asStream: (options?: StreamOptions) => Readable\n asObjectStream: (options?: StreamOptions) => Promise<Readable>\n updated: () => Promise<number>\n close: Close\n}\nexport type Execute = (sql: string, params?: Param[]) => Promise<Statement>\nexport type Query = {\n <T>(\n sql: string,\n params?: Param[] | undefined,\n options?: QueryOptions,\n ): Promise<T[]>\n}\nexport type Update = (sql: string, params?: Param[]) => Promise<number>\nexport type CreateReadStream = (sql: string, params?: Param[]) => Readable\nexport type InsertAndGetId = (sql: string, params?: Param[]) => Promise<number>\n\nexport interface WriteStreamOptions {\n bufferSize: number\n}\n\nexport type CreateWriteStream = (\n sql: string,\n options?: WriteStreamOptions,\n) => Writable\nexport type BatchUpdate = (sql: string, params?: Param[][]) => Promise<number[]>\nexport type Close = () => void\nexport type InsertList = (\n tableName: string,\n idColumn: string,\n rows: Record<string, Param>[],\n) => Promise<number[]>\nexport interface BaseConnection {\n query: Query\n update: Update\n isInMemory: () => boolean\n createReadStream: CreateReadStream\n insertAndGetId: InsertAndGetId\n insertList: InsertList\n createWriteStream: CreateWriteStream\n batchUpdate: BatchUpdate\n execute: Execute\n queryCursor: <T>(sql: string, params?: Param[], options?: CursorOptions) => AsyncIterable<T>\n\n commit: () => Promise<void>\n rollback: () => Promise<void>\n createStatement: () => Promise<Statement>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAmC;","names":[]}