mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-19 16:16:45 +00:00
fix(sql): stop treating backslash as quote escape in Oracle-like dialects
This commit is contained in:
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user