package com.alibaba.druid.bvt.bug; import java.util.List; import org.junit.Assert; import junit.framework.TestCase; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; public class Bug_for_ruiyi extends TestCase { public void test_for_issue() throws Exception { String sql = "insert into icshall_guide(id,gmt_create,gmt_modified,subject,content,cat_id)" + "values (8,now(),now(),\"Why my payment is deducted incorrectly?/ Why my payment is deducted twice?\"," + "\"{\\\"id\\\":1,\\\"title\\\":\\\"Have you contacted your card issuer to double check instead of only checking online?\\\"," + "\\\"type\\\":\\\"START\\\"," + "\\\"currentLevel\\\":1," + "\\\"name\\\":\\\"name1\\\"," + "\\\"values\\\":[{\\\"id\\\":2," + "\\\"title\\\":\\\"Yes\\\"," + "\\\"type\\\":\\\"MIDWAY\\\"," + "\\\"currentLevel\\\":2," + "\\\"value\\\":1," + "\\\"childs\\\":[{\\\"id\\\":3," + "\\\"title\\\":\\\"If it is deducted twice, please contact the online service with the official bank statement.\\\"," + "\\\"type\\\":\\\"END\\\"," + "\\\"currentLevel\\\":3}]}," + "{\\\"id\\\":4," + "\\\"title\\\":\\\"No\\\"," + "\\\"type\\\":\\\"MIDWAY\\\"," + "\\\"currentLevel\\\":2," + "\\\"value\\\":1," + "\\\"childs\\\":[{\\\"id\\\":5," + "\\\"title\\\":\\\"Please contact your card issuer to double confirm.\\\"," + "\\\"type\\\":\\\"END\\\"," + "\\\"currentLevel\\\":3}]}]}\",607)"; String expected = "INSERT INTO icshall_guide (id, gmt_create, gmt_modified, subject, content" + "\n\t, cat_id)" + "\nVALUES (8, now(), now(), 'Why my payment is deducted incorrectly?/ Why my payment is deducted twice?', '{\"id\":1,\"title\":\"Have you contacted your card issuer to double check instead of only checking online?\",\"type\":\"START\",\"currentLevel\":1,\"name\":\"name1\",\"values\":[{\"id\":2,\"title\":\"Yes\",\"type\":\"MIDWAY\",\"currentLevel\":2,\"value\":1,\"childs\":[{\"id\":3,\"title\":\"If it is deducted twice, please contact the online service with the official bank statement.\",\"type\":\"END\",\"currentLevel\":3}]},{\"id\":4,\"title\":\"No\",\"type\":\"MIDWAY\",\"currentLevel\":2,\"value\":1,\"childs\":[{\"id\":5,\"title\":\"Please contact your card issuer to double confirm.\",\"type\":\"END\",\"currentLevel\":3}]}]}'" + "\n\t, 607);\n"; StringBuilder out = new StringBuilder(); MySqlOutputVisitor visitor = new MySqlOutputVisitor(out); MySqlStatementParser parser = new MySqlStatementParser(sql); List<SQLStatement> statementList = parser.parseStatementList(); for (SQLStatement statement : statementList) { statement.accept(visitor); visitor.print(";"); visitor.println(); } //System.out.println(out.toString()); Assert.assertEquals(expected, out.toString()); } }