sqlfmt icon indicating copy to clipboard operation
sqlfmt copied to clipboard

Support pg-promise Query Files with Named Parameters

Open cmcnicoll opened this issue 1 year ago • 2 comments

I use sqlfmt for all my dbt projects. Thank you @tconbeer for creating this wonderful tool!

It would be great if sqlfmt could also support this:

select * from users where id = ${id}

Docs

cmcnicoll avatar Jan 31 '24 23:01 cmcnicoll

From pg-promise docs:

Named Parameters

When a query method is parameterized with values as an object, the formatting engine expects the query to use the Named Parameter syntax $*propName*, with * being any of the following open-close pairs: {}, (), <>, [], //.

// We can use every supported variable syntax at the same time, if needed:
await db.none('INSERT INTO users(first_name, last_name, age) VALUES(${name.first}, $<name.last>, $/age/)', {
    name: {first: 'John', last: 'Dow'},
    age: 30
});

tconbeer avatar Apr 05 '24 21:04 tconbeer

Here is the workaround I've been using:

  1. Run a script to quote named parameters in query file example.sql:
select * from users where id = '${id}'
  1. Use sqlfmt via dbt Power User
  2. Test query manually
  3. Run another script to unquote named parameters
  4. Test query in app

cmcnicoll avatar Apr 06 '24 01:04 cmcnicoll