forked from windmill-labs/windmill
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpg.ts
57 lines (55 loc) · 1.56 KB
/
pg.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import { Client } from "https://deno.land/x/[email protected]/mod.ts"
import { type Resource } from "./mod.ts"
/**
* deno-postgres client API is very flexible:
* https://deno.land/x/[email protected]/mod.ts?s=QueryClient
*
* @param db the PostgreSQL resource to generate the client for
*
* @returns the client for the resource
*
* @example
* // Static query
* ```ts
* const { rows } = await pgClient(db).queryObject(
* "SELECT ID, NAME FROM CLIENTS"
* );
* ```
*
* // Prepared Statements
* ```ts
* const { rows } = await pgClient(db).queryObject`SELECT ID, NAME FROM CLIENTS WHERE ID = ${id}`;
* ```
*/
export function pgClient(
db: Resource<"postgresql">
) {
const databaseUrl = 'postgresql://' + db.user + ':' + db.password + '@' + db.host + ':' + db.port + '/' + db.dbname + '?sslmode=' + db.sslmode
return new Client(databaseUrl)
}
/**
* deno-postgres client API is very flexible:
* https://deno.land/x/[email protected]/mod.ts?s=QueryClient
*
* @param db the PostgreSQL resource to run sql query for
*
* @returns the rows corresponding to the returned objetcs
*
* @example
* // Prepared Statements
* ```ts
* const { rows } = await pgSql(db)`SELECT ID, NAME FROM CLIENTS WHERE ID = ${id}`;
* ```
*/
export function pgSql(
db: Resource<"postgresql">,
asObjects = false
) {
return async function queryObject(
query: TemplateStringsArray,
...args: unknown[]
) {
const client = pgClient(db)
return asObjects ? await client.queryObject(query, ...args) : await client.queryArray(query, ...args)
}
}