-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsql.js
92 lines (78 loc) · 3.72 KB
/
sql.js
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import {sql, sqlUnsafe, Statement} from '../lib/sql.js';
import t from 'tap';
t.test('SQL', t => {
t.test('Statement', t => {
t.same(Statement.sql`SELECT 1`.toQuery(), {text: 'SELECT 1', values: []});
t.same(Statement.sql`SELECT 1;`.toQuery(), {text: 'SELECT 1;', values: []});
t.same(Statement.sql`SELECT ${1};`.toQuery(), {text: 'SELECT $1;', values: [1]});
t.same(Statement.sql`SELECT ${1}, ${'2'}, ${[3]};`.toQuery(), {text: 'SELECT $1, $2, $3;', values: [1, '2', [3]]});
const partial = Statement.sql`AND two = ${'Two'} AND three = ${3}`;
t.same(Statement.sql`SELECT * FROM foo WHERE one = ${'One'} ${partial}`.toQuery(), {
text: 'SELECT * FROM foo WHERE one = $1 AND two = $2 AND three = $3',
values: ['One', 'Two', 3]
});
t.same(Statement.sql`SELECT * FROM foo WHERE one = ${'One'} ${partial} ${partial} AND four = ${4}`.toQuery(), {
text: 'SELECT * FROM foo WHERE one = $1 AND two = $2 AND three = $3 AND two = $4 AND three = $5 AND four = $6',
values: ['One', 'Two', 3, 'Two', 3, 4]
});
const empty = Statement.sql``;
t.same(Statement.sql`SELECT 1 ${empty}`.toQuery(), {text: 'SELECT 1 ', values: []});
t.test('From unsafe string', t => {
const unsafe = Statement.sqlUnsafe`FROM bar WHERE ${'baz'} = '${'yada'}'`;
t.same(Statement.sql`SELECT * ${unsafe} ORDER BY id`.toQuery(), {
text: "SELECT * FROM bar WHERE baz = 'yada' ORDER BY id",
values: []
});
t.end();
});
t.end();
});
t.test('Functions', t => {
t.same(sql`SELECT 1`.toQuery(), {text: 'SELECT 1', values: []});
t.same(sql`SELECT 1;`.toQuery(), {text: 'SELECT 1;', values: []});
t.same(sql`SELECT ${1};`.toQuery(), {text: 'SELECT $1;', values: [1]});
t.same(sql`SELECT ${1}, ${'2'}, ${[3]};`.toQuery(), {text: 'SELECT $1, $2, $3;', values: [1, '2', [3]]});
const partial = sql`AND two = ${'Two'} AND three = ${3}`;
t.same(sql`SELECT * FROM foo WHERE one = ${'One'} ${partial}`.toQuery(), {
text: 'SELECT * FROM foo WHERE one = $1 AND two = $2 AND three = $3',
values: ['One', 'Two', 3]
});
t.same(sql`SELECT * FROM foo WHERE one = ${'One'} ${partial} ${partial} AND four = ${4}`.toQuery(), {
text: 'SELECT * FROM foo WHERE one = $1 AND two = $2 AND three = $3 AND two = $4 AND three = $5 AND four = $6',
values: ['One', 'Two', 3, 'Two', 3, 4]
});
const empty = sql``;
t.same(sql`SELECT 1 ${empty}`.toQuery(), {text: 'SELECT 1 ', values: []});
t.test('From unsafe string', t => {
const unsafe = sqlUnsafe`FROM bar WHERE ${'baz'} = '${'yada'}'`;
t.same(sql`SELECT * ${unsafe} ORDER BY id`.toQuery(), {
text: "SELECT * FROM bar WHERE baz = 'yada' ORDER BY id",
values: []
});
t.end();
});
t.end();
});
t.test('Custom placeholder', t => {
t.same(sql`SELECT 1`.toQuery({placeholder: '?'}), {text: 'SELECT 1', values: []});
t.same(sql`SELECT ${1};`.toQuery({placeholder: '?'}), {text: 'SELECT ?;', values: [1]});
t.same(sql`SELECT ${1}, ${'2'}, ${[3]};`.toQuery({placeholder: '?'}), {
text: 'SELECT ?, ?, ?;',
values: [1, '2', [3]]
});
const partial = sql`AND two = ${'Two'} AND three = ${3}`;
t.same(sql`SELECT * FROM foo WHERE one = ${'One'} ${partial}`.toQuery({placeholder: '?'}), {
text: 'SELECT * FROM foo WHERE one = ? AND two = ? AND three = ?',
values: ['One', 'Two', 3]
});
t.same(
sql`SELECT * FROM foo WHERE one = ${'One'} ${partial} ${partial} AND four = ${4}`.toQuery({placeholder: '?'}),
{
text: 'SELECT * FROM foo WHERE one = ? AND two = ? AND three = ? AND two = ? AND three = ? AND four = ?',
values: ['One', 'Two', 3, 'Two', 3, 4]
}
);
t.end();
});
t.end();
});