mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-17 16:44:19 +01:00
javascript: Implement Statement.pluck()
This commit is contained in:
@@ -43,6 +43,24 @@ export class Statement {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable pluck mode to return only the first column value from each row.
|
||||||
|
*
|
||||||
|
* @param pluck Enable or disable pluck mode. If you don't pass the parameter, pluck mode is enabled.
|
||||||
|
* @returns This statement instance for chaining
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* ```typescript
|
||||||
|
* const stmt = client.prepare("SELECT id FROM users");
|
||||||
|
* const ids = await stmt.pluck().all();
|
||||||
|
* console.log(ids); // [1, 2, 3, ...]
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
pluck(pluck?: boolean): Statement {
|
||||||
|
this.presentationMode = pluck === false ? 'expanded' : 'pluck';
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes the prepared statement.
|
* Executes the prepared statement.
|
||||||
*
|
*
|
||||||
@@ -85,6 +103,11 @@ export class Statement {
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.presentationMode === 'pluck') {
|
||||||
|
// In pluck mode, return only the first column value
|
||||||
|
return row[0];
|
||||||
|
}
|
||||||
|
|
||||||
if (this.presentationMode === 'raw') {
|
if (this.presentationMode === 'raw') {
|
||||||
// In raw mode, return the row as a plain array (it already is one)
|
// In raw mode, return the row as a plain array (it already is one)
|
||||||
// The row object is already an array with column properties added
|
// The row object is already an array with column properties added
|
||||||
@@ -111,6 +134,11 @@ export class Statement {
|
|||||||
const normalizedArgs = this.normalizeArgs(args);
|
const normalizedArgs = this.normalizeArgs(args);
|
||||||
const result = await this.session.execute(this.sql, normalizedArgs);
|
const result = await this.session.execute(this.sql, normalizedArgs);
|
||||||
|
|
||||||
|
if (this.presentationMode === 'pluck') {
|
||||||
|
// In pluck mode, return only the first column value from each row
|
||||||
|
return result.rows.map((row: any) => row[0]);
|
||||||
|
}
|
||||||
|
|
||||||
if (this.presentationMode === 'raw') {
|
if (this.presentationMode === 'raw') {
|
||||||
return result.rows.map((row: any) => [...row]);
|
return result.rows.map((row: any) => [...row]);
|
||||||
}
|
}
|
||||||
@@ -157,7 +185,10 @@ export class Statement {
|
|||||||
case 'row':
|
case 'row':
|
||||||
if (entry.row) {
|
if (entry.row) {
|
||||||
const decodedRow = entry.row.map(decodeValue);
|
const decodedRow = entry.row.map(decodeValue);
|
||||||
if (this.presentationMode === 'raw') {
|
if (this.presentationMode === 'pluck') {
|
||||||
|
// In pluck mode, yield only the first column value
|
||||||
|
yield decodedRow[0];
|
||||||
|
} else if (this.presentationMode === 'raw') {
|
||||||
// In raw mode, yield arrays of values
|
// In raw mode, yield arrays of values
|
||||||
yield decodedRow;
|
yield decodedRow;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -328,7 +328,7 @@ test.serial("Statement.all() [raw]", async (t) => {
|
|||||||
t.deepEqual(await stmt.raw().all(), expected);
|
t.deepEqual(await stmt.raw().all(), expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
test.skip("Statement.all() [pluck]", async (t) => {
|
test.serial("Statement.all() [pluck]", async (t) => {
|
||||||
const db = t.context.db;
|
const db = t.context.db;
|
||||||
|
|
||||||
const stmt = await db.prepare("SELECT * FROM users");
|
const stmt = await db.prepare("SELECT * FROM users");
|
||||||
|
|||||||
Reference in New Issue
Block a user