Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
196 changes: 193 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"tmp": "^0.2.3"
},
"dependencies": {
"apache-arrow": "^21.1.0",
"cmake-js": "^8.0.0",
"node-addon-api": "^6.0.0"
}
Expand Down
37 changes: 37 additions & 0 deletions src_cpp/include/node_connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,10 @@ class NodeConnection : public Napi::ObjectWrap<NodeConnection> {
void SetQueryTimeout(const Napi::CallbackInfo& info);
Napi::Value ExecuteAsync(const Napi::CallbackInfo& info);
Napi::Value QueryAsync(const Napi::CallbackInfo& info);
Napi::Value QueryArrowAsync(const Napi::CallbackInfo& info);
Napi::Value ExecuteSync(const Napi::CallbackInfo& info);
Napi::Value QuerySync(const Napi::CallbackInfo& info);
Napi::Value QueryArrowSync(const Napi::CallbackInfo& info);
Napi::Value CreateArrowTableSync(const Napi::CallbackInfo& info);
Napi::Value CreateArrowRelTableSync(const Napi::CallbackInfo& info);
Napi::Value DropArrowTableSync(const Napi::CallbackInfo& info);
Expand Down Expand Up @@ -188,5 +190,40 @@ class ConnectionQueryAsyncWorker : public Napi::AsyncWorker {
std::optional<Napi::ThreadSafeFunction> progressCallback;
};

class ConnectionQueryArrowAsyncWorker : public Napi::AsyncWorker {
public:
ConnectionQueryArrowAsyncWorker(Napi::Function& callback,
std::shared_ptr<Connection>& connection, std::shared_ptr<Database>& database,
std::string statement, int64_t chunkSize, NodeQueryResult* nodeQueryResult)
: Napi::AsyncWorker(callback), connection(connection), database(database),
statement(std::move(statement)), chunkSize(chunkSize), nodeQueryResult(nodeQueryResult) {}

~ConnectionQueryArrowAsyncWorker() override = default;

void Execute() override {
try {
auto result = connection->queryAsArrow(statement, chunkSize);
if (!result->isSuccess()) {
SetError(result->getErrorMessage());
return;
}
nodeQueryResult->AdoptQueryResult(std::move(result), connection, database);
} catch (const std::exception& exc) {
SetError(std::string(exc.what()));
}
}

void OnOK() override { Callback().Call({Env().Null()}); }

void OnError(Napi::Error const& error) override { Callback().Call({error.Value()}); }

private:
std::shared_ptr<Connection> connection;
std::shared_ptr<Database> database;
std::string statement;
int64_t chunkSize;
NodeQueryResult* nodeQueryResult;
};

} // namespace main
} // namespace lbug
1 change: 1 addition & 0 deletions src_cpp/include/node_query_result.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ class NodeQueryResult : public Napi::ObjectWrap<NodeQueryResult> {
Napi::Value GetColumnNamesSync(const Napi::CallbackInfo& info);
Napi::Value GetQuerySummarySync(const Napi::CallbackInfo& info);
Napi::Value GetQuerySummaryAsync(const Napi::CallbackInfo& info);
Napi::Value GetCSRSync(const Napi::CallbackInfo& info);
void PopulateColumnNames();
void Close(const Napi::CallbackInfo& info);
void Close();
Expand Down
Loading
Loading