import { ResponseError } from "./errors.js"; import { valueFromProto } from "./value.js"; export function stmtResultFromProto(result) { return { affectedRowCount: result.affectedRowCount, lastInsertRowid: result.lastInsertRowid, columnNames: result.cols.map(col => col.name), columnDecltypes: result.cols.map(col => col.decltype), }; } export function rowsResultFromProto(result, intMode) { const stmtResult = stmtResultFromProto(result); const rows = result.rows.map(row => rowFromProto(stmtResult.columnNames, row, intMode)); return { ...stmtResult, rows }; } export function rowResultFromProto(result, intMode) { const stmtResult = stmtResultFromProto(result); let row; if (result.rows.length > 0) { row = rowFromProto(stmtResult.columnNames, result.rows[0], intMode); } return { ...stmtResult, row }; } export function valueResultFromProto(result, intMode) { const stmtResult = stmtResultFromProto(result); let value; if (result.rows.length > 0 && stmtResult.columnNames.length > 0) { value = valueFromProto(result.rows[0][0], intMode); } return { ...stmtResult, value }; } function rowFromProto(colNames, values, intMode) { const row = {}; // make sure that the "length" property is not enumerable Object.defineProperty(row, "length", { value: values.length }); for (let i = 0; i < values.length; ++i) { const value = valueFromProto(values[i], intMode); Object.defineProperty(row, i, { value }); const colName = colNames[i]; if (colName !== undefined && !Object.hasOwn(row, colName)) { Object.defineProperty(row, colName, { value, enumerable: true, configurable: true, writable: true }); } } return row; } export function errorFromProto(error) { return new ResponseError(error.message, error); }