denodrivers / sqlite3

The fastest and correct SQLite3 module for Deno runtime
https://jsr.io/@db/sqlite
Apache License 2.0
265 stars 22 forks source link

Error: no such table: fsdir #116

Open 7flash opened 11 months ago

7flash commented 11 months ago

Jan05-2039.ts

import { Database } from "https://deno.land/x/sqlite3/mod.ts";

const db = new Database(":memory:");

const sqlQuery = Deno.args[0];

const stmt = db.prepare(sqlQuery);
const result = stmt.all();

for (const row of result) {
  console.log(row);
}

Execute sql

deno run --unstable -A ./Jan05-2039.ts "
select
  name as file,
  lines.rowid as line_number,
  line
from fsdir('.')
join lines_read(name) as lines
where name like '%.txt';
"

Gives an error

error: Uncaught (in promise) Error: no such table: fsdir
    throw new Error(Deno.UnsafePointerView.getCString(sqlite3_errmsg(db)!));
          ^
DjDeveloperr commented 11 months ago

I don't think this vtable is available by default in SQLite3. You will have to load up an extension. Ref: https://sqlite.org/src/doc/tip/ext/misc/fileio.c

7flash commented 10 months ago

I don't think this vtable is available by default in SQLite3. You will have to load up an extension. Ref: https://sqlite.org/src/doc/tip/ext/misc/fileio.c

Usually I'm loading extensions like this

import * as sqlite_vss from "https://deno.land/x/sqlite_vss/mod.ts";

const db = new Database("headlines.db");

db.enableLoadExtension = true;

db.loadExtension('./lines0');

Given lines0.dylib downloaded from https://github.com/asg017/sqlite-lines/releases to the same folder


Where can I find fileio.dylib ?

DjDeveloperr commented 7 months ago

I believe you have to compile it yourself, unless there are prebuilt binaries available elsewhere. fileio ext is in the sqlite source itself, and it's a single C file that you can compile to a dylib: https://sqlite.org/src/file/ext/misc/fileio.c - can check the sqlite docs for more instructions on how to compile.