Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
28 lines
962 B
Plaintext
28 lines
962 B
Plaintext
import { sql } from 'drizzle-orm';
|
|
export function jsonAgg(adapter, expression) {
|
|
if (adapter.name === 'sqlite') {
|
|
return sql`coalesce(json_group_array(${expression}), '[]')`;
|
|
}
|
|
return sql`coalesce(json_agg(${expression}), '[]'::json)`;
|
|
}
|
|
/**
|
|
* @param shape Potential for SQL injections, so you shouldn't allow user-specified key names
|
|
*/ export function jsonBuildObject(adapter, shape) {
|
|
const chunks = [];
|
|
Object.entries(shape).forEach(([key, value])=>{
|
|
if (chunks.length > 0) {
|
|
chunks.push(sql.raw(','));
|
|
}
|
|
chunks.push(sql.raw(`'${key}',`));
|
|
chunks.push(sql`${value}`);
|
|
});
|
|
if (adapter.name === 'sqlite') {
|
|
return sql`json_object(${sql.join(chunks)})`;
|
|
}
|
|
return sql`json_build_object(${sql.join(chunks)})`;
|
|
}
|
|
export const jsonAggBuildObject = (adapter, shape)=>{
|
|
return jsonAgg(adapter, jsonBuildObject(adapter, shape));
|
|
};
|
|
|
|
//# sourceMappingURL=json.js.map |