diff --git a/core/vdbe/execute.rs b/core/vdbe/execute.rs index 2943a97ac..ecc97d088 100644 --- a/core/vdbe/execute.rs +++ b/core/vdbe/execute.rs @@ -5606,8 +5606,11 @@ pub fn exec_bit_not(reg: &OwnedValue) -> OwnedValue { OwnedValue::Null => OwnedValue::Null, OwnedValue::Integer(i) => OwnedValue::Integer(!i), OwnedValue::Float(f) => OwnedValue::Integer(!(*f as i64)), - OwnedValue::Text(text) => exec_bit_not(&cast_text_to_numeric(text.as_str())), - _ => todo!(), + OwnedValue::Text(text) => exec_bit_not(&cast_text_to_integer(text.as_str())), + OwnedValue::Blob(blob) => { + let text = String::from_utf8_lossy(blob); + exec_bit_not(&cast_text_to_integer(&text)) + } } } @@ -5724,8 +5727,11 @@ pub fn exec_boolean_not(reg: &OwnedValue) -> OwnedValue { OwnedValue::Null => OwnedValue::Null, OwnedValue::Integer(i) => OwnedValue::Integer((*i == 0) as i64), OwnedValue::Float(f) => OwnedValue::Integer((*f == 0.0) as i64), - OwnedValue::Text(text) => exec_boolean_not(&cast_text_to_numeric(text.as_str())), - _ => todo!(), + OwnedValue::Text(text) => exec_boolean_not(&&cast_text_to_real(text.as_str())), + OwnedValue::Blob(blob) => { + let text = String::from_utf8_lossy(blob); + exec_boolean_not(&cast_text_to_real(&text)) + } } } pub fn exec_concat(lhs: &OwnedValue, rhs: &OwnedValue) -> OwnedValue { diff --git a/fuzz/Cargo.lock b/fuzz/Cargo.lock index f32c94005..2556485fb 100644 --- a/fuzz/Cargo.lock +++ b/fuzz/Cargo.lock @@ -47,15 +47,6 @@ version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - [[package]] name = "built" version = "0.7.7" @@ -72,12 +63,6 @@ version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "cc" version = "1.2.16" @@ -130,15 +115,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - [[package]] name = "crossbeam-epoch" version = "0.9.18" @@ -164,16 +140,6 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - [[package]] name = "derive_arbitrary" version = "1.4.1" @@ -185,16 +151,6 @@ dependencies = [ "syn", ] -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -234,12 +190,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" -[[package]] -name = "fast-float2" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55" - [[package]] name = "foldhash" version = "0.1.4" @@ -255,16 +205,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - [[package]] name = "getrandom" version = "0.2.15" @@ -507,15 +447,8 @@ checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" dependencies = [ "equivalent", "hashbrown", - "serde", ] -[[package]] -name = "itoa" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" - [[package]] name = "jobserver" version = "0.1.32" @@ -535,22 +468,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jsonb" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acd7dc2490b13d09367f5dc4bf202a5d70958dd5b9b2758e2708ee062752a824" -dependencies = [ - "byteorder", - "fast-float2", - "itoa", - "nom", - "ordered-float", - "rand", - "ryu", - "serde_json", -] - [[package]] name = "julian_day_converter" version = "0.4.4" @@ -598,6 +515,12 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + [[package]] name = "libmimalloc-sys" version = "0.1.39" @@ -643,7 +566,7 @@ dependencies = [ [[package]] name = "limbo_core" -version = "0.0.18-pre.3" +version = "0.0.19-pre.4" dependencies = [ "built", "cfg_block", @@ -652,10 +575,9 @@ dependencies = [ "fallible-iterator", "getrandom 0.2.15", "hex", - "indexmap", - "jsonb", "julian_day_converter", "libloading", + "libm", "limbo_ext", "limbo_macros", "limbo_sqlite3_parser", @@ -664,15 +586,12 @@ dependencies = [ "miette", "mimalloc", "parking_lot", - "pest", - "pest_derive", "polling", "rand", "regex", "regex-syntax", "rustix", "ryu", - "serde", "strum", "thiserror 1.0.69", "tracing", @@ -680,7 +599,7 @@ dependencies = [ [[package]] name = "limbo_ext" -version = "0.0.18-pre.3" +version = "0.0.19-pre.4" dependencies = [ "chrono", "getrandom 0.3.1", @@ -689,7 +608,7 @@ dependencies = [ [[package]] name = "limbo_macros" -version = "0.0.18-pre.3" +version = "0.0.19-pre.4" dependencies = [ "proc-macro2", "quote", @@ -698,7 +617,7 @@ dependencies = [ [[package]] name = "limbo_sqlite3_parser" -version = "0.0.18-pre.3" +version = "0.0.19-pre.4" dependencies = [ "bitflags", "cc", @@ -717,7 +636,7 @@ dependencies = [ [[package]] name = "limbo_time" -version = "0.0.18-pre.3" +version = "0.0.19-pre.4" dependencies = [ "chrono", "limbo_ext", @@ -729,7 +648,7 @@ dependencies = [ [[package]] name = "limbo_uuid" -version = "0.0.18-pre.3" +version = "0.0.19-pre.4" dependencies = [ "limbo_ext", "mimalloc", @@ -802,22 +721,6 @@ dependencies = [ "libmimalloc-sys", ] -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -833,15 +736,6 @@ version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cde51589ab56b20a6f686b2c68f7a0bd6add753d697abf720d63f8db3ab7b1ad" -[[package]] -name = "ordered-float" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" -dependencies = [ - "num-traits", -] - [[package]] name = "parking_lot" version = "0.12.3" @@ -871,51 +765,6 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pest" -version = "2.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" -dependencies = [ - "memchr", - "thiserror 2.0.12", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pest_meta" -version = "2.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" -dependencies = [ - "once_cell", - "pest", - "sha2", -] - [[package]] name = "phf" version = "0.11.3" @@ -1142,30 +991,6 @@ dependencies = [ "syn", ] -[[package]] -name = "serde_json" -version = "1.0.140" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" -dependencies = [ - "indexmap", - "itoa", - "memchr", - "ryu", - "serde", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "shlex" version = "1.3.0" @@ -1315,18 +1140,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - [[package]] name = "uncased" version = "0.9.10" diff --git a/testing/math.test b/testing/math.test index afa0e29d1..7eb15b2bc 100755 --- a/testing/math.test +++ b/testing/math.test @@ -627,6 +627,38 @@ do_execsql_test bitwise-not-zero { SELECT ~0 } {-1} +do_execsql_test bitwise-not-empty-blob { + SELECT ~x'' +} {-1} + +do_execsql_test bitwise-not-cast-blob { + SELECT ~ CAST ('af' AS BLOB); +} {-1} + +do_execsql_test bitwise-not-blob { + SELECT ~ x'0000'; +} {-1} + +do_execsql_test bitwise-not-blob-2 { + SELECT ~ x'0001'; +} {-1} + +do_execsql_test boolean-not-empty-blob { + SELECT NOT x'' +} {1} + +do_execsql_test boolean-not-cast-blob { + SELECT NOT CAST ('af' AS BLOB); +} {1} + +do_execsql_test boolean-not-blob { + SELECT NOT x'0000'; +} {1} + +do_execsql_test boolean-not-blob-2 { + SELECT NOT x'0001'; +} {1} + foreach {testname lhs ans} { int-1 1 0 int-2 2 0