fix(sql): split declaration-only Oracle package bodies

Closes #6943
This commit is contained in:
t8y2 committed 2026-08-22 04:37:01 +00:00
1 parent f3d2b6cb01
commit 355f34f3c7
3 files changed
+30 -3

No files matched your search

+20 -2
View File
@@ -2288,8 +2288,10 @@ impl OraclePlSqlBlock {
}
match object_kind {
// Specs complete on outer END [name]; without requiring BEGIN.
Some(OraclePlSqlCreateObjectKind::Spec) => complete,
// Package/type objects complete on their outer END [name]; a package
// body may omit an initialization BEGIN when it has no executable
// initialization section.
Some(OraclePlSqlCreateObjectKind::Body | OraclePlSqlCreateObjectKind::Spec) => complete,
_ => saw_begin && complete,
}
}
@@ -3927,6 +3929,22 @@ SELECT 1;";
);
}
#[test]
fn oracle_like_split_declaration_only_package_body_before_following_dml() {
let package_body = "CREATE OR REPLACE PACKAGE BODY packageName IS\nnull;\nEND packageName;";
assert_eq!(
split_sql_statements_for_database(&format!("{package_body}\nSELECT * FROM goods;"), DatabaseType::Oracle),
vec![package_body, "SELECT * FROM goods"]
);
assert_eq!(
split_sql_statements_for_database(
&format!("{package_body}\n/\nSELECT * FROM goods;"),
DatabaseType::Oracle
),
vec![package_body, "SELECT * FROM goods"]
);
}
#[test]
fn xugu_split_keeps_create_type_body_together() {
let sql = "\