pg-promise-demo
Version:
Advanced demo of using pg-promise.
68 lines (54 loc) • 2.54 kB
text/typescript
import {QueryFile, IQueryFileOptions} from 'pg-promise';
import {join} from 'path';
///////////////////////////////////////////////////////////////////////////////////////////////
// Criteria for deciding whether to place a particular query into an external SQL file or to
// keep it in-line (hard-coded):
//
// - Size / complexity of the query, because having it in a separate file will let you develop
// the query and see the immediate updates without having to restart your application.
//
// - The necessity to document your query, and possibly keeping its multiple versions commented
// out in the query file.
//
// In fact, the only reason one might want to keep a query in-line within the code is to be able
// to easily see the relation between the query logic and its formatting parameters. However, this
// is very easy to overcome by using only Named Parameters for your query formatting.
////////////////////////////////////////////////////////////////////////////////////////////////
export const users = {
create: sql('users/create.sql'),
empty: sql('users/empty.sql'),
init: sql('users/init.sql'),
drop: sql('users/drop.sql'),
add: sql('users/add.sql')
};
export const products = {
create: sql('products/create.sql'),
empty: sql('products/empty.sql'),
drop: sql('products/drop.sql'),
find: sql('products/find.sql'),
add: sql('products/add.sql')
};
///////////////////////////////////////////////
// Helper for linking to external query files;
function sql(file: string): QueryFile {
const fullPath: string = join(__dirname, file); // generating full path;
const options: IQueryFileOptions = {
// minifying the SQL is always advised;
// see also option 'compress' in the API;
minify: true
// See also property 'params' for two-step template formatting
};
const qf: QueryFile = new QueryFile(fullPath, options);
if (qf.error) {
// Something is wrong with our query file :(
// Testing all files through queries can be cumbersome,
// so we also report it here, while loading the module:
console.error(qf.error);
}
return qf;
// See QueryFile API:
// http://vitaly-t.github.io/pg-promise/QueryFile.html
}
///////////////////////////////////////////////////////////////////
// Possible alternative - enumerating all SQL files automatically:
// http://vitaly-t.github.io/pg-promise/utils.html#.enumSql