[INFO] cloning repository https://github.com/timglabisch/tablemacro [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/timglabisch/tablemacro" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftimglabisch%2Ftablemacro", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftimglabisch%2Ftablemacro'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 49f2bc52b5021dc03c71ba5fbeaad607db7abb20 [INFO] checking timglabisch/tablemacro against try#bb9dbf1d07454a99066eabaabd5819851281494b for pr-80920 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftimglabisch%2Ftablemacro" "/workspace/builds/worker-14/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-14/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/timglabisch/tablemacro on toolchain bb9dbf1d07454a99066eabaabd5819851281494b [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+bb9dbf1d07454a99066eabaabd5819851281494b" "read-manifest" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/timglabisch/tablemacro [INFO] finished tweaking git repo https://github.com/timglabisch/tablemacro [INFO] tweaked toml for git repo https://github.com/timglabisch/tablemacro written to /workspace/builds/worker-14/source/Cargo.toml [INFO] crate git repo https://github.com/timglabisch/tablemacro already has a lockfile, it will not be regenerated [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+bb9dbf1d07454a99066eabaabd5819851281494b" "fetch" "--locked" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded sqlx-macros v0.4.2 [INFO] [stderr] Downloaded sqlx-core v0.4.2 [INFO] [stderr] Downloaded semver-parser v0.10.0 [INFO] [stderr] Downloaded cargo_metadata v0.12.1 [INFO] [stderr] Downloaded atoi v0.4.0 [INFO] [stderr] Downloaded whoami v1.0.3 [INFO] [stderr] Downloaded sqlx v0.4.2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-14/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-14/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "rustops/crates-build-env@sha256:21f1ed92105a0ef9b0d27ad8bdeb7f36f9f01ac17fffe3a3f3dc5241fc25d8f4" "/opt/rustwide/cargo-home/bin/cargo" "+bb9dbf1d07454a99066eabaabd5819851281494b" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 7b8c3ebb48d9e591a5551329d3dc2b6513869eba41e3c718ee3312cd0b659e9d [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] running `Command { std: "docker" "start" "-a" "7b8c3ebb48d9e591a5551329d3dc2b6513869eba41e3c718ee3312cd0b659e9d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "7b8c3ebb48d9e591a5551329d3dc2b6513869eba41e3c718ee3312cd0b659e9d", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "7b8c3ebb48d9e591a5551329d3dc2b6513869eba41e3c718ee3312cd0b659e9d", kill_on_drop: false }` [INFO] [stdout] 7b8c3ebb48d9e591a5551329d3dc2b6513869eba41e3c718ee3312cd0b659e9d [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-14/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-14/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "rustops/crates-build-env@sha256:21f1ed92105a0ef9b0d27ad8bdeb7f36f9f01ac17fffe3a3f3dc5241fc25d8f4" "/opt/rustwide/cargo-home/bin/cargo" "+bb9dbf1d07454a99066eabaabd5819851281494b" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] e5f6de2862301cc85340b8c26d0469c59bf96f8a66bdebd01019d588333f8a3c [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] running `Command { std: "docker" "start" "-a" "e5f6de2862301cc85340b8c26d0469c59bf96f8a66bdebd01019d588333f8a3c", kill_on_drop: false }` [INFO] [stderr] Compiling libc v0.2.82 [INFO] [stderr] Compiling unicode-xid v0.2.1 [INFO] [stderr] Compiling syn v1.0.58 [INFO] [stderr] Compiling log v0.4.11 [INFO] [stderr] Compiling cfg-if v0.1.10 [INFO] [stderr] Checking once_cell v1.5.2 [INFO] [stderr] Compiling radium v0.5.3 [INFO] [stderr] Compiling libm v0.2.1 [INFO] [stderr] Compiling futures-core v0.3.9 [INFO] [stderr] Compiling untrusted v0.7.1 [INFO] [stderr] Compiling getrandom v0.2.1 [INFO] [stderr] Compiling build_const v0.2.1 [INFO] [stderr] Compiling regex-syntax v0.6.22 [INFO] [stderr] Compiling futures-sink v0.3.9 [INFO] [stderr] Checking matches v0.1.8 [INFO] [stderr] Compiling smallvec v1.6.1 [INFO] [stderr] Compiling arrayvec v0.5.2 [INFO] [stderr] Compiling pin-project-lite v0.2.3 [INFO] [stderr] Compiling funty v1.1.0 [INFO] [stderr] Compiling futures-io v0.3.9 [INFO] [stderr] Compiling base64 v0.12.3 [INFO] [stderr] Compiling wyz v0.2.0 [INFO] [stderr] Compiling static_assertions v1.1.0 [INFO] [stderr] Compiling tap v1.0.0 [INFO] [stderr] Compiling serde_json v1.0.61 [INFO] [stderr] Compiling percent-encoding v2.1.0 [INFO] [stderr] Compiling ahash v0.4.7 [INFO] [stderr] Compiling subtle v2.4.0 [INFO] [stderr] Compiling unicode_categories v0.1.1 [INFO] [stderr] Checking byteorder v1.4.2 [INFO] [stderr] Compiling either v1.6.1 [INFO] [stderr] Compiling hex v0.4.2 [INFO] [stderr] Checking maplit v1.0.2 [INFO] [stderr] Compiling whoami v1.0.3 [INFO] [stderr] Compiling unicode-segmentation v1.7.1 [INFO] [stderr] Compiling dotenv v0.15.0 [INFO] [stderr] Compiling num-traits v0.2.14 [INFO] [stderr] Compiling num-integer v0.1.44 [INFO] [stderr] Compiling generic-array v0.14.4 [INFO] [stderr] Compiling lazy_static v1.4.0 [INFO] [stderr] Compiling crossbeam-utils v0.8.1 [INFO] [stderr] Compiling num-bigint v0.2.6 [INFO] [stderr] Compiling num-iter v0.1.42 [INFO] [stderr] Compiling nom v6.0.1 [INFO] [stderr] Compiling ahash v0.6.2 [INFO] [stderr] Compiling num-bigint v0.3.1 [INFO] [stderr] Compiling futures-task v0.3.9 [INFO] [stderr] Compiling instant v0.1.9 [INFO] [stderr] Compiling num-bigint-dig v0.6.1 [INFO] [stderr] Checking unicode-bidi v0.3.4 [INFO] [stderr] Compiling futures-channel v0.3.9 [INFO] [stderr] Compiling crc v1.8.1 [INFO] [stderr] Checking form_urlencoded v1.0.0 [INFO] [stderr] Compiling hashbrown v0.9.1 [INFO] [stderr] Compiling proc-macro2 v1.0.24 [INFO] [stderr] Compiling memchr v2.3.4 [INFO] [stderr] Compiling typenum v1.12.0 [INFO] [stderr] Compiling thread_local v1.1.0 [INFO] [stderr] Compiling ryu v1.0.5 [INFO] [stderr] Compiling bitflags v1.2.1 [INFO] [stderr] Compiling proc-macro-nested v0.1.6 [INFO] [stderr] Compiling heck v0.3.2 [INFO] [stderr] Checking lexical-core v0.7.4 [INFO] [stderr] Compiling idna v0.2.0 [INFO] [stderr] Compiling stringprep v0.1.2 [INFO] [stderr] Compiling aho-corasick v0.7.15 [INFO] [stderr] Checking bitvec v0.19.4 [INFO] [stderr] Compiling quote v1.0.8 [INFO] [stderr] Checking regex v1.4.3 [INFO] [stderr] Compiling hashlink v0.6.0 [INFO] [stderr] Checking ring v0.16.19 [INFO] [stderr] Checking getrandom v0.1.16 [INFO] [stderr] Checking net2 v0.2.37 [INFO] [stderr] Checking iovec v0.1.4 [INFO] [stderr] Checking num_cpus v1.13.0 [INFO] [stderr] Checking time v0.1.43 [INFO] [stderr] Checking parking_lot_core v0.8.2 [INFO] [stderr] Compiling url v2.2.0 [INFO] [stderr] Checking digest v0.9.0 [INFO] [stderr] Checking block-buffer v0.9.0 [INFO] [stderr] Compiling atoi v0.4.0 [INFO] [stderr] Checking crossbeam-queue v0.3.1 [INFO] [stderr] Checking crossbeam-channel v0.5.0 [INFO] [stderr] Checking rand_core v0.5.1 [INFO] [stderr] Checking mio v0.6.23 [INFO] [stderr] Checking parking_lot v0.11.1 [INFO] [stderr] Checking sha2 v0.9.2 [INFO] [stderr] Checking sha-1 v0.9.2 [INFO] [stderr] Checking webpki v0.21.4 [INFO] [stderr] Checking sct v0.6.0 [INFO] [stderr] Compiling chrono v0.4.19 [INFO] [stderr] Checking pem v0.8.2 [INFO] [stderr] Checking rand_chacha v0.2.2 [INFO] [stderr] Checking rustls v0.18.1 [INFO] [stderr] Checking webpki-roots v0.21.0 [INFO] [stderr] Checking mio-uds v0.6.8 [INFO] [stderr] Checking rand v0.7.3 [INFO] [stderr] Checking simple_asn1 v0.4.1 [INFO] [stderr] Checking sqlformat v0.1.5 [INFO] [stderr] Compiling synstructure v0.12.4 [INFO] [stderr] Compiling pest_generator v2.1.3 [INFO] [stderr] Compiling serde_derive v1.0.118 [INFO] [stderr] Compiling zeroize_derive v1.0.1 [INFO] [stderr] Compiling tokio-macros v0.2.6 [INFO] [stderr] Compiling futures-macro v0.3.9 [INFO] [stderr] Compiling thiserror-impl v1.0.23 [INFO] [stderr] Compiling pest_derive v2.1.0 [INFO] [stderr] Compiling zeroize v1.2.0 [INFO] [stderr] Compiling tokio v0.2.24 [INFO] [stderr] Compiling semver-parser v0.10.0 [INFO] [stderr] Compiling futures-util v0.3.9 [INFO] [stderr] Compiling thiserror v1.0.23 [INFO] [stderr] Checking tokio-rustls v0.14.1 [INFO] [stderr] Checking sqlx-rt v0.2.0 [INFO] [stderr] Compiling futures-executor v0.3.9 [INFO] [stderr] Compiling futures v0.3.9 [INFO] [stderr] Compiling serde v1.0.118 [INFO] [stderr] Compiling semver v0.11.0 [INFO] [stderr] Checking rsa v0.3.0 [INFO] [stderr] Checking sqlx-core v0.4.2 [INFO] [stderr] Compiling cargo_metadata v0.12.1 [INFO] [stderr] Compiling sqlx-macros v0.4.2 [INFO] [stderr] Checking sqlx v0.4.2 [INFO] [stderr] Checking tablemacro v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] note: trace_macro [INFO] [stdout] --> src/main.rs:341:5 [INFO] [stdout] | [INFO] [stdout] 341 | / table!( [INFO] [stdout] 342 | | #[table = "bar_table"] [INFO] [stdout] 343 | | struct Foo { [INFO] [stdout] 344 | | #[pk, column = "foo column",] [INFO] [stdout] ... | [INFO] [stdout] 347 | | } [INFO] [stdout] 348 | | ); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = note: expanding `table! { #[table = "bar_table"] struct Foo [INFO] [stdout] { #[pk, column = "foo column",] foo1 : u32, foo2 : u32, } }` [INFO] [stdout] = note: to `_table ! [INFO] [stdout] { [INFO] [stdout] tokens = [INFO] [stdout] [#[table = "bar_table"] struct Foo [INFO] [stdout] { #[pk, column = "foo column",] foo1 : u32, foo2 : u32, }], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_table! { tokens = [INFO] [stdout] [#[table = "bar_table"] struct Foo [INFO] [stdout] { #[pk, column = "foo column",] foo1 : u32, foo2 : u32, }], }` [INFO] [stdout] = note: to `_table ! [INFO] [stdout] { [INFO] [stdout] tokens = [INFO] [stdout] [struct Foo { #[pk, column = "foo column",] foo1 : u32, foo2 : u32, }], [INFO] [stdout] table_name = "bar_table", [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_table! { tokens = [INFO] [stdout] [struct Foo { #[pk, column = "foo column",] foo1 : u32, foo2 : u32, }], [INFO] [stdout] table_name = "bar_table", }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] tokens = [#[pk, column = "foo column",] foo1 : u32, foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_columns! { tokens = [#[pk, column = "foo column",] foo1 : u32, foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_annotation ! [INFO] [stdout] { [INFO] [stdout] annotation_tokens = [pk, column = "foo column",], annotations = [INFO] [stdout] { primary_key = false, column = "", }, tokens = [foo1 : u32, foo2 : u32,], [INFO] [stdout] table = { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_annotation! { annotation_tokens = [pk, column = "foo column",], annotations = [INFO] [stdout] { primary_key = false, column = "", }, tokens = [foo1 : u32, foo2 : u32,], [INFO] [stdout] table = { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_annotation ! [INFO] [stdout] { [INFO] [stdout] annotation_tokens = [column = "foo column",], annotations = [INFO] [stdout] { primary_key = true, column = "", }, tokens = [foo1 : u32, foo2 : u32,], [INFO] [stdout] table = { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_annotation! { annotation_tokens = [column = "foo column",], annotations = [INFO] [stdout] { primary_key = true, column = "", }, tokens = [foo1 : u32, foo2 : u32,], [INFO] [stdout] table = { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_annotation ! [INFO] [stdout] { [INFO] [stdout] annotation_tokens = [], annotations = [INFO] [stdout] { primary_key = true, column = "foo column", }, tokens = [INFO] [stdout] [foo1 : u32, foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_annotation! { annotation_tokens = [], annotations = [INFO] [stdout] { primary_key = true, column = "foo column", }, tokens = [INFO] [stdout] [foo1 : u32, foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] tokens = [foo1 : u32, foo2 : u32,], annotations = [INFO] [stdout] { primary_key = true, column = "foo column", }, table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] } ;` [INFO] [stdout] = note: expanding `_columns! { tokens = [foo1 : u32, foo2 : u32,], annotations = [INFO] [stdout] { primary_key = true, column = "foo column", }, table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] current_column = [INFO] [stdout] { [INFO] [stdout] type_name = foo1, ty = u32, primary_key = true, column = "foo column", [INFO] [stdout] }, tokens = [foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_columns! { current_column = [INFO] [stdout] { type_name = foo1, ty = u32, primary_key = true, column = "foo column", }, [INFO] [stdout] tokens = [foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] tokens = [foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ [INFO] [stdout] type_name = foo1, ty = u32, primary_key = true, column = [INFO] [stdout] "foo column", [INFO] [stdout] },], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_columns! { tokens = [foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ type_name = foo1, ty = u32, primary_key = true, column = "foo column", },], }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] current_column = [INFO] [stdout] { type_name = foo2, ty = u32, primary_key = false, column = "", }, tokens [INFO] [stdout] = [], table = { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ [INFO] [stdout] type_name = foo1, ty = u32, primary_key = true, column = [INFO] [stdout] "foo column", [INFO] [stdout] },], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_columns! { current_column = [INFO] [stdout] { type_name = foo2, ty = u32, primary_key = false, column = "", }, tokens = [INFO] [stdout] [], table = { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ type_name = foo1, ty = u32, primary_key = true, column = "foo column", },], }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] tokens = [], table = { struct_name = Foo, table_name = "bar_table", }, [INFO] [stdout] columns = [INFO] [stdout] [{ [INFO] [stdout] type_name = foo1, ty = u32, primary_key = true, column = [INFO] [stdout] "foo column", [INFO] [stdout] }, { type_name = foo2, ty = u32, primary_key = false, column = "", },], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_columns! { tokens = [], table = { struct_name = Foo, table_name = "bar_table", }, columns [INFO] [stdout] = [INFO] [stdout] [{ type_name = foo1, ty = u32, primary_key = true, column = "foo column", }, [INFO] [stdout] { type_name = foo2, ty = u32, primary_key = false, column = "", },], }` [INFO] [stdout] = note: to `_table_impl ! [INFO] [stdout] (table = { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ type_name = foo1, ty = u32, primary_key = true, column = "foo column", }, [INFO] [stdout] { type_name = foo2, ty = u32, primary_key = false, column = "", },],) ;` [INFO] [stdout] = note: expanding `_table_impl! { table = { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ type_name = foo1, ty = u32, primary_key = true, column = "foo column", }, [INFO] [stdout] { type_name = foo2, ty = u32, primary_key = false, column = "", },], }` [INFO] [stdout] = note: to `mod table_shadow [INFO] [stdout] { [INFO] [stdout] pub struct Foo [INFO] [stdout] { pub(crate) foo1 : Option < u32 >, pub(crate) foo2 : Option < u32 >, } [INFO] [stdout] } pub struct Foo { _shadow : table_shadow :: Foo, foo1 : u32, foo2 : u32, } [INFO] [stdout] impl Foo [INFO] [stdout] { [INFO] [stdout] pub fn get_pks() -> Vec < & 'static str > [INFO] [stdout] { [INFO] [stdout] let mut pk = vec ! [] ; $crate :: static_cond ! [INFO] [stdout] { if true == true { pk . push("foo column") ; } else { } } $crate :: [INFO] [stdout] static_cond ! { if false == true { pk . push("") ; } else { } } ; pk [INFO] [stdout] } pub fn get_columns() -> & 'static [& 'static str] [INFO] [stdout] { & ["foo column", "",] } async fn build_update_query < DB > [INFO] [stdout] (& self, pool : :: sqlx :: Pool < DB >) -> Option < Result < DB :: Done, [INFO] [stdout] :: sqlx :: Error >> where DB : :: sqlx :: Database [INFO] [stdout] { [INFO] [stdout] let updates = self . updates() ; if updates . len() == 0 [INFO] [stdout] { return None ; } let mut sql = String :: new() ; sql . [INFO] [stdout] push_str("UPDATE ") ; sql . push_str(stringify ! ("bar_table")) ; sql [INFO] [stdout] . push_str(" SET ") ; sql . [INFO] [stdout] push_str(& [INFO] [stdout] (& updates . iter() . [INFO] [stdout] map(| u | format ! ("{} = ?", u . column)) . collect :: < [INFO] [stdout] Vec < _ >> () . join(", "))) ; let mut q = sqlx :: [INFO] [stdout] query(& sql) ; for update in updates [INFO] [stdout] { q = q . bind(update . new_value . clone()) ; } sql . [INFO] [stdout] push_str("WHERE ") ; $crate :: static_cond ! [INFO] [stdout] { [INFO] [stdout] if true == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } [INFO] [stdout] } $crate :: static_cond ! [INFO] [stdout] { [INFO] [stdout] if false == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } [INFO] [stdout] } ; sql . push_str(" 1 = 1 ") ; Some(q . execute(& pool) . await) [INFO] [stdout] } [INFO] [stdout] } impl CalcUpdats for Foo [INFO] [stdout] { [INFO] [stdout] fn updates(& self) -> Vec < Update > [INFO] [stdout] { [INFO] [stdout] let mut buf = vec ! [] ; match(& self . foo1, & self . _shadow . foo1) [INFO] [stdout] { [INFO] [stdout] (o, Some(s)) if o == s => { }, _ => [INFO] [stdout] { [INFO] [stdout] buf . [INFO] [stdout] push(Update [INFO] [stdout] { [INFO] [stdout] field : stringify ! (foo1), column : stringify ! [INFO] [stdout] ($ column_name), new_value : & self . foo1, old_value [INFO] [stdout] : & self . _shadow . foo1, [INFO] [stdout] }) ; [INFO] [stdout] } [INFO] [stdout] } ; match(& self . foo2, & self . _shadow . foo2) [INFO] [stdout] { [INFO] [stdout] (o, Some(s)) if o == s => { }, _ => [INFO] [stdout] { [INFO] [stdout] buf . [INFO] [stdout] push(Update [INFO] [stdout] { [INFO] [stdout] field : stringify ! (foo2), column : stringify ! [INFO] [stdout] ($ column_name), new_value : & self . foo2, old_value [INFO] [stdout] : & self . _shadow . foo2, [INFO] [stdout] }) ; [INFO] [stdout] } [INFO] [stdout] } ; buf [INFO] [stdout] } [INFO] [stdout] }` [INFO] [stdout] = note: expanding `vec! { }` [INFO] [stdout] = note: to `$crate :: vec :: Vec :: new()` [INFO] [stdout] = note: expanding `static_cond! { if true == true { pk . push("foo column") ; } else { } }` [INFO] [stdout] = note: to `$crate :: static_cond ! (@ go true true { pk . push("foo column") ; } { }) ;` [INFO] [stdout] = note: expanding `static_cond! { @ go true true { pk . push("foo column") ; } { } }` [INFO] [stdout] = note: to `macro_rules ! __static_cond [INFO] [stdout] { (true true) => { pk . push("foo column") ; } ; (true true) => { } } [INFO] [stdout] __static_cond ! (true true) ;` [INFO] [stdout] = note: expanding `__static_cond! { true true }` [INFO] [stdout] = note: to `pk . push("foo column") ;` [INFO] [stdout] = note: expanding `static_cond! { if false == true { pk . push("") ; } else { } }` [INFO] [stdout] = note: to `$crate :: static_cond ! (@ go false true { pk . push("") ; } { }) ;` [INFO] [stdout] = note: expanding `static_cond! { @ go false true { pk . push("") ; } { } }` [INFO] [stdout] = note: to `macro_rules ! __static_cond [INFO] [stdout] { (false false) => { pk . push("") ; } ; (false true) => { } } __static_cond ! [INFO] [stdout] (false true) ;` [INFO] [stdout] = note: expanding `__static_cond! { false true }` [INFO] [stdout] = note: to `` [INFO] [stdout] = note: expanding `format! { "{} = ?", u . column }` [INFO] [stdout] = note: to `{ [INFO] [stdout] let res = $crate :: fmt :: [INFO] [stdout] format($crate :: __export :: format_args ! ("{} = ?", u . column)) ; res [INFO] [stdout] }` [INFO] [stdout] = note: expanding `static_cond! { if true == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } }` [INFO] [stdout] = note: to `$crate :: static_cond ! [INFO] [stdout] (if true == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } else { }) ;` [INFO] [stdout] = note: expanding `static_cond! { if true == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } else { } }` [INFO] [stdout] = note: to `$crate :: static_cond ! [INFO] [stdout] (@ go true true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } { }) ;` [INFO] [stdout] = note: expanding `static_cond! { @ go true true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } { } }` [INFO] [stdout] = note: to `macro_rules ! __static_cond [INFO] [stdout] { [INFO] [stdout] (true true) => [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } ; (true true) => { } [INFO] [stdout] } __static_cond ! (true true) ;` [INFO] [stdout] = note: expanding `__static_cond! { true true }` [INFO] [stdout] = note: to `sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ;` [INFO] [stdout] = note: expanding `static_cond! { if false == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . push_str("` = ? AND ") ; [INFO] [stdout] q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } }` [INFO] [stdout] = note: to `$crate :: static_cond ! [INFO] [stdout] (if false == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . push_str("` = ? AND ") ; [INFO] [stdout] q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } else { }) ;` [INFO] [stdout] = note: expanding `static_cond! { if false == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . push_str("` = ? AND ") ; [INFO] [stdout] q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } else { } }` [INFO] [stdout] = note: to `$crate :: static_cond ! [INFO] [stdout] (@ go false true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . push_str("` = ? AND ") ; [INFO] [stdout] q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } { }) ;` [INFO] [stdout] = note: expanding `static_cond! { @ go false true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . push_str("` = ? AND ") ; [INFO] [stdout] q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } { } }` [INFO] [stdout] = note: to `macro_rules ! __static_cond [INFO] [stdout] { [INFO] [stdout] (false false) => [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } ; (false true) => { } [INFO] [stdout] } __static_cond ! (false true) ;` [INFO] [stdout] = note: expanding `__static_cond! { false true }` [INFO] [stdout] = note: to `` [INFO] [stdout] = note: expanding `vec! { }` [INFO] [stdout] = note: to `$crate :: vec :: Vec :: new()` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] note: trace_macro [INFO] [stdout] --> src/main.rs:341:5 [INFO] [stdout] | [INFO] [stdout] 341 | / table!( [INFO] [stdout] 342 | | #[table = "bar_table"] [INFO] [stdout] 343 | | struct Foo { [INFO] [stdout] 344 | | #[pk, column = "foo column",] [INFO] [stdout] ... | [INFO] [stdout] 347 | | } [INFO] [stdout] 348 | | ); [INFO] [stdout] | |______^ [INFO] [stdout] | [INFO] [stdout] = note: expanding `table! { #[table = "bar_table"] struct Foo [INFO] [stdout] { #[pk, column = "foo column",] foo1 : u32, foo2 : u32, } }` [INFO] [stdout] = note: to `_table ! [INFO] [stdout] { [INFO] [stdout] tokens = [INFO] [stdout] [#[table = "bar_table"] struct Foo [INFO] [stdout] { #[pk, column = "foo column",] foo1 : u32, foo2 : u32, }], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_table! { tokens = [INFO] [stdout] [#[table = "bar_table"] struct Foo [INFO] [stdout] { #[pk, column = "foo column",] foo1 : u32, foo2 : u32, }], }` [INFO] [stdout] = note: to `_table ! [INFO] [stdout] { [INFO] [stdout] tokens = [INFO] [stdout] [struct Foo { #[pk, column = "foo column",] foo1 : u32, foo2 : u32, }], [INFO] [stdout] table_name = "bar_table", [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_table! { tokens = [INFO] [stdout] [struct Foo { #[pk, column = "foo column",] foo1 : u32, foo2 : u32, }], [INFO] [stdout] table_name = "bar_table", }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] tokens = [#[pk, column = "foo column",] foo1 : u32, foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_columns! { tokens = [#[pk, column = "foo column",] foo1 : u32, foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_annotation ! [INFO] [stdout] { [INFO] [stdout] annotation_tokens = [pk, column = "foo column",], annotations = [INFO] [stdout] { primary_key = false, column = "", }, tokens = [foo1 : u32, foo2 : u32,], [INFO] [stdout] table = { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_annotation! { annotation_tokens = [pk, column = "foo column",], annotations = [INFO] [stdout] { primary_key = false, column = "", }, tokens = [foo1 : u32, foo2 : u32,], [INFO] [stdout] table = { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_annotation ! [INFO] [stdout] { [INFO] [stdout] annotation_tokens = [column = "foo column",], annotations = [INFO] [stdout] { primary_key = true, column = "", }, tokens = [foo1 : u32, foo2 : u32,], [INFO] [stdout] table = { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_annotation! { annotation_tokens = [column = "foo column",], annotations = [INFO] [stdout] { primary_key = true, column = "", }, tokens = [foo1 : u32, foo2 : u32,], [INFO] [stdout] table = { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_annotation ! [INFO] [stdout] { [INFO] [stdout] annotation_tokens = [], annotations = [INFO] [stdout] { primary_key = true, column = "foo column", }, tokens = [INFO] [stdout] [foo1 : u32, foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_annotation! { annotation_tokens = [], annotations = [INFO] [stdout] { primary_key = true, column = "foo column", }, tokens = [INFO] [stdout] [foo1 : u32, foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] tokens = [foo1 : u32, foo2 : u32,], annotations = [INFO] [stdout] { primary_key = true, column = "foo column", }, table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] } ;` [INFO] [stdout] = note: expanding `_columns! { tokens = [foo1 : u32, foo2 : u32,], annotations = [INFO] [stdout] { primary_key = true, column = "foo column", }, table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] current_column = [INFO] [stdout] { [INFO] [stdout] type_name = foo1, ty = u32, primary_key = true, column = "foo column", [INFO] [stdout] }, tokens = [foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_columns! { current_column = [INFO] [stdout] { type_name = foo1, ty = u32, primary_key = true, column = "foo column", }, [INFO] [stdout] tokens = [foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [], }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] tokens = [foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ [INFO] [stdout] type_name = foo1, ty = u32, primary_key = true, column = [INFO] [stdout] "foo column", [INFO] [stdout] },], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_columns! { tokens = [foo2 : u32,], table = [INFO] [stdout] { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ type_name = foo1, ty = u32, primary_key = true, column = "foo column", },], }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] current_column = [INFO] [stdout] { type_name = foo2, ty = u32, primary_key = false, column = "", }, tokens [INFO] [stdout] = [], table = { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ [INFO] [stdout] type_name = foo1, ty = u32, primary_key = true, column = [INFO] [stdout] "foo column", [INFO] [stdout] },], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_columns! { current_column = [INFO] [stdout] { type_name = foo2, ty = u32, primary_key = false, column = "", }, tokens = [INFO] [stdout] [], table = { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ type_name = foo1, ty = u32, primary_key = true, column = "foo column", },], }` [INFO] [stdout] = note: to `_columns ! [INFO] [stdout] { [INFO] [stdout] tokens = [], table = { struct_name = Foo, table_name = "bar_table", }, [INFO] [stdout] columns = [INFO] [stdout] [{ [INFO] [stdout] type_name = foo1, ty = u32, primary_key = true, column = [INFO] [stdout] "foo column", [INFO] [stdout] }, { type_name = foo2, ty = u32, primary_key = false, column = "", },], [INFO] [stdout] }` [INFO] [stdout] = note: expanding `_columns! { tokens = [], table = { struct_name = Foo, table_name = "bar_table", }, columns [INFO] [stdout] = [INFO] [stdout] [{ type_name = foo1, ty = u32, primary_key = true, column = "foo column", }, [INFO] [stdout] { type_name = foo2, ty = u32, primary_key = false, column = "", },], }` [INFO] [stdout] = note: to `_table_impl ! [INFO] [stdout] (table = { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ type_name = foo1, ty = u32, primary_key = true, column = "foo column", }, [INFO] [stdout] { type_name = foo2, ty = u32, primary_key = false, column = "", },],) ;` [INFO] [stdout] = note: expanding `_table_impl! { table = { struct_name = Foo, table_name = "bar_table", }, columns = [INFO] [stdout] [{ type_name = foo1, ty = u32, primary_key = true, column = "foo column", }, [INFO] [stdout] { type_name = foo2, ty = u32, primary_key = false, column = "", },], }` [INFO] [stdout] = note: to `mod table_shadow [INFO] [stdout] { [INFO] [stdout] pub struct Foo [INFO] [stdout] { pub(crate) foo1 : Option < u32 >, pub(crate) foo2 : Option < u32 >, } [INFO] [stdout] } pub struct Foo { _shadow : table_shadow :: Foo, foo1 : u32, foo2 : u32, } [INFO] [stdout] impl Foo [INFO] [stdout] { [INFO] [stdout] pub fn get_pks() -> Vec < & 'static str > [INFO] [stdout] { [INFO] [stdout] let mut pk = vec ! [] ; $crate :: static_cond ! [INFO] [stdout] { if true == true { pk . push("foo column") ; } else { } } $crate :: [INFO] [stdout] static_cond ! { if false == true { pk . push("") ; } else { } } ; pk [INFO] [stdout] } pub fn get_columns() -> & 'static [& 'static str] [INFO] [stdout] { & ["foo column", "",] } async fn build_update_query < DB > [INFO] [stdout] (& self, pool : :: sqlx :: Pool < DB >) -> Option < Result < DB :: Done, [INFO] [stdout] :: sqlx :: Error >> where DB : :: sqlx :: Database [INFO] [stdout] { [INFO] [stdout] let updates = self . updates() ; if updates . len() == 0 [INFO] [stdout] { return None ; } let mut sql = String :: new() ; sql . [INFO] [stdout] push_str("UPDATE ") ; sql . push_str(stringify ! ("bar_table")) ; sql [INFO] [stdout] . push_str(" SET ") ; sql . [INFO] [stdout] push_str(& [INFO] [stdout] (& updates . iter() . [INFO] [stdout] map(| u | format ! ("{} = ?", u . column)) . collect :: < [INFO] [stdout] Vec < _ >> () . join(", "))) ; let mut q = sqlx :: [INFO] [stdout] query(& sql) ; for update in updates [INFO] [stdout] { q = q . bind(update . new_value . clone()) ; } sql . [INFO] [stdout] push_str("WHERE ") ; $crate :: static_cond ! [INFO] [stdout] { [INFO] [stdout] if true == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } [INFO] [stdout] } $crate :: static_cond ! [INFO] [stdout] { [INFO] [stdout] if false == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } [INFO] [stdout] } ; sql . push_str(" 1 = 1 ") ; Some(q . execute(& pool) . await) [INFO] [stdout] } [INFO] [stdout] } impl CalcUpdats for Foo [INFO] [stdout] { [INFO] [stdout] fn updates(& self) -> Vec < Update > [INFO] [stdout] { [INFO] [stdout] let mut buf = vec ! [] ; match(& self . foo1, & self . _shadow . foo1) [INFO] [stdout] { [INFO] [stdout] (o, Some(s)) if o == s => { }, _ => [INFO] [stdout] { [INFO] [stdout] buf . [INFO] [stdout] push(Update [INFO] [stdout] { [INFO] [stdout] field : stringify ! (foo1), column : stringify ! [INFO] [stdout] ($ column_name), new_value : & self . foo1, old_value [INFO] [stdout] : & self . _shadow . foo1, [INFO] [stdout] }) ; [INFO] [stdout] } [INFO] [stdout] } ; match(& self . foo2, & self . _shadow . foo2) [INFO] [stdout] { [INFO] [stdout] (o, Some(s)) if o == s => { }, _ => [INFO] [stdout] { [INFO] [stdout] buf . [INFO] [stdout] push(Update [INFO] [stdout] { [INFO] [stdout] field : stringify ! (foo2), column : stringify ! [INFO] [stdout] ($ column_name), new_value : & self . foo2, old_value [INFO] [stdout] : & self . _shadow . foo2, [INFO] [stdout] }) ; [INFO] [stdout] } [INFO] [stdout] } ; buf [INFO] [stdout] } [INFO] [stdout] }` [INFO] [stdout] = note: expanding `vec! { }` [INFO] [stdout] = note: to `$crate :: vec :: Vec :: new()` [INFO] [stdout] = note: expanding `static_cond! { if true == true { pk . push("foo column") ; } else { } }` [INFO] [stdout] = note: to `$crate :: static_cond ! (@ go true true { pk . push("foo column") ; } { }) ;` [INFO] [stdout] = note: expanding `static_cond! { @ go true true { pk . push("foo column") ; } { } }` [INFO] [stdout] = note: to `macro_rules ! __static_cond [INFO] [stdout] { (true true) => { pk . push("foo column") ; } ; (true true) => { } } [INFO] [stdout] __static_cond ! (true true) ;` [INFO] [stdout] = note: expanding `__static_cond! { true true }` [INFO] [stdout] = note: to `pk . push("foo column") ;` [INFO] [stdout] = note: expanding `static_cond! { if false == true { pk . push("") ; } else { } }` [INFO] [stdout] = note: to `$crate :: static_cond ! (@ go false true { pk . push("") ; } { }) ;` [INFO] [stdout] = note: expanding `static_cond! { @ go false true { pk . push("") ; } { } }` [INFO] [stdout] = note: to `macro_rules ! __static_cond [INFO] [stdout] { (false false) => { pk . push("") ; } ; (false true) => { } } __static_cond ! [INFO] [stdout] (false true) ;` [INFO] [stdout] = note: expanding `__static_cond! { false true }` [INFO] [stdout] = note: to `` [INFO] [stdout] = note: expanding `format! { "{} = ?", u . column }` [INFO] [stdout] = note: to `{ [INFO] [stdout] let res = $crate :: fmt :: [INFO] [stdout] format($crate :: __export :: format_args ! ("{} = ?", u . column)) ; res [INFO] [stdout] }` [INFO] [stdout] = note: expanding `static_cond! { if true == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } }` [INFO] [stdout] = note: to `$crate :: static_cond ! [INFO] [stdout] (if true == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } else { }) ;` [INFO] [stdout] = note: expanding `static_cond! { if true == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } else { } }` [INFO] [stdout] = note: to `$crate :: static_cond ! [INFO] [stdout] (@ go true true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } { }) ;` [INFO] [stdout] = note: expanding `static_cond! { @ go true true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } { } }` [INFO] [stdout] = note: to `macro_rules ! __static_cond [INFO] [stdout] { [INFO] [stdout] (true true) => [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ; [INFO] [stdout] } ; (true true) => { } [INFO] [stdout] } __static_cond ! (true true) ;` [INFO] [stdout] = note: expanding `__static_cond! { true true }` [INFO] [stdout] = note: to `sql . push_str("`") ; sql . push_str("foo column") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo1 . clone()) ;` [INFO] [stdout] = note: expanding `static_cond! { if false == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . push_str("` = ? AND ") ; [INFO] [stdout] q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } }` [INFO] [stdout] = note: to `$crate :: static_cond ! [INFO] [stdout] (if false == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . push_str("` = ? AND ") ; [INFO] [stdout] q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } else { }) ;` [INFO] [stdout] = note: expanding `static_cond! { if false == true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . push_str("` = ? AND ") ; [INFO] [stdout] q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } else { } }` [INFO] [stdout] = note: to `$crate :: static_cond ! [INFO] [stdout] (@ go false true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . push_str("` = ? AND ") ; [INFO] [stdout] q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } { }) ;` [INFO] [stdout] = note: expanding `static_cond! { @ go false true [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . push_str("` = ? AND ") ; [INFO] [stdout] q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } { } }` [INFO] [stdout] = note: to `macro_rules ! __static_cond [INFO] [stdout] { [INFO] [stdout] (false false) => [INFO] [stdout] { [INFO] [stdout] sql . push_str("`") ; sql . push_str("") ; sql . [INFO] [stdout] push_str("` = ? AND ") ; q = q . bind(self . foo2 . clone()) ; [INFO] [stdout] } ; (false true) => { } [INFO] [stdout] } __static_cond ! (false true) ;` [INFO] [stdout] = note: expanding `__static_cond! { false true }` [INFO] [stdout] = note: to `` [INFO] [stdout] = note: expanding `vec! { }` [INFO] [stdout] = note: to `$crate :: vec :: Vec :: new()` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0271]: type mismatch resolving `<&Pool as Executor<'_>>::Database == MySql` [INFO] [stdout] --> src/main.rs:299:24 [INFO] [stdout] | [INFO] [stdout] 257 | async fn build_update_query(&self, pool : ::sqlx::Pool) -> Option> where DB: ::sqlx::... [INFO] [stdout] | -- this type parameter [INFO] [stdout] ... [INFO] [stdout] 299 | Some(q.execute(&pool).await) [INFO] [stdout] | ^^^^^^^ expected type parameter `DB`, found struct `MySql` [INFO] [stdout] ... [INFO] [stdout] 341 | / table!( [INFO] [stdout] 342 | | #[table = "bar_table"] [INFO] [stdout] 343 | | struct Foo { [INFO] [stdout] 344 | | #[pk, column = "foo column",] [INFO] [stdout] ... | [INFO] [stdout] 347 | | } [INFO] [stdout] 348 | | ); [INFO] [stdout] | |______- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: expected type `DB` [INFO] [stdout] found struct `MySql` [INFO] [stdout] = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0271]: type mismatch resolving `<&Pool as Executor<'_>>::Database == MySql` [INFO] [stdout] --> src/main.rs:299:24 [INFO] [stdout] | [INFO] [stdout] 257 | async fn build_update_query(&self, pool : ::sqlx::Pool) -> Option> where DB: ::sqlx::... [INFO] [stdout] | -- this type parameter [INFO] [stdout] ... [INFO] [stdout] 299 | Some(q.execute(&pool).await) [INFO] [stdout] | ^^^^^^^ expected type parameter `DB`, found struct `MySql` [INFO] [stdout] ... [INFO] [stdout] 341 | / table!( [INFO] [stdout] 342 | | #[table = "bar_table"] [INFO] [stdout] 343 | | struct Foo { [INFO] [stdout] 344 | | #[pk, column = "foo column",] [INFO] [stdout] ... | [INFO] [stdout] 347 | | } [INFO] [stdout] 348 | | ); [INFO] [stdout] | |______- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: expected type `DB` [INFO] [stdout] found struct `MySql` [INFO] [stdout] = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the trait bound `for<'c> &'c mut ::Connection: Executor<'c>` is not satisfied [INFO] [stdout] --> src/main.rs:299:24 [INFO] [stdout] | [INFO] [stdout] 299 | Some(q.execute(&pool).await) [INFO] [stdout] | ^^^^^^^ the trait `for<'c> Executor<'c>` is not implemented for `&'c mut ::Connection` [INFO] [stdout] ... [INFO] [stdout] 341 | / table!( [INFO] [stdout] 342 | | #[table = "bar_table"] [INFO] [stdout] 343 | | struct Foo { [INFO] [stdout] 344 | | #[pk, column = "foo column",] [INFO] [stdout] ... | [INFO] [stdout] 347 | | } [INFO] [stdout] 348 | | ); [INFO] [stdout] | |______- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: required because of the requirements on the impl of `Executor<'_>` for `&Pool` [INFO] [stdout] = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the trait bound `for<'c> &'c mut ::Connection: Executor<'c>` is not satisfied [INFO] [stdout] --> src/main.rs:299:24 [INFO] [stdout] | [INFO] [stdout] 299 | Some(q.execute(&pool).await) [INFO] [stdout] | ^^^^^^^ the trait `for<'c> Executor<'c>` is not implemented for `&'c mut ::Connection` [INFO] [stdout] ... [INFO] [stdout] 341 | / table!( [INFO] [stdout] 342 | | #[table = "bar_table"] [INFO] [stdout] 343 | | struct Foo { [INFO] [stdout] 344 | | #[pk, column = "foo column",] [INFO] [stdout] ... | [INFO] [stdout] 347 | | } [INFO] [stdout] 348 | | ); [INFO] [stdout] | |______- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: required because of the requirements on the impl of `Executor<'_>` for `&Pool` [INFO] [stdout] = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> src/main.rs:299:22 [INFO] [stdout] | [INFO] [stdout] 299 | Some(q.execute(&pool).await) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ expected associated type, found struct `MySqlDone` [INFO] [stdout] ... [INFO] [stdout] 341 | / table!( [INFO] [stdout] 342 | | #[table = "bar_table"] [INFO] [stdout] 343 | | struct Foo { [INFO] [stdout] 344 | | #[pk, column = "foo column",] [INFO] [stdout] ... | [INFO] [stdout] 347 | | } [INFO] [stdout] 348 | | ); [INFO] [stdout] | |______- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: expected enum `std::result::Result<::Done, _>` [INFO] [stdout] found enum `std::result::Result` [INFO] [stdout] = help: consider constraining the associated type `::Done` to `MySqlDone` [INFO] [stdout] = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html [INFO] [stdout] = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: aborting due to 3 previous errors [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0271, E0277, E0308. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0271`. [INFO] [stdout] [INFO] [stderr] error: could not compile `tablemacro` [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> src/main.rs:299:22 [INFO] [stdout] | [INFO] [stdout] 299 | Some(q.execute(&pool).await) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ expected associated type, found struct `MySqlDone` [INFO] [stdout] ... [INFO] [stdout] 341 | / table!( [INFO] [stdout] 342 | | #[table = "bar_table"] [INFO] [stdout] 343 | | struct Foo { [INFO] [stdout] 344 | | #[pk, column = "foo column",] [INFO] [stdout] ... | [INFO] [stdout] 347 | | } [INFO] [stdout] 348 | | ); [INFO] [stdout] | |______- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: expected enum `std::result::Result<::Done, _>` [INFO] [stdout] found enum `std::result::Result` [INFO] [stdout] = help: consider constraining the associated type `::Done` to `MySqlDone` [INFO] [stdout] = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html [INFO] [stdout] = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0271]: type mismatch resolving `<&Pool as Executor<'_>>::Database == MySql` [INFO] [stdout] --> src/main.rs:299:24 [INFO] [stdout] | [INFO] [stdout] 257 | ... async fn build_update_query(&self, pool : ::sqlx::Pool) -> Option> where DB: ::sqlx::Da... [INFO] [stdout] | -- this type parameter [INFO] [stdout] ... [INFO] [stdout] 299 | ... Some(q.execute(&pool).await) [INFO] [stdout] | ^^^^^^^ expected type parameter `DB`, found struct `MySql` [INFO] [stdout] ... [INFO] [stdout] 360 | / ... table!( [INFO] [stdout] 361 | | ... #[table = "bar_table"] [INFO] [stdout] 362 | | ... struct Foo { [INFO] [stdout] 363 | | ... #[column = "foo column",] [INFO] [stdout] 364 | | ... foo1 : u32, [INFO] [stdout] 365 | | ... } [INFO] [stdout] 366 | | ... ); [INFO] [stdout] | |________- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: expected type `DB` [INFO] [stdout] found struct `MySql` [INFO] [stdout] = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0277]: the trait bound `for<'c> &'c mut ::Connection: Executor<'c>` is not satisfied [INFO] [stdout] --> src/main.rs:299:24 [INFO] [stdout] | [INFO] [stdout] 299 | Some(q.execute(&pool).await) [INFO] [stdout] | ^^^^^^^ the trait `for<'c> Executor<'c>` is not implemented for `&'c mut ::Connection` [INFO] [stdout] ... [INFO] [stdout] 360 | / table!( [INFO] [stdout] 361 | | #[table = "bar_table"] [INFO] [stdout] 362 | | struct Foo { [INFO] [stdout] 363 | | #[column = "foo column",] [INFO] [stdout] 364 | | foo1 : u32, [INFO] [stdout] 365 | | } [INFO] [stdout] 366 | | ); [INFO] [stdout] | |__________- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: required because of the requirements on the impl of `Executor<'_>` for `&Pool` [INFO] [stdout] = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0308]: mismatched types [INFO] [stdout] --> src/main.rs:299:22 [INFO] [stdout] | [INFO] [stdout] 299 | Some(q.execute(&pool).await) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ expected associated type, found struct `MySqlDone` [INFO] [stdout] ... [INFO] [stdout] 360 | / table!( [INFO] [stdout] 361 | | #[table = "bar_table"] [INFO] [stdout] 362 | | struct Foo { [INFO] [stdout] 363 | | #[column = "foo column",] [INFO] [stdout] 364 | | foo1 : u32, [INFO] [stdout] 365 | | } [INFO] [stdout] 366 | | ); [INFO] [stdout] | |__________- in this macro invocation [INFO] [stdout] | [INFO] [stdout] = note: expected enum `std::result::Result<::Done, _>` [INFO] [stdout] found enum `std::result::Result` [INFO] [stdout] = help: consider constraining the associated type `::Done` to `MySqlDone` [INFO] [stdout] = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html [INFO] [stdout] = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: aborting due to 6 previous errors [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0271, E0277, E0308. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0271`. [INFO] [stdout] [INFO] [stderr] error: build failed [INFO] running `Command { std: "docker" "inspect" "e5f6de2862301cc85340b8c26d0469c59bf96f8a66bdebd01019d588333f8a3c", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e5f6de2862301cc85340b8c26d0469c59bf96f8a66bdebd01019d588333f8a3c", kill_on_drop: false }` [INFO] [stdout] e5f6de2862301cc85340b8c26d0469c59bf96f8a66bdebd01019d588333f8a3c