@@ -122,15 +122,15 @@ pub fn execute_sql(
122122 let mut tx = db. begin_mut_tx ( IsolationLevel :: Serializable , Workload :: Sql ) ;
123123 let mut updates = Vec :: with_capacity ( ast. len ( ) ) ;
124124 let res = execute (
125- & mut DbProgram :: new ( db, & mut ( & mut tx) . into ( ) , auth) ,
125+ & mut DbProgram :: new ( db, & mut ( & mut tx) . into ( ) , auth. clone ( ) ) ,
126126 ast,
127127 sql,
128128 & mut updates,
129129 ) ;
130130 if res. is_ok ( ) && !updates. is_empty ( ) {
131131 let event = ModuleEvent {
132132 timestamp : Timestamp :: now ( ) ,
133- caller_identity : auth. caller ,
133+ caller_identity : auth. caller ( ) ,
134134 caller_connection_id : None ,
135135 function_call : ModuleFunctionCall {
136136 reducer : String :: new ( ) ,
@@ -249,7 +249,7 @@ pub fn run(
249249 }
250250 Statement :: DML ( stmt) => {
251251 // An extra layer of auth is required for DML
252- if auth . caller != auth. owner {
252+ if ! auth. has_write_access ( ) {
253253 return Err ( anyhow ! ( "Only owners are authorized to run SQL DML statements" ) . into ( ) ) ;
254254 }
255255
@@ -287,7 +287,7 @@ pub fn run(
287287 None ,
288288 ModuleEvent {
289289 timestamp : Timestamp :: now ( ) ,
290- caller_identity : auth. caller ,
290+ caller_identity : auth. caller ( ) ,
291291 caller_connection_id : None ,
292292 function_call : ModuleFunctionCall {
293293 reducer : String :: new ( ) ,
@@ -510,7 +510,7 @@ pub(crate) mod tests {
510510 expected : impl IntoIterator < Item = ProductValue > ,
511511 ) {
512512 assert_eq ! (
513- run( db, sql, * auth, None , & mut vec![ ] )
513+ run( db, sql, auth. clone ( ) , None , & mut vec![ ] )
514514 . unwrap( )
515515 . rows
516516 . into_iter( )
@@ -1270,19 +1270,25 @@ pub(crate) mod tests {
12701270 let run = |db, sql, auth, subs| run ( db, sql, auth, subs, & mut vec ! [ ] ) ;
12711271
12721272 // No row limit, both queries pass.
1273- assert ! ( run( & db, "SELECT * FROM T" , internal_auth, None ) . is_ok( ) ) ;
1274- assert ! ( run( & db, "SELECT * FROM T" , external_auth, None ) . is_ok( ) ) ;
1273+ assert ! ( run( & db, "SELECT * FROM T" , internal_auth. clone ( ) , None ) . is_ok( ) ) ;
1274+ assert ! ( run( & db, "SELECT * FROM T" , external_auth. clone ( ) , None ) . is_ok( ) ) ;
12751275
12761276 // Set row limit.
1277- assert ! ( run( & db, "SET row_limit = 4" , internal_auth, None ) . is_ok( ) ) ;
1277+ assert ! ( run( & db, "SET row_limit = 4" , internal_auth. clone ( ) , None ) . is_ok( ) ) ;
12781278
12791279 // External query fails.
1280- assert ! ( run( & db, "SELECT * FROM T" , internal_auth, None ) . is_ok( ) ) ;
1281- assert ! ( run( & db, "SELECT * FROM T" , external_auth, None ) . is_err( ) ) ;
1280+ assert ! ( run( & db, "SELECT * FROM T" , internal_auth. clone ( ) , None ) . is_ok( ) ) ;
1281+ assert ! ( run( & db, "SELECT * FROM T" , external_auth. clone ( ) , None ) . is_err( ) ) ;
12821282
12831283 // Increase row limit.
1284- assert ! ( run( & db, "DELETE FROM st_var WHERE name = 'row_limit'" , internal_auth, None ) . is_ok( ) ) ;
1285- assert ! ( run( & db, "SET row_limit = 5" , internal_auth, None ) . is_ok( ) ) ;
1284+ assert ! ( run(
1285+ & db,
1286+ "DELETE FROM st_var WHERE name = 'row_limit'" ,
1287+ internal_auth. clone( ) ,
1288+ None
1289+ )
1290+ . is_ok( ) ) ;
1291+ assert ! ( run( & db, "SET row_limit = 5" , internal_auth. clone( ) , None ) . is_ok( ) ) ;
12861292
12871293 // Both queries pass.
12881294 assert ! ( run( & db, "SELECT * FROM T" , internal_auth, None ) . is_ok( ) ) ;
@@ -1333,10 +1339,10 @@ pub(crate) mod tests {
13331339 ..ExecutionMetrics :: default ( )
13341340 } ;
13351341
1336- check ( & db, "INSERT INTO T (a) VALUES (5)" , internal_auth, ins) ?;
1337- check ( & db, "UPDATE T SET a = 2" , internal_auth, upd) ?;
1342+ check ( & db, "INSERT INTO T (a) VALUES (5)" , internal_auth. clone ( ) , ins) ?;
1343+ check ( & db, "UPDATE T SET a = 2" , internal_auth. clone ( ) , upd) ?;
13381344 assert_eq ! (
1339- run( & db, "SELECT * FROM T" , internal_auth, None ) ?. rows,
1345+ run( & db, "SELECT * FROM T" , internal_auth. clone ( ) , None ) ?. rows,
13401346 vec![ product!( 2u8 ) ]
13411347 ) ;
13421348 check ( & db, "DELETE FROM T" , internal_auth, del) ?;
0 commit comments