From 29ed4c47afbae0eaa9ec376fd1afe72fb0707cce Mon Sep 17 00:00:00 2001 From: lxk955 <164191365+lxk955@users.noreply.github.com> Date: Tue, 13 Oct 2026 10:31:28 +0800 Subject: [PATCH] fix(sql): stop treating backslash as quote escape in Oracle-like dialects --- crates/dbx-sql-core/src/sql.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/crates/dbx-sql-core/src/sql.rs b/crates/dbx-sql-core/src/sql.rs index 7ec959f0c9..293b227c13 100644 --- a/crates/dbx-sql-core/src/sql.rs +++ b/crates/dbx-sql-core/src/sql.rs @@ -304,6 +304,7 @@ impl SqlDialectProfile { fn oracle_like() -> Self { Self { + supports_backslash_escaped_quotes: false, supports_oracle_plsql_blocks: true, supports_oracle_q_quotes: true, supports_slash_line_block_delimiter: true, @@ -4735,6 +4736,7 @@ SELECT 2;"; ] { let profile = SqlDialectProfile::for_database_type(db_type); assert_eq!(profile, SqlDialectProfile::oracle_like()); + assert!(!profile.supports_backslash_escaped_quotes); assert!(profile.supports_oracle_plsql_blocks); assert!(profile.supports_slash_line_block_delimiter); assert!(!profile.supports_postgres_dollar_quoted_routines); @@ -6026,6 +6028,24 @@ CREATE OR REPLACE VIEW v_users AS SELECT id, name FROM users;"; ); } + #[test] + fn oracle_like_split_does_not_treat_backslash_as_quote_escape() { + let sql = "SELECT TO_CLOB('a\\') || TO_CLOB('n};\\n}') FROM dual;\nSELECT 2 FROM dual;"; + for db_type in [ + DatabaseType::OceanbaseOracle, + DatabaseType::Oracle, + DatabaseType::Dameng, + DatabaseType::Yashandb, + DatabaseType::Oscar, + ] { + assert_eq!( + split_sql_statements_for_database(sql, db_type), + vec!["SELECT TO_CLOB('a\\') || TO_CLOB('n};\\n}') FROM dual", "SELECT 2 FROM dual"], + "{db_type:?}" + ); + } + } + #[test] fn finds_statement_at_cursor() { let sql = "SELECT 1; SELECT 2";