From e02e08a6baa3affa966644c604efb264f2bf247d Mon Sep 17 00:00:00 2001 From: go-jet Date: Mon, 12 Aug 2019 10:16:08 +0200 Subject: [PATCH] Remove visitor. --- internal/jet/cast.go | 4 -- internal/jet/column.go | 1 - internal/jet/enum_value.go | 1 - internal/jet/expression.go | 19 --------- internal/jet/func_expression.go | 8 ---- internal/jet/literal_expression.go | 10 ----- internal/jet/operators.go | 22 ++--------- internal/jet/select_table.go | 5 --- internal/jet/statement.go | 3 -- internal/jet/string_expression.go | 4 -- internal/jet/table.go | 10 ----- internal/jet/visitor.go | 63 ------------------------------ mysql/select_statement.go | 2 +- mysql/set_statement.go | 2 +- postgres/select_statement.go | 2 +- postgres/set_statement.go | 2 +- postgres/table.go | 8 ---- 17 files changed, 8 insertions(+), 158 deletions(-) delete mode 100644 internal/jet/visitor.go diff --git a/internal/jet/cast.go b/internal/jet/cast.go index 36b3ec8..4c05f76 100644 --- a/internal/jet/cast.go +++ b/internal/jet/cast.go @@ -67,10 +67,6 @@ type castExpression struct { cast string } -func (b *castExpression) accept(visitor visitor) { - b.expression.accept(visitor) -} - func (b *castExpression) serialize(statement StatementType, out *SqlBuilder, options ...SerializeOption) error { expression := b.expression diff --git a/internal/jet/column.go b/internal/jet/column.go index b9dfcbc..06173fd 100644 --- a/internal/jet/column.go +++ b/internal/jet/column.go @@ -20,7 +20,6 @@ type ColumnExpression interface { // The base type for real materialized columns. type columnImpl struct { ExpressionInterfaceImpl - noOpVisitorImpl name string tableName string diff --git a/internal/jet/enum_value.go b/internal/jet/enum_value.go index 7480b6a..c7befab 100644 --- a/internal/jet/enum_value.go +++ b/internal/jet/enum_value.go @@ -3,7 +3,6 @@ package jet type enumValue struct { ExpressionInterfaceImpl stringInterfaceImpl - noOpVisitorImpl name string } diff --git a/internal/jet/expression.go b/internal/jet/expression.go index 84c0936..d86d753 100644 --- a/internal/jet/expression.go +++ b/internal/jet/expression.go @@ -7,12 +7,6 @@ import ( // Expression is common interface for all expressions. // Can be Bool, Int, Float, String, Date, Time, Timez, Timestamp or Timestampz expressions. type Expression interface { - acceptsVisitor - - IExpression -} - -type IExpression interface { Serializer Projection GroupByClause @@ -101,11 +95,6 @@ func newBinaryExpression(lhs, rhs Expression, operator string) binaryOpExpressio return binaryExpression } -func (c *binaryOpExpression) accept(visitor visitor) { - c.lhs.accept(visitor) - c.rhs.accept(visitor) -} - func (c *binaryOpExpression) serialize(statement StatementType, out *SqlBuilder, options ...SerializeOption) (err error) { if c == nil { return errors.New("jet: binary Expression is nil") @@ -162,10 +151,6 @@ func newPrefixExpression(expression Expression, operator string) prefixOpExpress return prefixExpression } -func (p *prefixOpExpression) accept(visitor visitor) { - p.expression.accept(visitor) -} - func (p *prefixOpExpression) serialize(statement StatementType, out *SqlBuilder, options ...SerializeOption) error { if p == nil { return errors.New("jet: Prefix Expression is nil") @@ -201,10 +186,6 @@ func newPostfixOpExpression(expression Expression, operator string) postfixOpExp return postfixOpExpression } -func (p *postfixOpExpression) accept(visitor visitor) { - p.expression.accept(visitor) -} - func (p *postfixOpExpression) serialize(statement StatementType, out *SqlBuilder, options ...SerializeOption) error { if p == nil { return errors.New("jet: Postifx operator Expression is nil") diff --git a/internal/jet/func_expression.go b/internal/jet/func_expression.go index 789b3ca..8495494 100644 --- a/internal/jet/func_expression.go +++ b/internal/jet/func_expression.go @@ -500,14 +500,6 @@ func newFunc(name string, expressions []Expression, parent Expression) *funcExpr return funcExp } -func (f *funcExpressionImpl) accept(visitor visitor) { - visitor.visit(f) - - for _, exp := range f.expressions { - exp.accept(visitor) - } -} - func (f *funcExpressionImpl) serialize(statement StatementType, out *SqlBuilder, options ...SerializeOption) error { if f == nil { return errors.New("jet: Function expressions is nil. ") diff --git a/internal/jet/literal_expression.go b/internal/jet/literal_expression.go index 412e017..1ba06c3 100644 --- a/internal/jet/literal_expression.go +++ b/internal/jet/literal_expression.go @@ -16,7 +16,6 @@ type LiteralExpression interface { type literalExpressionImpl struct { ExpressionInterfaceImpl - noOpVisitorImpl value interface{} constant bool @@ -205,7 +204,6 @@ func DateT(t time.Time) DateExpression { //--------------------------------------------------// type nullLiteral struct { ExpressionInterfaceImpl - noOpVisitorImpl } func newNullLiteral() Expression { @@ -224,7 +222,6 @@ func (n *nullLiteral) serialize(statement StatementType, out *SqlBuilder, option //--------------------------------------------------// type starLiteral struct { ExpressionInterfaceImpl - noOpVisitorImpl } func newStarLiteral() Expression { @@ -247,12 +244,6 @@ type wrap struct { expressions []Expression } -func (n *wrap) accept(visitor visitor) { - for _, exp := range n.expressions { - exp.accept(visitor) - } -} - func (n *wrap) serialize(statement StatementType, out *SqlBuilder, options ...SerializeOption) error { out.WriteString("(") err := serializeExpressionList(statement, n.expressions, ", ", out) @@ -272,7 +263,6 @@ func WRAP(expression ...Expression) Expression { type rawExpression struct { ExpressionInterfaceImpl - noOpVisitorImpl raw string } diff --git a/internal/jet/operators.go b/internal/jet/operators.go index ab837f8..f8dc448 100644 --- a/internal/jet/operators.go +++ b/internal/jet/operators.go @@ -2,6 +2,10 @@ package jet import "errors" +const ( + StringConcatOperator = "||" +) + //----------- Logical operators ---------------// // NOT returns negation of bool expression result @@ -108,24 +112,6 @@ func (c *caseOperatorImpl) ELSE(els Expression) CaseOperator { return c } -func (c *caseOperatorImpl) accept(visitor visitor) { - visitor.visit(c) - - c.expression.accept(visitor) - - for _, when := range c.when { - when.accept(visitor) - } - - for _, then := range c.then { - then.accept(visitor) - } - - if c.els != nil { - c.els.accept(visitor) - } -} - func (c *caseOperatorImpl) serialize(statement StatementType, out *SqlBuilder, options ...SerializeOption) error { if c == nil { return errors.New("jet: Case Expression is nil. ") diff --git a/internal/jet/select_table.go b/internal/jet/select_table.go index 57889de..de05285 100644 --- a/internal/jet/select_table.go +++ b/internal/jet/select_table.go @@ -31,11 +31,6 @@ func (s *SelectTableImpl2) Alias() string { return s.alias } -func (s *SelectTableImpl2) accept(visitor visitor) { - visitor.visit(s) - s.selectStmt.accept(visitor) -} - func (s *SelectTableImpl2) AllColumns() ProjectionList { return s.projections } diff --git a/internal/jet/statement.go b/internal/jet/statement.go index c424e1f..07afd31 100644 --- a/internal/jet/statement.go +++ b/internal/jet/statement.go @@ -9,7 +9,6 @@ import ( //Statement is common interface for all statements(SELECT, INSERT, UPDATE, DELETE, LOCK) type Statement interface { - acceptsVisitor // Sql returns parametrized sql query with list of arguments. // err is returned if statement is not composed correctly Sql() (query string, args []interface{}, err error) @@ -47,7 +46,6 @@ type HasProjections interface { } type SerializerStatementInterfaceImpl struct { - noOpVisitorImpl dialect Dialect statementType StatementType parent SerializerStatement @@ -144,7 +142,6 @@ func NewStatementImpl(Dialect Dialect, statementType StatementType, parent Seria type StatementImpl struct { SerializerStatementInterfaceImpl - acceptsVisitor Clauses []Clause } diff --git a/internal/jet/string_expression.go b/internal/jet/string_expression.go index 0de3063..1f491b0 100644 --- a/internal/jet/string_expression.go +++ b/internal/jet/string_expression.go @@ -1,9 +1,5 @@ package jet -const ( - StringConcatOperator = "||" -) - // StringExpression interface type StringExpression interface { Expression diff --git a/internal/jet/table.go b/internal/jet/table.go index b2619e1..61f5fc8 100644 --- a/internal/jet/table.go +++ b/internal/jet/table.go @@ -66,10 +66,6 @@ func (t *TableImpl) Columns() []Column { return ret } -func (t *TableImpl) accept(visitor visitor) { - visitor.visit(t) -} - func (t *TableImpl) serialize(statement StatementType, out *SqlBuilder, options ...SerializeOption) error { if t == nil { return errors.New("jet: tableImpl is nil. ") @@ -130,12 +126,6 @@ func (t *JoinTableImpl) Columns() []Column { panic("Unimplemented") } -func (t *JoinTableImpl) accept(visitor visitor) { - //t.lhs.accept(visitor) - //t.rhs.accept(visitor) - //TODO: remove -} - func (t *JoinTableImpl) serialize(statement StatementType, out *SqlBuilder, options ...SerializeOption) (err error) { if t == nil { return errors.New("jet: Join table is nil. ") diff --git a/internal/jet/visitor.go b/internal/jet/visitor.go deleted file mode 100644 index 4586244..0000000 --- a/internal/jet/visitor.go +++ /dev/null @@ -1,63 +0,0 @@ -package jet - -type visitor interface { - visit(element acceptsVisitor) -} - -type acceptsVisitor interface { - accept(visitor visitor) -} - -type noOpVisitorImpl struct { -} - -func (n *noOpVisitorImpl) accept(visitor visitor) { - // NO OP -} - -// --------------- dialect finder -----------------// - -type DialectFinder struct { - dialects map[string]Dialect -} - -func newDialectFinder() *DialectFinder { - return &DialectFinder{ - dialects: make(map[string]Dialect), - } -} - -func (f *DialectFinder) mustGetDialect() Dialect { - if len(f.dialects) == 0 { - panic("jet: can't detect dialect") - } - - if len(f.dialects) > 1 { - panic("jet: more than one dialect detected") - } - - for _, dialect := range f.dialects { - return dialect - } - - panic("jet: internal error") -} - -func (f *DialectFinder) visit(element acceptsVisitor) { - - //if table, ok := element.(TableBase); ok { - // dialect := table.dialect() - // f.dialects[dialect.Name()] = dialect - //} -} - -func detectDialect(element acceptsVisitor, dialectOverride ...Dialect) Dialect { - if len(dialectOverride) > 0 { - return dialectOverride[0] - } - - dialectFinder := newDialectFinder() - element.accept(dialectFinder) - - return dialectFinder.mustGetDialect() -} diff --git a/mysql/select_statement.go b/mysql/select_statement.go index 7abb9f3..d205bbb 100644 --- a/mysql/select_statement.go +++ b/mysql/select_statement.go @@ -12,7 +12,7 @@ var ( type SelectStatement interface { jet.Statement jet.HasProjections - jet.IExpression + jet.Expression DISTINCT() SelectStatement FROM(table ReadableTable) SelectStatement diff --git a/mysql/set_statement.go b/mysql/set_statement.go index 86ce186..2d23b56 100644 --- a/mysql/set_statement.go +++ b/mysql/set_statement.go @@ -31,7 +31,7 @@ type SetStatementFinal interface { type SetOperators interface { jet.Statement jet.HasProjections - jet.IExpression + jet.Expression UNION(rhs SelectStatement) SetStatement UNION_ALL(rhs SelectStatement) SetStatement diff --git a/postgres/select_statement.go b/postgres/select_statement.go index 61b7a58..76fd4be 100644 --- a/postgres/select_statement.go +++ b/postgres/select_statement.go @@ -14,7 +14,7 @@ var ( type SelectStatement interface { jet.Statement jet.HasProjections - jet.IExpression + jet.Expression DISTINCT() SelectStatement FROM(table ReadableTable) SelectStatement diff --git a/postgres/set_statement.go b/postgres/set_statement.go index 277a2bb..a94dcbf 100644 --- a/postgres/set_statement.go +++ b/postgres/set_statement.go @@ -52,7 +52,7 @@ type SetStatement interface { type SetOperators interface { jet.Statement jet.HasProjections - jet.IExpression + jet.Expression UNION(rhs SelectStatement) SetStatement UNION_ALL(rhs SelectStatement) SetStatement diff --git a/postgres/table.go b/postgres/table.go index 2ceb556..963cad8 100644 --- a/postgres/table.go +++ b/postgres/table.go @@ -31,10 +31,8 @@ type writableTable interface { // ReadableTable interface type ReadableTable interface { - //table readableTable jet.Serializer - //acceptsVisitor } type WritableTable interface { @@ -44,15 +42,9 @@ type WritableTable interface { } type Table interface { - //table readableTable writableTable jet.SerializerTable - //acceptsVisitor - - //SchemaName() string - //TableName() string - //As(alias string) } type readableTableInterfaceImpl struct {