Skip to content

Commit cf22d6e

Browse files
committed
feat(dialect-generic-sqlite): support savepoint for kysely@0.28
1 parent bf77f5e commit cf22d6e

File tree

1 file changed

+34
-0
lines changed
  • packages/dialect-generic-sqlite/src

1 file changed

+34
-0
lines changed

packages/dialect-generic-sqlite/src/base.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import type {
1111

1212
import {
1313
CompiledQuery,
14+
createQueryId,
15+
IdentifierNode,
16+
RawNode,
1417
SqliteAdapter,
1518
SqliteIntrospector,
1619
SqliteQueryCompiler,
@@ -64,6 +67,13 @@ class ConnectionMutex {
6467
}
6568
}
6669

70+
export function parseSavepointCommand(command: string, savepointName: string) {
71+
return RawNode.createWithChildren([
72+
RawNode.createWithSql(`${command} `),
73+
IdentifierNode.create(savepointName), // ensures savepointName gets sanitized
74+
])
75+
}
76+
6777
export abstract class BaseSqliteDriver implements Driver {
6878
private mutex = new ConnectionMutex()
6979
public conn?: DatabaseConnection
@@ -97,6 +107,30 @@ export abstract class BaseSqliteDriver implements Driver {
97107
await connection.executeQuery(CompiledQuery.raw('rollback'))
98108
}
99109

110+
async savepoint(
111+
connection: DatabaseConnection,
112+
savepointName: string,
113+
compileQuery: QueryCompiler['compileQuery'],
114+
): Promise<void> {
115+
await connection.executeQuery(compileQuery(parseSavepointCommand('savepoint', savepointName), createQueryId()))
116+
}
117+
118+
async rollbackToSavepoint(
119+
connection: DatabaseConnection,
120+
savepointName: string,
121+
compileQuery: QueryCompiler['compileQuery'],
122+
): Promise<void> {
123+
await connection.executeQuery(compileQuery(parseSavepointCommand('rollback to', savepointName), createQueryId()))
124+
}
125+
126+
async releaseSavepoint(
127+
connection: DatabaseConnection,
128+
savepointName: string,
129+
compileQuery: QueryCompiler['compileQuery'],
130+
): Promise<void> {
131+
await connection.executeQuery(compileQuery(parseSavepointCommand('release', savepointName), createQueryId()))
132+
}
133+
100134
async releaseConnection(): Promise<void> {
101135
this.mutex.unlock()
102136
}

0 commit comments

Comments
 (0)