11use alloc:: format;
22use alloc:: string:: String ;
33
4+ use crate :: bucket_priority:: BucketPriority ;
45use crate :: error:: { PSResult , SQLiteError } ;
56use sqlite_nostd as sqlite;
67use sqlite_nostd:: { Connection , ResultCode } ;
@@ -17,8 +18,11 @@ SELECT
1718 json_extract(e.value, '$.data') as data,
1819 json_extract(e.value, '$.has_more') as has_more,
1920 json_extract(e.value, '$.after') as after,
20- json_extract(e.value, '$.next_after') as next_after
21- FROM json_each(json_extract(?, '$.buckets')) e" ,
21+ json_extract(e.value, '$.next_after') as next_after,
22+ json_extract(d.value, '$.priority') as priority,
23+ FROM json_each(json_extract(?1, '$.buckets')) e
24+ LEFT OUTER JOIN json_each(json_extract(?1, '$.descriptions')) d
25+ ON json_extract(e.value, '$.bucket') == d.key" ,
2226 ) ?;
2327 statement. bind_text ( 1 , data, sqlite:: Destructor :: STATIC ) ?;
2428
@@ -28,8 +32,15 @@ FROM json_each(json_extract(?, '$.buckets')) e",
2832 // let _has_more = statement.column_int(2)? != 0;
2933 // let _after = statement.column_text(3)?;
3034 // let _next_after = statement.column_text(4)?;
35+ let priority = match statement. column_type ( 5 ) ? {
36+ sqlite_nostd:: ColumnType :: Integer => {
37+ BucketPriority :: try_from ( statement. column_int ( 5 ) ?) . ok ( )
38+ }
39+ _ => None ,
40+ }
41+ . unwrap_or_default ( ) ;
3142
32- insert_bucket_operations ( db, bucket, data) ?;
43+ insert_bucket_operations ( db, bucket, data, priority ) ?;
3344 }
3445
3546 Ok ( ( ) )
@@ -39,6 +50,7 @@ pub fn insert_bucket_operations(
3950 db : * mut sqlite:: sqlite3 ,
4051 bucket : & str ,
4152 data : & str ,
53+ priority : BucketPriority ,
4254) -> Result < ( ) , SQLiteError > {
4355 // Statement to insert new operations (only for PUT and REMOVE).
4456 // language=SQLite
@@ -60,13 +72,14 @@ FROM json_each(?) e",
6072 // We can consider splitting this into separate SELECT and INSERT statements.
6173 // language=SQLite
6274 let bucket_statement = db. prepare_v2 (
63- "INSERT INTO ps_buckets(name)
64- VALUES(?)
75+ "INSERT INTO ps_buckets(name, priority )
76+ VALUES(?, ? )
6577 ON CONFLICT DO UPDATE
6678 SET last_applied_op = last_applied_op
6779 RETURNING id, last_applied_op" ,
6880 ) ?;
6981 bucket_statement. bind_text ( 1 , bucket, sqlite:: Destructor :: STATIC ) ?;
82+ bucket_statement. bind_int ( 2 , priority. into ( ) ) ;
7083 bucket_statement. step ( ) ?;
7184
7285 let bucket_id = bucket_statement. column_int64 ( 0 ) ?;
0 commit comments