mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
bug fixed.
This commit is contained in:
@@ -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=?")); //
|
||||
}
|
||||
}
|
||||
|
||||
+34
-56
@@ -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")));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user