describe("sqlite", () => { describe("SQLiteConnection", () => { it("should instantiate using the new keyword", () => { constconnection = sqlite.SQLiteConnection.new(":memory:"); expect.equal(tostring(connection), "SQLiteConnection(:memory:)"); }); });
constconnection = sqlite.SQLiteConnection.new(":memory:"); connection.exec( "CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT UNIQUE, age INTEGER CHECK ( typeof(age) = 'integer'));", ); connection.exec("INSERT INTO users (name, age) VALUES ('John Doe', 30);"); connection.exec("INSERT INTO users (name, age) VALUES ('Jane Smith', 25);");
describe("exec", () => { it("executes a valid INSERT OR REPLACE statement", () => { const [res] = connection.exec("INSERT OR REPLACE INTO users (name, age) VALUES ('Jane Smith', 25);"); expect.equal(res, true); });
it("returns an error for malformed SQL", () => { const [res, err] = connection.exec("INVALID SQL"); expect.equal(res, undefined); expect.equal(err, 'SQLite error: near "INVALID": syntax error (code 1)'); });
it("returns an error when violating UNIQUE constraint", () => { const [, err] = connection.exec("INSERT INTO users (name, age) VALUES ('Jane Smith', 40);"); expect.truthy(err?.includes("UNIQUE constraint failed")); }); });
describe("execute", () => { it("returns all users from SELECT query", () => { const [res] = connection.execute<User>("SELECT * FROM users;"); expect.equal(res.length, 2); expect.equal(res[0].name, "John Doe"); expect.equal(res[1].name, "Jane Smith"); });
it("returns filtered users using positional bind", () => { const [res] = connection.execute<User, [number]>("SELECT * FROM users WHERE age = ?;", [30]); expect.equal(res.length, 1); expect.equal(res[0].name, "John Doe"); });
it("inserts a new user using positional binds and validates insert", () => { const [res] = connection.execute<User, [string, number]>("INSERT INTO users (name, age) VALUES (?, ?);", [ "Alice", 66, ]); expect.equal(res.length, 0);
const [selectRes] = connection.execute<User>("SELECT * FROM users WHERE age > 65;"); expect.equal(selectRes.length, 1); expect.equal(selectRes[0].name, "Alice"); });
it("returns user using named parameter", () => { const [res] = connection.execute<User, Pick<User, "name">>("SELECT * FROM users WHERE name = :name;", { name:"John Doe", }); expect.equal(res.length, 1); expect.equal(res[0].name, "John Doe"); });
it("returns empty result for non-matching WHERE clause", () => { const [res] = connection.execute<User, [number]>("SELECT * FROM users WHERE age = ?;", [99]); expect.equal(res.length, 0); });
it("should fail to insert a user with NaN age", () => { connection.execute("INSERT INTO users (name, age) VALUES (?, ?);", ["Bob", "NaN"]); const [qres] = connection.execute<User>("SELECT * FROM users WHERE name = 'Bob';"); expect.equal(qres.length, 0); expect.equal(qres[0], undefined); }); }); });
Lua Example
local____lualib = require("lualib_bundle") local__TS__StringIncludes = ____lualib.__TS__StringIncludes local____exports = {} local____pelican = require("pelican") localsqlite = ____pelican.sqlite local____lester = require("tests.lester") localdescribe = ____lester.describe localexpect = ____lester.expect localit = ____lester.it describe( "sqlite", function() describe( "SQLiteConnection", function() it( "should instantiate using the new keyword", function() localconnection = sqlite.SQLiteConnection.new(":memory:") expect.equal( tostring(connection), "SQLiteConnection(:memory:)" ) end ) end ) localconnection = sqlite.SQLiteConnection.new(":memory:") connection:exec("CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT UNIQUE, age INTEGER CHECK ( typeof(age) = 'integer'));") connection:exec("INSERT INTO users (name, age) VALUES ('John Doe', 30);") connection:exec("INSERT INTO users (name, age) VALUES ('Jane Smith', 25);") describe( "exec", function() it( "executes a valid INSERT OR REPLACE statement", function() localres = connection:exec("INSERT OR REPLACE INTO users (name, age) VALUES ('Jane Smith', 25);") expect.equal(res, true) end ) it( "returns an error for malformed SQL", function() localres, err = connection:exec("INVALID SQL") expect.equal(res, nil) expect.equal(err, "SQLite error: near \"INVALID\": syntax error (code 1)") end ) it( "returns an error when violating UNIQUE constraint", function() local____, err = connection:exec("INSERT INTO users (name, age) VALUES ('Jane Smith', 40);") local____expect_truthy_2 = expect.truthy local____opt_0 = err ____expect_truthy_2(____opt_0 and __TS__StringIncludes(err, "UNIQUE constraint failed")) end ) end ) describe( "execute", function() it( "returns all users from SELECT query", function() localres = connection:execute("SELECT * FROM users;") expect.equal(#res, 2) expect.equal(res[1].name, "John Doe") expect.equal(res[2].name, "Jane Smith") end ) it( "returns filtered users using positional bind", function() localres = connection:execute("SELECT * FROM users WHERE age = ?;", {30}) expect.equal(#res, 1) expect.equal(res[1].name, "John Doe") end ) it( "inserts a new user using positional binds and validates insert", function() localres = connection:execute("INSERT INTO users (name, age) VALUES (?, ?);", {"Alice", 66}) expect.equal(#res, 0) localselectRes = connection:execute("SELECT * FROM users WHERE age > 65;") expect.equal(#selectRes, 1) expect.equal(selectRes[1].name, "Alice") end ) it( "returns user using named parameter", function() localres = connection:execute("SELECT * FROM users WHERE name = :name;", {name = "John Doe"}) expect.equal(#res, 1) expect.equal(res[1].name, "John Doe") end ) it( "returns empty result for non-matching WHERE clause", function() localres = connection:execute("SELECT * FROM users WHERE age = ?;", {99}) expect.equal(#res, 0) end ) it( "returns error for invalid SQL statement", function() localres, err = connection:execute("INVALID SQL") expect.equal(res, nil) expect.equal(err, "SQLite error: near \"INVALID\": syntax error (code 1)") end ) it( "should fail to insert a user with NaN age", function() connection:execute("INSERT INTO users (name, age) VALUES (?, ?);", {"Bob", "NaN"}) localqres = connection:execute("SELECT * FROM users WHERE name = 'Bob';") expect.equal(#qres, 0) expect.equal(qres[1], nil) end ) end ) end ) return____exports
The
sqlite
module provides functions to interact with SQLite databases.TypeScript Example
Lua Example
No Self