Skip to content

Commit 85d7955

Browse files
committed
Added toCompilableQuery helper.
1 parent 4dcf3b8 commit 85d7955

File tree

6 files changed

+19490
-24557
lines changed

6 files changed

+19490
-24557
lines changed

.changeset/silly-lions-vanish.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@powersync/drizzle-driver': patch
3+
---
4+
5+
Initial Alpha version.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
import { wrapPowerSyncWithDrizzle } from './sqlite/db';
2+
import { toCompilableQuery } from './utils/compilableQuery';
23

3-
export { wrapPowerSyncWithDrizzle };
4+
export { wrapPowerSyncWithDrizzle, toCompilableQuery };

packages/drizzle-driver/src/sqlite/sqlite-transaction.ts renamed to packages/drizzle-driver/src/sqlite/sqlite-query.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ import { AbstractPowerSyncDatabase, QueryResult } from '@powersync/common';
22
import { Column, DriverValueDecoder, getTableName, SQL } from 'drizzle-orm';
33
import { entityKind, is } from 'drizzle-orm/entity';
44
import type { Logger } from 'drizzle-orm/logger';
5-
import type { TablesRelationalConfig } from 'drizzle-orm/relations';
65
import { fillPlaceholders, type Query } from 'drizzle-orm/sql/sql';
7-
import { SQLiteTransaction } from 'drizzle-orm/sqlite-core';
86
import type { SelectedFieldsOrdered } from 'drizzle-orm/sqlite-core/query-builders/select.types';
97
import {
108
type PreparedQueryConfig as PreparedQueryConfigBase,
@@ -14,13 +12,6 @@ import {
1412

1513
type PreparedQueryConfig = Omit<PreparedQueryConfigBase, 'statement' | 'run'>;
1614

17-
export class PowerSyncSQLiteTransaction<
18-
TFullSchema extends Record<string, unknown>,
19-
TSchema extends TablesRelationalConfig
20-
> extends SQLiteTransaction<'async', QueryResult, TFullSchema, TSchema> {
21-
static readonly [entityKind]: string = 'ExpoSQLiteTransaction';
22-
}
23-
2415
export class PowerSyncSQLitePreparedQuery<
2516
T extends PreparedQueryConfig = PreparedQueryConfig
2617
> extends SQLitePreparedQuery<{
@@ -88,7 +79,8 @@ export class PowerSyncSQLitePreparedQuery<
8879
}
8980

9081
if (customResultMapper) {
91-
return customResultMapper(rows) as T['get'];
82+
const plain = rows.map((row) => Object.values(row));
83+
return customResultMapper(plain) as T['get'];
9284
}
9385

9486
return mapResultRow(fields!, Object.values(row), joinsNotNullableMap);

packages/drizzle-driver/src/sqlite/sqlite-session.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ import {
1010
type PreparedQueryConfig as PreparedQueryConfigBase,
1111
type SQLiteExecuteMethod,
1212
SQLiteSession,
13+
SQLiteTransaction,
1314
type SQLiteTransactionConfig
1415
} from 'drizzle-orm/sqlite-core/session';
15-
import { PowerSyncSQLitePreparedQuery, PowerSyncSQLiteTransaction } from './sqlite-transaction';
16+
import { PowerSyncSQLitePreparedQuery } from './sqlite-query';
1617

1718
export interface ExpoSQLiteSessionOptions {
1819
logger?: Logger;
@@ -22,6 +23,13 @@ export type PowerSyncSQLiteTransactionConfig = SQLiteTransactionConfig & {
2223
accessMode?: 'read only' | 'read write';
2324
};
2425

26+
export class PowerSyncSQLiteTransaction<
27+
TFullSchema extends Record<string, unknown>,
28+
TSchema extends TablesRelationalConfig
29+
> extends SQLiteTransaction<'async', QueryResult, TFullSchema, TSchema> {
30+
static readonly [entityKind]: string = 'ExpoSQLiteTransaction';
31+
}
32+
2533
export class PowerSyncSQLiteSession<
2634
TFullSchema extends Record<string, unknown>,
2735
TSchema extends TablesRelationalConfig
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { CompilableQuery } from '@powersync/common';
2+
import { Query } from 'drizzle-orm';
3+
4+
export function toCompilableQuery<T>(query: {
5+
execute: () => Promise<T | T[]>;
6+
toSQL: () => Query;
7+
}): CompilableQuery<T> {
8+
return {
9+
compile: () => {
10+
const sql = query.toSQL();
11+
return {
12+
sql: sql.sql,
13+
parameters: sql.params
14+
};
15+
},
16+
execute: async () => {
17+
const result = await query.execute();
18+
return Array.isArray(result) ? result : [result];
19+
}
20+
};
21+
}

0 commit comments

Comments
 (0)