diff --git a/src/main/client_context.cpp b/src/main/client_context.cpp index b1ad53a681c..b6b85ecc8fa 100644 --- a/src/main/client_context.cpp +++ b/src/main/client_context.cpp @@ -319,6 +319,8 @@ shared_ptr ClientContext::CreatePreparedStatement(ClientC planner.parameter_data.emplace_back(value); } } + + client_data->http_state = make_shared(); planner.CreatePlan(std::move(statement)); D_ASSERT(planner.plan || !planner.properties.bound_all_parameters); profiler.EndPhase(); diff --git a/tools/nodejs/package.json b/tools/nodejs/package.json index c5cd43d53b8..a6b866129ca 100644 --- a/tools/nodejs/package.json +++ b/tools/nodejs/package.json @@ -28,11 +28,13 @@ }, "devDependencies": { "@types/chai": "^4.3.4", + "@types/chai-as-promised": "^7.1.5", "@types/mocha": "^10.0.0", "@types/node": "^18.11.0", "apache-arrow": "^9.0.0", "aws-sdk": "^2.790.0", "chai": "^4.3.6", + "chai-as-promised": "^7.1.1", "jsdoc3-parser": "^2.0.0", "mocha": "^8.3.0", "ts-node": "^10.9.1", diff --git a/tools/nodejs/test/extension.test.ts b/tools/nodejs/test/extension.test.ts index 3af8687a409..435622a3bc4 100644 --- a/tools/nodejs/test/extension.test.ts +++ b/tools/nodejs/test/extension.test.ts @@ -3,6 +3,10 @@ import {Database, DuckDbError, HttpError, TableData} from '..'; import * as fs from 'fs'; import * as assert from 'assert'; import * as path from 'path'; +import chaiAsPromised from 'chai-as-promised'; +import chai, {expect} from "chai"; + +chai.use(chaiAsPromised); const extension_base_path = "../../../build/release/extension"; @@ -26,6 +30,13 @@ function isHTTPException(err: DuckDbError): err is HttpError { // Note: test will pass on http request failing due to connection issues. const test_httpfs = async function (db: duckdb.Database) { + const promise = new Promise((resolve, reject) => + db.exec(`SELECT * + FROM parquet_scan('http://localhost:1234/whatever.parquet')`, function (err: DuckDbError | null) { + err ? reject(err) : resolve() + })); + await chai.assert.isRejected(promise, 'IO Error: Connection error for HTTP HEAD'); + await new Promise((resolve, reject) => db.all("SELECT id, first_name, last_name FROM PARQUET_SCAN('https://raw.githubusercontent.com/cwida/duckdb/master/data/parquet-testing/userdata1.parquet') LIMIT 3;", function (err: null | Error, rows: TableData) { if (err) { if (err.message.startsWith("Unable to connect to URL")) {