add sql parser testcases

This commit is contained in:
高铁
2016-03-12 17:34:38 +08:00
parent 55280f4675
commit 22fc05d39e
15 changed files with 229 additions and 66 deletions
@@ -16,6 +16,27 @@
package com.alibaba.druid.sql.ast.statement;
public enum SQLObjectType {
TABLE, FUNCTION, PROCEDURE, USER, DATABASE, //
ROLE, PROJECT, PACKAGE, RESOURCE, INSTANCE, JOB, VOLUME, OfflineModel, XFLOW // for odps
TABLE("TABLE"), //
FUNCTION("FUNCTION"), //
PROCEDURE("PROCEDURE"), //
USER("USER"), //
DATABASE("DATABASE"), //
ROLE("ROLE"), //
PROJECT("PROJECT"), //
PACKAGE("PACKAGE"), //
RESOURCE("RESOURCE"), //
INSTANCE("INSTANCE"), //
JOB("JOB"), //
VOLUME("VOLUME"), //
OfflineModel("OFFLINEMODEL"), //
XFLOW("XFLOW") // for odps
;
public final String name;
public final String name_lcase;
SQLObjectType(String name) {
this.name = name;
this.name_lcase = name.toLowerCase();
}
}
@@ -98,23 +98,44 @@ public class MysqlForeignKey extends SQLForeignKeyImpl {
RESTRICT("RESTRICT"), CASCADE("CASCADE"), SET_NULL("SET NULL"), NO_ACTION("NO ACTION");
private String text;
public final String name;
public final String name_lcase;
Option(String text){
this.text = text;
Option(String name){
this.name = name;
this.name_lcase = name.toLowerCase();
}
public String getText() {
return text;
return name;
}
}
public static enum Match {
FULL, PARTIAL, SIMPLE;
FULL("FULL"),
PARTIAL("PARTIAL"),
SIMPLE("SIMPLE");
public final String name;
public final String name_lcase;
Match(String name) {
this.name = name;
this.name_lcase = name.toLowerCase();
}
}
public static enum On {
DELETE, UPDATE;
DELETE("DELETE"), //
UPDATE("UPDATE");
public final String name;
public final String name_lcase;
On(String name) {
this.name = name;
this.name_lcase = name.toLowerCase();
}
}
}
@@ -54,6 +54,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.MySqlPrimaryKey;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUnique;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlUseIndexHint;
import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey;
import com.alibaba.druid.sql.dialect.mysql.ast.MysqlForeignKey.Option;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCaseStatement.MySqlWhenStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlCursorDeclareStatement;
@@ -605,7 +606,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
if (x.getIndexType() != null) {
print0(ucase ? " USING " : " using ");
;
print0(x.getIndexType());
}
@@ -2810,17 +2810,20 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
printAndAccept(x.getReferencedColumns(), ", ");
print(')');
if (x.getReferenceMatch() != null) {
MysqlForeignKey.Match match = x.getReferenceMatch();
if (match != null) {
print0(ucase ? " MATCH " : " match ");
print0(x.getReferenceMatch().name());
print0(ucase ? match.name : match.name_lcase);
}
if (x.getReferenceOn() != null) {
MysqlForeignKey.On on = x.getReferenceOn();
if (on != null) {
print0(ucase ? " ON " : " on ");
print0(x.getReferenceOn().name());
print0(ucase ? on.name : on.name_lcase);
print(' ');
if (x.getReferenceOption() != null) {
print0(x.getReferenceOption().getText());
Option option = x.getReferenceOption();
if (option != null) {
print0(ucase ? option.name : option.name_lcase);
}
}
return false;
@@ -2055,8 +2055,9 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
if (x.getOn() != null) {
print0(ucase ? " ON " : " on ");
if (x.getObjectType() != null) {
print0(x.getObjectType().name());
SQLObjectType objectType = x.getObjectType();
if (objectType != null) {
print0(ucase ? objectType.name : objectType.name_lcase);
print(' ');
}