Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

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

Open
#310 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
javascript, sqlite, wasm
Domain
database, web-dev

Research direction

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.

Written by the indexing model from the issue text.

Description

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 ?

Dominant language
JavaScript
Stars
13.7k
Forks
1.1k
PR merge metrics
No merged PRs in 30d

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from sql-js/sql.js

All issues in sql-js/sql.js

Similar issues

More JavaScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.