diff --git a/packages/cubejs-backend-native/Cargo.lock b/packages/cubejs-backend-native/Cargo.lock index 9a15b01e2bc9f..9497d516ba715 100644 --- a/packages/cubejs-backend-native/Cargo.lock +++ b/packages/cubejs-backend-native/Cargo.lock @@ -714,7 +714,7 @@ dependencies = [ [[package]] name = "cube-ext" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "arrow", "chrono", @@ -824,7 +824,7 @@ dependencies = [ [[package]] name = "datafusion" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "ahash 0.7.7", "arrow", @@ -857,7 +857,7 @@ dependencies = [ [[package]] name = "datafusion-common" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "arrow", "ordered-float 2.10.1", @@ -868,7 +868,7 @@ dependencies = [ [[package]] name = "datafusion-data-access" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "async-trait", "chrono", @@ -881,7 +881,7 @@ dependencies = [ [[package]] name = "datafusion-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "ahash 0.7.7", "arrow", @@ -892,7 +892,7 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "ahash 0.7.7", "arrow", @@ -3332,7 +3332,7 @@ checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "sqlparser" version = "0.16.0" -source = "git+https://github.com/cube-js/sqlparser-rs.git?rev=b7f265a4590049f8274cef8411f63eddb5b4bf87#b7f265a4590049f8274cef8411f63eddb5b4bf87" +source = "git+https://github.com/cube-js/sqlparser-rs.git?rev=347f769500e3305f1920d8b38832f483d8795bd3#347f769500e3305f1920d8b38832f483d8795bd3" dependencies = [ "log", ] diff --git a/rust/cubesql/Cargo.lock b/rust/cubesql/Cargo.lock index b5d6b9e3aa335..f8729c994eae4 100644 --- a/rust/cubesql/Cargo.lock +++ b/rust/cubesql/Cargo.lock @@ -1018,7 +1018,7 @@ dependencies = [ [[package]] name = "cube-ext" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "arrow", "chrono", @@ -1155,7 +1155,7 @@ dependencies = [ [[package]] name = "datafusion" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "ahash 0.7.6", "arrow", @@ -1188,7 +1188,7 @@ dependencies = [ [[package]] name = "datafusion-common" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "arrow", "ordered-float 2.10.0", @@ -1199,7 +1199,7 @@ dependencies = [ [[package]] name = "datafusion-data-access" version = "1.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "async-trait", "chrono", @@ -1212,7 +1212,7 @@ dependencies = [ [[package]] name = "datafusion-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "ahash 0.7.6", "arrow", @@ -1223,7 +1223,7 @@ dependencies = [ [[package]] name = "datafusion-physical-expr" version = "7.0.0" -source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=531b925ce8215594a0d7c2151cfc17d6c6b2036c#531b925ce8215594a0d7c2151cfc17d6c6b2036c" +source = "git+https://github.com/cube-js/arrow-datafusion.git?rev=28a07c390e7195dfd657c85118dee8cb73fc6bf7#28a07c390e7195dfd657c85118dee8cb73fc6bf7" dependencies = [ "ahash 0.7.6", "arrow", @@ -4038,7 +4038,7 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "sqlparser" version = "0.16.0" -source = "git+https://github.com/cube-js/sqlparser-rs.git?rev=b7f265a4590049f8274cef8411f63eddb5b4bf87#b7f265a4590049f8274cef8411f63eddb5b4bf87" +source = "git+https://github.com/cube-js/sqlparser-rs.git?rev=347f769500e3305f1920d8b38832f483d8795bd3#347f769500e3305f1920d8b38832f483d8795bd3" dependencies = [ "log", ] diff --git a/rust/cubesql/cubesql/Cargo.toml b/rust/cubesql/cubesql/Cargo.toml index 4510b6b5417e7..fec880d950b58 100644 --- a/rust/cubesql/cubesql/Cargo.toml +++ b/rust/cubesql/cubesql/Cargo.toml @@ -10,12 +10,12 @@ homepage = "https://cube.dev" [dependencies] arc-swap = "1" -datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "531b925ce8215594a0d7c2151cfc17d6c6b2036c", default-features = false, features = ["regex_expressions", "unicode_expressions"] } +datafusion = { git = 'https://github.com/cube-js/arrow-datafusion.git', rev = "28a07c390e7195dfd657c85118dee8cb73fc6bf7", default-features = false, features = ["regex_expressions", "unicode_expressions"] } anyhow = "1.0" thiserror = "1.0.50" cubeclient = { path = "../cubeclient" } pg-srv = { path = "../pg-srv" } -sqlparser = { git = 'https://github.com/cube-js/sqlparser-rs.git', rev = "b7f265a4590049f8274cef8411f63eddb5b4bf87" } +sqlparser = { git = 'https://github.com/cube-js/sqlparser-rs.git', rev = "347f769500e3305f1920d8b38832f483d8795bd3" } lazy_static = "1.4.0" base64 = "0.13.0" tokio = { version = "^1.35", features = ["full", "rt", "tracing"] } diff --git a/rust/cubesql/cubesql/src/sql/statement.rs b/rust/cubesql/cubesql/src/sql/statement.rs index d171e8394a068..9129e2f5306ba 100644 --- a/rust/cubesql/cubesql/src/sql/statement.rs +++ b/rust/cubesql/cubesql/src/sql/statement.rs @@ -371,6 +371,14 @@ trait Visitor<'ast, E: Error> { if let Some(limit) = query.limit.as_mut() { self.visit_expr_with_placeholder_type(limit, PlaceholderType::Number)?; } + if let Some(offset) = query.offset.as_mut() { + self.visit_expr_with_placeholder_type(&mut offset.value, PlaceholderType::Number)?; + } + if let Some(fetch) = query.fetch.as_mut() { + if let Some(quantity) = fetch.quantity.as_mut() { + self.visit_expr_with_placeholder_type(quantity, PlaceholderType::Number)?; + } + } Ok(()) } @@ -1379,6 +1387,16 @@ mod tests { ], )?; + assert_pg_params_finder( + "SELECT 1 OFFSET $1", + vec![FoundParameter::new(ColumnType::Int64)], + )?; + + assert_pg_params_finder( + "SELECT 1 FETCH FIRST $1 ROWS ONLY", + vec![FoundParameter::new(ColumnType::Int64)], + )?; + Ok(()) } @@ -1418,6 +1436,11 @@ mod tests { fn test_placeholder_replacer() -> Result<(), CubeError> { assert_placeholder_replacer("SELECT ?", "SELECT 'replaced_placeholder'")?; assert_placeholder_replacer("SELECT 1 LIMIT ?", "SELECT 1 LIMIT 1")?; + assert_placeholder_replacer("SELECT 1 OFFSET ?", "SELECT 1 OFFSET 1")?; + assert_placeholder_replacer( + "SELECT 1 FETCH FIRST ? ROWS ONLY", + "SELECT 1 FETCH FIRST 1 ROWS ONLY", + )?; Ok(()) }