Skip to content

Commit 7fa7909

Browse files
authored
Merge pull request #3 from powersync-ja/update-schema-logic
Update generated views and triggers
2 parents 53223d6 + 86bfc09 commit 7fa7909

File tree

5 files changed

+32
-18
lines changed

5 files changed

+32
-18
lines changed

Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ inherits = "release"
2525
lto = false
2626

2727
[workspace.package]
28-
version = "0.1.4"
28+
version = "0.1.5"
2929
edition = "2021"
3030
authors = ["JourneyApps"]
3131
keywords = ["sqlite", "powersync"]

android/build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77
}
88

99
group = "co.powersync"
10-
version = "0.1.4"
10+
version = "0.1.5"
1111
description = "PowerSync Core SQLite Extension"
1212

1313
repositories {

crates/core/src/util.rs

+1
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ pub fn extract_table_info(db: *mut sqlite::sqlite3, data: &str) -> Result<Manage
4444
// language=SQLite
4545
let statement = db.prepare_v2("SELECT
4646
json_extract(?1, '$.name') as name,
47+
ifnull(json_extract(?1, '$.view_name'), json_extract(?1, '$.name')) as view_name,
4748
json_extract(?1, '$.local_only') as local_only,
4849
json_extract(?1, '$.insert_only') as insert_only")?;
4950
statement.bind_text(1, data, sqlite::Destructor::STATIC)?;

crates/core/src/views.rs

+28-15
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ fn powersync_view_sql_impl(
2222
let statement = extract_table_info(db, table)?;
2323

2424
let name = statement.column_text(0)?;
25-
let local_only = statement.column_int(1)? != 0;
25+
let view_name = statement.column_text(1)?;
26+
let local_only = statement.column_int(2)? != 0;
2627

27-
let quoted_name = quote_identifier(name);
28+
let quoted_name = quote_identifier(view_name);
2829
let internal_name = quote_internal_name(name, local_only);
2930

3031
let stmt2 = db.prepare_v2("select json_extract(e.value, '$.name') as name, json_extract(e.value, '$.type') as type from json_each(json_extract(?, '$.columns')) e")?;
@@ -68,12 +69,13 @@ fn powersync_trigger_delete_sql_impl(
6869
let statement = extract_table_info(ctx.db_handle(), table)?;
6970

7071
let name = statement.column_text(0)?;
71-
let local_only = statement.column_int(1)? != 0;
72-
let insert_only = statement.column_int(2)? != 0;
72+
let view_name = statement.column_text(1)?;
73+
let local_only = statement.column_int(2)? != 0;
74+
let insert_only = statement.column_int(3)? != 0;
7375

74-
let quoted_name = quote_identifier(name);
76+
let quoted_name = quote_identifier(view_name);
7577
let internal_name = quote_internal_name(name, local_only);
76-
let trigger_name = quote_identifier_prefixed("ps_view_delete_", name);
78+
let trigger_name = quote_identifier_prefixed("ps_view_delete_", view_name);
7779
let type_string = quote_string(name);
7880

7981
return if !local_only && !insert_only {
@@ -84,7 +86,16 @@ FOR EACH ROW
8486
BEGIN
8587
DELETE FROM {:} WHERE id = OLD.id;
8688
INSERT INTO powersync_crud_(data) VALUES(json_object('op', 'DELETE', 'type', {:}, 'id', OLD.id));
87-
END", trigger_name, quoted_name, internal_name, type_string);
89+
INSERT INTO ps_oplog(bucket, op_id, op, row_type, row_id, hash, superseded)
90+
SELECT '$local',
91+
1,
92+
'REMOVE',
93+
{:},
94+
OLD.id,
95+
0,
96+
0;
97+
INSERT OR REPLACE INTO ps_buckets(name, pending_delete, last_op, target_op) VALUES('$local', 1, 0, {:});
98+
END", trigger_name, quoted_name, internal_name, type_string, type_string, MAX_OP_ID);
8899
Ok(trigger)
89100
} else if local_only {
90101
let trigger = format!("\
@@ -116,12 +127,13 @@ fn powersync_trigger_insert_sql_impl(
116127
let statement = extract_table_info(ctx.db_handle(), table)?;
117128

118129
let name = statement.column_text(0)?;
119-
let local_only = statement.column_int(1)? != 0;
120-
let insert_only = statement.column_int(2)? != 0;
130+
let view_name = statement.column_text(1)?;
131+
let local_only = statement.column_int(2)? != 0;
132+
let insert_only = statement.column_int(3)? != 0;
121133

122-
let quoted_name = quote_identifier(name);
134+
let quoted_name = quote_identifier(view_name);
123135
let internal_name = quote_internal_name(name, local_only);
124-
let trigger_name = quote_identifier_prefixed("ps_view_insert_", name);
136+
let trigger_name = quote_identifier_prefixed("ps_view_insert_", view_name);
125137
let type_string = quote_string(name);
126138

127139
let local_db = ctx.db_handle();
@@ -199,12 +211,13 @@ fn powersync_trigger_update_sql_impl(
199211
let statement = extract_table_info(ctx.db_handle(), table)?;
200212

201213
let name = statement.column_text(0)?;
202-
let local_only = statement.column_int(1)? != 0;
203-
let insert_only = statement.column_int(2)? != 0;
214+
let view_name = statement.column_text(1)?;
215+
let local_only = statement.column_int(2)? != 0;
216+
let insert_only = statement.column_int(3)? != 0;
204217

205-
let quoted_name = quote_identifier(name);
218+
let quoted_name = quote_identifier(view_name);
206219
let internal_name = quote_internal_name(name, local_only);
207-
let trigger_name = quote_identifier_prefixed("ps_view_update_", name);
220+
let trigger_name = quote_identifier_prefixed("ps_view_update_", view_name);
208221
let type_string = quote_string(name);
209222

210223
let db = ctx.db_handle();

powersync-sqlite-core.podspec

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'powersync-sqlite-core'
3-
s.version = '0.1.4'
3+
s.version = '0.1.5'
44
s.summary = 'PowerSync SQLite Extension'
55
s.description = <<-DESC
66
PowerSync extension for SQLite.

0 commit comments

Comments
 (0)