Skip to content

Commit 667d07b

Browse files
committed
Pass down from C++ to JS layer
1 parent 2da42ab commit 667d07b

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

lib/src/webdb.cc

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
#include "duckdb/web/webdb.h"
44

5+
#include <emscripten/val.h>
6+
57
#include <chrono>
68
#include <cstddef>
79
#include <cstdio>
@@ -784,16 +786,39 @@ std::string WebDB::Tokenize(std::string_view text) {
784786
std::string_view WebDB::GetVersion() { return database_->LibraryVersion(); }
785787

786788
class ProgressBarCustom: public ProgressBarDisplay {
789+
double value {0.0};
790+
double times {0.0};
791+
double to_send {1.0};
787792
public:
788793
ProgressBarCustom() {
794+
value = 0.0;
795+
times = 0.0;
796+
to_send = 1.0;
789797
}
790798
~ProgressBarCustom() {}
799+
static void SendMessage(bool end, double percentage, double times) {
800+
emscripten::val::global("DUCKDB_RUNTIME").call<void>("progressUpdate", end, percentage, times);
801+
}
791802
public:
792803
void Update(double percentage) {
793-
std::cout << "ProgressBar::Update() called with " << percentage << "\n";
804+
if (percentage >= value + 1.0) {
805+
value = percentage;
806+
times = 1.0;
807+
SendMessage(false, percentage, times);
808+
to_send = 10.0;
809+
} else {
810+
times += 1.0;
811+
if (times >= to_send) {
812+
SendMessage(false, percentage, times);
813+
to_send *= 10.0;
814+
}
815+
}
794816
}
795817
void Finish() {
796-
std::cout << "Finish() called\n";
818+
SendMessage(true, value, times);
819+
value = 0.0;
820+
times = 0.0;
821+
to_send = 1.0;
797822
}
798823
static unique_ptr<ProgressBarDisplay> GetProgressBar() {
799824
return make_uniq<ProgressBarCustom>();
@@ -805,6 +830,7 @@ WebDB::Connection* WebDB::Connect() {
805830
auto conn = duckdb::make_uniq<WebDB::Connection>(*this);
806831
auto conn_ptr = conn.get();
807832
connections_.insert({conn_ptr, std::move(conn)});
833+
ClientConfig::GetConfig(*conn_ptr->connection_.context).wait_time = 1;
808834
ClientConfig::GetConfig(*conn_ptr->connection_.context).display_create_func = ProgressBarCustom::GetProgressBar;
809835
return conn_ptr;
810836
}

packages/duckdb-wasm/src/bindings/runtime.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ export interface DuckDBRuntime {
135135
syncFile(mod: DuckDBModule, fileId: number): void;
136136
closeFile(mod: DuckDBModule, fileId: number): void;
137137
getLastFileModificationTime(mod: DuckDBModule, fileId: number): number;
138+
progressUpdate(mod: DuckDBModule, final: number, a: number, b:number): void;
138139
truncateFile(mod: DuckDBModule, fileId: number, newSize: number): void;
139140
readFile(mod: DuckDBModule, fileId: number, buffer: number, bytes: number, location: number): number;
140141
writeFile(mod: DuckDBModule, fileId: number, buffer: number, bytes: number, location: number): number;
@@ -172,6 +173,9 @@ export const DEFAULT_RUNTIME: DuckDBRuntime = {
172173
getLastFileModificationTime: (_mod: DuckDBModule, _fileId: number): number => {
173174
return 0;
174175
},
176+
progressUpdate: (_mod: DuckDBModule, _fileId: number, a: number, b: number): void => {
177+
return;
178+
},
175179
truncateFile: (_mod: DuckDBModule, _fileId: number, _newSize: number): void => {},
176180
readFile: (_mod: DuckDBModule, _fileId: number, _buffer: number, _bytes: number, _location: number): number => {
177181
return 0;

packages/duckdb-wasm/src/bindings/runtime_browser.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,10 @@ export const BROWSER_RUNTIME: DuckDBRuntime & {
550550
}
551551
return 0;
552552
},
553+
progressUpdate: (_mod: DuckDBModule, done: number, a: number, b: number): void => {
554+
//postMessage("");
555+
console.log("Update progress: ", done, a, b);
556+
},
553557
checkDirectory: (mod: DuckDBModule, pathPtr: number, pathLen: number) => {
554558
const path = readString(mod, pathPtr, pathLen);
555559
console.log(`checkDirectory: ${path}`);

packages/duckdb-wasm/src/bindings/runtime_node.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ export const NODE_RUNTIME: DuckDBRuntime & {
196196
}
197197
return 0;
198198
},
199+
progressUpdate: (_mod: DuckDBModule, _fileId: number, a: number, b: number): void => {
200+
return;
201+
},
199202
getLastFileModificationTime: (mod: DuckDBModule, fileId: number) => {
200203
try {
201204
const file = NODE_RUNTIME.resolveFileInfo(mod, fileId);

0 commit comments

Comments
 (0)