UNPKG

smc-hub

Version:

CoCalc: Backend webserver component

109 lines (100 loc) 1.72 kB
/* * This file is part of CoCalc: Copyright © 2020 Sagemath, Inc. * License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details */ // Nice async/await interface to doing basic queries. import { callback } from "awaiting"; const { one_result, all_results } = require("../postgres-base"); import { PostgreSQL, QueryWhere } from "./types"; interface QueryOpts { db: PostgreSQL; query?: string; select?: string[]; set?: string; jsonb_set?: object; jsonb_merge?: object; table?: string; where?: QueryWhere; one?: boolean; // if true get back one result; if false get list of all results. order_by?: string; limit?: number; params?: any[]; timeout_s?: number; } export async function query(opts: QueryOpts): Promise<any> { return await callback( opts.one ? one_query : all_query, opts.db, opts.select, opts.table, opts.where, opts.set, opts.query, opts.jsonb_set, opts.jsonb_merge, opts.order_by, opts.limit, opts.params, opts.timeout_s ); } function all_query( db, select, table, where, set, query, jsonb_set, jsonb_merge, order_by, limit, params, timeout_s, cb ): void { db._query({ select, table, where, set, query, jsonb_set, jsonb_merge, order_by, limit, params, timeout_s, cb: all_results(cb), }); } function one_query( db, select, table, where, set, query, jsonb_set, jsonb_merge, order_by, limit, params, timeout_s, cb ): void { db._query({ select, table, where, set, query, jsonb_set, jsonb_merge, order_by, limit, params, timeout_s, cb: one_result(cb), }); }