sql-js / sql-js/sql.js

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

オープン
#310 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

question
主要言語
JavaScript
スター
13.7k
フォーク
1.1k
PR マージ指標
30日以内にマージされた PR はありません

説明

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 ?

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

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 の本文から書いたものです。

評価

技術スタック
javascript, sqlite, wasm
領域
database, web-dev
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。