Skip to content

Document use of query files #2

Open
@gajus

Description

@gajus

pg-promise documentation features a concept of query files.

This is effectively a helper function that is used to prepare a statement using pg-promise, e.g.

const path = require('path');

// Helper for linking to external query files:
function sql(file) {
    const fullPath = path.join(__dirname, file);
    return new pgp.QueryFile(fullPath, {minify: true});
}

// Create a QueryFile globally, once per file:
const sqlFindUser = sql('./sql/findUser.sql');

db.one(sqlFindUser, {id: 123})
    .then(user => {
        console.log(user);
    })
    .catch(error => {
        if (error instanceof pgp.errors.QueryFileError) {
            // => the error is related to our QueryFile
        }
    });

In case of Slonik, this would be best implement using sql.raw, e.g.

const getQuery = (queryName, parameters = []) => {
  return sql`${sql.raw(
    fs.readFileSync(path.resolve(__dirname, 'queries', queryName + '.sql'), parameters)
  )}`;
};

connection.query(getQuery('foo', [1, 2, 3]));

I don't see an immediate need to either add helper for loading queries or to advertise this as a distinct feature.

What abstraction could Slonik offer here and what value would it add?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions