• vitonskyOP
    link
    fedilink
    arrow-up
    2
    ·
    7 days ago

    When you use query builder, you write a raw SQL code.

    The benifit is you can insert user input right in string, and your query remain secure against injections. Additionally, a Nano Queries let you compose queries, and extend it, so you may build complex queries simply.

    Let’s say you develop a site to search something by its features, for example a movies. Your SQL query may easy takes 100-500 lines. Some part of this query will be a basic, some will be optional depends on provided filters.

    With a query builder you may conditionally extend your query like that

    if (userInput.rating > 0) {
      filter.and(sql`rating >= ${userInput.rating}`);
    }
    

    That’s all Query Builder does. It let you avoid to write code like that

    const values = [];
    const getPlaceholder = (value) => {
      values.push(value);
      return `$${values.length}`;
    };
    
    const where = [];
    if (year) {
      where.push(`release_year = ${getPlaceholder(year)}`);
    }
    if (rating) {
      where.push(`rating >= ${getPlaceholder(rating)}`);
    }
    
    db.query(
      `SELECT title FROM movies ${where.length ? 'WHERE ' + where.join(' AND ') : ''} LIMIT 100`,
      values,
    );