Closed
Description
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"