Skip to content

Commit a221f8c

Browse files
committed
fix(builder): fix version logic in sync and throw errors
1 parent 391b77a commit a221f8c

File tree

3 files changed

+26
-14
lines changed

3 files changed

+26
-14
lines changed

packages/sqlite-builder/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ function precompileQuery<O>(
150150
## credit
151151

152152
- [trilogy](https://github.com/haltcase/trilogy)
153+
- [kysely-params](https://github.com/jtlapp/kysely-params)
153154

154155
## license
155156
MIT

packages/sqlite-builder/src/sync/core.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ export type SyncOptions<T extends Schema> = {
1717
* whether to enable debug logger
1818
*/
1919
log?: boolean
20+
/**
21+
* version control
22+
*/
2023
version?: {
2124
/**
2225
* current version
@@ -57,10 +60,12 @@ export async function syncTables<T extends Schema>(
5760
excludeTablePrefix,
5861
} = options
5962

60-
if (skipSyncWhenSame && current === await getOrSetDBVersion(db)) {
61-
return
63+
if (current) {
64+
if (skipSyncWhenSame && current === await getOrSetDBVersion(db)) {
65+
return
66+
}
67+
await getOrSetDBVersion(db, current)
6268
}
63-
await getOrSetDBVersion(db, current)
6469

6570
const debug = (e: any) => log && logger?.debug(e)
6671
const { existTables, indexList, triggerList } = await parseExistDB(db, excludeTablePrefix)

packages/sqlite-builder/src/utils.ts

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ type CompileFn<O, T extends Record<string, any>> = (
3636

3737
/**
3838
* create precompiled query,
39-
* inspired by {@link https://github.com/jtlapp/kysely-params kysely-params},
4039
* included in `SqliteBuilder`
4140
* @param queryBuilder query builder without params
4241
* @param serialize custom parameter value serializer
@@ -45,8 +44,8 @@ type CompileFn<O, T extends Record<string, any>> = (
4544
* const query = precompileQuery(
4645
* db.selectFrom('test').selectAll(),
4746
* ).setParam<{ name: string }>((qb, param) =>
48-
* qb.where('name', '=', param('name')),
49-
* )
47+
* qb.where('name', '=', param('name'),
48+
* ))
5049
* const compiledQuery = query({ name: 'test' })
5150
* // {
5251
* // sql: 'select * from "test" where "name" = ?',
@@ -83,9 +82,10 @@ export function precompileQuery<O>(
8382
}
8483
return {
8584
...compiled,
86-
parameters: compiled.parameters.map(p => (typeof p === 'string' && p.startsWith('__pre_'))
87-
? serialize(param[p.slice(6)])
88-
: p,
85+
parameters: compiled.parameters.map(p =>
86+
(typeof p === 'string' && p.startsWith('__pre_'))
87+
? serialize(param[p.slice(6)])
88+
: p,
8989
),
9090
}
9191
}
@@ -97,9 +97,12 @@ export function precompileQuery<O>(
9797
* check integrity_check pragma
9898
*/
9999
export async function checkIntegrity(db: Kysely<any>): Promise<boolean> {
100-
const result = await sql`PRAGMA integrity_check`.execute(db)
100+
const { rows } = await sql`PRAGMA integrity_check`.execute(db)
101+
if (!rows.length) {
102+
throw new Error('fail to check integrity')
103+
}
101104
// @ts-expect-error result
102-
return result.rows[0].integrity_check === 'ok'
105+
return rows[0].integrity_check === 'ok'
103106
}
104107

105108
/**
@@ -113,9 +116,12 @@ export async function getOrSetDBVersion(
113116
await sql`PRAGMA user_version = ${sql.raw(`${version}`)}`.execute(db)
114117
return version
115118
}
116-
const result = await sql`PRAGMA user_version`.execute(db)
117-
// @ts-expect-error result
118-
return result.rows[0].user_version
119+
const { rows } = await sql`PRAGMA user_version`.execute(db)
120+
if (!rows.length) {
121+
throw new Error('fail to get DBVersion')
122+
}
123+
// @ts-expect-error get user version
124+
return rows[0].user_version
119125
}
120126

121127
export type SavePoint = {

0 commit comments

Comments
 (0)