Support queries with parameters
mmkal opened this issue · comments
Hi! Love pg-mem.
One thing that's a little awkward to do is to pass queries that have parameters to it (e.g., which have come from pg-promise or slonik similar).
So say I've got an object that looks like { sql: 'select * from foo where id = $1', values: ['abc'] }
- I'd love to be able to pass them straight to pg-mem and have it work. (like db.public.query(myQuery.sql, myQuery.values)
).
Right now I've got a terrible workaround which works for the very limited use-case I have so far, but I think it will break as soon as I do something more complex, so I'm thinking there's already a better way, or if not, there could be:
let statement = pgSqlAstParser.parse(query.sql)
statement = JSON.parse(JSON.stringify(statement), (key, value) => {
if (value?.type === 'parameter' && typeof value?.name === 'string') {
const literalValue = query.values[Number(value.name.slice(1)) - 1]
return {type: 'string', value: literalValue}
}
return value
})
return fakeDb.public.query(statement)
If this is already possible, it can become a docs request.
+1 on this.
There is some code that does exactly this in this repo already:
pg-mem/src/adapters/adapters.ts
Line 27 in bfd30a0
Maybe just export that as a common util?