bug fixed.

This commit is contained in:
wenshao
2017-06-14 11:30:19 +08:00
parent a47342eb3b
commit 2c978ff758
4 changed files with 54 additions and 66 deletions
@@ -692,12 +692,17 @@ public class MySqlExprParser extends SQLExprParser {
if ("NAMES".equalsIgnoreCase(ident)) {
String charset = lexer.stringVal();
SQLExpr varExpr = null;
boolean chars = false;
final Token token = lexer.token();
if (lexer.token() == Token.IDENTIFIER) {
lexer.nextToken();
} else if (lexer.token() == Token.DEFAULT) {
charset = "DEFAULT";
lexer.nextToken();
} else if (lexer.token() == Token.QUES) {
varExpr = new SQLVariantRefExpr("?");
lexer.nextToken();
} else {
chars = true;
accept(Token.LITERAL_CHARS);
@@ -713,10 +718,14 @@ public class MySqlExprParser extends SQLExprParser {
item.setValue(charsetExpr);
} else {
item.setValue(chars
? new SQLCharExpr(charset)
: new SQLIdentifierExpr(charset)
);
if (varExpr != null) {
item.setValue(varExpr);
} else {
item.setValue(chars
? new SQLCharExpr(charset)
: new SQLIdentifierExpr(charset)
);
}
}
item.setTarget(var);
@@ -16,11 +16,10 @@ public class Bug_for_qianbi extends TestCase {
String sql = "insert into table lol select detail(sellerid,id) as count1,sum(sellerid) as sum1 from ctu_trade_paid_done.time('natural','1d','1h') "
+ "where match(auctionTitle,\"男鞋\\n中石化&加油卡\\n中石化&充值卡\\n中石化&冲值卡\\n中石化&代冲\\n中石化&代充\\n中国石化&加油卡\\n中国石化&充值卡\\n中国石化&冲值卡\\n中国石化&代冲\\n中国石化&代充\",\"\\n\")";
String expected = "INSERT INTO TABLE lol"
+ "\nSELECT detail(sellerid, id) AS count1"
+ "\n\t, SUM(sellerid) AS sum1"
+ "\nFROM ctu_trade_paid_done:time('natural', '1d', '1h')"
+ "\nWHERE match(auctionTitle, '男鞋\\n中石化&加油卡\\n中石化&充值卡\\n中石化&冲值卡\\n中石化&代冲\\n中石化&代充\\n中国石化&加油卡\\n中国石化&充值卡\\n中国石化&冲值卡\\n中国石化&代冲\\n中国石化&代充', '\\n');\n";
String expected = "INSERT INTO TABLE lol\n" +
"SELECT detail(sellerid, id) AS count1, SUM(sellerid) AS sum1\n" +
"FROM ctu_trade_paid_done:time('natural', '1d', '1h')\n" +
"WHERE match(auctionTitle, '男鞋\\n中石化&加油卡\\n中石化&充值卡\\n中石化&冲值卡\\n中石化&代冲\\n中石化&代充\\n中国石化&加油卡\\n中国石化&充值卡\\n中国石化&冲值卡\\n中国石化&代冲\\n中国石化&代充', '\\n');\n";
StringBuilder out = new StringBuilder();
OdpsOutputVisitor visitor = new OdpsOutputVisitor(out);
@@ -15,6 +15,8 @@
*/
package com.alibaba.druid.bvt.filter.wall.mysql;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.util.JdbcConstants;
import junit.framework.TestCase;
import org.junit.Assert;
@@ -31,7 +33,7 @@ import com.alibaba.druid.wall.WallUtils;
public class MySqlWallTest20 extends TestCase {
public void test_true() throws Exception {
Assert.assertTrue(WallUtils.isValidateMySql(//
assertTrue(WallUtils.isValidateMySql(//
"SET sql_mode=?,NAMES ?,CHARACTER SET utf8,CHARACTER_SET_RESULTS=utf8,COLLATION_CONNECTION=?")); //
}
}
@@ -18,76 +18,54 @@ package com.alibaba.druid.bvt.sql.oracle.create;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
import com.alibaba.druid.util.JdbcConstants;
import org.junit.Assert;
import java.util.List;
public class OracleCreateTableTest68 extends OracleTest {
public class OracleCreateTableTest69 extends OracleTest {
public void test_types() throws Exception {
String sql = //
" CREATE TABLE \"JWGZPT\".\"A\" \n" +
" ( \"XM\" VARCHAR2(100), \n" +
" \"SFZH\" VARCHAR2(20), \n" +
" \"GZDW\" VARCHAR2(200)\n" +
" ) SEGMENT CREATION IMMEDIATE \n" +
" PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 \n" +
" NOCOMPRESS LOGGING\n" +
" STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645\n" +
" PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1\n" +
" BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)\n" +
" TABLESPACE \"TBS_JWGZPT\" ";
" CREATE TABLE HASH_TABLE\n" +
"(\n" +
"COL NUMBER(8),\n" +
"INF VARCHAR2(100)\n" +
")\n" +
"PARTITION BY HASH (COL)\n" +
"(\n" +
"PARTITION PART01 TABLESPACE HASH_TS01,\n" +
"PARTITION PART02 TABLESPACE HASH_TS02,\n" +
"PARTITION PART03 TABLESPACE HASH_TS03\n" +
") ";
List<SQLStatement> statementList = SQLUtils.parseStatements(sql, JdbcConstants.ORACLE);
SQLStatement stmt = statementList.get(0);
print(statementList);
assertEquals(1, statementList.size());
assertEquals("CREATE TABLE \"JWGZPT\".\"A\" (\n" +
"\t\"XM\" VARCHAR2(100),\n" +
"\t\"SFZH\" VARCHAR2(20),\n" +
"\t\"GZDW\" VARCHAR2(200)\n" +
")\n" +
"PCTFREE 10\n" +
"PCTUSED 40\n" +
"INITRANS 1\n" +
"MAXTRANS 255\n" +
"NOCOMPRESS\n" +
"LOGGING\n" +
"TABLESPACE \"TBS_JWGZPT\"\n" +
"STORAGE (\n" +
"\tINITIAL 81920\n" +
"\tNEXT 1048576\n" +
"\tMINEXTENTS 1\n" +
"\tMAXEXTENTS 2147483645\n" +
"\tPCTINCREASE 0\n" +
"\tFREELISTS 1\n" +
"\tFREELIST GROUPS 1\n" +
"\tBUFFER_POOL DEFAULT\n" +
"\tFLASH_CACHE DEFAULT\n" +
"\tCELL_FLASH_CACHE DEFAULT\n" +
")",//
SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.ORACLE);
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
System.out.println("coditions : " + visitor.getConditions());
System.out.println("relationships : " + visitor.getRelationships());
System.out.println("orderBy : " + visitor.getOrderByColumns());
assertEquals(1, visitor.getTables().size());
assertEquals(3, visitor.getColumns().size());
assertTrue(visitor.getColumns().contains(new TableStat.Column("JWGZPT.A", "XM")));
//
// assertEquals("CREATE TABLE HASH_TABLE (\n" +
// "\tCOL NUMBER(8),\n" +
// "\tINF VARCHAR2(100)\n" +
// ")\n" +
// "PARTITION BY HASH (COL)",//
// SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE));
//
// SchemaStatVisitor visitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.ORACLE);
// stmt.accept(visitor);
//
// System.out.println("Tables : " + visitor.getTables());
// System.out.println("fields : " + visitor.getColumns());
// System.out.println("coditions : " + visitor.getConditions());
// System.out.println("relationships : " + visitor.getRelationships());
// System.out.println("orderBy : " + visitor.getOrderByColumns());
//
// assertEquals(1, visitor.getTables().size());
//
// assertEquals(3, visitor.getColumns().size());
//
// assertTrue(visitor.getColumns().contains(new TableStat.Column("JWGZPT.A", "XM")));
}
}