@@ -6,6 +6,7 @@ import { SqliteBuilder } from '../packages/sqlite-builder/src'
6
6
7
7
interface DB {
8
8
test : TestTable
9
+ pet : PetTable
9
10
}
10
11
interface TestTable {
11
12
id : Generated < number >
@@ -15,6 +16,13 @@ interface TestTable {
15
16
updateAt : Date | null
16
17
buffer : ArrayBuffer | null
17
18
}
19
+ interface PetTable {
20
+ id : Generated < string >
21
+ name : string
22
+ owner_id : string
23
+ species : 'cat' | 'dog'
24
+ is_favorite : boolean
25
+ }
18
26
describe ( 'test builder' , async ( ) => {
19
27
const db = new SqliteBuilder < DB > ( {
20
28
dialect : new SqliteDialect ( {
@@ -36,18 +44,30 @@ describe('test builder', async () => {
36
44
timestamp : true ,
37
45
} ,
38
46
} ,
47
+ pet : {
48
+ columns : {
49
+ id : { type : 'increments' } ,
50
+ is_favorite : { type : 'boolean' } ,
51
+ name : { type : 'string' } ,
52
+ owner_id : { type : 'string' } ,
53
+ species : { type : 'string' } ,
54
+ } ,
55
+ } ,
39
56
} ,
40
57
dropTableBeforeInit : true ,
41
58
logger : console ,
42
- onQuery : ( queryInfo , time ) => console . log ( `${ time } ms` , queryInfo . sql , queryInfo . parameters ) ,
59
+ // onQuery: (queryInfo, time) => console.log(`${time}ms`, queryInfo.sql, queryInfo.parameters),
43
60
} )
44
61
beforeAll ( async ( ) => {
45
62
// manually generate table
46
63
await db . init ( true )
47
64
} )
48
65
test ( 'insert' , async ( ) => {
49
66
// auto generate table
50
- await db . transaction ( trx => trx . insertInto ( 'test' ) . values ( { gender : false } ) . execute ( ) )
67
+ console . log ( await db . transaction ( ( trx ) => {
68
+ trx . insertInto ( 'test' ) . values ( [ { gender : false } , { gender : true } ] ) . execute ( )
69
+ return trx . updateTable ( 'test' ) . set ( { gender : true } ) . where ( 'id' , '=' , 2 ) . execute ( )
70
+ } ) )
51
71
const result = await db . execList ( d => d . selectFrom ( 'test' ) . selectAll ( ) )
52
72
expect ( result ) . toBeInstanceOf ( Array )
53
73
expect ( result ! [ 0 ] . person ) . toStrictEqual ( { name : 'test' } )
@@ -62,31 +82,42 @@ describe('test builder', async () => {
62
82
expect ( result2 ! . updateAt ) . toBeInstanceOf ( Date )
63
83
} )
64
84
test ( 'raw' , async ( ) => {
65
- const { sql , parameters } = await db . toSQL ( d => d
85
+ const query = await db . toSQL ( d => d
66
86
. selectFrom ( 'test' )
67
87
. where ( 'person' , '=' , { name : '1' } )
68
88
. selectAll ( ) ,
69
89
)
70
- expect ( sql ) . toBe ( 'select * from "test" where "person" = ?' )
71
- expect ( parameters ) . toStrictEqual ( [ '{"name":"1"}' ] )
90
+ expect ( query . sql ) . toBe ( 'select * from "test" where "person" = ?' )
91
+ expect ( query . parameters ) . toStrictEqual ( [ '{"name":"1"}' ] )
92
+ const result = await db . execCompiled ( query )
93
+ console . log ( result )
72
94
} )
73
95
test ( 'preCompile' , async ( ) => {
74
- const fn = db . preCompile ( db => db . selectFrom ( 'test' ) . selectAll ( ) )
96
+ const select = db . preCompile ( db => db . selectFrom ( 'test' ) . selectAll ( ) )
75
97
. setParam < { person : { name : string } } > ( ( qb , param ) => qb . where ( 'person' , '=' , param ( 'person' ) ) )
98
+ const insert = db . preCompile ( db => db . insertInto ( 'test' ) )
99
+ . setParam < { gender : boolean } > ( ( qb , param ) => qb . values ( { gender : param ( 'gender' ) } ) )
100
+ const update = db . preCompile ( db => db . updateTable ( 'test' ) )
101
+ . setParam < { gender : boolean } > ( ( qb , param ) => qb . set ( { gender : param ( 'gender' ) } ) . where ( 'id' , '=' , 1 ) )
76
102
77
103
const start = performance . now ( )
78
104
79
- const { parameters, sql } = fn ( { person : { name : '1' } } )
105
+ const { parameters, sql } = select ( { person : { name : '1' } } )
80
106
expect ( sql ) . toBe ( 'select * from "test" where "person" = ?' )
81
107
expect ( parameters ) . toStrictEqual ( [ '{"name":"1"}' ] )
82
108
83
109
const start2 = performance . now ( )
84
110
console . log ( 'no compiled:' , `${ ( start2 - start ) . toFixed ( 2 ) } ms` )
85
111
86
- const { parameters : p1 , sql : s1 } = fn ( { person : { name : 'test' } } )
112
+ const { parameters : p1 , sql : s1 } = select ( { person : { name : 'test' } } )
87
113
expect ( s1 ) . toBe ( 'select * from "test" where "person" = ?' )
88
114
expect ( p1 ) . toStrictEqual ( [ '{"name":"test"}' ] )
89
115
90
116
console . log ( ' compiled:' , `${ ( performance . now ( ) - start2 ) . toFixed ( 2 ) } ms` )
117
+
118
+ const result = await db . execCompiled ( insert ( { gender : true } ) )
119
+ expect ( result ! . rows ) . toStrictEqual ( [ ] )
120
+ const result2 = await db . execCompiled ( update ( { gender : false } ) )
121
+ expect ( result2 ! . rows ) . toStrictEqual ( [ ] )
91
122
} )
92
123
} )
0 commit comments