Skip to content

Commit

Permalink
bug fixed for msyql parser. issue alibaba#1359
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Aug 10, 2016
1 parent c852caa commit b40dda4
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,12 @@ public void scanIdentifier() {
ch = charAt(++pos);

if (!isIdentifierChar(ch)) {
if (ch == '-' && pos < text.length() - 1) {
char next_char = text.charAt(pos + 1);
if (isIdentifierChar(next_char)) {
continue;
}
}
if (last_ch == '-' && charAt(pos-2) != '-') {
ch = last_ch;
bufPos--;
Expand Down Expand Up @@ -419,7 +425,7 @@ public void scanComment() {
}
// identifierFlags['`'] = true;
identifierFlags['_'] = true;
identifierFlags['-'] = true; // mysql
//identifierFlags['-'] = true; // mysql
}

public static boolean isIdentifierChar(char c) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*
* Copyright 1999-2101 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.bvt.sql.mysql;

import com.alibaba.druid.sql.MysqlTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor;
import org.junit.Assert;

import java.util.List;

public class MySqlTruncateTest_1 extends MysqlTest {

public void test_0() throws Exception {
String sql = "truncate table city_list--test";


MySqlStatementParser parser = new MySqlStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement stmt = statementList.get(0);
print(statementList);

Assert.assertEquals(1, statementList.size());

MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
stmt.accept(visitor);

// System.out.println("Tables : " + visitor.getTables());
// System.out.println("fields : " + visitor.getColumns());
// System.out.println("coditions : " + visitor.getConditions());
// System.out.println("orderBy : " + visitor.getOrderByColumns());

Assert.assertEquals(1, visitor.getTables().size());
Assert.assertEquals(0, visitor.getColumns().size());
Assert.assertEquals(0, visitor.getConditions().size());
Assert.assertEquals(0, visitor.getOrderByColumns().size());

{
String output = SQLUtils.toMySqlString(stmt);
Assert.assertEquals("TRUNCATE TABLE city_list", //
output);
}
{
String output = SQLUtils.toMySqlString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION);
Assert.assertEquals("truncate table city_list", //
output);
}
}



}

0 comments on commit b40dda4

Please sign in to comment.