Skip to content

Commit f5407b3

Browse files
committed
lists as raw table
1 parent 11655a0 commit f5407b3

File tree

5 files changed

+75
-20
lines changed

5 files changed

+75
-20
lines changed

demos/supabase-todolist/lib/migrations/fts_setup.dart

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,12 @@ SqliteMigration createFtsMigration(
6262
/// with the data you would like to search on
6363
Future<void> configureFts(PowerSyncDatabase db) async {
6464
migrations
65-
..add(createFtsMigration(
66-
migrationVersion: 1,
67-
tableName: 'lists',
68-
columns: ['name'],
69-
tokenizationMethod: 'porter unicode61'))
65+
// ..add(createFtsMigration(
66+
// migrationVersion: 1,
67+
// tableName: 'lists',
68+
// isRawTable: true,
69+
// columns: ['name'],
70+
// tokenizationMethod: 'porter unicode61'))
7071
..add(createFtsMigration(
7172
migrationVersion: 2,
7273
tableName: 'todos',

demos/supabase-todolist/lib/models/schema.dart

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import 'package:powersync/powersync.dart';
22
import 'package:powersync_attachments_helper/powersync_attachments_helper.dart';
33

44
const todosTable = 'todos';
5+
const listsRawTable = 'lists';
56

6-
Schema schema = Schema(([
7+
8+
Schema schema = Schema([
79
const Table(todosTable, [
810
Column.text('list_id'),
911
Column.text('photo_id'),
@@ -17,11 +19,30 @@ Schema schema = Schema(([
1719
// Index to allow efficient lookup within a list
1820
Index('list', [IndexedColumn('list_id')])
1921
]),
20-
const Table('lists', [
21-
Column.text('created_at'),
22-
Column.text('name'),
23-
Column.text('owner_id')
24-
]),
22+
// const Table('lists', [
23+
// Column.text('created_at'),
24+
// Column.text('name'),
25+
// Column.text('owner_id')
26+
// ]),
2527
AttachmentsQueueTable(
26-
attachmentsQueueTableName: defaultAttachmentsQueueTableName)
27-
]));
28+
attachmentsQueueTableName: defaultAttachmentsQueueTableName,
29+
),
30+
], rawTables: [
31+
RawTable(
32+
name: 'lists',
33+
put: PendingStatement(
34+
sql:
35+
"INSERT OR REPLACE INTO $listsRawTable (id, created_at, name, owner_id) VALUES (?, ?, ?, ?);",
36+
params: [
37+
PendingStmtValueId(),
38+
PendingStmtValueColumn('created_at'),
39+
PendingStmtValueColumn('name'),
40+
PendingStmtValueColumn('owner_id'),
41+
],
42+
),
43+
delete: PendingStatement(
44+
sql: "DELETE FROM $listsRawTable WHERE id = ?",
45+
params: [PendingStmtValueId()],
46+
),
47+
)
48+
]);

demos/supabase-todolist/lib/powersync.dart

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:path/path.dart';
55
import 'package:path_provider/path_provider.dart';
66
import 'package:powersync/powersync.dart';
77
import 'package:powersync_flutter_demo/migrations/fts_setup.dart';
8+
import 'package:powersync_flutter_demo/raw_tables_helper.dart';
89
import 'package:supabase_flutter/supabase_flutter.dart';
910

1011
import './app_config.dart';
@@ -157,9 +158,18 @@ Future<void> openDatabase() async {
157158
final dbPath = await getDatabasePath();
158159
print("Opening database at $dbPath");
159160
// Open the local database
160-
db = PowerSyncDatabase(schema: schema, path: dbPath, logger: attachedLogger);
161+
db = PowerSyncDatabase(
162+
schema: schema,
163+
path: dbPath,
164+
logger: attachedLogger,
165+
manualSchemaManagement: true,
166+
);
161167
await db.initialize();
162168

169+
await initializeRawTablesSchema(db);
170+
await db.updateSchema(schema);
171+
await db.markSchemaAsReady();
172+
163173
await loadSupabase();
164174

165175
SupabaseConnector? currentConnector;
@@ -168,7 +178,10 @@ Future<void> openDatabase() async {
168178
// If the user is already logged in, connect immediately.
169179
// Otherwise, connect once logged in.
170180
currentConnector = SupabaseConnector();
171-
db.connect(connector: currentConnector);
181+
db.connect(
182+
connector: currentConnector,
183+
options: SyncOptions(syncImplementation: SyncClientImplementation.rust),
184+
);
172185
}
173186

174187
Supabase.instance.client.auth.onAuthStateChange.listen((data) async {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import 'package:powersync/powersync.dart';
2+
import 'package:powersync_flutter_demo/models/schema.dart';
3+
import 'package:sqlite_async/sqlite_async.dart';
4+
5+
Future<void> initializeRawTablesSchema(PowerSyncDatabase db) async {
6+
await db.writeTransaction((ctx) async {
7+
await _createListsRawTable(ctx);
8+
});
9+
}
10+
11+
Future<void> _createListsRawTable(SqliteWriteContext ctx) async {
12+
await ctx.execute('''
13+
CREATE TABLE IF NOT EXISTS $listsRawTable(
14+
id TEXT NOT NULL PRIMARY KEY,
15+
created_at TEXT NOT NULL,
16+
name TEXT NOT NULL,
17+
owner_id TEXT NOT NULL
18+
) STRICT;
19+
''');
20+
}

packages/powersync_core/lib/src/schema.dart

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -322,11 +322,11 @@ class RawTable {
322322
final PendingStatement put;
323323
final PendingStatement delete;
324324

325-
const RawTable(
326-
this.name,
327-
this.put,
328-
this.delete,
329-
);
325+
const RawTable({
326+
required this.name,
327+
required this.put,
328+
required this.delete,
329+
});
330330

331331
Map<String, dynamic> toJson() => {
332332
'name': name,

0 commit comments

Comments
 (0)