提交 3be3144d 编写于 作者: S ShadelessFox

#5467 Add test case for #2590

上级 82910195
......@@ -151,10 +151,8 @@ public class SQLScriptParser
// that block is not preceded by the prefix e.g 'AS', because in many dialects
// there's no direct header block terminators
// like 'BEGIN ... END' but 'DECLARE ... BEGIN ... END'
if (curBlock != null && curBlock.isHeader) {
if (prevNotEmptyTokenType != SQLTokenType.T_KEYWORD || !ArrayUtils.contains(dialect.getInnerBlockPrefixes(), lastKeyword)) {
curBlock = curBlock.parent;
}
if (curBlock != null && curBlock.isHeader && !ArrayUtils.contains(dialect.getInnerBlockPrefixes(), lastKeyword)) {
curBlock = curBlock.parent;
}
curBlock = new ScriptBlockInfo(curBlock, false);
hasBlocks = true;
......
......@@ -246,6 +246,42 @@ public class SQLScriptParserTest {
" DBMS_OUTPUT.PUT_LINE(rec2.name);\n" +
"END;"
});
assertParse(ORACLE_DIALECT,
"DECLARE\n" +
" test_v NUMBER:=0;\n" +
" FUNCTION test_f(value_in_v IN number)\n" +
" RETURN\n" +
" varchar2\n" +
" IS\n" +
" value_char_out VARCHAR2(10);\n" +
" BEGIN\n" +
" SELECT to_char(value_in_v) INTO value_char_out FROM dual;\n" +
" RETURN value_char_out;\n" +
" END; \n" +
"BEGIN\n" +
" dbms_output.put_line('Start');\n" +
" dbms_output.put_line(test_v||chr(9)||test_f(test_v));\n" +
" dbms_output.put_line('End');\n" +
"END;",
new String[]{
"DECLARE\n" +
" test_v NUMBER:=0;\n" +
" FUNCTION test_f(value_in_v IN number)\n" +
" RETURN\n" +
" varchar2\n" +
" IS\n" +
" value_char_out VARCHAR2(10);\n" +
" BEGIN\n" +
" SELECT to_char(value_in_v) INTO value_char_out FROM dual;\n" +
" RETURN value_char_out;\n" +
" END; \n" +
"BEGIN\n" +
" dbms_output.put_line('Start');\n" +
" dbms_output.put_line(test_v||chr(9)||test_f(test_v));\n" +
" dbms_output.put_line('End');\n" +
"END;"
});
}
private void assertParse(SQLDialect dialect, String query, String[] expected) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册