Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make DuckPGQ loadable in DuckDB WASM #170

Open
2 tasks done
Dtenwolde opened this issue Nov 25, 2024 · 6 comments
Open
2 tasks done

Make DuckPGQ loadable in DuckDB WASM #170

Dtenwolde opened this issue Nov 25, 2024 · 6 comments

Comments

@Dtenwolde
Copy link
Contributor

What happens?

Currently the DuckPGQ extension is not easily loadable in DuckDB WASM. For instance, go to https://duckdb.org/docs/api/wasm/overview.html and type:

install duckpgq from community; 
load duckpgq; 

And you'll receive the following error:

IO Error: Extension "https://community-extensions.duckdb.org/v1.1.3/wasm_eh/duckpgq.duckdb_extension.wasm" could not be loaded: Could not load dynamic lib: duckpgq
Error: bad export type for '_ZTIN6duckdb23CreatePropertyGraphInfoE': undefined

To Reproduce

Go to https://duckdb.org/docs/api/wasm/overview.html and type:

install duckpgq from community; 
load duckpgq; 

And you'll receive the following error:

IO Error: Extension "https://community-extensions.duckdb.org/v1.1.3/wasm_eh/duckpgq.duckdb_extension.wasm" could not be loaded: Could not load dynamic lib: duckpgq
Error: bad export type for '_ZTIN6duckdb23CreatePropertyGraphInfoE': undefined

OS:

macOs 13 - Apple M1 Pro

DuckDB Version:

v1.1.3

DuckDB Client:

WASM

Full Name:

Daniel ten Wolde

Affiliation:

CWI

How did you load the extension?

Community extension version

Did you include all relevant data sets for reproducing the issue?

Yes

Did you include all code required to reproduce the issue?

  • Yes, I have

Did you include all relevant configuration (e.g., CPU architecture, Python version, Linux distribution) to reproduce the issue?

  • Yes, I have
@Dtenwolde
Copy link
Contributor Author

Mentioned here: #166

@carlopi
Copy link
Contributor

carlopi commented Nov 26, 2024

Thanks, this is at the moment expected, problem is that DuckPGQ is somehow different than other extensions in the sense that it bundles DuckDB (and it's parser).

I think this might require wrapping duckdb code in a duckdb_impl namespace, so that it do not collides with duckdb functions (that might or might not be equivalent) that are provided on static linking by duckdb-wasm.

Anther possible way out is enabling DuckDB to be statically linked in, and do the remapping at the Wasm layer, but I am not sure that's viable.

DuckPGQ can work free-standing in the browser, but I would consider more proper to work in having this supported on top of regular duckdb-wasm.

Thanks for opening the tracking issue. Unsure what's the path forward, but can work, and would be super cool to have it working.

@ThijsDreef
Copy link

I was wondering if this incompatibility is due to the fact that extensions which are built out of tree are missing the wasm flag to be compiled as a side module.

In the main duckdb repository the SIDEMODULE=1 flag for emscripten is set in the top level cmakelists.txt. But I cannot spot this flag in any of the following repositories

My concern would then be one of the following

  • Module is compiled without any SIDEMODULE flags (dlopen functions incorrectly).
  • Module is compiled with SIDEMODULE=2 (some code is considered dead which is actually used)

@carlopi
Copy link
Contributor

carlopi commented Jan 6, 2025

Hi @ThijsDreef: I think duckpgq-extensions gets SIDE_MODULE=1 from its DuckDB submodule at https://github.com/search?q=repo%3Acwida%2Fduckdb-pgq%20SIDE_MODULE&type=code

I am not sure I see easy solution, problem here is that there are 2 DuckDB codebases at play: 1 provided by DuckDB-Wasm (as MAIN_MODULE) and 1 provided by duckdb-pgq, but those are different.

Something that might be tried, and might even work even if not super solid could be changing to SIDE_MODULE=2 (in the submodule) and linking the duckdb-own submodule in duckdb-pgq, mimicking what's proved to work for native extensions.

@ThijsDreef
Copy link

So I think i understand the situation now.

The extension uses a partially modified version of duckdb and the bad export type error is thrown because it requires a function from the modified version of duckdb (which is not linked into the extension).

So would a solution where we link in the required functions into the extension be a solution?

I did try to link in the required functionality by hand (which succeeds for the object file) but is still an import in the generated wasm file.
I did get the duckdb fork to compile to wasm by using the duckdb-wasm repository which then does export the required import.

@peterboncz
Copy link

peterboncz commented Jan 8, 2025 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants