Asynchronous, non-blocking SQLite3 bindings for Node.js

Related tags

Maps node-sqlite3
Overview

Asynchronous, non-blocking SQLite3 bindings for Node.js.

NPM

Build Status Build status Coverage Status Dependencies FOSSA Status N-API v3 Badge

Supported platforms

The sqlite3 module works with:

  • Node.js v11.x, v12.x, v13.x and v14.x.
  • Electron v6.0.x, v6.1.x, v7.0.x, v7.1.x, v8.0.x, v8.1.x and v8.2.x

Binaries for most Node versions and platforms are provided by default via node-pre-gyp.

The sqlite3 module also works with node-webkit if node-webkit contains a supported version of Node.js engine. (See below.)

SQLite's SQLCipher extension is also supported. (See below.)

Usage

Note: the module must be installed before use.

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database(':memory:');

db.serialize(function() {
  db.run("CREATE TABLE lorem (info TEXT)");

  var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
  for (var i = 0; i < 10; i++) {
      stmt.run("Ipsum " + i);
  }
  stmt.finalize();

  db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {
      console.log(row.id + ": " + row.info);
  });
});

db.close();

Features

  • Straightforward query and parameter binding interface
  • Full Buffer/Blob support
  • Extensive debugging support
  • Query serialization API
  • Extension support, including bundled support for the json1 extension.
  • Big test suite
  • Written in modern C++ and tested for memory leaks
  • Bundles SQLite3 3.32.3 as a fallback if the installing system doesn't include SQLite

API

See the API documentation in the wiki.

Installing

You can use npm to download and install:

  • The latest sqlite3 package: npm install sqlite3

  • GitHub's master branch: npm install https://github.com/mapbox/node-sqlite3/tarball/master

The module uses node-pre-gyp to download a pre-compiled binary for your platform, if it exists. Otherwise, it uses node-gyp to build the extension.

It is also possible to make your own build of sqlite3 from its source instead of its npm package (see below).

It is possible to use the installed package in node-webkit instead of the vanilla Node.js. See Building for node-webkit for details.

Source install

To skip searching for pre-compiled binaries, and force a build from source, use

npm install --build-from-source

The sqlite3 module depends only on libsqlite3. However, by default, an internal/bundled copy of sqlite will be built and statically linked, so an externally installed sqlite3 is not required.

If you wish to install against an external sqlite then you need to pass the --sqlite argument to npm wrapper:

npm install --build-from-source --sqlite=/usr/local

If building against an external sqlite3 make sure to have the development headers available. Mac OS X ships with these by default. If you don't have them installed, install the -dev package with your package manager, e.g. apt-get install libsqlite3-dev for Debian/Ubuntu. Make sure that you have at least libsqlite3 >= 3.6.

Note, if building against homebrew-installed sqlite on OS X you can do:

npm install --build-from-source --sqlite=/usr/local/opt/sqlite/

By default the node-gyp install will use python as part of the installation. A different python executable can be specified on the command line.

npm install --build-from-source --python=/usr/bin/python2

This uses the npm_config_python config, so values in .npmrc will be honoured:

python=/usr/bin/python2

Custom file header (magic)

The default sqlite file header is "SQLite format 3".
You can specify a different magic, though this will make standard tools and libraries unable to work with your files.

npm install --build-from-source --sqlite_magic="MyCustomMagic15"

Note that the magic must be exactly 15 characters long (16 bytes including null terminator).

Building for node-webkit

Because of ABI differences, sqlite3 must be built in a custom to be used with node-webkit.

To build node-sqlite3 for node-webkit:

  1. Install nw-gyp globally: npm install nw-gyp -g (unless already installed)

  2. Build the module with the custom flags of --runtime, --target_arch, and --target:

NODE_WEBKIT_VERSION="0.8.6" # see latest version at https://github.com/rogerwang/node-webkit#downloads
npm install sqlite3 --build-from-source --runtime=node-webkit --target_arch=ia32 --target=$(NODE_WEBKIT_VERSION)

This command internally calls out to node-pre-gyp which itself calls out to nw-gyp when the --runtime=node-webkit option is passed.

You can also run this command from within a node-sqlite3 checkout:

npm install --build-from-source --runtime=node-webkit --target_arch=ia32 --target=$(NODE_WEBKIT_VERSION)

Remember the following:

  • You must provide the right --target_arch flag. ia32 is needed to target 32bit node-webkit builds, while x64 will target 64bit node-webkit builds (if available for your platform).

  • After the sqlite3 package is built for node-webkit it cannot run in the vanilla Node.js (and vice versa).

    • For example, npm test of the node-webkit's package would fail.

Visit the “Using Node modules” article in the node-webkit's wiki for more details.

Building for sqlcipher

For instructions for building sqlcipher see Building SQLCipher for node.js

To run node-sqlite3 against sqlcipher you need to compile from source by passing build options like:

npm install sqlite3 --build-from-source --sqlite_libname=sqlcipher --sqlite=/usr/

node -e 'require("sqlite3")'

If your sqlcipher is installed in a custom location (if you compiled and installed it yourself), you'll also need to to set some environment variables:

On OS X with Homebrew

Set the location where brew installed it:

export LDFLAGS="-L`brew --prefix`/opt/sqlcipher/lib"
export CPPFLAGS="-I`brew --prefix`/opt/sqlcipher/include"
npm install sqlite3 --build-from-source --sqlite_libname=sqlcipher --sqlite=`brew --prefix`

node -e 'require("sqlite3")'

On most Linuxes (including Raspberry Pi)

Set the location where make installed it:

export LDFLAGS="-L/usr/local/lib"
export CPPFLAGS="-I/usr/local/include -I/usr/local/include/sqlcipher"
export CXXFLAGS="$CPPFLAGS"
npm install sqlite3 --build-from-source --sqlite_libname=sqlcipher --sqlite=/usr/local --verbose

node -e 'require("sqlite3")'

Custom builds and Electron

Running sqlite3 through electron-rebuild does not preserve the sqlcipher extension, so some additional flags are needed to make this build Electron compatible. Your npm install sqlite3 --build-from-source command needs these additional flags (be sure to replace the target version with the current Electron version you are working with):

--runtime=electron --target=1.7.6 --dist-url=https://electronjs.org/headers

In the case of MacOS with Homebrew, the command should look like the following:

npm install sqlite3 --build-from-source --sqlite_libname=sqlcipher --sqlite=`brew --prefix` --runtime=electron --target=1.7.6 --dist-url=https://electronjs.org/headers

Testing

mocha is required to run unit tests.

In sqlite3's directory (where its package.json resides) run the following:

npm install mocha
npm test

Contributors

Acknowledgments

Thanks to Orlando Vazquez, Eric Fredricksen and Ryan Dahl for their SQLite bindings for node, and to mraleph on Freenode's #v8 for answering questions.

Development of this module is sponsored by MapBox.

License

node-sqlite3 is BSD licensed.

FOSSA Status

Comments
  • Feature request: provide pre-compiled binaries (official builds) in npm packages

    Feature request: provide pre-compiled binaries (official builds) in npm packages

    Currently npm install sqlite3 requires building node-sqlite3 from the source with node-gyp (on Windows the prerequisites are Python and MSVC, the latter is huge).

    To get rid of this requirement (and thus to attract more end users and less building-related issues reported), please accomplish the following:

    1. Require (and use) node-bindings.
    2. Compile binary part of node-sqlite3 for the supported platforms (win32/ia32, darwin/x64, linux/ia32, linux/x64... sunos/ia32?), put the resulting binaries inside your npm package and let node-bindings pick one on user's side.
    3. Put binding.gyp in .npmignore, otherwise npm will still attempt to build from the source. (Do not forget to add some contents of .gitignore to .npmignore when you create the latter, but only some: npm should not ignore the binaries.)
    4. (optional) Put binaries in .gitignore to prevent them from being hosted on GitHub. (This step is necessary only if you hate mixing sources with binaries. This step may also be completed already if you build in build/, which is currently in .gitignore.)

    After that npm install sqlite3 would involve only downloading and unpacking, and thus would just work.

    opened by Mithgol 56
  • Failed at the sqlite3@3.1.1 install script 'node-pre-gyp install --fallback-to-build'

    Failed at the [email protected] install script 'node-pre-gyp install --fallback-to-build'

    I have issue installing the latest version (3.1.1) of node-sqlite3 on Ubuntu

    In the log file I can see that it is failing to download tarball: 403 status code downloading tarball https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.1/node-v46-linux-ia32.tar.gz (falling back to source compile with node-gyp)

    node-sqlite3 version: 3.1.1 Node version: 4.3.1 NPM version: 2.14.12 OS info: Ubuntu 12.04.5 LTS 32 bit

    Attached is the log result of "npm install sqlite3 --loglevel=info". log.txt and npm-debug.log.txt

    opened by glavince 54
  • N-API Support for node-sqlite3

    N-API Support for node-sqlite3

    The recently announced Node 8 has a new experimental feature called N-API which is aimed at reducing maintenance cost for node native addons. Checkout this blog for more details on its benefits.

    Module node-sqlite3 is one of the top 30 native modules by dependency count, and in order to help the Node.js community make the important transition to N-API, we are hoping you will be able to work with us in order to port node-sqlite3 to support N-API. Your support and feedback is important in making this effort a success.

    I am part of the N-API working group and and would like to talk to you about how you can can get started with N-API and what help we might be able to provide. I'm available to talk on the phone individually if you'd like. Alternatively, if you prefer, feel free to jump in our WG meeting which happens every Thursday at 1.30 Eastern / 10.30 Pacific US time, to discuss any issues.

    Here’s a video of N-API in action

    opened by sampsongao 48
  • "ENOENT: no such file or directory, rename ..." when running npm install

    After running npm install --save-dev sqlite3, each subsequent time I try to run npm install I get an error relating to "ENOENT: no such file or directory, rename ...".

    The first subsequent run resulted in the following: npm ERR! path /Users/[...]/node_modules/.staging/npmlog-702088a9 npm ERR! code ENOENT npm ERR! errno -2 npm ERR! syscall rename npm ERR! enoent ENOENT: no such file or directory, rename '/Users/[...]/node_modules/.staging/npmlog-702088a9' -> '/Users/[...]/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog' npm ERR! enoent This is related to npm not being able to find a file.

    The next run resulted in this error: npm ERR! path /Users/[...]/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates npm ERR! code ENOENT npm ERR! errno -2 npm ERR! syscall rename npm ERR! enoent ENOENT: no such file or directory, rename '/Users/[..]/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates' -> '/Users/[...]/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/.delegates.DELETE' npm ERR! enoent This is related to npm not being able to find a file.

    Environment: MacOS 10.12.6 NPM 5.3.0 Node v6.11.2 Also occurring on Jenkins on Ubuntu 16.04 LTS.

    opened by kevinmannn 41
  • Electron 9 renderer crashes on sqlite module access when reloading the page

    Electron 9 renderer crashes on sqlite module access when reloading the page

    Issue Details

    • node-sqlite3 version:
      • 5.0.0
    • Electron Version:
      • 9.2.0
    • Operating System:
      • Windows 10 (1909)

    Actual Behavior

    Since Electron 9 (tried with 9.1.2 and 9.2) seems like the renderer process (?) crashes when using the reload function. Initial loading of the page works fine, but when reloading, the page stays completely white and the DevTools report that it was disconnected from the page. This seems to be related to the Electron flag allowRendererProcessReuse and this change in Electron. Since Electron 9, allowRendererProcessReuse is set to true by default. Switching it manually back to false fixes the described issue.

    Looking at the crash dump (see below) and according to this comment on the Electron ticket I've created this seems to be related to the native sqlite module.

    Here is the output of the crash dump with WinDbg:

    Microsoft (R) Windows Debugger Version 10.0.20153.1000 AMD64
    Copyright (c) Microsoft Corporation. All rights reserved.
    
    
    Loading Dump File [C:\Users\xxx\AppData\Roaming\Electron\Crashpad\reports\99316939-67ae-470c-946b-5b8370ecc606.dmp]
    User Mini Dump File: Only registers, stack and portions of memory are available
    
    Symbol search path is: srv*
    Executable search path is: 
    Windows 10 Version 18362 (900) MP (16 procs) Free x64
    Product: WinNt
    Edition build lab: Windows NT 10.0.18362.900
    Machine Name:
    Debug session time: Tue Aug 11 11:35:25.000 2020 (UTC + 2:00)
    System Uptime: not available
    Process Uptime: 0 days 0:00:10.000
    ................................................................
    .....
    This dump file has an exception of interest stored in it.
    The stored exception information can be accessed via .ecxr.
    (18f0.82f0): Access violation - code c0000005 (first/second chance not available)
    For analysis of this file, run !analyze -v
    *** WARNING: Unable to verify checksum for ntdll.dll
    *** WARNING: Unable to verify checksum for KERNELBASE.dll
    ntdll!NtDelayExecution+0x14:
    00007ffe`a653c6f4 c3              ret
    0:000> !analyze -v
    *******************************************************************************
    *                                                                             *
    *                        Exception Analysis                                   *
    *                                                                             *
    *******************************************************************************
    
    *** WARNING: Unable to verify checksum for KERNEL32.DLL
    *** WARNING: Unable to verify checksum for USER32.dll
    *** WARNING: Unable to verify checksum for combase.dll
    
    KEY_VALUES_STRING: 1
    
        Key  : AV.Fault
        Value: Write
    
        Key  : Analysis.CPU.mSec
        Value: 984
    
        Key  : Analysis.DebugAnalysisProvider.CPP
        Value: Create: 8007007e on HU-NB-370
    
        Key  : Analysis.DebugData
        Value: CreateObject
    
        Key  : Analysis.DebugModel
        Value: CreateObject
    
        Key  : Analysis.Elapsed.mSec
        Value: 783
    
        Key  : Analysis.Memory.CommitPeak.Mb
        Value: 275
    
        Key  : Analysis.System
        Value: CreateObject
    
        Key  : Timeline.Process.Start.DeltaSec
        Value: 10
    
        Key  : WER.Process.Version
        Value: 9.2.0.0
    
    
    ADDITIONAL_XML: 1
    
    OS_BUILD_LAYERS: 1
    
    NTGLOBALFLAG:  0
    
    PROCESS_BAM_CURRENT_THROTTLED: 0
    
    PROCESS_BAM_PREVIOUS_THROTTLED: 0
    
    CONTEXT:  (.ecxr)
    rax=00007ff63763fe20 rbx=00007ffe3236fca8 rcx=000002cb58efddd0
    rdx=00007ff637f5dec0 rsi=000002cb58d80460 rdi=000000dc32afb470
    rip=00007ff638571b63 rsp=000000dc32afafb8 rbp=000000dc32afb170
     r8=000057570f33940d  r9=0000000000000001 r10=0000000000000000
    r11=000000dc32afb010 r12=000057570da6e32d r13=00007ff636e74910
    r14=0000000000000000 r15=000002cb58b79070
    iopl=0         nv up ei pl nz na pe nc
    cs=0033  ss=0000  ds=0000  es=0000  fs=0053  gs=002b             efl=00010202
    electron!napi_delete_reference+0x53:
    00007ff6`38571b63 48895008        mov     qword ptr [rax+8],rdx ds:00007ff6`3763fe28=8b48ce89484e74c9
    Resetting default scope
    
    EXCEPTION_RECORD:  (.exr -1)
    ExceptionAddress: 00007ff638571b63 (electron!napi_delete_reference+0x0000000000000053)
       ExceptionCode: c0000005 (Access violation)
      ExceptionFlags: 00000000
    NumberParameters: 2
       Parameter[0]: 0000000000000001
       Parameter[1]: 00007ff63763fe28
    Attempt to write to address 00007ff63763fe28
    
    PROCESS_NAME:  electron.exe
    
    WRITE_ADDRESS:  00007ff63763fe28 
    
    ERROR_CODE: (NTSTATUS) 0xc0000005 - Die Anweisung in 0x%p verwies auf Arbeitsspeicher bei 0x%p. Der Vorgang %s konnte im Arbeitsspeicher nicht durchgef hrt werden.
    
    EXCEPTION_CODE_STR:  c0000005
    
    EXCEPTION_PARAMETER1:  0000000000000001
    
    EXCEPTION_PARAMETER2:  00007ff63763fe28
    
    STACK_TEXT:  
    000000dc`32afafb8 00007ff6`38571b2f     : ffffffff`fffffffe 000002cb`55c44630 00000000`00000009 fffffe10`dceb6d90 : electron!napi_delete_reference+0x53
    000000dc`32afafc0 00007ffe`32227503     : 00007ff6`36e74910 00005757`0da6e32d 00006f55`8336d0db 00007ffe`3232a9ec : electron!napi_delete_reference+0x1f
    000000dc`32afaff0 00007ff6`36e7490f     : 00005757`0da6e32d 00006f55`8336d0db 00007ffe`3232a9ec ffffffff`fffffffe : node_sqlite3+0x7503
    000000dc`32afaff8 00005757`0da6e32d     : 00006f55`8336d0db 00007ffe`3232a9ec ffffffff`fffffffe 00007ffe`3222216b : electron!node_module_register+0x3ff
    000000dc`32afb000 00006f55`8336d0db     : 00007ffe`3232a9ec ffffffff`fffffffe 00007ffe`3222216b 00006f55`8336d03b : 0x00005757`0da6e32d
    000000dc`32afb008 00007ffe`3232a9ec     : ffffffff`fffffffe 00007ffe`3222216b 00006f55`8336d03b 000000dc`32afb470 : 0x00006f55`8336d0db
    000000dc`32afb010 ffffffff`fffffffe     : 00007ffe`3222216b 00006f55`8336d03b 000000dc`32afb470 000000dc`32afb0a0 : node_sqlite3+0x10a9ec
    000000dc`32afb018 00007ffe`3222216b     : 00006f55`8336d03b 000000dc`32afb470 000000dc`32afb0a0 000000dc`32afb490 : 0xffffffff`fffffffe
    000000dc`32afb020 00006f55`8336d03b     : 000000dc`32afb470 000000dc`32afb0a0 000000dc`32afb490 00007ff6`00000000 : node_sqlite3+0x216b
    000000dc`32afb028 000000dc`32afb470     : 000000dc`32afb0a0 000000dc`32afb490 00007ff6`00000000 00000000`00000000 : 0x00006f55`8336d03b
    000000dc`32afb030 000000dc`32afb0a0     : 000000dc`32afb490 00007ff6`00000000 00000000`00000000 00006f55`8336d0bb : 0x000000dc`32afb470
    000000dc`32afb038 000000dc`32afb490     : 00007ff6`00000000 00000000`00000000 00006f55`8336d0bb 000000dc`32afb400 : 0x000000dc`32afb0a0
    000000dc`32afb040 00007ff6`00000000     : 00000000`00000000 00006f55`8336d0bb 000000dc`32afb400 000000dc`32afb0a0 : 0x000000dc`32afb490
    000000dc`32afb048 00000000`00000000     : 00006f55`8336d0bb 000000dc`32afb400 000000dc`32afb0a0 00007ffe`3222b0c7 : 0x00007ff6`00000000
    
    
    SYMBOL_NAME:  electron!napi_delete_reference+53
    
    MODULE_NAME: electron
    
    IMAGE_NAME:  electron.exe
    
    STACK_COMMAND:  dt ntdll!LdrpLastDllInitializer BaseDllName ; dt ntdll!LdrpFailureData ; ~0s ; .ecxr ; kb
    
    FAILURE_BUCKET_ID:  INVALID_POINTER_WRITE_c0000005_electron.exe!napi_delete_reference
    
    OSPLATFORM_TYPE:  x64
    
    OSNAME:  Windows 10
    
    IMAGE_VERSION:  9.2.0.0
    
    FAILURE_ID_HASH:  {95da9ce2-f2eb-0c22-0a13-18146f95472d}
    
    Followup:     MachineOwner
    ---------
    

    Any ideas what could be the issue?

    bug 
    opened by dominic-simplan 40
  • Error: Cannot find module node_modules/sqlite3/lib/binding/node-v57-linux-x64/node_sqlite3.node

    Error: Cannot find module node_modules/sqlite3/lib/binding/node-v57-linux-x64/node_sqlite3.node

    Error: Cannot find module node_modules/sqlite3/lib/binding/node-v57-linux-x64/node_sqlite3.node

    But i have node_modules/sqlite3/lib/binding/node-v48-linux-x64/node_sqlite3.node

    Below the node and npm version that i'm using. Please help me to get rid of this issue node version: v8.7.0 npm version: 5.4.2

    opened by Thavaprakash 40
  • When 'npm install' >

    When 'npm install' > "ENOENT: no such file or directory, rename ..."

    Still got this issue #866

    sqlite3 version 3.16.0 npm version 5.5.1 node version 8.4.0

    npm ERR! path /Users/jesse/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates
    npm ERR! code ENOENT
    npm ERR! errno -2
    npm ERR! syscall rename
    npm ERR! enoent ENOENT: no such file or directory, rename '/Users/jesse/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates' -> '/Users/jesse/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/.delegates.DELETE'
    npm ERR! enoent This is related to npm not being able to find a file.
    npm ERR! enoent 
    
    npm ERR! A complete log of this run can be found in:
    npm ERR!     /Users/jesse/.npm/_logs/2017-10-23T12_04_19_469Z-debug.log
    

    debug.log

    706 verbose stack Error: ENOENT: no such file or directory, rename '/Users/jesse/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates' -> '/Users/jesse/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/.delegates.DELETE'
    707 verbose cwd /Users/jesse
    708 verbose Darwin 16.6.0
    709 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "png-js"
    710 verbose node v8.4.0
    711 verbose npm  v5.5.1
    712 error path /Users/jesse/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates
    713 error code ENOENT
    714 error errno -2
    715 error syscall rename
    716 error enoent ENOENT: no such file or directory, rename '/Users/jesse/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/delegates' -> '/Users/jesse/node_modules/sqlite3/node_modules/node-pre-gyp/node_modules/npmlog/node_modules/are-we-there-yet/node_modules/.delegates.DELETE'
    717 error enoent This is related to npm not being able to find a file.
    718 verbose exit [ -2, true ]
    

    Can't install or even uninstall packages

    opened by Hedva 40
  • Added support for

    Added support for "node-gyp" build

    Hey guys, so this should take care of #60. I started with the current windows branch and worked from there. I created a gyp file for sqlite3 itself, and then declared that as a dependency in node-sqlite3's bindings.gyp file.

    Try it out and let me know what you think! Cheers!

    opened by TooTallNate 39
  • MacOS Monterey 12.3 no longer has Python 2.7 installed, finding it very difficult to use sqlite3

    MacOS Monterey 12.3 no longer has Python 2.7 installed, finding it very difficult to use sqlite3

    Output from yarn install

    error /myproject/node_modules/sqlite3: Command failed.
    Exit code: 1
    Command: node-pre-gyp install --fallback-to-build
    Arguments:
    Directory: /myproject/node_modules/sqlite3
    Output:
    node-pre-gyp info it worked if it ends with ok
    node-pre-gyp info using [email protected]
    node-pre-gyp info using [email protected] | darwin | arm64
    node-pre-gyp WARN Using request for node-pre-gyp https download
    node-pre-gyp info check checked for "/myproject/node_modules/sqlite3/lib/binding/napi-v3-darwin-arm64/node_sqlite3.node" (not found)
    node-pre-gyp http GET https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v5.0.2/napi-v3-darwin-arm64.tar.gz
    node-pre-gyp http 403 https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v5.0.2/napi-v3-darwin-arm64.tar.gz
    node-pre-gyp WARN Tried to download(403): https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v5.0.2/napi-v3-darwin-arm64.tar.gz
    node-pre-gyp WARN Pre-built binaries not found for [email protected] and [email protected] (node-v93 ABI, unknown) (falling back to source compile with node-gyp)
    node-pre-gyp http 403 status code downloading tarball https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v5.0.2/napi-v3-darwin-arm64.tar.gz
    gyp info it worked if it ends with ok
    gyp info using [email protected]
    gyp info using [email protected] | darwin | arm64
    gyp info ok
    gyp info it worked if it ends with ok
    gyp info using [email protected]
    gyp info using [email protected] | darwin | arm64
    gyp ERR! configure error
    gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
    gyp ERR! stack     at PythonFinder.failNoPython (/myproject/node_modules/node-gyp/lib/configure.js:484:19)
    gyp ERR! stack     at PythonFinder.<anonymous> (/myproject/node_modules/node-gyp/lib/configure.js:406:16)
    gyp ERR! stack     at F (/myproject/node_modules/node-gyp/node_modules/which/which.js:68:16)
    gyp ERR! stack     at E (/myproject/node_modules/node-gyp/node_modules/which/which.js:80:29)
    gyp ERR! stack     at /myproject/node_modules/node-gyp/node_modules/which/which.js:89:16
    gyp ERR! stack     at /myproject/node_modules/isexe/index.js:42:5
    gyp ERR! stack     at /myproject/node_modules/isexe/mode.js:8:5
    gyp ERR! stack     at FSReqCallback.oncomplete (node:fs:198:21)
    gyp ERR! System Darwin 21.4.0
    gyp ERR! command "/Users/merrick/.nvm/versions/node/v16.14.1/bin/node" "/myproject/node_modules/node-gyp/bin/node-gyp.js" "configure" "--fallback-to-build" "--module=/myproject/node_modules/sqlite3/lib/binding/napi-v3-darwin-arm64/node_sqlite3.node" "--module_name=node_sqlite3" "--module_path=/myproject/node_modules/sqlite3/lib/binding/napi-v3-darwin-arm64" "--napi_version=8" "--node_abi_napi=napi" "--napi_build_version=3" "--node_napi_label=napi-v3"
    gyp ERR! cwd /myproject/node_modules/sqlite3
    gyp ERR! node -v v16.14.1
    gyp ERR! node-gyp -v v3.8.0
    gyp ERR! not ok
    node-pre-gyp ERR! build error
    

    I've tried pointing it at python3 which does come installed but the code relies on python 2.7 syntax.

    I have also been trying to install python 2.7 back on the system with little luck, homebrew seems to have made it hard to install, and pyenv is even having issues on the apple silicon, at least for me, this is with trying workarounds using another x86_64 homebrew install and also using a rosetta terminal.

    I know this isn't really an issue with this library, but Monterey 12.3 came out a few days ago at time of writing, I'd expect to see this question asked a lot in the near future.

    And I'd also love some help on how I can either 1: Get this working without installing an old version of python or 2: Somehow get an old version of python running on this system.

    Cheers!

    install problem 
    opened by merrickfox 38
  • Failed at the sqlite3@5.0.1 install script.

    Failed at the [email protected] install script.

    This is the full error message I am getting when trying to install sqlite3.

    $ npm i sqlite3

    [email protected] install D:\Lambda\projects\greg\chaqar-data\node_modules\sqlite3 node-pre-gyp install --fallback-to-build

    node-pre-gyp WARN Using request for node-pre-gyp https download node-pre-gyp WARN Tried to download(403): https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v5.0.1/napi-v6-win32-x64.tar.gz node-pre-gyp WARN Pre-built binaries not found for [email protected] and [email protected] (node-v83 ABI, unknown) (falling back to source compile with node-gyp) gyp ERR! find VS gyp ERR! find VS msvs_version not set from command line or npm config gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer gyp ERR! find VS looking for Visual Studio 2015 gyp ERR! find VS - not found gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8 gyp ERR! find VS gyp ERR! find VS ************************************************************** gyp ERR! find VS You need to install the latest version of Visual Studio gyp ERR! find VS including the "Desktop development with C++" workload. gyp ERR! find VS For more information consult the documentation at: gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows gyp ERR! find VS ************************************************************** gyp ERR! find VS gyp ERR! configure error gyp ERR! stack Error: Could not find any Visual Studio installation to use gyp ERR! stack at VisualStudioFinder.fail (C:\Users\Owner\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:121:47) gyp ERR! stack at C:\Users\Owner\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:74:16 gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (C:\Users\Owner\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:351:14) gyp ERR! stack at C:\Users\Owner\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:70:14 gyp ERR! stack at C:\Users\Owner\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:372:16 gyp ERR! stack at C:\Users\Owner\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\util.js:54:7 gyp ERR! stack at C:\Users\Owner\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\lib\util.js:33:16 gyp ERR! stack at ChildProcess.exithandler (child_process.js:315:5) gyp ERR! stack at ChildProcess.emit (events.js:315:20) gyp ERR! stack at maybeClose (internal/child_process.js:1048:16) gyp ERR! System Windows_NT 10.0.17134 gyp ERR! command "C:\Program Files\nodejs\node.exe" "C:\Users\Owner\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" "configure" "--fallback-to-build" "--module=D:\Lambda\projects\greg\chaqar-data\node_modules\sqlite3\lib\binding\napi-v6-win32-x64\node_sqlite3.node" "--module_name=node_sqlite3" "--module_path=D:\Lambda\projects\greg\chaqar-data\node_modules\sqlite3\lib\binding\napi-v6-win32-x64" "--napi_version=7" "--node_abi_napi=napi" "--napi_build_version=6" "--node_napi_label=napi-v6" gyp ERR! cwd D:\Lambda\projects\greg\chaqar-data\node_modules\sqlite3 gyp ERR! node -v v14.15.1 gyp ERR! node-gyp -v v5.1.0 gyp ERR! not ok node-pre-gyp ERR! build error node-pre-gyp ERR! stack Error: Failed to execute 'C:\Program Files\nodejs\node.exe C:\Users\Owner\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js configure --fallback-to-build --module=D:\Lambda\projects\greg\chaqar-data\node_modules\sqlite3\lib\binding\napi-v6-win32-x64\node_sqlite3.node --module_name=node_sqlite3 --module_path=D:\Lambda\projects\greg\chaqar-data\node_modules\sqlite3\lib\binding\napi-v6-win32-x64 --napi_version=7 --node_abi_napi=napi --napi_build_version=6 --node_napi_label=napi-v6' (1) node-pre-gyp ERR! stack at ChildProcess. (D:\Lambda\projects\greg\chaqar-data\node_modules\node-pre-gyp\lib\util\compile.js:83:29) node-pre-gyp ERR! stack at ChildProcess.emit (events.js:315:20) node-pre-gyp ERR! stack at maybeClose (internal/child_process.js:1048:16) node-pre-gyp ERR! stack at Process.ChildProcess._handle.onexit (internanode-pre-gyp ERR! stack at maybeClose (internal/child_process.js:1048:16) node-pre-gyp ERR! stack at Process.ChildProcess._handle.onexit (interdanal/child_process.js:288:5) gy node-pre-gyp ERR! System Windows_NT 10.0.17134 node-pre-gyp ERR! command "C:\Program Files\nodejs\node.exe" "D:\Lamblida\projects\greg\chaqar-data\node_modules\node-pre-gyp\bin\node-pre-gyp" "install" "--fallback-to-build" node-pre-gyp ERR! cwd D:\Lambda\projects\greg\chaqar-data\node_modules\sqlite3 node-pre-gyp ERR! node -v v14.15.1 a
    node-pre-gyp ERR! node-pre-gyp -v v0.11.0 ur node-pre-gyp ERR! not ok od Failed to execute 'C:\Program Files\nodejs\node.exe C:\Users\Owner\AppDate=a\Roaming\npm\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js confesigure --fallback-to-build --module=D:\Lambda\projects\greg\chaqar-data\noapde_modules\sqlite3\lib\binding\napi-v6-win32-x64\node_sqlite3.node --module_name=node_sqlite3 --module_path=D:\Lambda\projects\greg\chaqar-data\nolede_modules\sqlite3\lib\binding\napi-v6-win32-x64 --napi_version=7 --node_abi_napi=napi --napi_build_version=6 --node_napi_label=napi-v6' (1) ev npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_moduarles\fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"}) npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] install:node-pre-gyp install --fallback-to-build` na npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the [email protected] install script. npm ERR! This is probably not a problem with npm. There is likely additio_0nal logging output above.

    npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\Owner\AppData\Roaming\npm-cache_logs\2021-01-11T18_05_27_207Z-debug.log

    opened by royeradames 35
  • node-sqlite3 needs more hands on the deck

    node-sqlite3 needs more hands on the deck

    Hi,

    If you are dependent on this package for your project, please read the following: https://kewde.github.io/sqlite

    I hope some people are willing to step up and take some responsibility off my back. Thanks.

    opened by kewde 31
  • fails to run in pkg-generated program

    fails to run in pkg-generated program

    Issue Summary

    On arm64 proc. computer:

    When running program, fails when loads sqlite3.

    Relevant logs or output

    include sqlite3... pkg/prelude/bootstrap.js:1876 throw error; ^

    Error: Cannot find module '/snapshot/NexoManager/node_modules/sqlite3/lib/binding/napi-v6-linux-glibc-arm64/node_sqlite3.node' Require stack:

    • /snapshot/NexoManager/node_modules/sqlite3/lib/sqlite3-binding.js
    • /snapshot/NexoManager/node_modules/sqlite3/lib/sqlite3.js
    • /snapshot/NexoManager/index.js
    1. If you want to compile the package/file into executable, please pay attention to compilation warnings and specify a literal in 'require' call. 2) If you don't want to compile the package/file into executable and want to 'require' it from filesystem (likely plugin), specify an absolute path in 'require' call using process.cwd() or process.execPath. at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15) at Function._resolveFilename (pkg/prelude/bootstrap.js:1955:46) at Function.Module._load (internal/modules/cjs/loader.js:667:27) at Module.require (internal/modules/cjs/loader.js:887:19) at Module.require (pkg/prelude/bootstrap.js:1855:31) at require (internal/modules/cjs/helpers.js:74:18) at Object. (/snapshot/NexoManager/node_modules/sqlite3/lib/sqlite3-binding.js:4:17) at Module._compile (pkg/prelude/bootstrap.js:1930:22) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10) at Module.load (internal/modules/cjs/loader.js:863:32) { code: 'MODULE_NOT_FOUND', requireStack: [ '/snapshot/NexoManager/node_modules/sqlite3/lib/sqlite3-binding.js', '/snapshot/NexoManager/node_modules/sqlite3/lib/sqlite3.js', '/snapshot/NexoManager/index.js' ], pkg: true }

    Version

    [email protected]

    Node.js Version

    [email protected]:/var/prog# node -v : v12.21.0

    How did you install the library?

    npm install node-pre-gyp --force --save --unsafe-perm npm install sqlite3 --force --save --unsafe-perm

    install problem 
    opened by pedefe 0
  • prepared statement .get(...) leaves database locked while .all(...) works fine

    prepared statement .get(...) leaves database locked while .all(...) works fine

    Issue Summary

    I have 2 processes, one stores stuff on the sqlite db the other reads. I'm not using wal and I think I don't need to because writes are very infrequent and the db is not very busy overall.

    One process that reads stuff is an node express web server. It uses node-sqlite3 to access the db.

    It has one api-function that returns a resource by its primary key. So I really want zero rows or one. That's why I thought "get" is the right method for me.

    The problem is, after using get, the database remains in a locked state such that the other process that occasionally writes to the db is being blocked from doing so.

    When I'm using .all instead of .get the database is accessible fine after the request.

    Steps to Reproduce

    I'm using a prepared statement for getting the resource by it's primary key.

      getResourceQuery = db.prepare(queries.resourceBase + " AND b.resource_name == ?")
    

    (queries.resourceBase is quite complex, I hope it does not play a role in the observed misbehavior here)

    The following lines using .get leave the db locked.

      app.get('/resources/:resourceName', (req, res) => {
        console.log("looking up resource", req.params.resourceName)
        getResourceQuery.get(req.params.resourceName, (err, row) => {
          if(err == null) {
            console.log("result from query", row) 
            res.send(row) 
          } else {
            res.send("Error: " + err)
          }
        })
      })
    

    The following lines using .all works fine, meaning that after the request the database is unlocked eventually.

      app.get('/resources/:resourceName', (req, res) => {
        console.log("looking up resource", req.params.resourceName)
        getResourceQuery.all(req.params.resourceName, (err, rows) => {
          if(err == null) {
            console.log("result from query", rows[0])
            res.send(rows[0]) 
          } else {
            res.send("Error: " + err)
          }
        })
      })
    

    For what it's worth, I setup the db connection like this:

    (async () => {
      await new Promise<void>((resolve, reject) => {
        console.log("trying to connect to", process.env.SQLITE_DB)
        db = new sqlite3.Database(process.env.SQLITE_DB!, err => { //sqlite3.OPEN_READONLY,
          if(err) {
            reject("could not connect to the db") 
          } else {
            prepareStatements()
            resolve()
          }
        })
        db.configure('busyTimeout', 30000)
      })
      runServer() // sets up express web server
    })()
    

    I have a deadline in a few days, so I will go with .all for now and can't spend much time on creating a reproducible minimal example here. But please remind me to do so, if we can't find a solution otherwise already.

    Version

    version "5.1.2"

    Node.js Version

    v16.16.0

    How did you install the library?

    yarn add -D sqlite3 # i think

    bug 
    opened by felixniemeyer 0
  • #1655 Database.backup() typings

    #1655 Database.backup() typings

    Here's a first cut at #1655. I have some questions:

    1. When, exactly, are each of the callback params called?
    2. Is Database.backup('foo.db', ()=>console.log('finished')) a complete example, or do step() and finish need to be called?

    The docs say

    The db.backup(filename, [callback]) shorthand is sufficient for making a backup of a database opened by node-sqlite3.

    But later in the docs it says that step(-1) must be called.

    Then it also says in different places that finish() is both required and not required.

    Clearing up these ambiguities would help the dx.

    opened by benallfree 0
  • Database.backup() typings?

    Database.backup() typings?

    Summary

    Hi, I noticed there are no TS typings for Database.backup and the Backup class.

    Would you like a PR for that?

    https://github.com/TryGhost/node-sqlite3/blob/master/src/backup.h#L17

    Proposed implementation

    Add typings and wiki docs for https://github.com/TryGhost/node-sqlite3/blob/master/src/backup.h#L17

    feature request pr wanted 
    opened by benallfree 1
  • Fix rpath linker option when using a custom sqlite

    Fix rpath linker option when using a custom sqlite

    It seems that an old refactoring (~8 years) made a mistake on the way conditions are expressed in gyp. the "conditions" key cannot be set 2 times and the conditions should be all set in the "conditions" array.

    The impact of this bug is that when sqlite3 is compiled against a custom sqlite3 source tree, the sqlite3 runtime keeps linking with the system sqlite3 instead of linking to the custom compiled sqlite3 library. In my case that lead to a SIGSEGV upon loading an extension.

    opened by jeromew 1
  • Registering multiple event listeners on the same event does not work

    Registering multiple event listeners on the same event does not work

    Issue Summary

    Using on / addListener multiple times with the same event name does not fire any of the attached listeners. This seems to be true for all events that use the Register*Callback function from database.cc. I will use on('change') as an example.

    This is due to the way the Database::Register*Callback functions are implemented:

    void Database::RegisterUpdateCallback(Baton* b) {
        std::unique_ptr<Baton> baton(b);
        assert(baton->db->open);
        assert(baton->db->_handle);
        Database* db = baton->db;
    
        if (db->update_event == NULL) {
            // Add it.
            db->update_event = new AsyncUpdate(db, UpdateCallback);
            sqlite3_update_hook(db->_handle, UpdateCallback, db);
        }
        else {
            // Remove it.
            sqlite3_update_hook(db->_handle, NULL, NULL);
            db->update_event->finish();
            db->update_event = NULL;
        }
    }
    

    Calling on('change', ...) will invoke this function which will eventually call Database::RegisterUpdateCallback. The first call to on('change', ...) will register the Database::UpdateCallback. The seconds call will remove it. The third call will register the callback again.

    Fix:

    • db.configure / Database::Configure is called with a second argument that states whether the callback should be registered or removed. This argument is not passed to Database::Register*Callback.

    Note: Calling on('change', ...) an odd number of times will lead to the correct behavior.

    Steps to Reproduce

    You can use this example code to reproduce the error.

    const db = new Database(':memory:');
    db.on('change', () => { console.log ('listener 1')});
    db.on('change', () => { console.log ('listener 2')});
    //Uncomment next to see all listeners
    //db.on('change', () => { console.log ('listener 3')});
    db.exec(`
      CREATE TABLE "test" (
        name TEXT
      )
    `, () => {
      db.exec(`
        INSERT INTO "test" (
          name
        ) VALUES (
          'test'
        )
      `)
    });
    

    Version

    ^5.1.2

    Node.js Version

    v18.2.0

    How did you install the library?

    Does not apply

    pr wanted bug help wanted 
    opened by i124q2n8 0
Releases(v5.1.2)
Owner
Mapbox
Mapbox is the location data platform for mobile and web applications. We're changing the way people move around cities and explore our world.
Mapbox
Node.js REST API for PostGres Spatial Entities. AKA: SpatialServer

PGRestAPI (a.k.a. Chubbs Spatial Server) Overview Node.js REST API for PostgreSQL Spatial Tables. An introduction to PGRestAPI can be found here A few

SpatialDev 428 Oct 21, 2022
A very fast geospatial point clustering library for browsers and Node.

supercluster A very fast JavaScript library for geospatial point clustering for browsers and Node. <script src="https://unpkg.com/[email protected]/d

Mapbox 1.6k Nov 23, 2022
A Node.js map tile library for PostGIS and torque.js, with CartoCSS styling

Windshaft A Node.js map tile library for PostGIS and torque.js, with CartoCSS styling. Can render arbitrary SQL queries Generates image and UTFGrid in

CARTO 305 Sep 5, 2022
Lightweight Node.js isochrone map server

Galton Lightweight Node.js isochrone server. Build isochrones using OSRM, Turf and concaveman. Francis Galton is the author of the first known isochro

Urbica 265 Nov 21, 2022
A pluggable Node.js map tile server.

TileStrata TileStrata is a pluggable "slippy map" tile server that emphasizes code-as-configuration. The primary goal is painless extendability. It's

Natural Atlas 407 Nov 13, 2022
WMS server using node-mapnik

landspeed.js A simple WMS server written in node.js Only supports WMS 1.1 GetMap requests (bbox, width, height, and srs). Requirements Node.js 0.10.x

Dane Springmeyer 52 Jul 21, 2022
Use better-sqlite3 to give obsidian the ability to manipulate sqlite3 databases

OBSIDIAN-SQLITE3 Use better-sqlite3 to give obisidian the ability to manipulate sqlite3 databases. Intention Currently the linkage between obsidian an

cloud 11 Nov 4, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 13 Jul 1, 2022
A simple Node.js ORM for PostgreSQL, MySQL and SQLite3 built on top of Knex.js

bookshelf.js Bookshelf is a JavaScript ORM for Node.js, built on the Knex SQL query builder. It features both Promise-based and traditional callback i

Bookshelf.js 6.3k Nov 22, 2022
This repo contains the code for blocking YouTube ads that is supposed to be run by an iOS shortcut

Block YouTube Ads in Safari on iPhone/iPad This repository contains code for the shortcut that we use to block YouTube ads on iPhone/iPad. The problem

AdGuard 66 Oct 23, 2022
Demodal is a browser extension that automatically removes content blocking modals including paywalls, discount offers, promts to sign up or enter your email address and more.

