Skip to content

node:sqlite implementation does not understand named parameters #28134

Closed
@jtoppine

Description

@jtoppine

Version: Deno 2.1.10+56f67b5 (canary, release, x86_64-unknown-linux-gnu)

node:sqlite implementation does not understand named parameters.

If an option bag object is provided like so: preparedstatement.all({param1: value1}), Deno will treat the object like "first anonymous parameter", which then obviously results in Unsupported type since Object can not be bound as parameter value.

Tested with an sqlite copy of the northwind sample db:

const sqlite = require("node:sqlite"); // NODE RUNTIME
// import * as sqlite from "node:sqlite"; // DENO RUNTIME

const path = "northwind.sqlite3";
const db = new sqlite.DatabaseSync(path);

let query;
let result;

console.log("NO PARAM");
query = "SELECT FirstName, LastName FROM Employees WHERE FirstName='Nancy'";
result = db.prepare(query).all();
console.log(result);
// OK IN DENO AND NODE

console.log("ANONYMOUS PARAM");
query = "SELECT FirstName, LastName FROM Employees WHERE FirstName=?";
result = db.prepare(query).all("Nancy");
console.log(result);
// OK IN DENO AND NODE

console.log("NAMED PARAM");
query = "SELECT FirstName, LastName FROM Employees WHERE FirstName=:firstName";
result = db.prepare(query).all({ firstName: "Nancy" });
console.log(result);
// NODE CORRECTLY PRINTS { FirstName: 'Nancy', LastName: 'Davolio' }
// DENO THROWS WITH "UNSUPPORTED TYPE"

console.log("NAMED AND ANONYMOUS PARAM");
query = "SELECT FirstName, LastName FROM Employees WHERE FirstName=:firstName AND LastName=?";
result = db.prepare(query).all({ firstName: "Nancy" }, "Davolio");
console.log(result);
// NODE CORRECTLY PRINTS { FirstName: 'Nancy', LastName: 'Davolio' }
// DENO THROWS WITH "UNSUPPORTED TYPE"

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions