From 39bb9e2d7fdecd30c3adabf2c503410c0132006a Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 16 Nov 2014 17:43:03 +0800 Subject: [PATCH] improved sql parser for postgresql --- .../postgresql/ast/expr/PGCidrExpr.java | 56 +++++++++++++ .../postgresql/ast/expr/PGCircleExpr.java | 56 +++++++++++++ .../postgresql/ast/expr/PGInetExpr.java | 56 +++++++++++++ .../ast/expr/PGLineSegmentsExpr.java | 56 +++++++++++++ .../postgresql/ast/expr/PGMacAddrExpr.java | 58 ++++++++++++++ .../postgresql/ast/expr/PGPolygonExpr.java | 58 ++++++++++++++ .../postgresql/parser/PGExprParser.java | 37 ++++++++- .../postgresql/visitor/PGASTVisitor.java | 30 +++++++ .../visitor/PGASTVisitorAdapter.java | 66 ++++++++++++++++ .../postgresql/visitor/PGOutputVisitor.java | 78 +++++++++++++++++++ .../visitor/PGSchemaStatVisitor.java | 66 ++++++++++++++++ .../bvt/sql/postgresql/expr/CidrTest.java | 20 +++++ .../bvt/sql/postgresql/expr/CircleTest.java | 20 +++++ .../bvt/sql/postgresql/expr/InetTest.java | 20 +++++ .../sql/postgresql/expr/LineSegmentsTest.java | 22 ++++++ .../bvt/sql/postgresql/expr/MacAddrTest.java | 22 ++++++ .../bvt/sql/postgresql/expr/PolygonTest2.java | 20 +++++ 17 files changed, 740 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGCidrExpr.java create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGCircleExpr.java create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGInetExpr.java create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGLineSegmentsExpr.java create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGMacAddrExpr.java create mode 100644 src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGPolygonExpr.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/CidrTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/CircleTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/InetTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/LineSegmentsTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/MacAddrTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/PolygonTest2.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGCidrExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGCidrExpr.java new file mode 100644 index 0000000000..65a7410462 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGCidrExpr.java @@ -0,0 +1,56 @@ +package com.alibaba.druid.sql.dialect.postgresql.ast.expr; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; + +public class PGCidrExpr extends PGExprImpl { + + private SQLExpr value; + + public SQLExpr getValue() { + return value; + } + + public void setValue(SQLExpr value) { + this.value = value; + } + + @Override + public void accept0(PGASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, value); + } + visitor.endVisit(this); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((value == null) ? 0 : value.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; + } + PGCidrExpr other = (PGCidrExpr) obj; + if (value == null) { + if (other.value != null) { + return false; + } + } else if (!value.equals(other.value)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGCircleExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGCircleExpr.java new file mode 100644 index 0000000000..650d2e86a0 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGCircleExpr.java @@ -0,0 +1,56 @@ +package com.alibaba.druid.sql.dialect.postgresql.ast.expr; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; + +public class PGCircleExpr extends PGExprImpl { + + private SQLExpr value; + + public SQLExpr getValue() { + return value; + } + + public void setValue(SQLExpr value) { + this.value = value; + } + + @Override + public void accept0(PGASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, value); + } + visitor.endVisit(this); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((value == null) ? 0 : value.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; + } + PGCircleExpr other = (PGCircleExpr) obj; + if (value == null) { + if (other.value != null) { + return false; + } + } else if (!value.equals(other.value)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGInetExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGInetExpr.java new file mode 100644 index 0000000000..1d3d3c0c60 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGInetExpr.java @@ -0,0 +1,56 @@ +package com.alibaba.druid.sql.dialect.postgresql.ast.expr; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; + +public class PGInetExpr extends PGExprImpl { + + private SQLExpr value; + + public SQLExpr getValue() { + return value; + } + + public void setValue(SQLExpr value) { + this.value = value; + } + + @Override + public void accept0(PGASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, value); + } + visitor.endVisit(this); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((value == null) ? 0 : value.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; + } + PGInetExpr other = (PGInetExpr) obj; + if (value == null) { + if (other.value != null) { + return false; + } + } else if (!value.equals(other.value)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGLineSegmentsExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGLineSegmentsExpr.java new file mode 100644 index 0000000000..6b60587335 --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGLineSegmentsExpr.java @@ -0,0 +1,56 @@ +package com.alibaba.druid.sql.dialect.postgresql.ast.expr; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; + +public class PGLineSegmentsExpr extends PGExprImpl { + + private SQLExpr value; + + public SQLExpr getValue() { + return value; + } + + public void setValue(SQLExpr value) { + this.value = value; + } + + @Override + public void accept0(PGASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, value); + } + visitor.endVisit(this); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((value == null) ? 0 : value.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; + } + PGLineSegmentsExpr other = (PGLineSegmentsExpr) obj; + if (value == null) { + if (other.value != null) { + return false; + } + } else if (!value.equals(other.value)) { + return false; + } + return true; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGMacAddrExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGMacAddrExpr.java new file mode 100644 index 0000000000..2f128d3f2e --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGMacAddrExpr.java @@ -0,0 +1,58 @@ +package com.alibaba.druid.sql.dialect.postgresql.ast.expr; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; + + +public class PGMacAddrExpr extends PGExprImpl { + + private SQLExpr value; + + public SQLExpr getValue() { + return value; + } + + public void setValue(SQLExpr value) { + this.value = value; + } + + @Override + public void accept0(PGASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, value); + } + visitor.endVisit(this); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((value == null) ? 0 : value.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; + } + PGMacAddrExpr other = (PGMacAddrExpr) obj; + if (value == null) { + if (other.value != null) { + return false; + } + } else if (!value.equals(other.value)) { + return false; + } + return true; + } + +} + diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGPolygonExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGPolygonExpr.java new file mode 100644 index 0000000000..d63d33044e --- /dev/null +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/expr/PGPolygonExpr.java @@ -0,0 +1,58 @@ +package com.alibaba.druid.sql.dialect.postgresql.ast.expr; + +import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; + + +public class PGPolygonExpr extends PGExprImpl { + + private SQLExpr value; + + public SQLExpr getValue() { + return value; + } + + public void setValue(SQLExpr value) { + this.value = value; + } + + @Override + public void accept0(PGASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, value); + } + visitor.endVisit(this); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((value == null) ? 0 : value.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; + } + PGPolygonExpr other = (PGPolygonExpr) obj; + if (value == null) { + if (other.value != null) { + return false; + } + } else if (!value.equals(other.value)) { + return false; + } + 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 93664d673e..7ed2f67360 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 @@ -25,12 +25,17 @@ import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; 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.PGBoxExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCidrExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCircleExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGDateField; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGExtractExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGInetExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGLineSegmentsExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGMacAddrExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPointExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPolygonExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGTypeCastExpr; import com.alibaba.druid.sql.parser.Lexer; -import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.SQLExprParser; import com.alibaba.druid.sql.parser.Token; import com.alibaba.druid.util.JdbcConstants; @@ -181,6 +186,36 @@ public class PGExprParser extends SQLExprParser { PGBoxExpr box = new PGBoxExpr(); box.setValue(value); return primaryRest(box); + } else if ("macaddr".equalsIgnoreCase(ident)) { + SQLExpr value = this.primary(); + PGMacAddrExpr macaddr = new PGMacAddrExpr(); + macaddr.setValue(value); + return primaryRest(macaddr); + } else if ("inet".equalsIgnoreCase(ident)) { + SQLExpr value = this.primary(); + PGInetExpr inet = new PGInetExpr(); + inet.setValue(value); + return primaryRest(inet); + } else if ("cidr".equalsIgnoreCase(ident)) { + SQLExpr value = this.primary(); + PGCidrExpr cidr = new PGCidrExpr(); + cidr.setValue(value); + return primaryRest(cidr); + } else if ("polygon".equalsIgnoreCase(ident)) { + SQLExpr value = this.primary(); + PGPolygonExpr polygon = new PGPolygonExpr(); + polygon.setValue(value); + return primaryRest(polygon); + } else if ("circle".equalsIgnoreCase(ident)) { + SQLExpr value = this.primary(); + PGCircleExpr circle = new PGCircleExpr(); + circle.setValue(value); + return primaryRest(circle); + } else if ("lseg".equalsIgnoreCase(ident)) { + SQLExpr value = this.primary(); + PGLineSegmentsExpr lseg = new PGLineSegmentsExpr(); + lseg.setValue(value); + return primaryRest(lseg); } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java index 53c052e81e..a72d3485c4 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java @@ -19,9 +19,15 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGArrayExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGBoxExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCidrExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCircleExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGExtractExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGInetExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGLineSegmentsExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGMacAddrExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPointExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPolygonExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGTypeCastExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGFunctionTableSource; @@ -109,5 +115,29 @@ public interface PGASTVisitor extends SQLASTVisitor { void endVisit(PGPointExpr x); boolean visit(PGPointExpr x); + + void endVisit(PGMacAddrExpr x); + + boolean visit(PGMacAddrExpr x); + + void endVisit(PGInetExpr x); + + boolean visit(PGInetExpr x); + + void endVisit(PGCidrExpr x); + + boolean visit(PGCidrExpr x); + + void endVisit(PGPolygonExpr x); + + boolean visit(PGPolygonExpr x); + + void endVisit(PGCircleExpr x); + + boolean visit(PGCircleExpr x); + + void endVisit(PGLineSegmentsExpr x); + + boolean visit(PGLineSegmentsExpr x); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java index 247f9e6e73..1e8ad94639 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java @@ -19,9 +19,15 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGArrayExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGBoxExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCidrExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCircleExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGExtractExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGInetExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGLineSegmentsExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGMacAddrExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPointExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPolygonExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGTypeCastExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGFunctionTableSource; @@ -232,5 +238,65 @@ public class PGASTVisitorAdapter extends SQLASTVisitorAdapter implements PGASTVi public boolean visit(PGPointExpr x) { return true; } + + @Override + public void endVisit(PGMacAddrExpr x) { + + } + + @Override + public boolean visit(PGMacAddrExpr x) { + return true; + } + + @Override + public void endVisit(PGInetExpr x) { + + } + + @Override + public boolean visit(PGInetExpr x) { + return true; + } + + @Override + public void endVisit(PGCidrExpr x) { + + } + + @Override + public boolean visit(PGCidrExpr x) { + return true; + } + + @Override + public void endVisit(PGPolygonExpr x) { + + } + + @Override + public boolean visit(PGPolygonExpr x) { + return true; + } + + @Override + public void endVisit(PGCircleExpr x) { + + } + + @Override + public boolean visit(PGCircleExpr x) { + return true; + } + + @Override + public void endVisit(PGLineSegmentsExpr x) { + + } + + @Override + public boolean visit(PGLineSegmentsExpr x) { + return true; + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java index bf19c2b7c1..97119566d4 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java @@ -22,9 +22,15 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGArrayExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGBoxExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCidrExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCircleExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGExtractExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGInetExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGLineSegmentsExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGMacAddrExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPointExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPolygonExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGTypeCastExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGFunctionTableSource; @@ -567,4 +573,76 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor public void endVisit(PGPointExpr x) { } + + @Override + public boolean visit(PGMacAddrExpr x) { + print("macaddr "); + x.getValue().accept(this); + return false; + } + + @Override + public void endVisit(PGMacAddrExpr x) { + + } + + @Override + public boolean visit(PGInetExpr x) { + print("inet "); + x.getValue().accept(this); + return false; + } + + @Override + public void endVisit(PGInetExpr x) { + + } + + @Override + public boolean visit(PGCidrExpr x) { + print("cidr "); + x.getValue().accept(this); + return false; + } + + @Override + public void endVisit(PGCidrExpr x) { + + } + + @Override + public boolean visit(PGPolygonExpr x) { + print("polygon "); + x.getValue().accept(this); + return false; + } + + @Override + public void endVisit(PGPolygonExpr x) { + + } + + @Override + public boolean visit(PGCircleExpr x) { + print("circle "); + x.getValue().accept(this); + return false; + } + + @Override + public void endVisit(PGCircleExpr x) { + + } + + @Override + public boolean visit(PGLineSegmentsExpr x) { + print("lseg "); + x.getValue().accept(this); + return false; + } + + @Override + public void endVisit(PGLineSegmentsExpr x) { + + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java index 87c7750684..93a1e9dff7 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java @@ -25,9 +25,15 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGArrayExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGBoxExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCidrExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCircleExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGExtractExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGInetExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGLineSegmentsExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGMacAddrExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPointExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPolygonExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGTypeCastExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGFunctionTableSource; @@ -338,6 +344,66 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit } + @Override + public boolean visit(PGMacAddrExpr x) { + return true; + } + + @Override + public void endVisit(PGMacAddrExpr x) { + + } + + @Override + public boolean visit(PGInetExpr x) { + return true; + } + + @Override + public void endVisit(PGInetExpr x) { + + } + + @Override + public boolean visit(PGCidrExpr x) { + return true; + } + + @Override + public void endVisit(PGCidrExpr x) { + + } + + @Override + public boolean visit(PGPolygonExpr x) { + return true; + } + + @Override + public void endVisit(PGPolygonExpr x) { + + } + + @Override + public boolean visit(PGCircleExpr x) { + return true; + } + + @Override + public void endVisit(PGCircleExpr x) { + + } + + @Override + public boolean visit(PGLineSegmentsExpr x) { + return true; + } + + @Override + public void endVisit(PGLineSegmentsExpr x) { + + } + @Override public boolean visit(PGPointExpr x) { return true; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/CidrTest.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/CidrTest.java new file mode 100644 index 0000000000..40e785937f --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/CidrTest.java @@ -0,0 +1,20 @@ +package com.alibaba.druid.bvt.sql.postgresql.expr; + + + +import org.junit.Assert; + +import com.alibaba.druid.sql.PGTest; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCidrExpr; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGExprParser; + + +public class CidrTest extends PGTest { + public void test_timestamp() throws Exception { + String sql = "cidr '10.1.0.0/16'"; + PGExprParser parser = new PGExprParser(sql); + PGCidrExpr expr = (PGCidrExpr) parser.expr(); + Assert.assertEquals("cidr '10.1.0.0/16'", expr.toString()); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/CircleTest.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/CircleTest.java new file mode 100644 index 0000000000..6b2c0ef00d --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/CircleTest.java @@ -0,0 +1,20 @@ +package com.alibaba.druid.bvt.sql.postgresql.expr; + + + +import org.junit.Assert; + +import com.alibaba.druid.sql.PGTest; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCircleExpr; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGExprParser; + + +public class CircleTest extends PGTest { + public void test_timestamp() throws Exception { + String sql = "circle '((0,0),2)'"; + PGExprParser parser = new PGExprParser(sql); + PGCircleExpr expr = (PGCircleExpr) parser.expr(); + Assert.assertEquals("circle '((0,0),2)'", expr.toString()); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/InetTest.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/InetTest.java new file mode 100644 index 0000000000..4538230b93 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/InetTest.java @@ -0,0 +1,20 @@ +package com.alibaba.druid.bvt.sql.postgresql.expr; + + + +import org.junit.Assert; + +import com.alibaba.druid.sql.PGTest; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGInetExpr; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGExprParser; + + +public class InetTest extends PGTest { + public void test_timestamp() throws Exception { + String sql = "inet '0.0.0.255'"; + PGExprParser parser = new PGExprParser(sql); + PGInetExpr expr = (PGInetExpr) parser.expr(); + Assert.assertEquals("inet '0.0.0.255'", expr.toString()); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/LineSegmentsTest.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/LineSegmentsTest.java new file mode 100644 index 0000000000..f206547df5 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/LineSegmentsTest.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.bvt.sql.postgresql.expr; + + +import org.junit.Assert; + +import com.alibaba.druid.sql.PGTest; +import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGBoxExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGLineSegmentsExpr; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPointExpr; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGExprParser; + + +public class LineSegmentsTest extends PGTest { + public void test_timestamp() throws Exception { + String sql = "lseg '((-1,0),(1,0))'"; + PGExprParser parser = new PGExprParser(sql); + PGLineSegmentsExpr expr = (PGLineSegmentsExpr) parser.expr(); + + Assert.assertEquals("lseg '((-1,0),(1,0))'", expr.toString()); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/MacAddrTest.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/MacAddrTest.java new file mode 100644 index 0000000000..35ec0ada23 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/MacAddrTest.java @@ -0,0 +1,22 @@ +package com.alibaba.druid.bvt.sql.postgresql.expr; + + + +import org.junit.Assert; + +import com.alibaba.druid.sql.PGTest; +import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; +import com.alibaba.druid.sql.ast.expr.SQLUnaryOperator; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGMacAddrExpr; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGExprParser; + + +public class MacAddrTest extends PGTest { + public void test_timestamp() throws Exception { + String sql = "macaddr '12:34:56:78:90:ab'"; + PGExprParser parser = new PGExprParser(sql); + PGMacAddrExpr expr = (PGMacAddrExpr) parser.expr(); + Assert.assertEquals("macaddr '12:34:56:78:90:ab'", expr.toString()); + + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/PolygonTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/PolygonTest2.java new file mode 100644 index 0000000000..5948c440b5 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/expr/PolygonTest2.java @@ -0,0 +1,20 @@ +package com.alibaba.druid.bvt.sql.postgresql.expr; + + + +import org.junit.Assert; + +import com.alibaba.druid.sql.PGTest; +import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGPolygonExpr; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGExprParser; + + +public class PolygonTest2 extends PGTest { + public void test_timestamp() throws Exception { + String sql = "polygon '((0,0),(1,1))'"; + PGExprParser parser = new PGExprParser(sql); + PGPolygonExpr expr = (PGPolygonExpr) parser.expr(); + Assert.assertEquals("polygon '((0,0),(1,1))'", expr.toString()); + + } +}