@zowe/db2-for-zowe-cli 6.1.17 → 6.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -10
- package/lib/Db2PluginLifeCycle.d.ts +11 -9
- package/lib/Db2PluginLifeCycle.js +18 -13
- package/lib/Db2PluginLifeCycle.js.map +1 -1
- package/node_modules/adm-zip/adm-zip.js +32 -6
- package/node_modules/adm-zip/headers/entryHeader.js +13 -1
- package/node_modules/adm-zip/methods/inflater.js +33 -3
- package/node_modules/adm-zip/package.json +2 -2
- package/node_modules/adm-zip/util/errors.js +3 -0
- package/node_modules/adm-zip/util/utils.js +102 -14
- package/node_modules/adm-zip/zipEntry.js +43 -18
- package/node_modules/adm-zip/zipFile.js +10 -0
- package/node_modules/axios/CHANGELOG.md +62 -0
- package/node_modules/axios/README.md +236 -73
- package/node_modules/axios/dist/axios.js +1308 -357
- package/node_modules/axios/dist/axios.min.js +3 -3
- package/node_modules/axios/dist/axios.min.js.map +1 -1
- package/node_modules/axios/dist/browser/axios.cjs +1443 -403
- package/node_modules/axios/dist/esm/axios.js +1443 -403
- package/node_modules/axios/dist/esm/axios.min.js +2 -2
- package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
- package/node_modules/axios/dist/node/axios.cjs +1483 -348
- package/node_modules/axios/index.d.cts +24 -1
- package/node_modules/axios/index.d.ts +22 -1
- package/node_modules/axios/lib/adapters/fetch.js +136 -30
- package/node_modules/axios/lib/adapters/http.js +277 -74
- package/node_modules/axios/lib/adapters/xhr.js +172 -16
- package/node_modules/axios/lib/core/Axios.js +87 -27
- package/node_modules/axios/lib/core/AxiosError.js +59 -0
- package/node_modules/axios/lib/core/AxiosHeaders.js +17 -4
- package/node_modules/axios/lib/core/InterceptorManager.js +118 -8
- package/node_modules/axios/lib/core/assertParamsAcyclic.js +49 -0
- package/node_modules/axios/lib/core/buildFullPath.js +1 -13
- package/node_modules/axios/lib/core/createMultipartBody.js +37 -0
- package/node_modules/axios/lib/core/dispatchRequest.js +28 -2
- package/node_modules/axios/lib/core/mergeConfig.js +183 -120
- package/node_modules/axios/lib/core/methodList.js +17 -0
- package/node_modules/axios/lib/defaults/index.js +2 -1
- package/node_modules/axios/lib/defaults/transitional.js +1 -0
- package/node_modules/axios/lib/env/data.js +1 -1
- package/node_modules/axios/lib/helpers/AxiosTransformStream.js +11 -2
- package/node_modules/axios/lib/helpers/Http2Sessions.js +4 -1
- package/node_modules/axios/lib/helpers/HttpStatusCode.js +11 -1
- package/node_modules/axios/lib/helpers/composeSignals.js +6 -3
- package/node_modules/axios/lib/helpers/cookies.js +30 -6
- package/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js +34 -7
- package/node_modules/axios/lib/helpers/formDataToBlob.js +113 -0
- package/node_modules/axios/lib/helpers/formDataToJSON.js +25 -1
- package/node_modules/axios/lib/helpers/fromDataURI.js +11 -4
- package/node_modules/axios/lib/helpers/isURLSameOrigin.js +4 -9
- package/node_modules/axios/lib/helpers/normalizeURLForProtocolCheck.js +24 -0
- package/node_modules/axios/lib/helpers/parseHeaders.js +2 -1
- package/node_modules/axios/lib/helpers/parseProtocol.js +1 -1
- package/node_modules/axios/lib/helpers/progressEventReducer.js +1 -1
- package/node_modules/axios/lib/helpers/resolveConfig.js +20 -5
- package/node_modules/axios/lib/helpers/shouldBypassProxy.js +197 -6
- package/node_modules/axios/lib/helpers/throttle.js +3 -2
- package/node_modules/axios/lib/helpers/toFormData.js +14 -21
- package/node_modules/axios/lib/utils.js +192 -20
- package/node_modules/axios/package.json +1 -2
- package/node_modules/follow-redirects/README.md +27 -1
- package/node_modules/follow-redirects/index.js +11 -6
- package/node_modules/follow-redirects/package.json +1 -1
- package/node_modules/fs-extra/README.md +0 -1
- package/node_modules/fs-extra/lib/empty/index.js +4 -2
- package/node_modules/fs-extra/lib/util/stat.js +12 -2
- package/node_modules/fs-extra/package.json +1 -1
- package/node_modules/ibm_db/APIDocumentation.md +2883 -2024
- package/node_modules/ibm_db/LICENSE +23 -23
- package/node_modules/ibm_db/README.md +735 -735
- package/node_modules/ibm_db/binding.gyp +99 -98
- package/node_modules/ibm_db/installer/driverInstall.js +984 -958
- package/node_modules/ibm_db/installer/ifx.sh +38 -38
- package/node_modules/ibm_db/installer/setenv.sh +23 -23
- package/node_modules/ibm_db/installer/testODBCConnection.bat +51 -51
- package/node_modules/ibm_db/installer/testODBCConnection.sh +61 -61
- package/node_modules/ibm_db/lib/climacros.js +431 -431
- package/node_modules/ibm_db/lib/odbc.js +4293 -3487
- package/node_modules/ibm_db/lib/simple-queue.js +41 -41
- package/node_modules/ibm_db/package.json +70 -70
- package/node_modules/ibm_db/src/odbc.cpp +1495 -1396
- package/node_modules/ibm_db/src/odbc.h +477 -473
- package/node_modules/ibm_db/src/odbc_connection.cpp +1762 -1612
- package/node_modules/ibm_db/src/odbc_connection.h +228 -215
- package/node_modules/ibm_db/src/odbc_result.cpp +1547 -1547
- package/node_modules/ibm_db/src/odbc_result.h +152 -152
- package/node_modules/ibm_db/src/odbc_statement.cpp +2047 -861
- package/node_modules/ibm_db/src/odbc_statement.h +257 -135
- package/node_modules/ibm_db/src/strptime.c +389 -389
- package/node_modules/ibm_db/src/strptime.h +46 -46
- package/node_modules/ibm_db/test/README +23 -23
- package/node_modules/ibm_db/test/bench-insert.js +62 -62
- package/node_modules/ibm_db/test/bench-insertBatch10.js +74 -74
- package/node_modules/ibm_db/test/bench-insertBatch100.js +75 -75
- package/node_modules/ibm_db/test/bench-insertBatch1000.js +75 -75
- package/node_modules/ibm_db/test/bench-insertBatch10000.js +75 -75
- package/node_modules/ibm_db/test/bench-prepare-bind-execute-closeSync.js +60 -60
- package/node_modules/ibm_db/test/bench-prepare-bind-executeNonQuery.js +53 -53
- package/node_modules/ibm_db/test/bench-prepare-bindSync-execute-closeSync.js +50 -50
- package/node_modules/ibm_db/test/bench-prepare-bindSync-executeNonQuery.js +48 -48
- package/node_modules/ibm_db/test/bench-prepare-execute-closeSync.js +51 -51
- package/node_modules/ibm_db/test/bench-prepare-executeNonQuery.js +47 -47
- package/node_modules/ibm_db/test/bench-prepare-not.js +43 -43
- package/node_modules/ibm_db/test/bench-query-fetch.js +59 -59
- package/node_modules/ibm_db/test/bench-query-fetchAll.js +49 -49
- package/node_modules/ibm_db/test/bench-query-fetchAllSync.js +43 -43
- package/node_modules/ibm_db/test/bench-query.js +40 -40
- package/node_modules/ibm_db/test/bench-querySync-fetchArray.js +28 -28
- package/node_modules/ibm_db/test/bench-querySync.js +29 -29
- package/node_modules/ibm_db/test/common.d.ts +10 -10
- package/node_modules/ibm_db/test/common.js +127 -127
- package/node_modules/ibm_db/test/config.json +7 -7
- package/node_modules/ibm_db/test/config.zos.json +4 -4
- package/node_modules/ibm_db/test/data/sample1.txt +9 -9
- package/node_modules/ibm_db/test/data/trc.fmt +30114 -30114
- package/node_modules/ibm_db/test/nodeEE-leak-huge-query.js +152 -152
- package/node_modules/ibm_db/test/nodeEE-leak-multiple-query-multiple-connections.js +148 -148
- package/node_modules/ibm_db/test/nodeEE-leak-multiple-query-pool-connections.js +154 -154
- package/node_modules/ibm_db/test/nodeEE-leak-multiple-query.js +133 -133
- package/node_modules/ibm_db/test/nodeEE-stress-async-waterfall-multiple-connections.js +174 -174
- package/node_modules/ibm_db/test/nodeEE-stress-async-waterfall.js +169 -169
- package/node_modules/ibm_db/test/nodeEE-stress-mixed-query-multiple-connections.js +159 -159
- package/node_modules/ibm_db/test/nodeEE-stress-mixed-query.js +148 -148
- package/node_modules/ibm_db/test/odbc-bench.c +123 -123
- package/node_modules/ibm_db/test/perfTest.js +53 -53
- package/node_modules/ibm_db/test/quick-example.sh +30 -30
- package/node_modules/ibm_db/test/quick-example.ts +80 -80
- package/node_modules/ibm_db/test/run-bench.js +96 -96
- package/node_modules/ibm_db/test/run-nodeEE.js +132 -132
- package/node_modules/ibm_db/test/run-tests.js +132 -138
- package/node_modules/ibm_db/test/sql-cli.js +28 -28
- package/node_modules/ibm_db/test/test-all-data-types.js +109 -109
- package/node_modules/ibm_db/test/test-array-insert.js +178 -178
- package/node_modules/ibm_db/test/test-async-await.js +105 -105
- package/node_modules/ibm_db/test/test-attributes.js +34 -34
- package/node_modules/ibm_db/test/test-bad-pool-connection-prepare-execute.js +57 -57
- package/node_modules/ibm_db/test/test-basic-test.js +138 -138
- package/node_modules/ibm_db/test/test-binary-array-insert.js +73 -73
- package/node_modules/ibm_db/test/test-blob-from-file.js +90 -90
- package/node_modules/ibm_db/test/test-blob-insert.js +144 -144
- package/node_modules/ibm_db/test/test-blob-stream-insert.js +321 -299
- package/node_modules/ibm_db/test/test-blob-to-file.js +370 -370
- package/node_modules/ibm_db/test/test-block-fetch.js +364 -364
- package/node_modules/ibm_db/test/test-blocking-issue210.js +123 -123
- package/node_modules/ibm_db/test/test-call-async.js +64 -64
- package/node_modules/ibm_db/test/test-call-stmt.js +53 -53
- package/node_modules/ibm_db/test/test-cancel.js +703 -0
- package/node_modules/ibm_db/test/test-chinese-char.js +59 -59
- package/node_modules/ibm_db/test/test-connection.js +306 -0
- package/node_modules/ibm_db/test/test-date.js +32 -32
- package/node_modules/ibm_db/test/test-dbclob.js +93 -93
- package/node_modules/ibm_db/test/test-decimals.js +135 -135
- package/node_modules/ibm_db/test/test-describe-metadata.js +148 -0
- package/node_modules/ibm_db/test/test-executeFile.js +167 -167
- package/node_modules/ibm_db/test/test-executeFileSync.js +85 -85
- package/node_modules/ibm_db/test/test-fetch-apis.js +146 -146
- package/node_modules/ibm_db/test/test-fetchN.js +130 -130
- package/node_modules/ibm_db/test/test-getinfo.js +197 -197
- package/node_modules/ibm_db/test/test-ibm-db-issue14.js +58 -58
- package/node_modules/ibm_db/test/test-ibm-db-issue17.js +54 -54
- package/node_modules/ibm_db/test/test-ibm-db-issue18.js +54 -54
- package/node_modules/ibm_db/test/test-issue-1059-fetchAll-undefined.js +67 -67
- package/node_modules/ibm_db/test/test-issue-1080-array-blob-insert.js +40 -0
- package/node_modules/ibm_db/test/test-issue-54.js +39 -39
- package/node_modules/ibm_db/test/test-issue-get-column-value-2.js +44 -44
- package/node_modules/ibm_db/test/test-issue211.js +80 -80
- package/node_modules/ibm_db/test/test-issue253.js +39 -39
- package/node_modules/ibm_db/test/test-max-pool-size.js +96 -96
- package/node_modules/ibm_db/test/test-memory-leaks-new-objects.js +32 -32
- package/node_modules/ibm_db/test/test-multi-open-query-close.js +75 -75
- package/node_modules/ibm_db/test/test-param-put-data.js +713 -0
- package/node_modules/ibm_db/test/test-pool-idle-connection.js +72 -72
- package/node_modules/ibm_db/test/test-pool-operations.js +325 -0
- package/node_modules/ibm_db/test/test-pool-stale-connections.js +111 -111
- package/node_modules/ibm_db/test/test-pool-uncommited.js +33 -33
- package/node_modules/ibm_db/test/test-prepare-execute.js +339 -0
- package/node_modules/ibm_db/test/test-prepareSync-multiple-execution.js +93 -93
- package/node_modules/ibm_db/test/test-primary-foreign-keys.js +246 -0
- package/node_modules/ibm_db/test/test-procedures.js +243 -0
- package/node_modules/ibm_db/test/test-promise-all-data-types.js +42 -42
- package/node_modules/ibm_db/test/test-query-operations.js +405 -0
- package/node_modules/ibm_db/test/test-quick-example.js +25 -25
- package/node_modules/ibm_db/test/test-row-array-insert.js +167 -167
- package/node_modules/ibm_db/test/test-sp-array.js +54 -54
- package/node_modules/ibm_db/test/test-sp-dbc-6000.js +88 -88
- package/node_modules/ibm_db/test/test-sp-memleak.js +136 -136
- package/node_modules/ibm_db/test/test-sp-resultset-execute.js +269 -269
- package/node_modules/ibm_db/test/test-sp-resultset.js +228 -228
- package/node_modules/ibm_db/test/test-transactions.js +261 -0
- package/node_modules/ibm_db/test/test-typescript.js +48 -48
- package/node_modules/ibm_db/test/test-xml-datatype.js +70 -70
- package/node_modules/ibm_db/test/testWebApp.js +56 -56
- package/node_modules/ibm_db/test/trace +51 -51
- package/node_modules/ibm_db/test/typescript-apis-test.js +978 -978
- package/node_modules/ibm_db/test/webapp.html +17 -17
- package/node_modules/ibm_db/test/webapp.js +79 -79
- package/node_modules/ibm_db/typescript/README.md +28 -28
- package/node_modules/ibm_db/typescript/dist/Database.d.ts +26 -0
- package/node_modules/ibm_db/typescript/dist/ODBCStatement.d.ts +93 -0
- package/node_modules/string_decoder/node_modules/safe-buffer/LICENSE +21 -0
- package/node_modules/string_decoder/node_modules/safe-buffer/README.md +584 -0
- package/node_modules/string_decoder/node_modules/safe-buffer/index.d.ts +187 -0
- package/node_modules/string_decoder/node_modules/safe-buffer/index.js +62 -0
- package/node_modules/string_decoder/node_modules/safe-buffer/package.json +37 -0
- package/node_modules/which-typed-array/CHANGELOG.md +14 -0
- package/node_modules/which-typed-array/README.md +0 -2
- package/node_modules/which-typed-array/index.d.ts +288 -11
- package/node_modules/which-typed-array/index.js +6 -7
- package/node_modules/which-typed-array/package.json +12 -11
- package/package.json +10 -11
- package/node_modules/ibm_db/test/disabled/test-binding-statement-rebinding.js +0 -59
- package/node_modules/ibm_db/test/disabled/test-open-dont-close.js +0 -12
- package/node_modules/ibm_db/test/disabled/test-param-select-with-booleans-only.js +0 -21
- package/node_modules/ibm_db/test/disabled/test-param-select-with-decimals-only.js +0 -20
- package/node_modules/ibm_db/test/disabled/test-param-select-with-null.js +0 -21
- package/node_modules/ibm_db/test/disabled/test-param-select-with-nulls-mixed.js +0 -23
- package/node_modules/ibm_db/test/disabled/test-param-select-with-numbers-mixed.js +0 -22
- package/node_modules/ibm_db/test/disabled/test-param-select-with-numbers-only.js +0 -24
- package/node_modules/ibm_db/test/disabled/test-param-select-with-strings-only.js +0 -23
- package/node_modules/ibm_db/test/disabled/test-param-select-with-unicode.js +0 -15
- package/node_modules/ibm_db/test/disabled/test-prepare-bind-execute-closeSync.js +0 -62
- package/node_modules/ibm_db/test/disabled/test-prepare-bind-execute-error.js +0 -49
- package/node_modules/ibm_db/test/disabled/test-prepare-bind-execute-long-string.js +0 -63
- package/node_modules/ibm_db/test/disabled/test-prepare-bind-executeNonQuery.js +0 -63
- package/node_modules/ibm_db/test/disabled/test-prepare-bindSync-execute-closeSync.js +0 -46
- package/node_modules/ibm_db/test/disabled/test-prepare-bindSync-executeNonQuery.js +0 -50
- package/node_modules/ibm_db/test/disabled/test-prepare.js +0 -34
- package/node_modules/ibm_db/test/disabled/test-prepareSync.js +0 -29
- package/node_modules/ibm_db/test/disabled/test-query-select-fetchAll.js +0 -23
- package/node_modules/ibm_db/test/disabled/test-query-select-fetchAllSync.js +0 -23
- package/node_modules/ibm_db/test/disabled/test-query-select-unicode.js +0 -15
- package/node_modules/ibm_db/test/disabled/test-querySync-select-unicode.js +0 -20
- package/node_modules/ibm_db/test/test-affected-rows.js +0 -55
- package/node_modules/ibm_db/test/test-bad-connection-string.js +0 -30
- package/node_modules/ibm_db/test/test-binding-connection-timeOut.js +0 -31
- package/node_modules/ibm_db/test/test-binding-statement-executeSync.js +0 -84
- package/node_modules/ibm_db/test/test-binding-transaction-commit.js +0 -79
- package/node_modules/ibm_db/test/test-binding-transaction-commitSync.js +0 -53
- package/node_modules/ibm_db/test/test-closed.js +0 -14
- package/node_modules/ibm_db/test/test-connection-object.js +0 -16
- package/node_modules/ibm_db/test/test-describe-column.js +0 -92
- package/node_modules/ibm_db/test/test-describe-database.js +0 -18
- package/node_modules/ibm_db/test/test-describe-table.js +0 -31
- package/node_modules/ibm_db/test/test-domains-open.js +0 -19
- package/node_modules/ibm_db/test/test-global-open-close.js +0 -11
- package/node_modules/ibm_db/test/test-instantiate-one-and-end.js +0 -9
- package/node_modules/ibm_db/test/test-multi-open-close.js +0 -45
- package/node_modules/ibm_db/test/test-multi-openSync-closeSync.js +0 -52
- package/node_modules/ibm_db/test/test-open-close.js +0 -29
- package/node_modules/ibm_db/test/test-open-connectTimeout.js +0 -33
- package/node_modules/ibm_db/test/test-openSync.js +0 -31
- package/node_modules/ibm_db/test/test-pool-close.js +0 -120
- package/node_modules/ibm_db/test/test-pool-connect.js +0 -36
- package/node_modules/ibm_db/test/test-pool-rollbackTransaction.js +0 -35
- package/node_modules/ibm_db/test/test-prepareSync-bad-sql.js +0 -34
- package/node_modules/ibm_db/test/test-promise-open-close.js +0 -33
- package/node_modules/ibm_db/test/test-query-create-table-fetchSync.js +0 -23
- package/node_modules/ibm_db/test/test-query-create-table.js +0 -12
- package/node_modules/ibm_db/test/test-query-drop-table.js +0 -13
- package/node_modules/ibm_db/test/test-query-insert.js +0 -38
- package/node_modules/ibm_db/test/test-query-select-fetch.js +0 -21
- package/node_modules/ibm_db/test/test-query-select-fetchMode-array.js +0 -17
- package/node_modules/ibm_db/test/test-query-select.js +0 -64
- package/node_modules/ibm_db/test/test-queryResult.js +0 -35
- package/node_modules/ibm_db/test/test-queryStream.js +0 -43
- package/node_modules/ibm_db/test/test-querySync-select-with-exception.js +0 -25
- package/node_modules/ibm_db/test/test-querySync-select.js +0 -28
- package/node_modules/ibm_db/test/test-require-and-end.js +0 -8
- package/node_modules/ibm_db/test/test-statement-close.js +0 -118
- package/node_modules/ibm_db/test/test-transaction-commit-sync.js +0 -54
- package/node_modules/ibm_db/test/test-transaction-commit.js +0 -79
- package/node_modules/which-typed-array/eslint.config.mjs +0 -12
- package/node_modules/which-typed-array/test/index.js +0 -105
- /package/node_modules/{tar-fs/node_modules/chownr → chownr}/LICENSE +0 -0
- /package/node_modules/{tar-fs/node_modules/chownr → chownr}/README.md +0 -0
- /package/node_modules/{tar-fs/node_modules/chownr → chownr}/chownr.js +0 -0
- /package/node_modules/{tar-fs/node_modules/chownr → chownr}/package.json +0 -0
- /package/node_modules/{tar-stream/node_modules/string_decoder → string_decoder}/.travis.yml +0 -0
- /package/node_modules/{tar-stream/node_modules/string_decoder → string_decoder}/LICENSE +0 -0
- /package/node_modules/{tar-stream/node_modules/string_decoder → string_decoder}/README.md +0 -0
- /package/node_modules/{tar-stream/node_modules/string_decoder → string_decoder}/lib/string_decoder.js +0 -0
- /package/node_modules/{tar-stream/node_modules/string_decoder → string_decoder}/package.json +0 -0
|
@@ -1,111 +1,111 @@
|
|
|
1
|
-
var common = require("./common")
|
|
2
|
-
, ibmdb = require("../")
|
|
3
|
-
, pool = new ibmdb.Pool()
|
|
4
|
-
, connectionString = common.connectionString
|
|
5
|
-
, assert = require("assert")
|
|
6
|
-
, connectCount = 10
|
|
7
|
-
;
|
|
8
|
-
|
|
9
|
-
var i=0;
|
|
10
|
-
var timeout = 2000; // Change it to 20000 when running single test file for actual testing.
|
|
11
|
-
console.log("---------------------------------------------------------------");
|
|
12
|
-
console.log("After first iteration and before start of second iteration,");
|
|
13
|
-
console.log("restart the server using 'db2stop force; db2start' command.");
|
|
14
|
-
console.log("---------------------------------------------------------------");
|
|
15
|
-
//ibmdb.debug(true);
|
|
16
|
-
pool.setMaxPoolSize(connectCount);
|
|
17
|
-
|
|
18
|
-
var pool2 = new ibmdb.Pool();
|
|
19
|
-
var timer2;
|
|
20
|
-
var timer = setInterval(function() {
|
|
21
|
-
var j = i;
|
|
22
|
-
console.log('start'+j);
|
|
23
|
-
if(i==3){
|
|
24
|
-
pool2.close();
|
|
25
|
-
clearInterval(timer);
|
|
26
|
-
}
|
|
27
|
-
pool2.open(connectionString, function (err, connection) {
|
|
28
|
-
if (err) {
|
|
29
|
-
console.log("Connection " + err.toString());
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
connection.beginTransactionSync();
|
|
33
|
-
connection.query("select 1 from sysibm.sysdummy1",
|
|
34
|
-
function (err, results) {
|
|
35
|
-
if (err) {
|
|
36
|
-
console.log(err.toString());
|
|
37
|
-
assert.equal(err['message'].search("SQL30081N"),18);
|
|
38
|
-
}else{
|
|
39
|
-
console.log(JSON.stringify(results));
|
|
40
|
-
assert.equal(JSON.stringify(results), '[{"1":1}]');
|
|
41
|
-
connection.commitTransactionSync();
|
|
42
|
-
}
|
|
43
|
-
connection.close(function () {
|
|
44
|
-
console.log('Connection closed');
|
|
45
|
-
console.log('done'+j);
|
|
46
|
-
if(j == 0) {
|
|
47
|
-
console.log("<=== Now restart the server using " +
|
|
48
|
-
"'db2stop force; db2start' command. ====>");
|
|
49
|
-
}
|
|
50
|
-
if( j == 3 ) openMultipleConnections();
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
i++;
|
|
55
|
-
}, timeout); // Change timeout to 20000 for actual test.
|
|
56
|
-
|
|
57
|
-
function openMultipleConnections()
|
|
58
|
-
{
|
|
59
|
-
console.log("\n Test 1:\n", "=======");
|
|
60
|
-
console.log("Open", connectCount, "connections from pool.\n");
|
|
61
|
-
var query = "select 'abc' as col from sysibm.sysdummy1";
|
|
62
|
-
for (var x = 1; x <= connectCount; x++)
|
|
63
|
-
{
|
|
64
|
-
(function (connectionIndex) {
|
|
65
|
-
console.error("Opening connection #", connectionIndex);
|
|
66
|
-
pool.open(connectionString, function (err, connection) {
|
|
67
|
-
if (err) {
|
|
68
|
-
console.error("error: ", err.message);
|
|
69
|
-
assert.equal(err.message, null);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
console.log("Data for query" + connectionIndex + " = ",
|
|
73
|
-
connection.querySync(query));
|
|
74
|
-
connection.closeSync();
|
|
75
|
-
|
|
76
|
-
if (connectionIndex == connectCount) {
|
|
77
|
-
testStaleConnection();
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
})(x);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function testStaleConnection()
|
|
85
|
-
{
|
|
86
|
-
console.log("\n Test 2:\n", "=======");
|
|
87
|
-
console.log("Test Stale Connections...\n");
|
|
88
|
-
console.log("<=== Restart the server using " +
|
|
89
|
-
"'db2stop force; db2start' command. ====>\n");
|
|
90
|
-
var query = "select 1 from sysibm.sysdummy1";
|
|
91
|
-
var result;
|
|
92
|
-
setTimeout( function() {
|
|
93
|
-
for (var x = 1; x <= connectCount; x++)
|
|
94
|
-
{
|
|
95
|
-
var connection = pool.openSync(connectionString);
|
|
96
|
-
console.error("Got connection #", x, "from pool.");
|
|
97
|
-
|
|
98
|
-
result = connection.querySync(query);
|
|
99
|
-
if(result['message']) {
|
|
100
|
-
console.log("error = ", result['message']);
|
|
101
|
-
assert.equal(result['sqlcode'], -30081);
|
|
102
|
-
} else {
|
|
103
|
-
console.log("Data", x, "= ", JSON.stringify(result));
|
|
104
|
-
assert.equal(JSON.stringify(result), '[{"1":1}]');
|
|
105
|
-
}
|
|
106
|
-
connection.closeSync();
|
|
107
|
-
console.log('Connection', x, 'closed');
|
|
108
|
-
}
|
|
109
|
-
pool.closeSync();
|
|
110
|
-
}, timeout); // Change timeout to 20000 for actual test.
|
|
111
|
-
}
|
|
1
|
+
var common = require("./common")
|
|
2
|
+
, ibmdb = require("../")
|
|
3
|
+
, pool = new ibmdb.Pool()
|
|
4
|
+
, connectionString = common.connectionString
|
|
5
|
+
, assert = require("assert")
|
|
6
|
+
, connectCount = 10
|
|
7
|
+
;
|
|
8
|
+
|
|
9
|
+
var i=0;
|
|
10
|
+
var timeout = 2000; // Change it to 20000 when running single test file for actual testing.
|
|
11
|
+
console.log("---------------------------------------------------------------");
|
|
12
|
+
console.log("After first iteration and before start of second iteration,");
|
|
13
|
+
console.log("restart the server using 'db2stop force; db2start' command.");
|
|
14
|
+
console.log("---------------------------------------------------------------");
|
|
15
|
+
//ibmdb.debug(true);
|
|
16
|
+
pool.setMaxPoolSize(connectCount);
|
|
17
|
+
|
|
18
|
+
var pool2 = new ibmdb.Pool();
|
|
19
|
+
var timer2;
|
|
20
|
+
var timer = setInterval(function() {
|
|
21
|
+
var j = i;
|
|
22
|
+
console.log('start'+j);
|
|
23
|
+
if(i==3){
|
|
24
|
+
pool2.close();
|
|
25
|
+
clearInterval(timer);
|
|
26
|
+
}
|
|
27
|
+
pool2.open(connectionString, function (err, connection) {
|
|
28
|
+
if (err) {
|
|
29
|
+
console.log("Connection " + err.toString());
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
connection.beginTransactionSync();
|
|
33
|
+
connection.query("select 1 from sysibm.sysdummy1",
|
|
34
|
+
function (err, results) {
|
|
35
|
+
if (err) {
|
|
36
|
+
console.log(err.toString());
|
|
37
|
+
assert.equal(err['message'].search("SQL30081N"),18);
|
|
38
|
+
}else{
|
|
39
|
+
console.log(JSON.stringify(results));
|
|
40
|
+
assert.equal(JSON.stringify(results), '[{"1":1}]');
|
|
41
|
+
connection.commitTransactionSync();
|
|
42
|
+
}
|
|
43
|
+
connection.close(function () {
|
|
44
|
+
console.log('Connection closed');
|
|
45
|
+
console.log('done'+j);
|
|
46
|
+
if(j == 0) {
|
|
47
|
+
console.log("<=== Now restart the server using " +
|
|
48
|
+
"'db2stop force; db2start' command. ====>");
|
|
49
|
+
}
|
|
50
|
+
if( j == 3 ) openMultipleConnections();
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
i++;
|
|
55
|
+
}, timeout); // Change timeout to 20000 for actual test.
|
|
56
|
+
|
|
57
|
+
function openMultipleConnections()
|
|
58
|
+
{
|
|
59
|
+
console.log("\n Test 1:\n", "=======");
|
|
60
|
+
console.log("Open", connectCount, "connections from pool.\n");
|
|
61
|
+
var query = "select 'abc' as col from sysibm.sysdummy1";
|
|
62
|
+
for (var x = 1; x <= connectCount; x++)
|
|
63
|
+
{
|
|
64
|
+
(function (connectionIndex) {
|
|
65
|
+
console.error("Opening connection #", connectionIndex);
|
|
66
|
+
pool.open(connectionString, function (err, connection) {
|
|
67
|
+
if (err) {
|
|
68
|
+
console.error("error: ", err.message);
|
|
69
|
+
assert.equal(err.message, null);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
console.log("Data for query" + connectionIndex + " = ",
|
|
73
|
+
connection.querySync(query));
|
|
74
|
+
connection.closeSync();
|
|
75
|
+
|
|
76
|
+
if (connectionIndex == connectCount) {
|
|
77
|
+
testStaleConnection();
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
})(x);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function testStaleConnection()
|
|
85
|
+
{
|
|
86
|
+
console.log("\n Test 2:\n", "=======");
|
|
87
|
+
console.log("Test Stale Connections...\n");
|
|
88
|
+
console.log("<=== Restart the server using " +
|
|
89
|
+
"'db2stop force; db2start' command. ====>\n");
|
|
90
|
+
var query = "select 1 from sysibm.sysdummy1";
|
|
91
|
+
var result;
|
|
92
|
+
setTimeout( function() {
|
|
93
|
+
for (var x = 1; x <= connectCount; x++)
|
|
94
|
+
{
|
|
95
|
+
var connection = pool.openSync(connectionString);
|
|
96
|
+
console.error("Got connection #", x, "from pool.");
|
|
97
|
+
|
|
98
|
+
result = connection.querySync(query);
|
|
99
|
+
if(result['message']) {
|
|
100
|
+
console.log("error = ", result['message']);
|
|
101
|
+
assert.equal(result['sqlcode'], -30081);
|
|
102
|
+
} else {
|
|
103
|
+
console.log("Data", x, "= ", JSON.stringify(result));
|
|
104
|
+
assert.equal(JSON.stringify(result), '[{"1":1}]');
|
|
105
|
+
}
|
|
106
|
+
connection.closeSync();
|
|
107
|
+
console.log('Connection', x, 'closed');
|
|
108
|
+
}
|
|
109
|
+
pool.closeSync();
|
|
110
|
+
}, timeout); // Change timeout to 20000 for actual test.
|
|
111
|
+
}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
var common = require("./common")
|
|
2
|
-
, ibmdb = require("../")
|
|
3
|
-
, pool = new ibmdb.Pool()
|
|
4
|
-
, cn = common.connectionString
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var request = function (err, conn) {
|
|
8
|
-
if (err) {
|
|
9
|
-
console.log(err);
|
|
10
|
-
process.exit(-1);
|
|
11
|
-
}
|
|
12
|
-
try {
|
|
13
|
-
conn.querySync("drop table mytab4");
|
|
14
|
-
} catch(e) {};
|
|
15
|
-
conn.beginTransaction(function (err) {
|
|
16
|
-
if (err) {
|
|
17
|
-
//could not begin a transaction for some reason.
|
|
18
|
-
console.log(err);
|
|
19
|
-
return conn.closeSync();
|
|
20
|
-
}
|
|
21
|
-
conn.querySync("create table mytab4 (c1 int, c2 varchar(20))");
|
|
22
|
-
conn.querySync("insert into mytab4 values( 3, 'bimal')");
|
|
23
|
-
console.log(conn.querySync("select * from mytab4"));
|
|
24
|
-
conn.close(function(){});
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
pool.open(cn, request);
|
|
29
|
-
pool.open(cn, request);
|
|
30
|
-
setTimeout(function() {
|
|
31
|
-
pool.open(cn, request);
|
|
32
|
-
pool.open(cn, request);
|
|
33
|
-
}, 8000);
|
|
1
|
+
var common = require("./common")
|
|
2
|
+
, ibmdb = require("../")
|
|
3
|
+
, pool = new ibmdb.Pool()
|
|
4
|
+
, cn = common.connectionString
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var request = function (err, conn) {
|
|
8
|
+
if (err) {
|
|
9
|
+
console.log(err);
|
|
10
|
+
process.exit(-1);
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
conn.querySync("drop table mytab4");
|
|
14
|
+
} catch(e) {};
|
|
15
|
+
conn.beginTransaction(function (err) {
|
|
16
|
+
if (err) {
|
|
17
|
+
//could not begin a transaction for some reason.
|
|
18
|
+
console.log(err);
|
|
19
|
+
return conn.closeSync();
|
|
20
|
+
}
|
|
21
|
+
conn.querySync("create table mytab4 (c1 int, c2 varchar(20))");
|
|
22
|
+
conn.querySync("insert into mytab4 values( 3, 'bimal')");
|
|
23
|
+
console.log(conn.querySync("select * from mytab4"));
|
|
24
|
+
conn.close(function(){});
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
pool.open(cn, request);
|
|
29
|
+
pool.open(cn, request);
|
|
30
|
+
setTimeout(function() {
|
|
31
|
+
pool.open(cn, request);
|
|
32
|
+
pool.open(cn, request);
|
|
33
|
+
}, 8000);
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
// Consolidated prepare/execute test: prepare, bind, execute (sync/async),
|
|
2
|
+
// executeNonQuery, bad SQL, multiple execution, affected rows, statement close.
|
|
3
|
+
// Replaces: test-prepareSync-bad-sql, test-affected-rows, test-statement-close,
|
|
4
|
+
// test-binding-statement-executeSync.
|
|
5
|
+
|
|
6
|
+
var common = require("./common")
|
|
7
|
+
, ibmdb = require("../")
|
|
8
|
+
, assert = require("assert")
|
|
9
|
+
, os = require("os")
|
|
10
|
+
, cn = common.connectionString
|
|
11
|
+
;
|
|
12
|
+
|
|
13
|
+
var passed = 0, failed = 0;
|
|
14
|
+
|
|
15
|
+
function ok(label) { passed++; console.log(" PASS: " + label); }
|
|
16
|
+
function fail(label, detail) { failed++; console.log(" FAIL: " + label + " " + (detail || "")); }
|
|
17
|
+
|
|
18
|
+
main();
|
|
19
|
+
|
|
20
|
+
async function main() {
|
|
21
|
+
var conn;
|
|
22
|
+
try {
|
|
23
|
+
conn = await ibmdb.open(cn);
|
|
24
|
+
} catch(e) {
|
|
25
|
+
console.log("Connection failed:", e);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
await testPrepareSyncBadSql(conn);
|
|
30
|
+
await testPrepareBindExecuteSync(conn);
|
|
31
|
+
await testPrepareBindExecuteAsync(conn);
|
|
32
|
+
await testExecuteNonQuery(conn);
|
|
33
|
+
await testAffectedRows(conn);
|
|
34
|
+
await testMultipleExecution(conn);
|
|
35
|
+
await testStatementClose(conn);
|
|
36
|
+
await testBindingLevelStatement(conn);
|
|
37
|
+
|
|
38
|
+
await conn.close();
|
|
39
|
+
console.log("\n===== Prepare/Execute Tests: %d passed, %d failed =====", passed, failed);
|
|
40
|
+
process.exit(failed ? 1 : 0);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// prepareSync with bad SQL (deferred prepare may not throw until execute)
|
|
44
|
+
async function testPrepareSyncBadSql(conn) {
|
|
45
|
+
console.log("\n[testPrepareSyncBadSql]");
|
|
46
|
+
try {
|
|
47
|
+
var stmt = conn.prepareSync("asdf asdf asdf asdf");
|
|
48
|
+
// With deferred prepare on LUW, prepareSync may succeed
|
|
49
|
+
assert.equal(stmt.constructor.name, "ODBCStatement");
|
|
50
|
+
|
|
51
|
+
// Execute should fail
|
|
52
|
+
return new Promise(function(resolve) {
|
|
53
|
+
stmt.execute(function(err, result) {
|
|
54
|
+
try {
|
|
55
|
+
assert.ok(err, "execute of bad SQL should produce error");
|
|
56
|
+
ok("bad SQL: execute returns error after deferred prepare");
|
|
57
|
+
} catch(e) { fail("bad SQL execute", e.message); }
|
|
58
|
+
|
|
59
|
+
// executeNonQuery should also fail
|
|
60
|
+
stmt.executeNonQuery(function(err, count) {
|
|
61
|
+
try {
|
|
62
|
+
assert.ok(err, "executeNonQuery of bad SQL should produce error");
|
|
63
|
+
ok("bad SQL: executeNonQuery returns error");
|
|
64
|
+
} catch(e) { fail("bad SQL executeNonQuery", e.message); }
|
|
65
|
+
resolve();
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
} catch(e) {
|
|
70
|
+
// z/OS or non-deferred prepare: error at prepare time
|
|
71
|
+
ok("bad SQL: prepareSync throws on non-deferred prepare");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Prepare + bindSync + executeSync
|
|
76
|
+
async function testPrepareBindExecuteSync(conn) {
|
|
77
|
+
console.log("\n[testPrepareBindExecuteSync]");
|
|
78
|
+
try {
|
|
79
|
+
await conn.query("drop table pbe_tab").catch(function() {});
|
|
80
|
+
await conn.query("create table pbe_tab (c1 int, c2 varchar(20))");
|
|
81
|
+
|
|
82
|
+
var stmt = conn.prepareSync("insert into pbe_tab values (?, ?)");
|
|
83
|
+
assert.equal(stmt.constructor.name, "ODBCStatement");
|
|
84
|
+
|
|
85
|
+
var r = stmt.bindSync([10, 'hello']);
|
|
86
|
+
assert.equal(r, true, "bindSync should return true");
|
|
87
|
+
|
|
88
|
+
var result = stmt.executeSync();
|
|
89
|
+
assert.equal(result.constructor.name, "ODBCResult");
|
|
90
|
+
result.closeSync();
|
|
91
|
+
|
|
92
|
+
var data = conn.querySync("select * from pbe_tab");
|
|
93
|
+
assert.deepEqual(data, [{ C1: 10, C2: 'hello' }]);
|
|
94
|
+
ok("prepareSync + bindSync + executeSync");
|
|
95
|
+
|
|
96
|
+
stmt.closeSync();
|
|
97
|
+
await conn.query("drop table pbe_tab");
|
|
98
|
+
} catch(e) { fail("prepare/bind/executeSync", e.message); }
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Prepare + execute with params (async callback)
|
|
102
|
+
async function testPrepareBindExecuteAsync(conn) {
|
|
103
|
+
console.log("\n[testPrepareBindExecuteAsync]");
|
|
104
|
+
try {
|
|
105
|
+
await conn.query("drop table pbe_async").catch(function() {});
|
|
106
|
+
await conn.query("create table pbe_async (c1 int, c2 varchar(20))");
|
|
107
|
+
} catch(e) { fail("setup pbe_async", e.message); return; }
|
|
108
|
+
|
|
109
|
+
return new Promise(function(resolve) {
|
|
110
|
+
conn.prepare("insert into pbe_async values (?, ?)", function(err, stmt) {
|
|
111
|
+
if (err) { fail("prepare async", err.message); resolve(); return; }
|
|
112
|
+
|
|
113
|
+
stmt.execute([5, 'world'], function(err, result) {
|
|
114
|
+
if (err) { fail("execute async", err.message); resolve(); return; }
|
|
115
|
+
result.closeSync();
|
|
116
|
+
|
|
117
|
+
var data = conn.querySync("select * from pbe_async");
|
|
118
|
+
try {
|
|
119
|
+
assert.deepEqual(data, [{ C1: 5, C2: 'world' }]);
|
|
120
|
+
ok("prepare + execute async with params");
|
|
121
|
+
} catch(e) { fail("async execute verify", e.message); }
|
|
122
|
+
|
|
123
|
+
stmt.closeSync();
|
|
124
|
+
conn.querySync("drop table pbe_async");
|
|
125
|
+
resolve();
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// executeNonQuery (returns affected row count directly)
|
|
132
|
+
async function testExecuteNonQuery(conn) {
|
|
133
|
+
console.log("\n[testExecuteNonQuery]");
|
|
134
|
+
try {
|
|
135
|
+
await conn.query("drop table enq_tab").catch(function() {});
|
|
136
|
+
await conn.query("create table enq_tab (c1 int, c2 varchar(20))");
|
|
137
|
+
|
|
138
|
+
var stmt = await conn.prepare("insert into enq_tab values (?, ?)");
|
|
139
|
+
var count = await stmt.executeNonQuery([1, 'one']);
|
|
140
|
+
assert.equal(count, 1);
|
|
141
|
+
ok("executeNonQuery returns 1 for single insert");
|
|
142
|
+
|
|
143
|
+
count = await stmt.executeNonQuery([2, 'two']);
|
|
144
|
+
assert.equal(count, 1);
|
|
145
|
+
|
|
146
|
+
// executeNonQuerySync
|
|
147
|
+
var insertedRows = stmt.executeNonQuerySync([3, 'three']);
|
|
148
|
+
assert.equal(insertedRows, 1);
|
|
149
|
+
ok("executeNonQuerySync returns 1");
|
|
150
|
+
|
|
151
|
+
stmt.closeSync();
|
|
152
|
+
await conn.query("drop table enq_tab");
|
|
153
|
+
} catch(e) { fail("executeNonQuery", e.message); }
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// getAffectedRowsSync after insert/update/delete
|
|
157
|
+
async function testAffectedRows(conn) {
|
|
158
|
+
console.log("\n[testAffectedRows]");
|
|
159
|
+
try {
|
|
160
|
+
await conn.query("drop table ar_tab").catch(function() {});
|
|
161
|
+
await conn.query("create table ar_tab (c1 int, c2 varchar(10))");
|
|
162
|
+
conn.querySync("insert into ar_tab values (1, 'a')");
|
|
163
|
+
conn.querySync("insert into ar_tab values (2, 'b')");
|
|
164
|
+
conn.querySync("insert into ar_tab values (3, 'c')");
|
|
165
|
+
} catch(e) { fail("affected rows setup", e.message); return; }
|
|
166
|
+
|
|
167
|
+
return new Promise(function(resolve) {
|
|
168
|
+
conn.prepare("update ar_tab set c2 = 'x' where c1 > ?", function(err, stmt) {
|
|
169
|
+
if (err) { fail("affected rows prepare", err.message); resolve(); return; }
|
|
170
|
+
|
|
171
|
+
var result = stmt.executeSync([1]);
|
|
172
|
+
var affected = result.getAffectedRowsSync();
|
|
173
|
+
try {
|
|
174
|
+
assert.equal(affected, 2);
|
|
175
|
+
ok("getAffectedRowsSync: update 2 rows");
|
|
176
|
+
} catch(e) { fail("affected rows update", e.message); }
|
|
177
|
+
result.closeSync();
|
|
178
|
+
stmt.closeSync();
|
|
179
|
+
|
|
180
|
+
conn.prepare("delete from ar_tab where c1 = ?", function(err, stmt) {
|
|
181
|
+
if (err) { fail("affected rows delete prepare", err.message); resolve(); return; }
|
|
182
|
+
stmt.execute([1], function(err, result) {
|
|
183
|
+
if (err) { fail("affected rows delete", err.message); resolve(); return; }
|
|
184
|
+
try {
|
|
185
|
+
assert.equal(result.getAffectedRowsSync(), 1);
|
|
186
|
+
ok("getAffectedRowsSync: delete 1 row");
|
|
187
|
+
} catch(e) { fail("affected rows delete verify", e.message); }
|
|
188
|
+
result.closeSync();
|
|
189
|
+
stmt.closeSync();
|
|
190
|
+
conn.querySync("drop table ar_tab");
|
|
191
|
+
resolve();
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Multiple executions of same prepared statement
|
|
199
|
+
async function testMultipleExecution(conn) {
|
|
200
|
+
console.log("\n[testMultipleExecution]");
|
|
201
|
+
try {
|
|
202
|
+
await conn.query("drop table multi_exec").catch(function() {});
|
|
203
|
+
await conn.query("create table multi_exec (c1 int, c2 varchar(20))");
|
|
204
|
+
|
|
205
|
+
var stmt = conn.prepareSync("insert into multi_exec values (?, ?)");
|
|
206
|
+
for (var i = 1; i <= 5; i++) {
|
|
207
|
+
stmt.bindSync([i, 'row' + i]);
|
|
208
|
+
var result = stmt.executeSync();
|
|
209
|
+
result.closeSync();
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
var data = conn.querySync("select * from multi_exec order by c1");
|
|
213
|
+
assert.equal(data.length, 5);
|
|
214
|
+
assert.equal(data[0].C1, 1);
|
|
215
|
+
assert.equal(data[4].C1, 5);
|
|
216
|
+
ok("multiple executions of same prepared statement");
|
|
217
|
+
|
|
218
|
+
stmt.closeSync();
|
|
219
|
+
await conn.query("drop table multi_exec");
|
|
220
|
+
} catch(e) { fail("multiple execution", e.message); }
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Statement close with different options (0, 1, 2, 3, and no-arg)
|
|
224
|
+
async function testStatementClose(conn) {
|
|
225
|
+
console.log("\n[testStatementClose]");
|
|
226
|
+
var closeOptions = [0, 1, 2, 3]; // SQL_CLOSE, SQL_DROP, SQL_UNBIND, SQL_RESET_PARAMS
|
|
227
|
+
|
|
228
|
+
for (var i = 0; i < closeOptions.length; i++) {
|
|
229
|
+
var opt = closeOptions[i];
|
|
230
|
+
try {
|
|
231
|
+
await conn.query("drop table stclose" + opt).catch(function() {});
|
|
232
|
+
await conn.query("create table stclose" + opt + " (col1 varchar(10))");
|
|
233
|
+
} catch(e) { fail("stmt close setup opt " + opt, e.message); continue; }
|
|
234
|
+
|
|
235
|
+
await (function(option) {
|
|
236
|
+
return new Promise(function(resolve) {
|
|
237
|
+
conn.prepare("insert into stclose" + option + " values(?)", function(err, stmt) {
|
|
238
|
+
if (err) { fail("stmt close prepare opt " + option, err.message); resolve(); return; }
|
|
239
|
+
stmt.execute(['test'], function(err, result) {
|
|
240
|
+
if (err) { console.log(err); }
|
|
241
|
+
conn.querySync("drop table stclose" + option);
|
|
242
|
+
stmt.close(option, function(err) {
|
|
243
|
+
try {
|
|
244
|
+
assert.equal(err, null);
|
|
245
|
+
ok("stmt.close(option=" + option + ") succeeds");
|
|
246
|
+
} catch(e) { fail("stmt.close option " + option, e.message); }
|
|
247
|
+
resolve();
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
})(opt);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// stmt.close() with no argument (default)
|
|
256
|
+
try {
|
|
257
|
+
await conn.query("drop table stclosedef").catch(function() {});
|
|
258
|
+
await conn.query("create table stclosedef (col1 varchar(10))");
|
|
259
|
+
} catch(e) { fail("stmt close default setup", e.message); return; }
|
|
260
|
+
|
|
261
|
+
await new Promise(function(resolve) {
|
|
262
|
+
conn.prepare("insert into stclosedef values(?)", function(err, stmt) {
|
|
263
|
+
if (err) { fail("stmt close default prepare", err.message); resolve(); return; }
|
|
264
|
+
stmt.execute(['test'], function(err, result) {
|
|
265
|
+
if (err) { console.log(err); }
|
|
266
|
+
conn.querySync("drop table stclosedef");
|
|
267
|
+
stmt.close(function(err) {
|
|
268
|
+
try {
|
|
269
|
+
assert.equal(err, null);
|
|
270
|
+
ok("stmt.close() with no option (default) succeeds");
|
|
271
|
+
} catch(e) { fail("stmt.close default", e.message); }
|
|
272
|
+
resolve();
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Binding-level: createStatement, prepareSync, bindSync, executeSync
|
|
280
|
+
async function testBindingLevelStatement(conn) {
|
|
281
|
+
console.log("\n[testBindingLevelStatement]");
|
|
282
|
+
return new Promise(function(resolve) {
|
|
283
|
+
var db = new ibmdb.ODBC();
|
|
284
|
+
db.createConnection(function(err, rawConn) {
|
|
285
|
+
if (err) { fail("binding createConnection", err.message); resolve(); return; }
|
|
286
|
+
rawConn.openSync(cn);
|
|
287
|
+
|
|
288
|
+
rawConn.createStatement(function(err, stmt) {
|
|
289
|
+
if (err) { fail("binding createStatement", err.message); rawConn.closeSync(); resolve(); return; }
|
|
290
|
+
|
|
291
|
+
// Execute without prepare should error
|
|
292
|
+
try {
|
|
293
|
+
stmt.executeSync();
|
|
294
|
+
fail("binding: executeSync without prepare should throw");
|
|
295
|
+
} catch(e) {
|
|
296
|
+
ok("binding: executeSync without prepare throws");
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// bind with non-array should error
|
|
300
|
+
try {
|
|
301
|
+
stmt.bind("select 1 from sysibm.sysdummy1");
|
|
302
|
+
fail("binding: bind with string should throw");
|
|
303
|
+
} catch(e) {
|
|
304
|
+
assert.equal(e.message, "Argument 1 must be an Array");
|
|
305
|
+
ok("binding: bind with non-array throws correct error");
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// Proper prepare + bind + execute
|
|
309
|
+
try {
|
|
310
|
+
var r = stmt.prepareSync("select 1 + ? as COL1 from SYSIBM.SYSDUMMY1");
|
|
311
|
+
assert.equal(r, true);
|
|
312
|
+
|
|
313
|
+
r = stmt.bindSync([2]);
|
|
314
|
+
assert.equal(r, true);
|
|
315
|
+
|
|
316
|
+
var result = stmt.executeSync();
|
|
317
|
+
assert.equal(result.constructor.name, "ODBCResult");
|
|
318
|
+
|
|
319
|
+
var data = result.fetchAllSync();
|
|
320
|
+
assert.deepEqual(data, [{ COL1: 3 }]);
|
|
321
|
+
result.closeSync();
|
|
322
|
+
ok("binding: prepare + bind + execute");
|
|
323
|
+
|
|
324
|
+
// Re-bind with different value
|
|
325
|
+
stmt.bindSync([7]);
|
|
326
|
+
result = stmt.executeSync();
|
|
327
|
+
data = result.fetchAllSync();
|
|
328
|
+
assert.deepEqual(data, [{ COL1: 8 }]);
|
|
329
|
+
result.closeSync();
|
|
330
|
+
ok("binding: re-bind with different value");
|
|
331
|
+
} catch(e) { fail("binding statement", e.message); }
|
|
332
|
+
|
|
333
|
+
stmt.closeSync();
|
|
334
|
+
rawConn.closeSync();
|
|
335
|
+
resolve();
|
|
336
|
+
});
|
|
337
|
+
});
|
|
338
|
+
});
|
|
339
|
+
}
|