提交 97aa7f9b authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Detect missing WHEN in MERGE USING in Parser

上级 fad1968b
......@@ -1172,7 +1172,7 @@ public class Parser {
command.setOnCondition(condition);
read(")");
if (readIf("WHEN")) {
read("WHEN");
boolean matched = readIf("MATCHED");
if (matched) {
parseWhenMatched(command);
......@@ -1187,7 +1187,6 @@ public class Parser {
parseWhenMatched(command);
}
}
}
setSQL(command, "MERGE", start);
......
......@@ -390,31 +390,21 @@ public class MergeUsing extends Prepared {
query.prepare();
}
int embeddedStatementsCount = 0;
// Prepare each of the sub-commands ready to aid in the MERGE
// collaboration
if (updateCommand != null) {
updateCommand.setSourceTableFilter(sourceTableFilter);
updateCommand.setCondition(appendOnCondition(updateCommand));
updateCommand.prepare();
embeddedStatementsCount++;
}
if (deleteCommand != null) {
deleteCommand.setSourceTableFilter(sourceTableFilter);
deleteCommand.setCondition(appendOnCondition(deleteCommand));
deleteCommand.prepare();
embeddedStatementsCount++;
}
if (insertCommand != null) {
insertCommand.setSourceTableFilter(sourceTableFilter);
insertCommand.prepare();
embeddedStatementsCount++;
}
if (embeddedStatementsCount == 0) {
throw DbException.get(ErrorCode.SYNTAX_ERROR_1,
"At least UPDATE, DELETE or INSERT embedded statement must be supplied.");
}
// setup the targetMatchQuery - for detecting if the target row exists
......
......@@ -161,7 +161,7 @@ public class TestMergeUsing extends TestBase implements Trigger {
GATHER_ORDERED_RESULTS_SQL,
"SELECT X AS ID, 'Marcy'||X AS NAME FROM SYSTEM_RANGE(1,3) WHERE X<0",
0,
"At least UPDATE, DELETE or INSERT embedded statement must be supplied.");
"expected \"WHEN\"");
// Two updates to same row - update and delete together - emptying the
// parent table
testMergeUsing(
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论