Waddler SQL append

This guide assumes familiarity with:

sql.append lets you conveniently append SQL templates:

const query = sql`select * from users where id = 10`;
query.append(sql` or id = 20`);

const result = await query;
select * from users where id = 10 or id = 20;

It is an extremely useful API to build dynamic queries:

type Filter = {
  key: string,
  operator: "=" | "!=", 
  value: string,
}

const listItems = async (params: {limit: number, offset?: number, filter?: Filter }) => {
  const query = sql`select * from items`;

  if(params.filter) {
    query.append(sql` where ${sql.identifier(params.filter.key)} ${sql.raw(params.filter.operator)} ${params.filter.value}`)
  }

  query.append(sql` limit ${params.limit}`);

  if(params.offset) {
    query.append(sql` offset ${params.offset}`);
  }
}

await listItems({ limit: 50 });
await listItems({ limit: 50, filter: { key: "name", operator: "=", value: "Item 1"}});
await listItems({ limit: 50, offset: 50, filter: { key: "name", operator: "=", value: "Item 1"}});
select * from items limit {param1:Int32}; 
-- params: {param1:50}
select * from items where `name` = {param1:String} limit {param2:Int32}; 
-- params: {param1:"Item 1", param2:50}
select * from items where `name` = {param1:String} limit {param2:Int32} offset {param3:Int32}; 
-- params: {param1:"Item 1", param2:50, param3:50}