mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
bug fixed for OracleSchemaStatVisitor
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
package com.alibaba.druid.sql.dialect.hive.ast;
|
||||
|
||||
public abstract class HiveStatementImpl extends HiveSQLObjectImpl implements HiveStatement {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
package com.alibaba.druid.sql.dialect.hive.ast.stmt;
|
||||
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
|
||||
import com.alibaba.druid.sql.dialect.hive.ast.HiveStatementImpl;
|
||||
import com.alibaba.druid.sql.dialect.hive.visitor.HiveASTVisitor;
|
||||
|
||||
public class HiveShowTablesStatement extends HiveStatementImpl {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
private SQLCharExpr pattern;
|
||||
|
||||
|
||||
public SQLCharExpr getPattern() {
|
||||
return pattern;
|
||||
}
|
||||
|
||||
public void setPattern(SQLCharExpr pattern) {
|
||||
this.pattern = pattern;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept0(HiveASTVisitor visitor) {
|
||||
if (visitor.visit(this)) {
|
||||
acceptChild(visitor, pattern);
|
||||
}
|
||||
visitor.endVisit(this);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -84,6 +84,8 @@ public class HiveLexer extends Lexer {
|
||||
|
||||
map.put("WITH", Token.WITH);
|
||||
map.put("PARTITIONED", Token.PARTITIONED);
|
||||
map.put("SHOW", Token.SHOW);
|
||||
map.put("TABLES", Token.TABLES);
|
||||
|
||||
DEFAULT_SQL_SERVER_KEYWORDS = new Keywords(map);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,14 @@
|
||||
package com.alibaba.druid.sql.dialect.hive.parser;
|
||||
|
||||
import com.alibaba.druid.sql.parser.Lexer;
|
||||
import com.alibaba.druid.sql.parser.SQLStatementParser;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
|
||||
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveShowTablesStatement;
|
||||
import com.alibaba.druid.sql.parser.Lexer;
|
||||
import com.alibaba.druid.sql.parser.ParserException;
|
||||
import com.alibaba.druid.sql.parser.SQLStatementParser;
|
||||
import com.alibaba.druid.sql.parser.Token;
|
||||
|
||||
public class HiveStatementParser extends SQLStatementParser {
|
||||
|
||||
@@ -19,4 +25,25 @@ public class HiveStatementParser extends SQLStatementParser {
|
||||
return new HiveCreateTableParser(lexer);
|
||||
}
|
||||
|
||||
public boolean parseStatementListDialect(List<SQLStatement> statementList) {
|
||||
if (lexer.token() == Token.SHOW) {
|
||||
lexer.nextToken();
|
||||
|
||||
if (lexer.token() == Token.TABLES) {
|
||||
lexer.nextToken();
|
||||
|
||||
HiveShowTablesStatement stmt = new HiveShowTablesStatement();
|
||||
|
||||
if (lexer.token() == Token.LITERAL_CHARS) {
|
||||
stmt.setPattern((SQLCharExpr) exprParser.primary());
|
||||
}
|
||||
|
||||
statementList.add(stmt);
|
||||
return true;
|
||||
}
|
||||
|
||||
throw new ParserException("TODO " + lexer.token());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
package com.alibaba.druid.sql.dialect.hive.visitor;
|
||||
|
||||
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveCreateTableStatement;
|
||||
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveShowTablesStatement;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
|
||||
|
||||
public interface HiveASTVisitor extends SQLASTVisitor {
|
||||
|
||||
void endVisit(HiveCreateTableStatement x);
|
||||
void endVisit(HiveShowTablesStatement x);
|
||||
|
||||
boolean visit(HiveShowTablesStatement x);
|
||||
|
||||
void endVisit(HiveCreateTableStatement x);
|
||||
|
||||
boolean visit(HiveCreateTableStatement x);
|
||||
|
||||
void endVisit(HiveCreateTableStatement.PartitionedBy x);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.alibaba.druid.sql.dialect.hive.visitor;
|
||||
|
||||
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveCreateTableStatement;
|
||||
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveShowTablesStatement;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTVisitorAdapter;
|
||||
|
||||
public class HiveASTVisitorAdapter extends SQLASTVisitorAdapter implements HiveASTVisitor {
|
||||
@@ -25,4 +26,14 @@ public class HiveASTVisitorAdapter extends SQLASTVisitorAdapter implements HiveA
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(HiveShowTablesStatement x) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(HiveShowTablesStatement x) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.alibaba.druid.sql.dialect.hive.visitor;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
|
||||
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveCreateTableStatement;
|
||||
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveCreateTableStatement.PartitionedBy;
|
||||
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveShowTablesStatement;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
|
||||
|
||||
public class HiveOutputVisitor extends SQLASTOutputVisitor implements HiveASTVisitor {
|
||||
@@ -43,4 +44,19 @@ public class HiveOutputVisitor extends SQLASTOutputVisitor implements HiveASTVis
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(HiveShowTablesStatement x) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(HiveShowTablesStatement x) {
|
||||
print("SHOW TABLES");
|
||||
if (x.getPattern() != null) {
|
||||
print(" ");
|
||||
x.getPattern().accept(this);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.alibaba.druid.sql.dialect.hive.visitor;
|
||||
|
||||
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
|
||||
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveCreateTableStatement;
|
||||
import com.alibaba.druid.sql.dialect.hive.ast.stmt.HiveShowTablesStatement;
|
||||
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
|
||||
|
||||
public class HiveSchemaStatVisitor extends SchemaStatVisitor implements HiveASTVisitor {
|
||||
@@ -25,4 +26,14 @@ public class HiveSchemaStatVisitor extends SchemaStatVisitor implements HiveASTV
|
||||
public boolean visit(HiveCreateTableStatement.PartitionedBy x) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(HiveShowTablesStatement x) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(HiveShowTablesStatement x) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+1
@@ -32,6 +32,7 @@ public class OracleUpdateSetListSingleColumnItem extends OracleUpdateSetListItem
|
||||
public void accept0(OracleASTVisitor visitor) {
|
||||
if (visitor.visit(this)) {
|
||||
acceptChild(visitor, this.column);
|
||||
acceptChild(visitor, this.value);
|
||||
}
|
||||
|
||||
visitor.endVisit(this);
|
||||
|
||||
+46
-2
@@ -9,6 +9,7 @@ import com.alibaba.druid.sql.ast.SQLObject;
|
||||
import com.alibaba.druid.sql.ast.SQLOrderBy;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLObjectCreateExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement;
|
||||
@@ -82,16 +83,50 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateSetValueClause;
|
||||
import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement;
|
||||
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
|
||||
import com.alibaba.druid.stat.TableStat;
|
||||
import com.alibaba.druid.stat.TableStat.Column;
|
||||
import com.alibaba.druid.stat.TableStat.Mode;
|
||||
|
||||
public class OracleSchemaStatVisitor extends SchemaStatVisitor implements OracleASTVisitor {
|
||||
|
||||
protected Column getColumn(SQLExpr expr) {
|
||||
if (expr instanceof OracleOuterExpr) {
|
||||
expr = ((OracleOuterExpr) expr).getExpr();
|
||||
}
|
||||
|
||||
return super.getColumn(expr);
|
||||
}
|
||||
|
||||
public boolean visit(OracleSelectTableReference x) {
|
||||
SQLExpr expr = x.getExpr();
|
||||
|
||||
if (expr instanceof SQLMethodInvokeExpr) {
|
||||
SQLMethodInvokeExpr methodInvoke = (SQLMethodInvokeExpr) expr;
|
||||
if ("TABLE".equalsIgnoreCase(methodInvoke.getMethodName()) && methodInvoke.getParameters().size() == 1) {
|
||||
expr = methodInvoke.getParameters().get(0);
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, String> aliasMap = aliasLocal.get();
|
||||
|
||||
if (expr instanceof SQLName) {
|
||||
String ident = ((SQLName) expr).toString();
|
||||
String ident;
|
||||
if (expr instanceof SQLPropertyExpr) {
|
||||
String owner = ((SQLPropertyExpr) expr).getOwner().toString();
|
||||
String name = ((SQLPropertyExpr) expr).getName();
|
||||
|
||||
if (aliasMap.containsKey(owner)) {
|
||||
owner = aliasMap.get(owner);
|
||||
}
|
||||
ident = owner + "." + name;
|
||||
} else {
|
||||
ident = expr.toString();
|
||||
}
|
||||
|
||||
if ("DUAL".equalsIgnoreCase(ident)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Map<String, String> aliasMap = aliasLocal.get();
|
||||
|
||||
|
||||
if (aliasMap.containsKey(ident) && aliasMap.get(ident) == null) {
|
||||
return false;
|
||||
@@ -228,6 +263,11 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle
|
||||
|
||||
return super.visit(x);
|
||||
}
|
||||
|
||||
public boolean visit(SQLMethodInvokeExpr x) {
|
||||
accept(x.getParameters());
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean visit(SQLIdentifierExpr x) {
|
||||
if ("ROWNUM".equalsIgnoreCase(x.getName())) {
|
||||
@@ -241,6 +281,10 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle
|
||||
if ("+".equalsIgnoreCase(x.getName())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ("LEVEL".equals(x.getName())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return super.visit(x);
|
||||
}
|
||||
|
||||
@@ -157,6 +157,8 @@ public enum Token {
|
||||
|
||||
// hive
|
||||
PARTITIONED("PARTITIONED"),
|
||||
SHOW("SHOW"),
|
||||
TABLES("TABLES"),
|
||||
|
||||
EOF,
|
||||
ERROR,
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
package com.alibaba.druid.bvt.sql.hive;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.dialect.hive.parser.HiveStatementParser;
|
||||
import com.alibaba.druid.sql.dialect.hive.visitor.HiveSchemaStatVisitor;
|
||||
import com.alibaba.druid.sql.hive.HiveTest;
|
||||
import com.alibaba.druid.stat.TableStat;
|
||||
|
||||
public class HiveShowTableTest extends HiveTest {
|
||||
|
||||
public void test_hive() throws Exception {
|
||||
String sql = "SHOW TABLES";
|
||||
|
||||
HiveStatementParser parser = new HiveStatementParser(sql);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
SQLStatement statemen = statementList.get(0);
|
||||
System.out.println(output(statementList));
|
||||
|
||||
Assert.assertEquals(1, statementList.size());
|
||||
|
||||
HiveSchemaStatVisitor visitor = new HiveSchemaStatVisitor();
|
||||
statemen.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());
|
||||
|
||||
// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("invites")));
|
||||
|
||||
Assert.assertEquals(0, visitor.getColumns().size());
|
||||
|
||||
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("invites", "foo")));
|
||||
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("invites", "bar")));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.alibaba.druid.bvt.sql.hive;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.dialect.hive.parser.HiveStatementParser;
|
||||
import com.alibaba.druid.sql.dialect.hive.visitor.HiveSchemaStatVisitor;
|
||||
import com.alibaba.druid.sql.hive.HiveTest;
|
||||
|
||||
public class HiveShowTableTest2 extends HiveTest {
|
||||
|
||||
public void test_hive() throws Exception {
|
||||
String sql = "SHOW TABLES '.*s';";
|
||||
|
||||
HiveStatementParser parser = new HiveStatementParser(sql);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
SQLStatement statemen = statementList.get(0);
|
||||
System.out.println(output(statementList));
|
||||
|
||||
Assert.assertEquals(1, statementList.size());
|
||||
|
||||
HiveSchemaStatVisitor visitor = new HiveSchemaStatVisitor();
|
||||
statemen.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());
|
||||
|
||||
// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("invites")));
|
||||
|
||||
Assert.assertEquals(0, visitor.getColumns().size());
|
||||
|
||||
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("invites", "foo")));
|
||||
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("invites", "bar")));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.alibaba.druid.bvt.sql.oracle;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import com.alibaba.druid.sql.OracleTest;
|
||||
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.stat.TableStat;
|
||||
|
||||
public class OracleSelectTest1 extends OracleTest {
|
||||
|
||||
public void test_0() throws Exception {
|
||||
String sql = "SELECT employees_seq.currval FROM DUAL; ";
|
||||
|
||||
OracleStatementParser parser = new OracleStatementParser(sql);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
SQLStatement statemen = statementList.get(0);
|
||||
System.out.println(output(statementList));
|
||||
|
||||
Assert.assertEquals(1, statementList.size());
|
||||
|
||||
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
|
||||
statemen.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());
|
||||
|
||||
// Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("orders")));
|
||||
|
||||
Assert.assertEquals(0, visitor.getTables().size());
|
||||
Assert.assertEquals(0, visitor.getColumns().size());
|
||||
|
||||
// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("bonuses", "employee_id")));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.alibaba.druid.bvt.sql.oracle;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import com.alibaba.druid.sql.OracleTest;
|
||||
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.stat.TableStat;
|
||||
|
||||
public class OracleSelectTest3 extends OracleTest {
|
||||
|
||||
public void test_0() throws Exception {
|
||||
String sql = "SELECT department_id, last_name, salary " + //
|
||||
" FROM employees x " + //
|
||||
" WHERE salary > (SELECT AVG(salary) " + //
|
||||
" FROM employees " + //
|
||||
" WHERE x.department_id = department_id) " + //
|
||||
" ORDER BY department_id; ";
|
||||
|
||||
OracleStatementParser parser = new OracleStatementParser(sql);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
SQLStatement statemen = statementList.get(0);
|
||||
System.out.println(output(statementList));
|
||||
|
||||
Assert.assertEquals(1, statementList.size());
|
||||
|
||||
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
|
||||
statemen.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());
|
||||
|
||||
Assert.assertEquals(1, visitor.getTables().size());
|
||||
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
|
||||
|
||||
Assert.assertEquals(3, visitor.getColumns().size());
|
||||
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "last_name")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary")));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.alibaba.druid.bvt.sql.oracle;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import com.alibaba.druid.sql.OracleTest;
|
||||
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.stat.TableStat;
|
||||
|
||||
public class OracleSelectTest4 extends OracleTest {
|
||||
|
||||
public void test_0() throws Exception {
|
||||
String sql = "SELECT LPAD(' ',2*(LEVEL-1)) || last_name org_chart, " + //
|
||||
"employee_id, manager_id, job_id " + //
|
||||
" FROM employees" + //
|
||||
" START WITH job_id = 'AD_PRES' " + //
|
||||
" CONNECT BY PRIOR employee_id = manager_id AND LEVEL <= 2;";
|
||||
|
||||
OracleStatementParser parser = new OracleStatementParser(sql);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
SQLStatement statemen = statementList.get(0);
|
||||
System.out.println(output(statementList));
|
||||
|
||||
Assert.assertEquals(1, statementList.size());
|
||||
|
||||
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
|
||||
statemen.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());
|
||||
|
||||
Assert.assertEquals(1, visitor.getTables().size());
|
||||
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
|
||||
|
||||
Assert.assertEquals(4, visitor.getColumns().size());
|
||||
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "job_id")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "last_name")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "employee_id")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "manager_id")));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.alibaba.druid.bvt.sql.oracle;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import com.alibaba.druid.sql.OracleTest;
|
||||
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.stat.TableStat;
|
||||
|
||||
public class OracleSelectTest5 extends OracleTest {
|
||||
|
||||
public void test_0() throws Exception {
|
||||
String sql = "SELECT t1.department_id, t2.* FROM hr_info t1, TABLE(t1.people) t2" + //
|
||||
" WHERE t2.department_id = t1.department_id;";
|
||||
|
||||
OracleStatementParser parser = new OracleStatementParser(sql);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
SQLStatement statemen = statementList.get(0);
|
||||
System.out.println(output(statementList));
|
||||
|
||||
Assert.assertEquals(1, statementList.size());
|
||||
|
||||
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
|
||||
statemen.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());
|
||||
|
||||
Assert.assertEquals(2, visitor.getTables().size());
|
||||
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("hr_info")));
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("hr_info.people")));
|
||||
|
||||
Assert.assertEquals(3, visitor.getColumns().size());
|
||||
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("hr_info", "department_id")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("hr_info.people", "*")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("hr_info.people", "department_id")));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.alibaba.druid.bvt.sql.oracle;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import com.alibaba.druid.sql.OracleTest;
|
||||
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.stat.TableStat;
|
||||
|
||||
public class OracleSelectTest6 extends OracleTest {
|
||||
|
||||
public void test_0() throws Exception {
|
||||
String sql = "SELECT * FROM departments " + //
|
||||
" WHERE EXISTS " + //
|
||||
" (SELECT * FROM employees " + //
|
||||
" WHERE departments.department_id = employees.department_id " + //
|
||||
" AND employees.salary > 2500)" + //
|
||||
" ORDER BY department_name; ";
|
||||
|
||||
OracleStatementParser parser = new OracleStatementParser(sql);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
SQLStatement statemen = statementList.get(0);
|
||||
System.out.println(output(statementList));
|
||||
|
||||
Assert.assertEquals(1, statementList.size());
|
||||
|
||||
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
|
||||
statemen.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());
|
||||
|
||||
Assert.assertEquals(2, visitor.getTables().size());
|
||||
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments")));
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
|
||||
|
||||
Assert.assertEquals(6, visitor.getColumns().size());
|
||||
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "*")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_name")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "*")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "salary")));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.alibaba.druid.bvt.sql.oracle;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import com.alibaba.druid.sql.OracleTest;
|
||||
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.stat.TableStat;
|
||||
|
||||
public class OracleSelectTest7 extends OracleTest {
|
||||
|
||||
public void test_0() throws Exception {
|
||||
String sql = "SELECT * FROM employees " + //
|
||||
" WHERE department_id NOT IN " + //
|
||||
" (SELECT department_id FROM departments " + //
|
||||
" WHERE location_id = 1700)" + //
|
||||
" ORDER BY last_name;";
|
||||
|
||||
OracleStatementParser parser = new OracleStatementParser(sql);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
SQLStatement statemen = statementList.get(0);
|
||||
System.out.println(output(statementList));
|
||||
|
||||
Assert.assertEquals(1, statementList.size());
|
||||
|
||||
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
|
||||
statemen.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());
|
||||
|
||||
Assert.assertEquals(2, visitor.getTables().size());
|
||||
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments")));
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
|
||||
|
||||
Assert.assertEquals(5, visitor.getColumns().size());
|
||||
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "last_name")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "location_id")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "*")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id")));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.alibaba.druid.bvt.sql.oracle;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import com.alibaba.druid.sql.OracleTest;
|
||||
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.stat.TableStat;
|
||||
|
||||
public class OracleSelectTest8 extends OracleTest {
|
||||
|
||||
public void test_0() throws Exception {
|
||||
String sql = "SELECT d.department_id, e.last_name" + //
|
||||
" FROM departments d, employees e" + //
|
||||
" WHERE d.department_id = e.department_id(+)" + //
|
||||
" ORDER BY d.department_id, e.last_name;";
|
||||
|
||||
OracleStatementParser parser = new OracleStatementParser(sql);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
SQLStatement statemen = statementList.get(0);
|
||||
System.out.println(output(statementList));
|
||||
|
||||
Assert.assertEquals(1, statementList.size());
|
||||
|
||||
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
|
||||
statemen.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());
|
||||
|
||||
Assert.assertEquals(2, visitor.getTables().size());
|
||||
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("departments")));
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("employees")));
|
||||
|
||||
Assert.assertEquals(3, visitor.getColumns().size());
|
||||
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("departments", "department_id")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "department_id")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("employees", "last_name")));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.alibaba.druid.bvt.sql.oracle;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
import com.alibaba.druid.sql.OracleTest;
|
||||
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.stat.TableStat;
|
||||
|
||||
public class OracleUpdateTest1 extends OracleTest {
|
||||
|
||||
public void test_0() throws Exception {
|
||||
String sql = "UPDATE table1 t_alias1 " + //
|
||||
" SET column = " + //
|
||||
" (SELECT expr " + //
|
||||
" FROM table2 t_alias2 " + //
|
||||
" WHERE t_alias1.column = t_alias2.column); ";
|
||||
|
||||
OracleStatementParser parser = new OracleStatementParser(sql);
|
||||
List<SQLStatement> statementList = parser.parseStatementList();
|
||||
SQLStatement statemen = statementList.get(0);
|
||||
System.out.println(output(statementList));
|
||||
|
||||
Assert.assertEquals(1, statementList.size());
|
||||
|
||||
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
|
||||
statemen.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());
|
||||
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("table1")));
|
||||
Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("table2")));
|
||||
|
||||
Assert.assertEquals(2, visitor.getTables().size());
|
||||
Assert.assertEquals(3, visitor.getColumns().size());
|
||||
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table1", "column")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table2", "expr")));
|
||||
Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("table2", "column")));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user