Skip to content

Commit 40487bf

Browse files
committed
fix(utils): use Compiled.raw to fix execute error
1 parent e43d966 commit 40487bf

File tree

2 files changed

+45
-48
lines changed

2 files changed

+45
-48
lines changed
Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { CompiledQuery, sql } from 'kysely'
2-
import type { DatabaseConnection, Kysely } from 'kysely'
1+
import { CompiledQuery } from 'kysely'
2+
import type { DatabaseConnection, Kysely, Transaction } from 'kysely'
33

44
/**
5-
* check integrity_check pragma
5+
* check integrity_check pragma, **no param check**
66
*/
77
export async function checkIntegrity(db: Kysely<any>): Promise<boolean> {
8-
const { rows } = await sql`PRAGMA integrity_check`.execute(db)
8+
const { rows } = await db.executeQuery(CompiledQuery.raw('PRAGMA integrity_check'))
99
if (!rows.length) {
1010
throw new Error('fail to check integrity')
1111
}
@@ -14,24 +14,24 @@ export async function checkIntegrity(db: Kysely<any>): Promise<boolean> {
1414
}
1515

1616
/**
17-
* control whether to enable foreign keys
17+
* control whether to enable foreign keys, **no param check**
1818
*/
1919
export async function foreignKeys(db: Kysely<any>, enable: boolean): Promise<void> {
20-
await sql`PRAGMA foreign_keys = ${sql.raw(`${enable}`)}`.execute(db)
20+
await db.executeQuery(CompiledQuery.raw(`PRAGMA foreign_keys = ${enable}`))
2121
}
2222

2323
/**
24-
* get or set user_version pragma
24+
* get or set user_version pragma, **no param check**
2525
*/
2626
export async function getOrSetDBVersion(
2727
db: Kysely<any>,
2828
version?: number,
2929
): Promise<number> {
3030
if (version) {
31-
await sql`PRAGMA user_version = ${sql.raw(`${version}`)}`.execute(db)
31+
await db.executeQuery(CompiledQuery.raw(`PRAGMA user_version = ${version}`))
3232
return version
3333
}
34-
const { rows } = await sql`PRAGMA user_version`.execute(db)
34+
const { rows } = await db.executeQuery(CompiledQuery.raw('PRAGMA user_version'))
3535
if (!rows.length) {
3636
throw new Error('fail to get DBVersion')
3737
}
@@ -50,26 +50,27 @@ export type OptimizePragmaOptions = {
5050
* @default 4096
5151
* @see https://sqlite.org/pragma.html#pragma_cache_size
5252
*/
53-
cacheSize?: number
53+
cache_size?: number
5454
/**
5555
* @default 32768
5656
* @see https://sqlite.org/pragma.html#pragma_page_size
5757
*/
58-
pageSize?: number
58+
page_size?: number
5959
/**
60+
* @default -1 (default value)
6061
* @see https://sqlite.org/pragma.html#pragma_mmap_size
6162
*/
62-
mmapSize?: number
63+
mmap_size?: number
6364
/**
6465
* @default 'WAL'
6566
* @see https://sqlite.org/pragma.html#pragma_journal_mode
6667
*/
67-
journalMode?: PragmaJournalMode
68+
journal_mode?: PragmaJournalMode
6869
/**
6970
* @default 'MEMORY'
7071
* @see https://sqlite.org/pragma.html#pragma_temp_store
7172
*/
72-
tempStore?: PragmaTempStore
73+
temp_store?: PragmaTempStore
7374
/**
7475
* @default 'NORMAL'
7576
* @see https://sqlite.org/pragma.html#pragma_synchronous
@@ -78,33 +79,24 @@ export type OptimizePragmaOptions = {
7879
}
7980

8081
/**
81-
* call optimize pragma
82-
* @param conn database connection
82+
* call optimize pragma, **no param check**
83+
* @param db database connection
8384
* @param options pragma options, {@link OptimizePragmaOptions details}
8485
*/
85-
export async function optimzePragma(
86-
conn: DatabaseConnection,
86+
export async function optimizePragma(
87+
db: DatabaseConnection | Kysely<any> | Transaction<any>,
8788
options: OptimizePragmaOptions = {},
88-
): Promise<void> {
89-
const {
90-
cacheSize = 4096,
91-
pageSize = 32768,
92-
mmapSize,
93-
journalMode = 'WAL',
94-
tempStore = 'MEMORY',
95-
synchronous = 'NORMAL',
96-
} = options
97-
const exec = (
98-
pragma: string,
99-
data: string | number,
100-
) => conn.executeQuery(CompiledQuery.raw(
101-
`PRAGMA ? = ?`,
102-
[pragma, data],
103-
))
104-
await exec('journal_mode', journalMode)
105-
await exec('synchronous', synchronous)
106-
await exec('temp_store', tempStore)
107-
await exec('cache_size', cacheSize)
108-
await exec('page_size', pageSize)
109-
mmapSize && await exec('mmap_size', mmapSize)
89+
) {
90+
const entries = Object.entries({
91+
mmap_size: -1,
92+
cache_size: 4096,
93+
page_size: 32768,
94+
journal_mode: 'WAL',
95+
temp_store: 'MEMORY',
96+
synchronous: 'NORMAL',
97+
...options,
98+
})
99+
for (const [pragma, value] of entries) {
100+
await db.executeQuery(CompiledQuery.raw(`PRAGMA ${pragma} = ${value}`))
101+
}
110102
}

test/builder.test.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { SqliteDialect } from 'kysely'
22
import Database from 'better-sqlite3'
33
import { beforeEach, describe, expect, it } from 'vitest'
4-
import type { InferDatabase } from '../packages/sqlite-builder'
4+
import { getOrSetDBVersion, optimizePragma } from '../packages/sqlite-utils/src'
5+
import type { InferDatabase } from '../packages/sqlite-builder/src'
56
import { SqliteBuilder, defineLiteral, defineObject, defineTable, useSchema } from '../packages/sqlite-builder/src'
67

78
const testTable = defineTable({
@@ -26,6 +27,9 @@ function getDatabase(debug = false) {
2627
return new SqliteBuilder<DB>({
2728
dialect: new SqliteDialect({
2829
database: new Database(':memory:'),
30+
async onCreateConnection(connection) {
31+
await optimizePragma(connection)
32+
},
2933
}),
3034
logger: debug ? console : undefined,
3135
onQuery: debug,
@@ -94,12 +98,13 @@ describe('test sync table', async () => {
9498
})
9599
describe('test builder', async () => {
96100
const db = getDatabase()
101+
await getOrSetDBVersion(db.kysely, 2)
97102
await db.updateTableSchema(useSchema(baseTables))
98103
it('should insert', async () => {
99104
// generate table
100-
console.log(await db.transaction((trx) => {
101-
trx.insertInto('test').values([{ gender: false }, { gender: true }]).execute()
102-
return trx.updateTable('test').set({ gender: true }).where('id', '=', 2).execute()
105+
console.log(await db.transaction(async () => {
106+
await db.execute(d => d.insertInto('test').values([{ gender: false }, { gender: true }]))
107+
return db.execute(d => d.updateTable('test').set({ gender: true }).where('id', '=', 2).returningAll())
103108
}))
104109
const result = await db.execute(d => d.selectFrom('test').selectAll())
105110
expect(result).toBeInstanceOf(Array)
@@ -146,9 +151,9 @@ describe('test builder', async () => {
146151

147152
console.log(' compiled:', `${(performance.now() - start2).toFixed(2)}ms`)
148153

149-
const result = await db.executeCompiledTakeList(insert({ gender: true }))
150-
expect(result).toStrictEqual([])
151-
const result2 = await db.executeCompiledTakeList(update({ gender: false }))
152-
expect(result2).toStrictEqual([])
154+
const result = await db.execute(insert({ gender: true }))
155+
expect(result.rows).toStrictEqual([])
156+
const result2 = await db.execute(update({ gender: false }))
157+
expect(result2.rows).toStrictEqual([])
153158
})
154159
})

0 commit comments

Comments
 (0)