Create values helper & fix video join insertion

This commit is contained in:
Zoe Roux
2025-01-26 21:18:07 +01:00
parent a216fd0d67
commit 2588eef23b
2 changed files with 32 additions and 7 deletions
+22
View File
@@ -70,3 +70,25 @@ export function conflictUpdateAllExcept<
export function sqlarr(array: unknown[]) {
return `{${array.map((item) => `"${item}"`).join(",")}}`;
}
// TODO: upstream this
// TODO: type values (everything is a `text` for now)
export function values(items: Record<string, unknown>[]) {
const [firstProp, ...props] = Object.keys(items[0]);
const values = items
.map((x) => {
let ret = sql`(${x[firstProp]}`;
for (const val of props) {
ret = sql`${ret}, ${x[val]}`;
}
return sql`${ret})`;
})
.reduce((acc, x) => sql`${acc}, ${x}`);
const valueNames = [firstProp, ...props].join(", ");
return {
as: (name: string) => {
return sql`(values ${values}) as ${sql.raw(name)}(${sql.raw(valueNames)})`;
},
};
}