diff --git a/.gitignore b/.gitignore index bcdb795e..49cd284b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ target/ # Environment .env + +tests/fixtures/*.sqlite-shm +tests/fixtures/*.sqlite-wal diff --git a/Cargo.toml b/Cargo.toml index a27399e9..f6a905ca 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -76,6 +76,10 @@ required-features = [ "mysql", "macros" ] name = "sqlite" required-features = [ "sqlite" ] +[[test]] +name = "sqlite-macros" +required-features = [ "sqlite" ] + [[test]] name = "sqlite-raw" required-features = [ "sqlite" ] diff --git a/sqlx-core/src/sqlite/types/mod.rs b/sqlx-core/src/sqlite/types/mod.rs index 50475af0..14f887bb 100644 --- a/sqlx-core/src/sqlite/types/mod.rs +++ b/sqlx-core/src/sqlite/types/mod.rs @@ -64,7 +64,7 @@ impl Display for SqliteTypeInfo { impl TypeInfo for SqliteTypeInfo { fn compatible(&self, other: &Self) -> bool { - self.affinity == other.affinity + self.r#type == other.r#type || self.affinity == other.affinity } fn is_null_type(&self) -> bool { diff --git a/tests/fixtures/test-db.sqlite b/tests/fixtures/test-db.sqlite new file mode 100644 index 00000000..513e8e9d Binary files /dev/null and b/tests/fixtures/test-db.sqlite differ diff --git a/tests/sqlite-macros.rs b/tests/sqlite-macros.rs index ef9275ac..19d825a1 100644 --- a/tests/sqlite-macros.rs +++ b/tests/sqlite-macros.rs @@ -3,13 +3,11 @@ use sqlx_test::new; #[cfg_attr(feature = "runtime-async-std", async_std::test)] #[cfg_attr(feature = "runtime-tokio", tokio::test)] -async fn macro_select_from_cte() -> anyhow::Result<()> { +async fn macro_select() -> anyhow::Result<()> { let mut conn = new::().await?; - let account = sqlx::query!( - "with accounts(id, name) as (values (1, 'Herp Derpinson')) select * from accounts" - ) - .fetch_one(&mut conn) - .await?; + let account = sqlx::query!("select * from accounts") + .fetch_one(&mut conn) + .await?; println!("{:?}", account); println!("{}: {}", account.id, account.name); @@ -19,14 +17,11 @@ async fn macro_select_from_cte() -> anyhow::Result<()> { #[cfg_attr(feature = "runtime-async-std", async_std::test)] #[cfg_attr(feature = "runtime-tokio", tokio::test)] -async fn macro_select_from_cte_bind() -> anyhow::Result<()> { +async fn macro_select_bind() -> anyhow::Result<()> { let mut conn = new::().await?; - let account = sqlx::query!( - "with accounts(id, name) as (select 1, 'Herp Derpinson') select * from accounts where id = ?", - 1i32 - ) - .fetch_one(&mut conn) - .await?; + let account = sqlx::query!("select * from accounts where id = ?", 1i32) + .fetch_one(&mut conn) + .await?; println!("{:?}", account); println!("{}: {}", account.id, account.name); @@ -36,8 +31,8 @@ async fn macro_select_from_cte_bind() -> anyhow::Result<()> { #[derive(Debug)] struct RawAccount { - r#type: i32, - name: Option, + id: i32, + name: String, } #[cfg_attr(feature = "runtime-async-std", async_std::test)] @@ -45,15 +40,12 @@ struct RawAccount { async fn test_query_as_raw() -> anyhow::Result<()> { let mut conn = new::().await?; - let account = sqlx::query_as!( - RawAccount, - "SELECT * from (select 1 as type, cast(null as char) as name) accounts" - ) - .fetch_one(&mut conn) - .await?; + let account = sqlx::query_as!(RawAccount, "SELECT * from accounts") + .fetch_one(&mut conn) + .await?; - assert_eq!(None, account.name); - assert_eq!(1, account.r#type); + assert_eq!(1, account.id); + assert_eq!("Herp Derpinson", account.name); println!("{:?}", account);