Skip to content

Commit 90cdfbe

Browse files
committed
make parse_cubestore_ws_result_message async
1 parent 245e992 commit 90cdfbe

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

packages/cubejs-backend-native/js/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -370,10 +370,10 @@ export const buildSqlAndParams = (cubeEvaluator: any): String => {
370370

371371
export type ResultRow = Record<string, string>;
372372

373-
export const parseCubestoreResultMessage = (message: ArrayBuffer): CubeStoreResultWrapper => {
373+
export const parseCubestoreResultMessage = async (message: ArrayBuffer): Promise<CubeStoreResultWrapper> => {
374374
const native = loadNative();
375375

376-
const msg = native.parseCubestoreResultMessage(message);
376+
const msg = await native.parseCubestoreResultMessage(message);
377377
return new CubeStoreResultWrapper(msg);
378378
};
379379

packages/cubejs-backend-native/src/node_export.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -515,13 +515,20 @@ fn debug_js_to_clrepr_to_js(mut cx: FunctionContext) -> JsResult<JsValue> {
515515

516516
//============ sql orchestrator ===================
517517

518-
fn parse_cubestore_ws_result_message(mut cx: FunctionContext) -> JsResult<JsBox<CubeStoreResult>> {
518+
fn parse_cubestore_ws_result_message(mut cx: FunctionContext) -> JsResult<JsPromise> {
519519
let msg = cx.argument::<JsBuffer>(0)?;
520-
let msg_data = msg.as_slice(&cx);
521-
match CubeStoreResult::new(msg_data) {
522-
Ok(result) => Ok(cx.boxed(result)),
523-
Err(err) => cx.throw_error(err.to_string()),
524-
}
520+
let msg_data = msg.as_slice(&cx).to_vec();
521+
522+
let promise = cx
523+
.task(move || CubeStoreResult::new(&msg_data))
524+
.promise(move |mut cx, res| {
525+
match res {
526+
Ok(result) => Ok(cx.boxed(result)),
527+
Err(err) => cx.throw_error(err.to_string()),
528+
}
529+
});
530+
531+
Ok(promise)
525532
}
526533

527534
fn get_cubestore_result(mut cx: FunctionContext) -> JsResult<JsValue> {

packages/cubejs-cubestore-driver/src/WebSocketConnection.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export class WebSocketConnection {
109109
this.webSocket = undefined;
110110
}
111111
});
112-
webSocket.on('message', (msg) => {
112+
webSocket.on('message', async (msg) => {
113113
const buf = new flatbuffers.ByteBuffer(msg);
114114
const httpMessage = HttpMessage.getRootAsHttpMessage(buf);
115115
const resolvers = webSocket.sentMessages[httpMessage.messageId()];
@@ -120,7 +120,7 @@ export class WebSocketConnection {
120120

121121
if (getEnv('nativeOrchestrator') && msg.length > 1000) {
122122
try {
123-
const nativeResMsg = parseCubestoreResultMessage(msg);
123+
const nativeResMsg = await parseCubestoreResultMessage(msg);
124124
resolvers.resolve(nativeResMsg);
125125
} catch (e) {
126126
resolvers.reject(e);

0 commit comments

Comments
 (0)