diff --git a/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java b/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java index e7bee2b280..98af58aa8e 100644 --- a/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java +++ b/src/main/java/com/alibaba/druid/mock/handler/MySqlMockExecuteHandlerImpl.java @@ -44,7 +44,6 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectQuery; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; import com.alibaba.druid.sql.ast.statement.SQLTableSource; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlBooleanExpr; import com.alibaba.druid.sql.dialect.mysql.ast.statement.CobarShowStatus; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.parser.SQLStatementParser; diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index ac9f9c4091..3eb0d1aad5 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -97,7 +97,14 @@ import com.alibaba.druid.wall.WallProviderStatValue; * @author ljw * @author wenshao */ -public class DruidDataSource extends DruidAbstractDataSource implements DruidDataSourceMBean, ManagedDataSource, Referenceable, Closeable, Cloneable, ConnectionPoolDataSource, MBeanRegistration { +public class DruidDataSource extends DruidAbstractDataSource + implements DruidDataSourceMBean + , ManagedDataSource + , Referenceable + , Closeable + , Cloneable + , ConnectionPoolDataSource + , MBeanRegistration { private final static Log LOG = LogFactory.getLog(DruidDataSource.class); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleTimestampExpr.java b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLTimestampExpr.java similarity index 55% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleTimestampExpr.java rename to src/main/java/com/alibaba/druid/sql/ast/expr/SQLTimestampExpr.java index cb4619232e..eee4ef43c7 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OracleTimestampExpr.java +++ b/src/main/java/com/alibaba/druid/sql/ast/expr/SQLTimestampExpr.java @@ -1,97 +1,93 @@ -/* - * Copyright 1999-2011 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.sql.dialect.oracle.ast.expr; - -import com.alibaba.druid.sql.ast.SQLExprImpl; -import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; -import com.alibaba.druid.sql.visitor.SQLASTVisitor; - -public class OracleTimestampExpr extends SQLExprImpl implements SQLLiteralExpr, OracleExpr { - - private String literal; - private String timeZone; - - public OracleTimestampExpr(){ - - } - - public String getLiteral() { - return literal; - } - - public void setLiteral(String literal) { - this.literal = literal; - } - - public String getTimeZone() { - return this.timeZone; - } - - public void setTimeZone(String timeZone) { - this.timeZone = timeZone; - } - - @Override - protected void accept0(SQLASTVisitor visitor) { - this.accept0((OracleASTVisitor) visitor); - } - - public void accept0(OracleASTVisitor visitor) { - visitor.visit(this); - - visitor.endVisit(this); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((literal == null) ? 0 : literal.hashCode()); - result = prime * result + ((timeZone == null) ? 0 : timeZone.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - OracleTimestampExpr other = (OracleTimestampExpr) obj; - if (literal == null) { - if (other.literal != null) { - return false; - } - } else if (!literal.equals(other.literal)) { - return false; - } - if (timeZone == null) { - if (other.timeZone != null) { - return false; - } - } else if (!timeZone.equals(other.timeZone)) { - return false; - } - return true; - } - -} +package com.alibaba.druid.sql.ast.expr; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLExprImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +public class SQLTimestampExpr extends SQLExprImpl { + + protected String literal; + protected String timeZone; + protected boolean withTimeZone = false; + + public SQLTimestampExpr(){ + + } + + public String getLiteral() { + return literal; + } + + public void setLiteral(String literal) { + this.literal = literal; + } + + public String getTimeZone() { + return this.timeZone; + } + + public void setTimeZone(String timeZone) { + this.timeZone = timeZone; + } + + public boolean isWithTimeZone() { + return withTimeZone; + } + + public void setWithTimeZone(boolean withTimeZone) { + this.withTimeZone = withTimeZone; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((literal == null) ? 0 : literal.hashCode()); + result = prime * result + ((timeZone == null) ? 0 : timeZone.hashCode()); + result = prime * result + (withTimeZone ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + SQLTimestampExpr other = (SQLTimestampExpr) obj; + if (literal == null) { + if (other.literal != null) { + return false; + } + } else if (!literal.equals(other.literal)) { + return false; + } + if (timeZone == null) { + if (other.timeZone != null) { + return false; + } + } else if (!timeZone.equals(other.timeZone)) { + return false; + } + if (withTimeZone != other.withTimeZone) { + return false; + } + return true; + } + + @Override + protected void accept0(SQLASTVisitor visitor) { + visitor.visit(this); + + visitor.endVisit(this); + } + + public String toString() { + return SQLUtils.toSQLString(this, null); + } +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java index 5727b4d7cf..601926b61d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java @@ -33,6 +33,7 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLNumericLiteralExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; +import com.alibaba.druid.sql.ast.expr.SQLTimestampExpr; import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLUnaryOperator; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; @@ -66,7 +67,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSysdateExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCheck; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraint.Initially; @@ -535,12 +535,13 @@ public class OracleExprParser extends SQLExprParser { return primaryRest(timestamp); } + if ("TIMESTAMP".equalsIgnoreCase(ident)) { if (lexer.token() != Token.LITERAL_ALIAS && lexer.token() != Token.LITERAL_CHARS) { return new SQLIdentifierExpr("TIMESTAMP"); } - OracleTimestampExpr timestamp = new OracleTimestampExpr(); + SQLTimestampExpr timestamp = new SQLTimestampExpr(); String literal = lexer.stringVal(); timestamp.setLiteral(literal); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java index c547e0ddd9..53f367a91f 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java @@ -52,7 +52,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSysdateExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; @@ -162,8 +161,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleSelectUnPivot x); - void endVisit(OracleTimestampExpr x); - void endVisit(OracleUpdateStatement x); boolean visit(OraclePLSQLCommitStatement astNode); @@ -206,8 +203,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(OracleSelectUnPivot x); - boolean visit(OracleTimestampExpr x); - boolean visit(OracleUpdateStatement x); boolean visit(SampleClause x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java index eae3fdcc9c..9868255fd4 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java @@ -60,7 +60,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSysdateExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; @@ -241,11 +240,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public void endVisit(OracleTimestampExpr x) { - - } - @Override public void endVisit(OracleUpdateStatement x) { @@ -371,12 +365,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora return true; } - @Override - public boolean visit(OracleTimestampExpr x) { - - return true; - } - @Override public boolean visit(OracleUpdateStatement x) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index c907013ad6..5c06df2125 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -88,7 +88,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSysdateExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement.Rebuild; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; @@ -740,21 +739,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS return false; } - public boolean visit(OracleTimestampExpr x) { - print("TIMESTAMP '"); - - print(x.getLiteral()); - print('\''); - - if (x.getTimeZone() != null) { - print(" AT TIME ZONE '"); - print(x.getTimeZone()); - print('\''); - } - - return false; - } - public boolean visit(OracleUpdateStatement x) { print("UPDATE "); @@ -906,10 +890,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } - @Override - public void endVisit(OracleTimestampExpr x) { - - } @Override public void endVisit(OracleUpdateStatement x) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java index a6ba5053cd..3e0272d488 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java @@ -83,7 +83,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSysdateExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; @@ -469,11 +468,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public void endVisit(OracleTimestampExpr x) { - - } - @Override public boolean visit(OraclePLSQLCommitStatement astNode) { @@ -638,14 +632,8 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle return true; } - @Override - public boolean visit(OracleTimestampExpr x) { - return true; - } - @Override public boolean visit(SampleClause x) { - return true; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java index 4428ec5776..8caeed2733 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java @@ -17,6 +17,9 @@ package com.alibaba.druid.sql.dialect.postgresql.parser; import com.alibaba.druid.sql.ast.SQLDataType; import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; +import com.alibaba.druid.sql.ast.expr.SQLTimestampExpr; +import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleDateExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.PGOrderBy; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGArrayExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGTypeCastExpr; @@ -88,6 +91,44 @@ public class PGExprParser extends SQLExprParser { return primaryRest(castExpr); } + + if (expr.getClass() == SQLIdentifierExpr.class) { + String ident = ((SQLIdentifierExpr)expr).getName(); + + if ("TIMESTAMP".equalsIgnoreCase(ident)) { + if (lexer.token() != Token.LITERAL_ALIAS // + && lexer.token() != Token.LITERAL_CHARS // + && lexer.token() != Token.WITH) { + return new SQLIdentifierExpr("TIMESTAMP"); + } + + SQLTimestampExpr timestamp = new SQLTimestampExpr(); + + if (lexer.token() == Token.WITH) { + lexer.nextToken(); + acceptIdentifier("TIME"); + acceptIdentifier("ZONE"); + timestamp.setWithTimeZone(true); + } + + String literal = lexer.stringVal(); + timestamp.setLiteral(literal); + accept(Token.LITERAL_CHARS); + + if (identifierEquals("AT")) { + lexer.nextToken(); + acceptIdentifier("TIME"); + acceptIdentifier("ZONE"); + + String timezone = lexer.stringVal(); + timestamp.setTimeZone(timezone); + accept(Token.LITERAL_CHARS); + } + + + return primaryRest(timestamp); + } + } return super.primaryRest(expr); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 0a4a6a8413..c01041003e 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -62,6 +62,7 @@ import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.ast.expr.SQLSomeExpr; +import com.alibaba.druid.sql.ast.expr.SQLTimestampExpr; import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.NotNullConstraint; @@ -2007,4 +2008,24 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab return false; } + @Override + public boolean visit(SQLTimestampExpr x) { + print("TIMESTAMP "); + + if (x.isWithTimeZone()) { + print(" WITH TIME ZONE "); + } + + print('\''); + print(x.getLiteral()); + print('\''); + + if (x.getTimeZone() != null) { + print(" AT TIME ZONE '"); + print(x.getTimeZone()); + print('\''); + } + + return false; + } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java index 321ad9d43a..84006497da 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -47,6 +47,7 @@ import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.ast.expr.SQLSomeExpr; +import com.alibaba.druid.sql.ast.expr.SQLTimestampExpr; import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.NotNullConstraint; @@ -545,4 +546,8 @@ public interface SQLASTVisitor { boolean visit(SQLUnionQueryTableSource x); + void endVisit(SQLTimestampExpr x); + + boolean visit(SQLTimestampExpr x); + } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java index 2c74d0ca1e..ae0dee23cb 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -48,6 +48,7 @@ import com.alibaba.druid.sql.ast.expr.SQLNumberExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.ast.expr.SQLSomeExpr; +import com.alibaba.druid.sql.ast.expr.SQLTimestampExpr; import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.NotNullConstraint; @@ -1064,4 +1065,14 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { return true; } + @Override + public void endVisit(SQLTimestampExpr x) { + + } + + @Override + public boolean visit(SQLTimestampExpr x) { + return true; + } + } diff --git a/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java index b6afa49b10..c968758020 100644 --- a/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java +++ b/src/main/java/com/alibaba/druid/support/monitor/dao/MonitorDaoJdbcImpl.java @@ -600,7 +600,7 @@ public class MonitorDaoJdbcImpl implements MonitorDao { buf.append(field.getColumnName()); } buf.append(")\nVALUES (?, ?, ?, ?, ?, ?"); - for (FieldInfo field : fields) { + for (int i = 0; i < fields.size(); ++i) { buf.append(", ?"); } buf.append(")"); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/EqualTest_OracleTimestampExpr.java b/src/test/java/com/alibaba/druid/bvt/sql/EqualTest_OracleTimestampExpr.java index 0608a82094..e2435f371e 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/EqualTest_OracleTimestampExpr.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/EqualTest_OracleTimestampExpr.java @@ -4,7 +4,7 @@ import junit.framework.TestCase; import org.junit.Assert; -import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; +import com.alibaba.druid.sql.ast.expr.SQLTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.parser.OracleExprParser; public class EqualTest_OracleTimestampExpr extends TestCase { @@ -12,18 +12,18 @@ public class EqualTest_OracleTimestampExpr extends TestCase { public void test_exits() throws Exception { String sql = "TIMESTAMP '' AT TIME ZONE ''"; String sql_c = "TIMESTAMP '' AT TIME ZONE 'a'"; - OracleTimestampExpr exprA, exprB, exprC; + SQLTimestampExpr exprA, exprB, exprC; { OracleExprParser parser = new OracleExprParser(sql); - exprA = (OracleTimestampExpr) parser.expr(); + exprA = (SQLTimestampExpr) parser.expr(); } { OracleExprParser parser = new OracleExprParser(sql); - exprB = (OracleTimestampExpr) parser.expr(); + exprB = (SQLTimestampExpr) parser.expr(); } { OracleExprParser parser = new OracleExprParser(sql_c); - exprC = (OracleTimestampExpr) parser.expr(); + exprC = (SQLTimestampExpr) parser.expr(); } Assert.assertEquals(exprA, exprB); Assert.assertNotEquals(exprA, exprC); @@ -31,7 +31,7 @@ public class EqualTest_OracleTimestampExpr extends TestCase { Assert.assertFalse(exprA.equals(new Object())); Assert.assertEquals(exprA.hashCode(), exprB.hashCode()); - Assert.assertEquals(new OracleTimestampExpr(), new OracleTimestampExpr()); - Assert.assertEquals(new OracleTimestampExpr().hashCode(), new OracleTimestampExpr().hashCode()); + Assert.assertEquals(new SQLTimestampExpr(), new SQLTimestampExpr()); + Assert.assertEquals(new SQLTimestampExpr().hashCode(), new SQLTimestampExpr().hashCode()); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java index 225b23d7a7..e6ea0f41ef 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java @@ -2,6 +2,7 @@ package com.alibaba.druid.bvt.sql.oracle.visitor; import junit.framework.TestCase; +import com.alibaba.druid.sql.ast.expr.SQLTimestampExpr; import com.alibaba.druid.sql.ast.statement.SQLDropSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalDay; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalYear; @@ -44,7 +45,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIntervalExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIsSetExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleRangeExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSizeExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; @@ -125,7 +125,7 @@ public class OracleASTVisitorAdapterTest extends TestCase { new CheckOption().accept(adapter); new ReadOnly().accept(adapter); new OracleSelectUnPivot().accept(adapter); - new OracleTimestampExpr().accept(adapter); + new SQLTimestampExpr().accept(adapter); new PartitionExtensionClause().accept(adapter); new VersionsFlashbackQueryClause().accept(adapter); new VersionsFlashbackQueryClause().accept(adapter); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/datatypes/BooleanTest.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/datatypes/BooleanTest.java new file mode 100644 index 0000000000..d7224c572d --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/datatypes/BooleanTest.java @@ -0,0 +1,42 @@ +package com.alibaba.druid.bvt.sql.postgresql.datatypes; + +import java.util.List; + +import org.junit.Assert; + +import com.alibaba.druid.sql.PGTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + + +public class BooleanTest extends PGTest { + public void test_0() throws Exception { + String sql = "INSERT INTO test1 VALUES (TRUE, 'sic est');"; + + PGSQLStatementParser parser = new PGSQLStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + PGSchemaStatVisitor visitor = new PGSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + + Assert.assertTrue(visitor.getTables().containsKey(new TableStat.Name("test1"))); + + Assert.assertEquals(0, visitor.getColumns().size()); + +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("films", "kind"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("films", "code"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("films", "date_prod"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("films", "title"))); +// Assert.assertTrue(visitor.getColumns().contains(new TableStat.Column("films", "did"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/datatypes/TimestampTest.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/datatypes/TimestampTest.java new file mode 100644 index 0000000000..b7b7f087ea --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/datatypes/TimestampTest.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.bvt.sql.postgresql.datatypes; + +import com.alibaba.druid.sql.PGTest; +import com.alibaba.druid.sql.ast.expr.SQLTimestampExpr; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGExprParser; + + +public class TimestampTest extends PGTest { + public void test_timestamp() throws Exception { + String sql = "TIMESTAMP '2004-10-19 10:23:54+02'"; + PGExprParser parser = new PGExprParser(sql); + SQLTimestampExpr expr = (SQLTimestampExpr) parser.expr(); + System.out.println(expr.toString()); + } + + public void test_timestamp_with_timezone() throws Exception { + String sql = "TIMESTAMP WITH TIME ZONE '2004-10-19 10:23:54+02'"; + PGExprParser parser = new PGExprParser(sql); + SQLTimestampExpr expr = (SQLTimestampExpr) parser.expr(); + System.out.println(expr.toString()); + } +}