@@ -2350,6 +2350,7 @@ impl<'a> SqliteNameRef<'a> {
23502350}
23512351
23522352#[ derive( Clone , Debug ) ]
2353+ #[ allow( dead_code) ]
23532354enum SqliteName {
23542355 Id ( Id ) ,
23552356 Name ( Name ) ,
@@ -3030,7 +3031,7 @@ fn field_types(
30303031 let mut field_type_overrides = HashMap :: new ( ) ;
30313032
30323033 match parsed_cmd {
3033- ParsedCmd :: Sqlite ( Cmd :: Stmt ( stmt ) ) => match stmt {
3034+ ParsedCmd :: Sqlite ( Cmd :: Stmt (
30343035 Stmt :: Select ( Select {
30353036 body :
30363037 SelectBody {
@@ -3050,51 +3051,49 @@ fn field_types(
30503051 | Stmt :: Update {
30513052 returning : Some ( cols) ,
30523053 ..
3053- } => {
3054- for ( i, col) in cols. iter ( ) . enumerate ( ) {
3055- if let ResultColumn :: Expr ( expr, _as) = col {
3056- let type_override = match expr {
3057- Expr :: Cast { type_name, .. } => Some ( name_to_type ( & type_name. name ) ?) ,
3058- Expr :: FunctionCall { name, .. }
3059- | Expr :: FunctionCallStar { name, .. } => {
3060- match name. 0 . as_str ( ) . to_uppercase ( ) . as_ref ( ) {
3061- "COUNT" => Some ( Type :: INT8 ) ,
3062- _ => None ,
3063- }
3054+ } ,
3055+ ) ) => {
3056+ for ( i, col) in cols. iter ( ) . enumerate ( ) {
3057+ if let ResultColumn :: Expr ( expr, _as) = col {
3058+ let type_override = match expr {
3059+ Expr :: Cast { type_name, .. } => Some ( name_to_type ( & type_name. name ) ?) ,
3060+ Expr :: FunctionCall { name, .. } | Expr :: FunctionCallStar { name, .. } => {
3061+ match name. 0 . as_str ( ) . to_uppercase ( ) . as_ref ( ) {
3062+ "COUNT" => Some ( Type :: INT8 ) ,
3063+ _ => None ,
30643064 }
3065- Expr :: Literal ( lit ) => match lit {
3066- Literal :: Numeric ( s ) => Some ( if s . contains ( '.' ) {
3067- Type :: FLOAT8
3068- } else {
3069- Type :: INT8
3070- } ) ,
3071- Literal :: String ( _ ) => Some ( Type :: TEXT ) ,
3072- Literal :: Blob ( _) => Some ( Type :: BYTEA ) ,
3073- Literal :: Keyword ( _) => None ,
3074- Literal :: Null => None ,
3075- Literal :: CurrentDate => Some ( Type :: DATE ) ,
3076- Literal :: CurrentTime => Some ( Type :: TIME ) ,
3077- Literal :: CurrentTimestamp => Some ( Type :: TIMESTAMP ) ,
3078- } ,
3079- _ => None ,
3080- } ;
3081- if let Some ( type_override ) = type_override {
3082- match prepped . column_name ( i ) {
3083- Ok ( col_name ) => {
3084- field_type_overrides . insert ( col_name, type_override ) ;
3085- }
3086- Err ( e ) => {
3087- error ! ( "col index didn't exist at {i}, attempted to override type as: {type_override}: {e}" ) ;
3088- }
3065+ }
3066+ Expr :: Literal ( lit ) => match lit {
3067+ Literal :: Numeric ( s ) => Some ( if s . contains ( '.' ) {
3068+ Type :: FLOAT8
3069+ } else {
3070+ Type :: INT8
3071+ } ) ,
3072+ Literal :: String ( _) => Some ( Type :: TEXT ) ,
3073+ Literal :: Blob ( _) => Some ( Type :: BYTEA ) ,
3074+ Literal :: Keyword ( _ ) => None ,
3075+ Literal :: Null => None ,
3076+ Literal :: CurrentDate => Some ( Type :: DATE ) ,
3077+ Literal :: CurrentTime => Some ( Type :: TIME ) ,
3078+ Literal :: CurrentTimestamp => Some ( Type :: TIMESTAMP ) ,
3079+ } ,
3080+ _ => None ,
3081+ } ;
3082+ if let Some ( type_override ) = type_override {
3083+ match prepped . column_name ( i ) {
3084+ Ok ( col_name) => {
3085+ field_type_overrides . insert ( col_name , type_override ) ;
3086+ }
3087+ Err ( e ) => {
3088+ error ! ( "col index didn't exist at {i}, attempted to override type as: {type_override}: {e}" ) ;
30893089 }
30903090 }
3091- } else {
3092- break ;
30933091 }
3092+ } else {
3093+ break ;
30943094 }
30953095 }
3096- _ => { }
3097- } ,
3096+ }
30983097 ParsedCmd :: Postgres ( _stmt) => {
30993098 // TODO: handle type overrides here too
31003099 // let cols = match stmt {
@@ -3311,7 +3310,7 @@ mod tests {
33113310 println ! ( "t2text: {:?}" , row. try_get:: <_, String >( 2 ) ) ;
33123311
33133312 let now: DateTime < Utc > = Utc :: now ( ) ;
3314- let now = NaiveDateTime :: from_timestamp_micros ( now. timestamp_micros ( ) ) . unwrap ( ) ;
3313+ let now = DateTime :: < Utc > :: from_timestamp_micros ( now. timestamp_micros ( ) ) . unwrap ( ) ;
33153314 println ! ( "NOW: {now:?}" ) ;
33163315
33173316 let row = client
@@ -3322,13 +3321,13 @@ mod tests {
33223321 . await ?;
33233322
33243323 println ! ( "ROW: {row:?}" ) ;
3325- let updated_at = row. try_get :: < _ , NaiveDateTime > ( 0 ) ?;
3324+ let updated_at = row. try_get :: < _ , DateTime < Utc > > ( 0 ) ?;
33263325 println ! ( "updated_at: {updated_at:?}" ) ;
33273326
33283327 assert_eq ! ( now, updated_at) ;
33293328
33303329 let future: DateTime < Utc > = Utc :: now ( ) + Duration :: from_secs ( 1 ) ;
3331- let future = NaiveDateTime :: from_timestamp_micros ( future. timestamp_micros ( ) ) . unwrap ( ) ;
3330+ let future = DateTime :: < Utc > :: from_timestamp_micros ( future. timestamp_micros ( ) ) . unwrap ( ) ;
33323331 println ! ( "NOW: {future:?}" ) ;
33333332
33343333 let row = client
@@ -3339,7 +3338,7 @@ mod tests {
33393338 . await ?;
33403339
33413340 println ! ( "ROW: {row:?}" ) ;
3342- let updated_at = row. try_get :: < _ , NaiveDateTime > ( 0 ) ?;
3341+ let updated_at = row. try_get :: < _ , DateTime < Utc > > ( 0 ) ?;
33433342 println ! ( "updated_at: {updated_at:?}" ) ;
33443343
33453344 assert_eq ! ( future, updated_at) ;
0 commit comments