Demodal Demodal is a browser extension that automatically removes content blocking modals including paywalls, discount offers, promts to sign up or en

Elbert Alias 217 Nov 19, 2022
Demo running web assembly apps a terminal with blocking stdin/stdout/stderr

Python wasm-terminal Live version here: https://wasm-terminal.firebaseapp.com/ This is a small demo of running Python in the browser with a focus on i

Katie Bell 16 Nov 16, 2022
Simple rate-limiter NPM Module used for blocking IPs that exceeds certain number of requests per second in a specific time frame.

API Rate Limiter Zero-Dependencies Simple rate-limiter NPM Module used for blocking IPs that exceeds certain number of requests per second in a specif

Khaldon 7 Oct 7, 2022
A query builder for PostgreSQL, MySQL and SQLite3, designed to be flexible, portable, and fun to use.

knex.js A SQL query builder that is flexible, portable, and fun to use! A batteries-included, multi-dialect (MSSQL, MySQL, PostgreSQL, SQLite3, Oracle

knex 16.7k Nov 22, 2022
sqlite3 in ur indexeddb

This is an absurd project. It implements a backend for sql.js (sqlite3 compiled for the web) that treats IndexedDB like a disk and stores data in bloc

James Long 3.6k Nov 17, 2022
sqlite3 in ur indexeddb

This is an absurd project. It implements a backend for sql.js (sqlite3 compiled for the web) that treats IndexedDB like a disk and stores data in bloc

James Long 3.6k Nov 23, 2022
Same as sqlite-tag but without the native sqlite3 module dependency

sqlite-tag-spawned Social Media Photo by Tomas Kirvėla on Unsplash The same sqlite-tag ease but without the native sqlite3 dependency, aiming to repla

Andrea Giammarchi 17 Nov 20, 2022
A tiny cross-platform client for SQLite3, with precompiled binaries as the only third-party dependencies.

Tiny SQLite3 A tiny cross-platform client for SQLite3, with precompiled binaries as the only third-party dependencies. A nice feature about this modul

Fabio Spampinato 19 Oct 27, 2022