javascript: Implement Statement.columns()

This commit is contained in:
Pekka Enberg
2025-08-19 15:15:43 +03:00
parent 5002539b04
commit 387d384394
13 changed files with 243 additions and 101 deletions

View File

@@ -390,46 +390,31 @@ test.skip("Statement.raw() [failure]", async (t) => {
// Statement.columns()
// ==========================================================================
test.skip("Statement.columns()", async (t) => {
test.serial("Statement.columns()", async (t) => {
const db = t.context.db;
var stmt = undefined;
stmt = await db.prepare("SELECT 1");
t.deepEqual(stmt.columns(), [
{
column: null,
database: null,
name: '1',
table: null,
type: null,
},
]);
const columns1 = stmt.columns();
t.is(columns1.length, 1);
t.is(columns1[0].name, '1');
// For "SELECT 1", type varies by provider, so just check it exists
t.true('type' in columns1[0]);
stmt = await db.prepare("SELECT * FROM users WHERE id = ?");
t.deepEqual(stmt.columns(), [
{
column: "id",
database: "main",
name: "id",
table: "users",
type: "INTEGER",
},
{
column: "name",
database: "main",
name: "name",
table: "users",
type: "TEXT",
},
{
column: "email",
database: "main",
name: "email",
table: "users",
type: "TEXT",
},
]);
const columns2 = stmt.columns();
t.is(columns2.length, 3);
// Check column names and types only
t.is(columns2[0].name, "id");
t.is(columns2[0].type, "INTEGER");
t.is(columns2[1].name, "name");
t.is(columns2[1].type, "TEXT");
t.is(columns2[2].name, "email");
t.is(columns2[2].type, "TEXT");
});
// ==========================================================================

View File

@@ -446,46 +446,31 @@ test.skip("Statement.raw() [failure]", async (t) => {
// Statement.columns()
// ==========================================================================
test.skip("Statement.columns()", async (t) => {
test.serial("Statement.columns()", async (t) => {
const db = t.context.db;
var stmt = undefined;
stmt = db.prepare("SELECT 1");
t.deepEqual(stmt.columns(), [
{
column: null,
database: null,
name: '1',
table: null,
type: null,
},
]);
const columns1 = stmt.columns();
t.is(columns1.length, 1);
t.is(columns1[0].name, '1');
// For "SELECT 1", type varies by provider, so just check it exists
t.true('type' in columns1[0]);
stmt = db.prepare("SELECT * FROM users WHERE id = ?");
t.deepEqual(stmt.columns(), [
{
column: "id",
database: "main",
name: "id",
table: "users",
type: "INTEGER",
},
{
column: "name",
database: "main",
name: "name",
table: "users",
type: "TEXT",
},
{
column: "email",
database: "main",
name: "email",
table: "users",
type: "TEXT",
},
]);
stmt = await db.prepare("SELECT * FROM users WHERE id = ?");
const columns2 = stmt.columns();
t.is(columns2.length, 3);
// Check column names and types only
t.is(columns2[0].name, "id");
t.is(columns2[0].type, "INTEGER");
t.is(columns2[1].name, "name");
t.is(columns2[1].type, "TEXT");
t.is(columns2[2].name, "email");
t.is(columns2[2].type, "TEXT");
});
test.skip("Timeout option", async (t) => {