denodrivers / postgres

PostgreSQL driver for Deno

Home Page:https://denodrivers.github.io/postgres

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Support Set as bind parameter

tv42 opened this issue · comments

commented

Is your feature request related to a problem? Please describe.

I tried to pass a Set as a bind parameter, expecting it to behave like Array. It was hard to debug since the query gave wrong results, not an error.

Describe the solution you'd like

Support Set just like Array: convert it to a Postgres array.

Additional context

Set:

$ deno eval 'import { Client } from "https://deno.land/x/postgres@v0.19.3/mod.ts"; const client = new Client({}); await client.connect(); const odds = new Set([1,3,5]); const result = await client.queryObject`SELECT 3=ANY(${odds}) AS should_be_true`; console.log(result.rows);'
[ { should_be_true: false } ]

Array:

$ deno eval 'import { Client } from "https://deno.land/x/postgres@v0.19.3/mod.ts"; const client = new Client({}); await client.connect(); const odds = new Array([1,3,5]); const result = await client.queryObject`SELECT 3=ANY(${odds}) AS should_be_true`; console.log(result.rows);'
[ { should_be_true: true } ]
commented

This seems like a very simple change (but I haven't actually tested this):

postgres/query/encode.ts

Lines 98 to 99 in 2606e50

} else if (value instanceof Array) {
return encodeArray(value);

add

  } else if (value instanceof Set) {
    return encodeArray(Array.from(value));