Not able to use exported c function as custom function in query

未关闭
#310 4 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
35/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
技术栈
javascript, sqlite, wasm
领域
database, web-dev

调研方向

Start with exporting-c-function.js and its create_function call, then compare the alternate_case.c export and compiled alternate_case.js with the sql-wasm.js integration. Reproduce SELECT altcase(b) after database initialization and inspect the custom-function and web-worker entry points mentioned in the report. Done means the function accepts the selected column argument and the worker usage has a clear, working path.

由索引模型根据 Issue 内容生成。

描述

question

I wrote a c function and compiled using the command

emcc lib/alternate_case.c -s WASM=1 -s EXPORTED_FUNCTIONS="['_alternatecase']" -s EXTRA_EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' -s ASSERTIONS=1 -o public/alternate_case.js

Here is my C function

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<emscripten.h>

int main() {
  return 1;
}

char * alternatecase(char *str) {
    char *initial_ptr;
    initial_ptr = str;
    for (int i=0; i < *str!='\0' ; i++){
        if( (i % 2) == 0)
            *str = tolower(*str);
        else
            *str = toupper(*str);
        str++;
    }
    return initial_ptr;
}

Index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>My first Web Assembly Demo</title>
  </head>
  <body>
    <h1> MY first web assembly demo</h1>
    Output is in Javascript console
    <main>
      <button id="execute" class="button">Execute</button>
      <pre id="output"> Results will be displayed here </pre>
    </main>
  </body>
  <script src='/dist/sql-wasm.js'></script>
  <script src='alternate_case.js'></script>
  <script type="text/javascript" src="exporting-c-function.js"></script>
</html>

I took the sql-wasm.js from this repository. alternate_case.js is the compiled file from emcc.
This is the exporting-c-function.js

config = {
      locateFile: filename => `dist/sql-wasm.wasm`
    }

    initSqlJs(config).then(function(SQL){
      //Create the database
      var db = new SQL.Database();
      // Run a query without reading the results

      const func = cwrap('alternatecase','string', ['string']);
      db.create_function("altcase" , func)

      sqlstr = "CREATE TABLE hello (a int, b char);";
      sqlstr += "INSERT INTO hello VALUES (0, 'hello');"
      sqlstr += "INSERT INTO hello VALUES (1, 'world');"
      db.run(sqlstr); // Run the query without returning anything

      //db.run("INSERT INTO hello VALUES (alternatecase('awdqwdq'));"); // Inserts 10 and 'Hello world'
       db.run('SELECT altcase(b) from hello;');
});

It is throwing this error in the console
Error: wrong number of arguments to function altcase()

And it accepts only 0 arguments.
Note: if I try from browser console , I am able to use the function and get the output.
How to use this as custom function?
Also how to create custom function in web workers and use it ?

主要语言
JavaScript
星标
13.7k
派生
1.1k
PR 合并指标
30 天内没有已合并 PR

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

sql-js/sql.js 的其他 Issue

查看 sql-js/sql.js 的全部 Issue

相似的 Issue

更多 JavaScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。