diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java index be8636405f..9f9d69cb8c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java @@ -203,7 +203,10 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis println(); } - printAndAccept(x.getItems(), " "); + for (int i = 0, size = x.getItems().size(); i < size; ++i) { + println(); + x.getItems().get(i).accept(this); + } if (x.getElseExpr() != null) { println(); @@ -211,9 +214,10 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis x.getElseExpr().accept(this); } + decrementIndent(); println(); print("END"); - decrementIndent(); + return false; } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCaseWhenTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCaseWhenTest.java new file mode 100644 index 0000000000..4c59c0b636 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCaseWhenTest.java @@ -0,0 +1,20 @@ +package com.alibaba.druid.bvt.sql.odps; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; + +import junit.framework.TestCase; + +public class OdpsCaseWhenTest extends TestCase { + + public void test_if() throws Exception { + String sql = "select case when f1 = 'aaa' then 1 when f1 = 'bbb' then 2 else 3 end from dual"; + Assert.assertEquals("SELECT CASE " + + "\n\t\tWHEN f1 = 'aaa' THEN 1" + + "\n\t\tWHEN f1 = 'bbb' THEN 2" + + "\n\t\tELSE 3" + + "\n\tEND" + + "\nFROM dual", SQLUtils.formatOdps(sql)); + } +}