@@ -3,10 +3,6 @@ use rand::{self, distributions::Alphanumeric, Rng};
33use rusqlite:: { Connection , Transaction } ;
44use std:: collections:: HashSet ;
55
6- fn no_args ( ) -> impl Iterator < Item = & ' static str > {
7- :: std:: iter:: empty ( )
8- }
9-
106enum MigrationKind {
117 SQL ( & ' static str ) ,
128 Code ( Box < dyn Fn ( & Transaction ) -> :: rusqlite:: Result < ( ) > > ) ,
@@ -145,40 +141,46 @@ fn migrations() -> Vec<(&'static str, MigrationKind)> {
145141 . take( 10 )
146142 . collect:: <String >( )
147143 ) ;
148- t. create_scalar_function ( & fn_name, 1 , true , |ctx| {
149- let legacy = ctx. get :: < String > ( 0 ) ?;
150-
151- if let Ok ( parsed) = serde_json:: from_str ( & legacy) {
152- Ok ( match parsed {
153- LegacyToolchain :: Dist ( name) => name,
154- LegacyToolchain :: TryBuild { sha } => format ! ( "try#{}" , sha) ,
155- LegacyToolchain :: Master { sha } => format ! ( "master#{}" , sha) ,
156- } )
157- } else {
158- Ok ( legacy)
159- }
160- } ) ?;
161-
162- t. execute ( "PRAGMA foreign_keys = OFF;" , no_args ( ) ) ?;
144+ t. create_scalar_function (
145+ & fn_name,
146+ 1 ,
147+ rusqlite:: functions:: FunctionFlags :: SQLITE_DETERMINISTIC
148+ | rusqlite:: functions:: FunctionFlags :: SQLITE_UTF8 ,
149+ |ctx| {
150+ let legacy = ctx. get :: < String > ( 0 ) ?;
151+
152+ if let Ok ( parsed) = serde_json:: from_str ( & legacy) {
153+ Ok ( match parsed {
154+ LegacyToolchain :: Dist ( name) => name,
155+ LegacyToolchain :: TryBuild { sha } => format ! ( "try#{}" , sha) ,
156+ LegacyToolchain :: Master { sha } => format ! ( "master#{}" , sha) ,
157+ } )
158+ } else {
159+ Ok ( legacy)
160+ }
161+ } ,
162+ ) ?;
163+
164+ t. execute ( "PRAGMA foreign_keys = OFF;" , [ ] ) ?;
163165 t. execute (
164166 & format ! (
165167 "UPDATE experiments SET toolchain_start = {}(toolchain_start);" ,
166168 fn_name
167169 ) ,
168- no_args ( ) ,
170+ [ ] ,
169171 ) ?;
170172 t. execute (
171173 & format ! (
172174 "UPDATE experiments SET toolchain_end = {}(toolchain_end);" ,
173175 fn_name
174176 ) ,
175- no_args ( ) ,
177+ [ ] ,
176178 ) ?;
177179 t. execute (
178180 & format ! ( "UPDATE results SET toolchain = {}(toolchain);" , fn_name) ,
179- no_args ( ) ,
181+ [ ] ,
180182 ) ?;
181- t. execute ( "PRAGMA foreign_keys = ON;" , no_args ( ) ) ?;
183+ t. execute ( "PRAGMA foreign_keys = ON;" , [ ] ) ?;
182184
183185 Ok ( ( ) )
184186 } ) ) ,
@@ -334,30 +336,36 @@ fn migrations() -> Vec<(&'static str, MigrationKind)> {
334336 . take( 10 )
335337 . collect:: <String >( )
336338 ) ;
337- t. create_scalar_function ( & fn_name, 1 , true , |ctx| {
338- let legacy = ctx. get :: < String > ( 0 ) ?;
339-
340- if let Ok ( parsed) = serde_json:: from_str :: < Crate > ( & legacy) {
341- Ok ( parsed. id ( ) )
342- } else {
343- Ok ( legacy)
344- }
345- } ) ?;
339+ t. create_scalar_function (
340+ & fn_name,
341+ 1 ,
342+ rusqlite:: functions:: FunctionFlags :: SQLITE_DETERMINISTIC
343+ | rusqlite:: functions:: FunctionFlags :: SQLITE_UTF8 ,
344+ |ctx| {
345+ let legacy = ctx. get :: < String > ( 0 ) ?;
346+
347+ if let Ok ( parsed) = serde_json:: from_str :: < Crate > ( & legacy) {
348+ Ok ( parsed. id ( ) )
349+ } else {
350+ Ok ( legacy)
351+ }
352+ } ,
353+ ) ?;
346354
347- t. execute ( "PRAGMA foreign_keys = OFF;" , no_args ( ) ) ?;
355+ t. execute ( "PRAGMA foreign_keys = OFF;" , [ ] ) ?;
348356 t. execute (
349357 & format ! ( "UPDATE experiment_crates SET crate = {}(crate);" , fn_name) ,
350- no_args ( ) ,
358+ [ ] ,
351359 ) ?;
352360 t. execute (
353361 & format ! ( "UPDATE results SET crate = {}(crate);" , fn_name) ,
354- no_args ( ) ,
362+ [ ] ,
355363 ) ?;
356364 t. execute (
357365 & format ! ( "UPDATE crates SET crate = {}(crate);" , fn_name) ,
358- no_args ( ) ,
366+ [ ] ,
359367 ) ?;
360- t. execute ( "PRAGMA foreign_keys = ON;" , no_args ( ) ) ?;
368+ t. execute ( "PRAGMA foreign_keys = ON;" , [ ] ) ?;
361369
362370 Ok ( ( ) )
363371 } ) ) ,
@@ -368,19 +376,16 @@ fn migrations() -> Vec<(&'static str, MigrationKind)> {
368376
369377pub fn execute ( db : & mut Connection ) -> Fallible < ( ) > {
370378 // If the database version is 0, create the migrations table and bump it
371- let version: i32 = db. query_row ( "PRAGMA user_version;" , no_args ( ) , |r| r. get ( 0 ) ) ?;
379+ let version: i32 = db. query_row ( "PRAGMA user_version;" , [ ] , |r| r. get ( 0 ) ) ?;
372380 if version == 0 {
373- db. execute (
374- "CREATE TABLE migrations (name TEXT PRIMARY KEY);" ,
375- no_args ( ) ,
376- ) ?;
377- db. execute ( "PRAGMA user_version = 1;" , no_args ( ) ) ?;
381+ db. execute ( "CREATE TABLE migrations (name TEXT PRIMARY KEY);" , [ ] ) ?;
382+ db. execute ( "PRAGMA user_version = 1;" , [ ] ) ?;
378383 }
379384
380385 let executed_migrations = {
381386 let mut prepared = db. prepare ( "SELECT name FROM migrations;" ) ?;
382387 let mut result = HashSet :: new ( ) ;
383- for value in prepared. query_map ( no_args ( ) , |row| -> String { row. get ( "name" ) } ) ? {
388+ for value in prepared. query_map ( [ ] , |row| row. get :: < _ , String > ( 0 ) ) ? {
384389 result. insert ( value?) ;
385390 }
386391
0 commit comments