From 47208b03cbe574a6c2701f3865444061f98fd742 Mon Sep 17 00:00:00 2001 From: Firas Abuzaid Date: Thu, 11 Jan 2018 11:55:24 -0800 Subject: [PATCH] cleanup --- .../stanford/futuredata/macrobase/SqlBase.g4 | 151 +-- .../macrobase/sql/ExpressionFormatter.java | 16 - .../futuredata/macrobase/sql/QueryEngine.java | 15 +- .../macrobase/sql/SqlFormatter.java | 293 ------ .../macrobase/sql/parser/AstBuilder.java | 142 +-- .../macrobase/sql/tree/AddColumn.java | 87 -- .../macrobase/sql/tree/Aggregate.java | 5 - .../sql/tree/AggregateExpression.java | 5 - .../macrobase/sql/tree/AstVisitor.java | 112 --- .../macrobase/sql/tree/ColumnDefinition.java | 3 +- .../macrobase/sql/tree/CreateSchema.java | 97 -- .../macrobase/sql/tree/CreateTable.java | 118 --- .../sql/tree/CreateTableAsSelect.java | 137 --- .../macrobase/sql/tree/CurrentTime.java | 105 -- .../futuredata/macrobase/sql/tree/Delete.java | 90 -- ...erExpression.java => DelimiterClause.java} | 15 +- .../sql/tree/DiffQuerySpecification.java | 30 +- .../macrobase/sql/tree/DropColumn.java | 87 -- .../macrobase/sql/tree/DropTable.java | 86 -- .../futuredata/macrobase/sql/tree/Except.java | 2 +- .../macrobase/sql/tree/Execute.java | 87 -- ...xportExpression.java => ExportClause.java} | 24 +- .../sql/tree/ExpressionRewriter.java | 205 ---- .../sql/tree/ExpressionTreeRewriter.java | 911 ------------------ .../futuredata/macrobase/sql/tree/Insert.java | 92 -- .../macrobase/sql/tree/Intersect.java | 3 +- .../macrobase/sql/tree/Lateral.java | 77 -- .../macrobase/sql/tree/LikeClause.java | 94 -- .../sql/tree/MinRatioExpression.java | 5 - .../sql/tree/MinSupportExpression.java | 5 - .../macrobase/sql/tree/NodeRef.java | 60 -- .../macrobase/sql/tree/Property.java | 87 -- .../futuredata/macrobase/sql/tree/Query.java | 61 +- .../macrobase/sql/tree/QueryBody.java | 2 +- .../sql/tree/QuerySpecification.java | 10 +- .../macrobase/sql/tree/Relation.java | 3 +- .../macrobase/sql/tree/RenameColumn.java | 97 -- .../macrobase/sql/tree/RenameSchema.java | 87 -- .../macrobase/sql/tree/RenameTable.java | 87 -- .../futuredata/macrobase/sql/tree/Rollup.java | 3 +- .../macrobase/sql/tree/ShowColumns.java | 79 -- .../macrobase/sql/tree/ShowTables.java | 92 -- .../sql/tree/StackableAstVisitor.java | 59 -- .../macrobase/sql/tree/StringLiteral.java | 3 +- .../futuredata/macrobase/sql/tree/Table.java | 2 +- .../macrobase/sql/tree/TableElement.java | 29 - .../macrobase/sql/tree/TableSubquery.java | 2 +- .../futuredata/macrobase/sql/tree/Union.java | 2 +- .../futuredata/macrobase/sql/tree/Unnest.java | 88 -- .../futuredata/macrobase/sql/tree/Use.java | 90 -- .../futuredata/macrobase/sql/tree/Values.java | 2 +- .../futuredata/macrobase/sql/tree/With.java | 91 -- .../macrobase/sql/tree/WithQuery.java | 98 -- 53 files changed, 111 insertions(+), 4122 deletions(-) delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AddColumn.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateSchema.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateTable.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateTableAsSelect.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CurrentTime.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Delete.java rename sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/{DelimiterExpression.java => DelimiterClause.java} (71%) delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DropColumn.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DropTable.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Execute.java rename sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/{ExportExpression.java => ExportClause.java} (74%) delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExpressionRewriter.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExpressionTreeRewriter.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Insert.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Lateral.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/LikeClause.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/NodeRef.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Property.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameColumn.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameSchema.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameTable.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ShowColumns.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ShowTables.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/StackableAstVisitor.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/TableElement.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Unnest.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Use.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/With.java delete mode 100644 sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/WithQuery.java diff --git a/sql/src/main/antlr4/edu/stanford/futuredata/macrobase/SqlBase.g4 b/sql/src/main/antlr4/edu/stanford/futuredata/macrobase/SqlBase.g4 index 69f38deeb..2bf022b8d 100644 --- a/sql/src/main/antlr4/edu/stanford/futuredata/macrobase/SqlBase.g4 +++ b/sql/src/main/antlr4/edu/stanford/futuredata/macrobase/SqlBase.g4 @@ -33,103 +33,9 @@ statement | IMPORT FROM CSV FILE STRING INTO qualifiedName ('(' columnDefinition (',' columnDefinition)* ')')? #importCsv ; -// | USE schema=identifier #use -// | USE catalog=identifier '.' schema=identifier #use -// | CREATE SCHEMA (IF NOT EXISTS)? qualifiedName -// (WITH properties)? #createSchema -// | DROP SCHEMA (IF EXISTS)? qualifiedName (CASCADE | RESTRICT)? #dropSchema -// | ALTER SCHEMA qualifiedName RENAME TO identifier #renameSchema -// | CREATE TABLE (IF NOT EXISTS)? qualifiedName ('(' columnAliases ')')? -// (COMMENT string)? -// (WITH properties)? AS (query | '('query')') -// (WITH (NO)? DATA)? #createTableAsSelect -// | CREATE TABLE (IF NOT EXISTS)? qualifiedName -// '(' tableElement (',' tableElement)* ')' -// (COMMENT string)? -// (WITH properties)? #createTable -// | DROP TABLE (IF EXISTS)? qualifiedName #dropTable -// | INSERT INTO qualifiedName ('(' columnAliases ')')? query #insertInto -// | DELETE FROM qualifiedName (WHERE booleanExpression)? #delete -// | ALTER TABLE from=qualifiedName RENAME TO to=qualifiedName #renameTable -// | ALTER TABLE tableName=qualifiedName -// RENAME COLUMN from=identifier TO to=identifier #renameColumn -// | ALTER TABLE tableName=qualifiedName -// DROP COLUMN column=qualifiedName #dropColumn -// | ALTER TABLE tableName=qualifiedName -// ADD COLUMN column=columnDefinition #addColumn -// | CREATE (OR REPLACE)? VIEW qualifiedName AS query #createView -// | DROP VIEW (IF EXISTS)? qualifiedName #dropView -// | CALL qualifiedName '(' (callArgument (',' callArgument)*)? ')' #call -// | GRANT -// (privilege (',' privilege)* | ALL PRIVILEGES) -// ON TABLE? qualifiedName TO grantee=identifier -// (WITH GRANT OPTION)? #grant -// | REVOKE -// (GRANT OPTION FOR)? -// (privilege (',' privilege)* | ALL PRIVILEGES) -// ON TABLE? qualifiedName FROM grantee=identifier #revoke -// | SHOW GRANTS -// (ON TABLE? qualifiedName)? #showGrants -// | EXPLAIN ANALYZE? VERBOSE? -// ('(' explainOption (',' explainOption)* ')')? statement #explain -// | SHOW CREATE TABLE qualifiedName #showCreateTable -// | SHOW CREATE VIEW qualifiedName #showCreateView -// | SHOW TABLES ((FROM | IN) qualifiedName)? (LIKE pattern=string)? #showTables -// | SHOW SCHEMAS ((FROM | IN) identifier)? (LIKE pattern=string)? #showSchemas -// | SHOW CATALOGS (LIKE pattern=string)? #showCatalogs -// | SHOW COLUMNS (FROM | IN) qualifiedName #showColumns -// | SHOW STATS (FOR | ON) qualifiedName #showStats -// | SHOW STATS FOR '(' querySpecification ')' #showStatsForQuery -// | DESCRIBE qualifiedName #showColumns -// | DESC qualifiedName #showColumns -// | SHOW FUNCTIONS #showFunctions -// | SHOW SESSION #showSession -// | SET SESSION qualifiedName EQ expression #setSession -// | RESET SESSION qualifiedName #resetSession -// | START TRANSACTION (transactionMode (',' transactionMode)*)? #startTransaction -// | COMMIT WORK? #commit -// | ROLLBACK WORK? #rollback -// | SHOW PARTITIONS (FROM | IN) qualifiedName -// (WHERE booleanExpression)? -// (ORDER BY sortItem (',' sortItem)*)? -// (LIMIT limit=(INTEGER_VALUE | ALL))? #showPartitions -// | PREPARE identifier FROM statement #prepare -// | DEALLOCATE PREPARE identifier #deallocate -// | EXECUTE identifier (USING expression (',' expression)*)? #execute -// | DESCRIBE INPUT identifier #describeInput -// | DESCRIBE OUTPUT identifier #describeOutput query - : with? queryNoWith - ; - -with - : WITH RECURSIVE? namedQuery (',' namedQuery)* - ; - -//tableElement -// : columnDefinition -// | likeClause -// ; - -columnDefinition - : identifier type (COMMENT string)? - ; - -//likeClause -// : LIKE qualifiedName (optionType=(INCLUDING | EXCLUDING) PROPERTIES)? -// ; - -//properties -// : '(' property (',' property)* ')' -// ; - -//property -// : identifier EQ expression -// ; - -queryNoWith: - queryTerm + : queryTerm ; queryTerm @@ -143,11 +49,7 @@ queryPrimary | diffQuerySpecification #diffQuery | TABLE qualifiedName #table | VALUES expression (',' expression)* #inlineTable - | '(' queryNoWith ')' #subquery - ; - -sortItem - : expression ordering=(ASC | DESC)? (NULLS nullOrdering=(FIRST | LAST))? + | '(' query ')' #subquery ; querySpecification @@ -158,9 +60,9 @@ querySpecification (HAVING having=booleanExpression)? (ORDER BY sortItem (',' sortItem)*)? (LIMIT limit=(INTEGER_VALUE | ALL))? - exportExpression? + exportClause? | SELECT setQuantifier? selectItem (',' selectItem)* - exportExpression? + exportClause? (FROM relation (',' relation)*)? (WHERE where=booleanExpression)? (GROUP BY groupBy)? @@ -171,7 +73,7 @@ querySpecification diffQuerySpecification : SELECT setQuantifier? selectItem (',' selectItem)* - FROM DIFF queryNoWith qualifiedName? (',' queryNoWith qualifiedName?)? + FROM DIFF queryTerm qualifiedName? (',' queryTerm qualifiedName?)? ON columnAliases (WITH minRatioExpression? minSupportExpression?)? (COMPARE BY ratioMetricExpression)? @@ -179,10 +81,10 @@ diffQuerySpecification (WHERE where=booleanExpression)? (ORDER BY sortItem (',' sortItem)*)? (LIMIT limit=(INTEGER_VALUE | ALL))? - exportExpression? + exportClause? | SELECT setQuantifier? selectItem (',' selectItem)* - exportExpression? - FROM DIFF queryNoWith qualifiedName? (',' queryNoWith qualifiedName?)? + exportClause? + FROM DIFF queryTerm qualifiedName? (',' queryTerm qualifiedName?)? ON columnAliases (WITH minRatioExpression? minSupportExpression?) (COMPARE BY ratioMetricExpression)? @@ -192,6 +94,14 @@ diffQuerySpecification (LIMIT limit=(INTEGER_VALUE | ALL))? ; +columnDefinition + : identifier type (COMMENT string)? + ; + +sortItem + : expression ordering=(ASC | DESC)? (NULLS nullOrdering=(FIRST | LAST))? + ; + minRatioExpression : MIN RATIO minRatio=DECIMAL_VALUE ; @@ -237,10 +147,6 @@ groupingSet | qualifiedName ; -namedQuery - : name=identifier ('(' columnAliases ')')? AS '(' query ')' - ; - setQuantifier : DISTINCT | ALL @@ -252,27 +158,27 @@ selectItem | ASTERISK #selectAll ; -exportExpression +exportClause : ( INTO OUTFILE filename=STRING ( fieldsFormat=(FIELDS | COLUMNS) - delimiterExpression /*escapeExpression?*/ + delimiterClause /*escapeClause?*/ )? ( - LINES delimiterExpression + LINES delimiterClause )? ) ; -delimiterExpression +delimiterClause : TERMINATED BY delimiter=STRING // | OPTIONALLY? ENCLOSED BY enclosion=STRING ; -// TODO: support -escapeExpression +// TODO: add support for escaping +escapeClause : ESCAPED BY escaping=STRING ; @@ -319,8 +225,6 @@ columnAliases relationPrimary : qualifiedName #tableName | '(' query ')' #subqueryRelation - | UNNEST '(' expression (',' expression)* ')' (WITH ORDINALITY)? #unnest - | LATERAL '(' query ')' #lateral | '(' relation ')' #parenthesizedRelation ; @@ -390,12 +294,6 @@ primaryExpression | value=primaryExpression '[' index=valueExpression ']' #subscript | identifier #columnReference | base=primaryExpression '.' fieldName=identifier #dereference - | name=CURRENT_DATE #specialDateTimeFunction - | name=CURRENT_TIME ('(' precision=INTEGER_VALUE ')')? #specialDateTimeFunction - | name=CURRENT_TIMESTAMP ('(' precision=INTEGER_VALUE ')')? #specialDateTimeFunction - | name=LOCALTIME ('(' precision=INTEGER_VALUE ')')? #specialDateTimeFunction - | name=LOCALTIMESTAMP ('(' precision=INTEGER_VALUE ')')? #specialDateTimeFunction - | SUBSTRING '(' valueExpression FROM valueExpression (FOR valueExpression)? ')' #substring | NORMALIZE '(' valueExpression (',' normalForm)? ')' #normalize | EXTRACT '(' identifier FROM valueExpression ')' #extract | '(' expression ')' #parenthesizedExpression @@ -562,9 +460,6 @@ CSV: 'CSV'; CROSS: 'CROSS'; CUBE: 'CUBE'; CURRENT: 'CURRENT'; -CURRENT_DATE: 'CURRENT_DATE'; -CURRENT_TIME: 'CURRENT_TIME'; -CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'; DATA: 'DATA'; DATE: 'DATE'; DAY: 'DAY'; @@ -626,8 +521,6 @@ LEVEL: 'LEVEL'; LIKE: 'LIKE'; LIMIT: 'LIMIT'; LINES: 'LINES'; -LOCALTIME: 'LOCALTIME'; -LOCALTIMESTAMP: 'LOCALTIMESTAMP'; LOGICAL: 'LOGICAL'; MAP: 'MAP'; MAX: 'MAX'; diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/ExpressionFormatter.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/ExpressionFormatter.java index 47aec1903..5a01c92ab 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/ExpressionFormatter.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/ExpressionFormatter.java @@ -37,7 +37,6 @@ import edu.stanford.futuredata.macrobase.sql.tree.CoalesceExpression; import edu.stanford.futuredata.macrobase.sql.tree.ComparisonExpression; import edu.stanford.futuredata.macrobase.sql.tree.Cube; -import edu.stanford.futuredata.macrobase.sql.tree.CurrentTime; import edu.stanford.futuredata.macrobase.sql.tree.DecimalLiteral; import edu.stanford.futuredata.macrobase.sql.tree.DereferenceExpression; import edu.stanford.futuredata.macrobase.sql.tree.DoubleLiteral; @@ -140,21 +139,6 @@ protected String visitAtTimeZone(AtTimeZone node, Void context) { .append(process(node.getTimeZone(), context)).toString(); } - @Override - protected String visitCurrentTime(CurrentTime node, Void context) { - StringBuilder builder = new StringBuilder(); - - builder.append(node.getType().getName()); - - if (node.getPrecision() != null) { - builder.append('(') - .append(node.getPrecision()) - .append(')'); - } - - return builder.toString(); - } - @Override protected String visitExtract(Extract node, Void context) { return "EXTRACT(" + node.getField() + " FROM " + process(node.getExpression(), context) + ")"; diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/QueryEngine.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/QueryEngine.java index 1378f5813..d57289ebd 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/QueryEngine.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/QueryEngine.java @@ -22,7 +22,6 @@ import edu.stanford.futuredata.macrobase.sql.tree.NotExpression; import edu.stanford.futuredata.macrobase.sql.tree.NullLiteral; import edu.stanford.futuredata.macrobase.sql.tree.OrderBy; -import edu.stanford.futuredata.macrobase.sql.tree.Query; import edu.stanford.futuredata.macrobase.sql.tree.QueryBody; import edu.stanford.futuredata.macrobase.sql.tree.QuerySpecification; import edu.stanford.futuredata.macrobase.sql.tree.Select; @@ -80,8 +79,8 @@ DataFrame executeQuery(QueryBody query) throws MacrobaseException { log.debug(diffQuery.toString()); return executeDiffQuerySpec(diffQuery); } - throw new MacrobaseSQLException("query of type " + query.getClass().getSimpleName() + " not yet" - + "supported"); + throw new MacrobaseSQLException( + "query of type " + query.getClass().getSimpleName() + " not yet supported"); } private DataFrame executeDiffQuerySpec(final DiffQuerySpecification diffQuery) @@ -89,8 +88,8 @@ private DataFrame executeDiffQuerySpec(final DiffQuerySpecification diffQuery) assert (diffQuery.getSecond().isPresent()); // TODO: support single DataFrame queries // Extract parameters for Diff query // TODO: too many get's; too many fields are Optional that shouldn't be - final Query first = diffQuery.getFirst().get(); - final Query second = diffQuery.getSecond().get(); + final TableSubquery first = diffQuery.getFirst().get(); + final TableSubquery second = diffQuery.getSecond().get(); final List explainCols = diffQuery.getAttributeCols().stream().map(Identifier::toString) .collect(toImmutableList()); final double minRatioMetric = diffQuery.getMinRatioExpression().get().getMinRatio(); @@ -100,10 +99,8 @@ private DataFrame executeDiffQuerySpec(final DiffQuerySpecification diffQuery) final long order = diffQuery.getMaxCombo().get().getValue(); // execute subqueries - final DataFrame firstDf = executeQuery( - ((TableSubquery) first.getQueryBody()).getQuery().getQueryBody()); - final DataFrame secondDf = executeQuery( - ((TableSubquery) second.getQueryBody()).getQuery().getQueryBody()); + final DataFrame firstDf = executeQuery(first.getQuery().getQueryBody()); + final DataFrame secondDf = executeQuery(second.getQuery().getQueryBody()); if (!firstDf.getSchema().hasColumns(explainCols) || !secondDf.getSchema() .hasColumns(explainCols)) { throw new MacrobaseSQLException( diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/SqlFormatter.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/SqlFormatter.java index a17fef397..bc1e37020 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/SqlFormatter.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/SqlFormatter.java @@ -18,59 +18,37 @@ import static edu.stanford.futuredata.macrobase.sql.ExpressionFormatter.formatExpression; import static edu.stanford.futuredata.macrobase.sql.ExpressionFormatter.formatGroupBy; import static edu.stanford.futuredata.macrobase.sql.ExpressionFormatter.formatOrderBy; -import static edu.stanford.futuredata.macrobase.sql.ExpressionFormatter.formatStringLiteral; -import static java.lang.String.format; import static java.util.stream.Collectors.joining; import com.google.common.base.Joiner; import com.google.common.base.Strings; -import edu.stanford.futuredata.macrobase.sql.tree.AddColumn; import edu.stanford.futuredata.macrobase.sql.tree.AliasedRelation; import edu.stanford.futuredata.macrobase.sql.tree.AllColumns; import edu.stanford.futuredata.macrobase.sql.tree.AstVisitor; -import edu.stanford.futuredata.macrobase.sql.tree.ColumnDefinition; -import edu.stanford.futuredata.macrobase.sql.tree.CreateTable; -import edu.stanford.futuredata.macrobase.sql.tree.CreateTableAsSelect; -import edu.stanford.futuredata.macrobase.sql.tree.Delete; -import edu.stanford.futuredata.macrobase.sql.tree.DropColumn; -import edu.stanford.futuredata.macrobase.sql.tree.DropTable; import edu.stanford.futuredata.macrobase.sql.tree.Except; -import edu.stanford.futuredata.macrobase.sql.tree.Execute; import edu.stanford.futuredata.macrobase.sql.tree.Expression; import edu.stanford.futuredata.macrobase.sql.tree.Identifier; -import edu.stanford.futuredata.macrobase.sql.tree.Insert; import edu.stanford.futuredata.macrobase.sql.tree.Intersect; import edu.stanford.futuredata.macrobase.sql.tree.Join; import edu.stanford.futuredata.macrobase.sql.tree.JoinCriteria; import edu.stanford.futuredata.macrobase.sql.tree.JoinOn; import edu.stanford.futuredata.macrobase.sql.tree.JoinUsing; -import edu.stanford.futuredata.macrobase.sql.tree.Lateral; -import edu.stanford.futuredata.macrobase.sql.tree.LikeClause; import edu.stanford.futuredata.macrobase.sql.tree.NaturalJoin; import edu.stanford.futuredata.macrobase.sql.tree.Node; import edu.stanford.futuredata.macrobase.sql.tree.OrderBy; -import edu.stanford.futuredata.macrobase.sql.tree.Property; import edu.stanford.futuredata.macrobase.sql.tree.QualifiedName; import edu.stanford.futuredata.macrobase.sql.tree.Query; import edu.stanford.futuredata.macrobase.sql.tree.QuerySpecification; import edu.stanford.futuredata.macrobase.sql.tree.Relation; -import edu.stanford.futuredata.macrobase.sql.tree.RenameColumn; -import edu.stanford.futuredata.macrobase.sql.tree.RenameSchema; -import edu.stanford.futuredata.macrobase.sql.tree.RenameTable; import edu.stanford.futuredata.macrobase.sql.tree.Row; import edu.stanford.futuredata.macrobase.sql.tree.SampledRelation; import edu.stanford.futuredata.macrobase.sql.tree.Select; import edu.stanford.futuredata.macrobase.sql.tree.SelectItem; -import edu.stanford.futuredata.macrobase.sql.tree.ShowColumns; -import edu.stanford.futuredata.macrobase.sql.tree.ShowTables; import edu.stanford.futuredata.macrobase.sql.tree.SingleColumn; import edu.stanford.futuredata.macrobase.sql.tree.Table; import edu.stanford.futuredata.macrobase.sql.tree.TableSubquery; import edu.stanford.futuredata.macrobase.sql.tree.Union; -import edu.stanford.futuredata.macrobase.sql.tree.Unnest; import edu.stanford.futuredata.macrobase.sql.tree.Values; -import edu.stanford.futuredata.macrobase.sql.tree.With; -import edu.stanford.futuredata.macrobase.sql.tree.WithQuery; import java.util.Iterator; import java.util.List; import java.util.Optional; @@ -114,73 +92,10 @@ protected Void visitExpression(Expression node, Integer indent) { return null; } - @Override - protected Void visitUnnest(Unnest node, Integer indent) { - builder.append("UNNEST(") - .append(node.getExpressions().stream() - .map(expression -> formatExpression(expression, parameters)) - .collect(joining(", "))) - .append(")"); - if (node.isWithOrdinality()) { - builder.append(" WITH ORDINALITY"); - } - return null; - } - - @Override - protected Void visitLateral(Lateral node, Integer indent) { - append(indent, "LATERAL ("); - process(node.getQuery(), indent + 1); - append(indent, ")"); - return null; - } - - @Override - protected Void visitExecute(Execute node, Integer indent) { - append(indent, "EXECUTE "); - builder.append(node.getName()); - List parameters = node.getParameters(); - if (!parameters.isEmpty()) { - builder.append(" USING "); - Joiner.on(", ").appendTo(builder, parameters); - } - return null; - } - @Override protected Void visitQuery(Query node, Integer indent) { - if (node.getWith().isPresent()) { - With with = node.getWith().get(); - append(indent, "WITH"); - if (with.isRecursive()) { - builder.append(" RECURSIVE"); - } - builder.append("\n "); - Iterator queries = with.getQueries().iterator(); - while (queries.hasNext()) { - WithQuery query = queries.next(); - append(indent, formatExpression(query.getName(), parameters)); - query.getColumnNames().ifPresent(columnNames -> appendAliasColumns(builder, columnNames)); - builder.append(" AS "); - process(new TableSubquery(query.getQuery()), indent); - builder.append('\n'); - if (queries.hasNext()) { - builder.append(", "); - } - } - } - processRelation(node.getQueryBody(), indent); - if (node.getOrderBy().isPresent()) { - process(node.getOrderBy().get(), indent); - } - - if (node.getLimit().isPresent()) { - append(indent, "LIMIT " + node.getLimit().get()) - .append('\n'); - } - return null; } @@ -430,142 +345,6 @@ protected Void visitIntersect(Intersect node, Integer indent) { return null; } - @Override - protected Void visitShowTables(ShowTables node, Integer context) { - builder.append("SHOW TABLES"); - - node.getSchema().ifPresent(value -> - builder.append(" FROM ") - .append(formatName(value))); - - node.getLikePattern().ifPresent(value -> - builder.append(" LIKE ") - .append(formatStringLiteral(value))); - - return null; - } - - @Override - protected Void visitShowColumns(ShowColumns node, Integer context) { - builder.append("SHOW COLUMNS FROM ") - .append(formatName(node.getTable())); - - return null; - } - - @Override - protected Void visitDelete(Delete node, Integer context) { - builder.append("DELETE FROM ") - .append(formatName(node.getTable().getName())); - - if (node.getWhere().isPresent()) { - builder.append(" WHERE ") - .append(formatExpression(node.getWhere().get(), parameters)); - } - - return null; - } - - @Override - protected Void visitRenameSchema(RenameSchema node, Integer context) { - builder.append("ALTER SCHEMA ") - .append(formatName(node.getSource())) - .append(" RENAME TO ") - .append(formatExpression(node.getTarget(), parameters)); - - return null; - } - - @Override - protected Void visitCreateTableAsSelect(CreateTableAsSelect node, Integer indent) { - builder.append("CREATE TABLE "); - if (node.isNotExists()) { - builder.append("IF NOT EXISTS "); - } - builder.append(formatName(node.getName())); - - if (node.getColumnAliases().isPresent()) { - String columnList = node.getColumnAliases().get().stream() - .map(element -> formatExpression(element, parameters)).collect(joining(", ")); - builder.append(format("( %s )", columnList)); - } - - if (node.getComment().isPresent()) { - builder.append("\nCOMMENT " + formatStringLiteral(node.getComment().get())); - } - - builder.append(formatProperties(node.getProperties())); - - builder.append(" AS "); - process(node.getQuery(), indent); - - if (!node.isWithData()) { - builder.append(" WITH NO DATA"); - } - - return null; - } - - @Override - protected Void visitCreateTable(CreateTable node, Integer indent) { - builder.append("CREATE TABLE "); - if (node.isNotExists()) { - builder.append("IF NOT EXISTS "); - } - String tableName = formatName(node.getName()); - builder.append(tableName).append(" (\n"); - - String elementIndent = indentString(indent + 1); - String columnList = node.getElements().stream() - .map(element -> { - if (element instanceof ColumnDefinition) { - ColumnDefinition column = (ColumnDefinition) element; - return elementIndent + formatExpression(column.getName(), parameters) + " " + column - .getType() + - column.getComment() - .map(comment -> " COMMENT " + formatStringLiteral(comment)) - .orElse(""); - } - if (element instanceof LikeClause) { - LikeClause likeClause = (LikeClause) element; - StringBuilder builder = new StringBuilder(elementIndent); - builder.append("LIKE ") - .append(formatName(likeClause.getTableName())); - if (likeClause.getPropertiesOption().isPresent()) { - builder.append(" ") - .append(likeClause.getPropertiesOption().get().name()) - .append(" PROPERTIES"); - } - return builder.toString(); - } - throw new UnsupportedOperationException("unknown table element: " + element); - }) - .collect(joining(",\n")); - builder.append(columnList); - builder.append("\n").append(")"); - - if (node.getComment().isPresent()) { - builder.append("\nCOMMENT " + formatStringLiteral(node.getComment().get())); - } - - builder.append(formatProperties(node.getProperties())); - - return null; - } - - private String formatProperties(List properties) { - if (properties.isEmpty()) { - return ""; - } - String propertyList = properties.stream() - .map(element -> INDENT + - formatExpression(element.getName(), parameters) + " = " + - formatExpression(element.getValue(), parameters)) - .collect(joining(",\n")); - - return "\nWITH (\n" + propertyList + "\n)"; - } - private static String formatName(String name) { if (NAME_PATTERN.matcher(name).matches()) { return name; @@ -579,78 +358,6 @@ private static String formatName(QualifiedName name) { .collect(joining(".")); } - @Override - protected Void visitDropTable(DropTable node, Integer context) { - builder.append("DROP TABLE "); - if (node.isExists()) { - builder.append("IF EXISTS "); - } - builder.append(node.getTableName()); - - return null; - } - - @Override - protected Void visitRenameTable(RenameTable node, Integer context) { - builder.append("ALTER TABLE ") - .append(node.getSource()) - .append(" RENAME TO ") - .append(node.getTarget()); - - return null; - } - - @Override - protected Void visitRenameColumn(RenameColumn node, Integer context) { - builder.append("ALTER TABLE ") - .append(node.getTable()) - .append(" RENAME COLUMN ") - .append(node.getSource()) - .append(" TO ") - .append(node.getTarget()); - - return null; - } - - @Override - protected Void visitDropColumn(DropColumn node, Integer context) { - builder.append("ALTER TABLE ") - .append(formatName(node.getTable())) - .append(" DROP COLUMN ") - .append(formatExpression(node.getColumn(), parameters)); - - return null; - } - - @Override - protected Void visitAddColumn(AddColumn node, Integer indent) { - builder.append("ALTER TABLE ") - .append(node.getName()) - .append(" ADD COLUMN ") - .append(node.getColumn().getName()) - .append(" ") - .append(node.getColumn().getType()); - - return null; - } - - @Override - protected Void visitInsert(Insert node, Integer indent) { - builder.append("INSERT INTO ") - .append(node.getTarget()) - .append(" "); - - if (node.getColumns().isPresent()) { - builder.append("(") - .append(Joiner.on(", ").join(node.getColumns().get())) - .append(") "); - } - - process(node.getQuery(), indent); - - return null; - } - @Override protected Void visitRow(Row node, Integer indent) { builder.append("ROW("); diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/parser/AstBuilder.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/parser/AstBuilder.java index 7805205e4..89b9968ee 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/parser/AstBuilder.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/parser/AstBuilder.java @@ -24,7 +24,6 @@ import edu.stanford.futuredata.macrobase.SqlBaseBaseVisitor; import edu.stanford.futuredata.macrobase.SqlBaseLexer; import edu.stanford.futuredata.macrobase.SqlBaseParser; -import edu.stanford.futuredata.macrobase.SqlBaseParser.MinRatioExpressionContext; import edu.stanford.futuredata.macrobase.sql.tree.Aggregate; import edu.stanford.futuredata.macrobase.sql.tree.AggregateExpression; import edu.stanford.futuredata.macrobase.sql.tree.AliasedRelation; @@ -44,15 +43,14 @@ import edu.stanford.futuredata.macrobase.sql.tree.ComparisonExpression; import edu.stanford.futuredata.macrobase.sql.tree.ComparisonExpressionType; import edu.stanford.futuredata.macrobase.sql.tree.Cube; -import edu.stanford.futuredata.macrobase.sql.tree.CurrentTime; import edu.stanford.futuredata.macrobase.sql.tree.DecimalLiteral; -import edu.stanford.futuredata.macrobase.sql.tree.DelimiterExpression; +import edu.stanford.futuredata.macrobase.sql.tree.DelimiterClause; import edu.stanford.futuredata.macrobase.sql.tree.DereferenceExpression; import edu.stanford.futuredata.macrobase.sql.tree.DiffQuerySpecification; import edu.stanford.futuredata.macrobase.sql.tree.DoubleLiteral; import edu.stanford.futuredata.macrobase.sql.tree.Except; import edu.stanford.futuredata.macrobase.sql.tree.ExistsPredicate; -import edu.stanford.futuredata.macrobase.sql.tree.ExportExpression; +import edu.stanford.futuredata.macrobase.sql.tree.ExportClause; import edu.stanford.futuredata.macrobase.sql.tree.Expression; import edu.stanford.futuredata.macrobase.sql.tree.Extract; import edu.stanford.futuredata.macrobase.sql.tree.FrameBound; @@ -77,7 +75,6 @@ import edu.stanford.futuredata.macrobase.sql.tree.JoinUsing; import edu.stanford.futuredata.macrobase.sql.tree.LambdaArgumentDeclaration; import edu.stanford.futuredata.macrobase.sql.tree.LambdaExpression; -import edu.stanford.futuredata.macrobase.sql.tree.Lateral; import edu.stanford.futuredata.macrobase.sql.tree.LikePredicate; import edu.stanford.futuredata.macrobase.sql.tree.LogicalBinaryExpression; import edu.stanford.futuredata.macrobase.sql.tree.LongLiteral; @@ -117,13 +114,10 @@ import edu.stanford.futuredata.macrobase.sql.tree.TimestampLiteral; import edu.stanford.futuredata.macrobase.sql.tree.TryExpression; import edu.stanford.futuredata.macrobase.sql.tree.Union; -import edu.stanford.futuredata.macrobase.sql.tree.Unnest; import edu.stanford.futuredata.macrobase.sql.tree.Values; import edu.stanford.futuredata.macrobase.sql.tree.WhenClause; import edu.stanford.futuredata.macrobase.sql.tree.Window; import edu.stanford.futuredata.macrobase.sql.tree.WindowFrame; -import edu.stanford.futuredata.macrobase.sql.tree.With; -import edu.stanford.futuredata.macrobase.sql.tree.WithQuery; import java.util.Iterator; import java.util.List; import java.util.Optional; @@ -151,39 +145,6 @@ public Node visitSingleExpression(SqlBaseParser.SingleExpressionContext context) @Override public Node visitQuery(SqlBaseParser.QueryContext context) { - Query body = (Query) visit(context.queryNoWith()); - // TODO: get rid of this - - return new Query( - getLocation(context), - visitIfPresent(context.with(), With.class), - body.getQueryBody(), - body.getOrderBy(), - body.getLimit()); - } - - @Override - public Node visitWith(SqlBaseParser.WithContext context) { - return new With(getLocation(context), context.RECURSIVE() != null, - visit(context.namedQuery(), WithQuery.class)); - } - - @Override - public Node visitNamedQuery(SqlBaseParser.NamedQueryContext context) { - Optional> columns = Optional.empty(); - if (context.columnAliases() != null) { - columns = Optional.of(visit(context.columnAliases().identifier(), Identifier.class)); - } - - return new WithQuery( - getLocation(context), - (Identifier) visit(context.name), - (Query) visit(context.query()), - columns); - } - - @Override - public Node visitQueryNoWith(SqlBaseParser.QueryNoWithContext context) { QueryBody term = (QueryBody) visit(context.queryTerm()); if (term instanceof QuerySpecification) { @@ -196,7 +157,6 @@ public Node visitQueryNoWith(SqlBaseParser.QueryNoWithContext context) { return new Query( getLocation(context), - Optional.empty(), new QuerySpecification( getLocation(context), query.getSelect(), @@ -206,15 +166,12 @@ public Node visitQueryNoWith(SqlBaseParser.QueryNoWithContext context) { query.getHaving(), query.getOrderBy(), query.getLimit(), - query.getExportExpr()), - Optional.empty(), - Optional.empty()); + query.getExportExpr())); } else if (term instanceof DiffQuerySpecification) { DiffQuerySpecification diffQuery = (DiffQuerySpecification) term; return new Query( getLocation(context), - Optional.empty(), new DiffQuerySpecification( getLocation(context), diffQuery.getSelect(), @@ -228,19 +185,15 @@ public Node visitQueryNoWith(SqlBaseParser.QueryNoWithContext context) { diffQuery.getWhere(), diffQuery.getOrderBy(), diffQuery.getLimit(), - diffQuery.getExportExpr()), - Optional.empty(), - Optional.empty()); + diffQuery.getExportExpr())); } return new Query( getLocation(context), - Optional.empty(), - term, - Optional.empty(), - Optional.empty()); + term); } + // Import CSVs into SQL @Override public Node visitImportCsv(SqlBaseParser.ImportCsvContext context) { String filename = context.STRING().getText(); @@ -258,19 +211,20 @@ public Node visitImportCsv(SqlBaseParser.ImportCsvContext context) { // Exporting queries to CSVs @Override - public Node visitExportExpression(SqlBaseParser.ExportExpressionContext context) { + public Node visitExportClause(SqlBaseParser.ExportClauseContext context) { // TODO: support custom escape character - return new ExportExpression(getLocation(context), - visitIfPresent(context.delimiterExpression(0), DelimiterExpression.class), - visitIfPresent(context.delimiterExpression(1), DelimiterExpression.class), + return new ExportClause(getLocation(context), + visitIfPresent(context.delimiterClause(0), DelimiterClause.class), + visitIfPresent(context.delimiterClause(1), DelimiterClause.class), unquote(getTextIfPresent(context.filename).get())); } @Override - public Node visitDelimiterExpression(SqlBaseParser.DelimiterExpressionContext context) { - return new DelimiterExpression(getLocation(context), unquote(context.delimiter.getText())); + public Node visitDelimiterClause(SqlBaseParser.DelimiterClauseContext context) { + return new DelimiterClause(getLocation(context), unquote(context.delimiter.getText())); } + /***** Begin DIFF query ******/ @Override public Node visitAggregate(SqlBaseParser.AggregateContext context) { return new Aggregate(getLocation(context), context.getText()); @@ -283,12 +237,14 @@ public Node visitAggregateExpression(SqlBaseParser.AggregateExpressionContext co @Override public Node visitMinRatioExpression(SqlBaseParser.MinRatioExpressionContext context) { - return new MinRatioExpression(getLocation(context), new DecimalLiteral(context.minRatio.getText())); + return new MinRatioExpression(getLocation(context), + new DecimalLiteral(context.minRatio.getText())); } @Override public Node visitMinSupportExpression(SqlBaseParser.MinSupportExpressionContext context) { - return new MinSupportExpression(getLocation(context), new DecimalLiteral(context.minSupport.getText())); + return new MinSupportExpression(getLocation(context), + new DecimalLiteral(context.minSupport.getText())); } @Override @@ -299,11 +255,11 @@ public Node visitRatioMetricExpression(SqlBaseParser.RatioMetricExpressionContex @Override public Node visitDiffQuerySpecification(SqlBaseParser.DiffQuerySpecificationContext context) { - Optional first; - Optional second = Optional.empty(); + Optional first; + Optional second = Optional.empty(); List selectItems = visit(context.selectItem(), SelectItem.class); - List subqueries = visit(context.queryNoWith(), Query.class); + List subqueries = visit(context.queryTerm(), TableSubquery.class); check(subqueries.size() > 0 && subqueries.size() <= 2, "At least one and at most two relations required for diff query", context); @@ -330,8 +286,8 @@ public Node visitDiffQuerySpecification(SqlBaseParser.DiffQuerySpecificationCont .of(new OrderBy(getLocation(context.ORDER()), visit(context.sortItem(), SortItem.class))); } - Optional exportExpr = visitIfPresent(context.exportExpression(), - ExportExpression.class); + Optional exportExpr = visitIfPresent(context.exportClause(), + ExportClause.class); return new DiffQuerySpecification( getLocation(context), @@ -349,6 +305,8 @@ public Node visitDiffQuerySpecification(SqlBaseParser.DiffQuerySpecificationCont exportExpr); } + /***** End DIFF query ******/ + @Override public Node visitQuerySpecification(SqlBaseParser.QuerySpecificationContext context) { Optional from = Optional.empty(); @@ -374,8 +332,8 @@ public Node visitQuerySpecification(SqlBaseParser.QuerySpecificationContext cont .of(new OrderBy(getLocation(context.ORDER()), visit(context.sortItem(), SortItem.class))); } - Optional exportExpr = visitIfPresent(context.exportExpression(), - ExportExpression.class); + Optional exportExpr = visitIfPresent(context.exportClause(), + ExportClause.class); return new QuerySpecification( getLocation(context), @@ -469,7 +427,7 @@ public Node visitTable(SqlBaseParser.TableContext context) { @Override public Node visitSubquery(SqlBaseParser.SubqueryContext context) { - return new TableSubquery(getLocation(context), (Query) visit(context.queryNoWith())); + return new TableSubquery(getLocation(context), (Query) visit(context.query())); } @Override @@ -576,17 +534,6 @@ public Node visitSubqueryRelation(SqlBaseParser.SubqueryRelationContext context) return new TableSubquery(getLocation(context), (Query) visit(context.query())); } - @Override - public Node visitUnnest(SqlBaseParser.UnnestContext context) { - return new Unnest(getLocation(context), visit(context.expression(), Expression.class), - context.ORDINALITY() != null); - } - - @Override - public Node visitLateral(SqlBaseParser.LateralContext context) { - return new Lateral(getLocation(context), (Query) visit(context.query())); - } - @Override public Node visitParenthesizedRelation(SqlBaseParser.ParenthesizedRelationContext context) { return visit(context.relation()); @@ -794,18 +741,6 @@ public Node visitCast(SqlBaseParser.CastContext context) { getType(context.type()), isTryCast); } - @Override - public Node visitSpecialDateTimeFunction(SqlBaseParser.SpecialDateTimeFunctionContext context) { - CurrentTime.Type type = getDateTimeFunctionType(context.name); - - if (context.precision != null) { - return new CurrentTime(getLocation(context), type, - Integer.parseInt(context.precision.getText())); - } - - return new CurrentTime(getLocation(context), type); - } - @Override public Node visitExtract(SqlBaseParser.ExtractContext context) { String fieldString = context.identifier().getText(); @@ -818,12 +753,6 @@ public Node visitExtract(SqlBaseParser.ExtractContext context) { return new Extract(getLocation(context), (Expression) visit(context.valueExpression()), field); } - @Override - public Node visitSubstring(SqlBaseParser.SubstringContext context) { - return new FunctionCall(getLocation(context), QualifiedName.of("substr"), - visit(context.valueExpression(), Expression.class)); - } - @Override public Node visitPosition(SqlBaseParser.PositionContext context) { List arguments = Lists.reverse(visit(context.valueExpression(), Expression.class)); @@ -1342,23 +1271,6 @@ private static ComparisonExpressionType getComparisonOperator(Token symbol) { throw new IllegalArgumentException("Unsupported operator: " + symbol.getText()); } - private static CurrentTime.Type getDateTimeFunctionType(Token token) { - switch (token.getType()) { - case SqlBaseLexer.CURRENT_DATE: - return CurrentTime.Type.DATE; - case SqlBaseLexer.CURRENT_TIME: - return CurrentTime.Type.TIME; - case SqlBaseLexer.CURRENT_TIMESTAMP: - return CurrentTime.Type.TIMESTAMP; - case SqlBaseLexer.LOCALTIME: - return CurrentTime.Type.LOCALTIME; - case SqlBaseLexer.LOCALTIMESTAMP: - return CurrentTime.Type.LOCALTIMESTAMP; - } - - throw new IllegalArgumentException("Unsupported special function: " + token.getText()); - } - private static IntervalLiteral.IntervalField getIntervalFieldType(Token token) { switch (token.getType()) { case SqlBaseLexer.YEAR: diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AddColumn.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AddColumn.java deleted file mode 100644 index 8c3b28abc..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AddColumn.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class AddColumn - extends Statement { - - private final QualifiedName name; - private final ColumnDefinition column; - - public AddColumn(QualifiedName name, ColumnDefinition column) { - this(Optional.empty(), name, column); - } - - public AddColumn(NodeLocation location, QualifiedName name, ColumnDefinition column) { - this(Optional.of(location), name, column); - } - - private AddColumn(Optional location, QualifiedName name, ColumnDefinition column) { - super(location); - this.name = requireNonNull(name, "table is null"); - this.column = requireNonNull(column, "column is null"); - } - - public QualifiedName getName() { - return name; - } - - public ColumnDefinition getColumn() { - return column; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitAddColumn(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(column); - } - - @Override - public int hashCode() { - return Objects.hash(name, column); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - AddColumn o = (AddColumn) obj; - return Objects.equals(name, o.name) && - Objects.equals(column, o.column); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("name", name) - .add("column", column) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Aggregate.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Aggregate.java index 64e41bcbb..cfecd82cf 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Aggregate.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Aggregate.java @@ -35,11 +35,6 @@ public AggEnum getValue() { return value; } - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitAggregate(this, context); - } - @Override public List getChildren() { ImmutableList.Builder nodes = ImmutableList.builder(); diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AggregateExpression.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AggregateExpression.java index 6d435e5b1..107329aef 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AggregateExpression.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AggregateExpression.java @@ -30,11 +30,6 @@ public Aggregate getAgg() { return agg; } - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitAggregateExpression(this, context); - } - @Override public List getChildren() { ImmutableList.Builder nodes = ImmutableList.builder(); diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AstVisitor.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AstVisitor.java index 1906042d9..5e7b1a9e2 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AstVisitor.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/AstVisitor.java @@ -33,10 +33,6 @@ protected R visitExpression(Expression node, C context) { return visitNode(node, context); } - protected R visitCurrentTime(CurrentTime node, C context) { - return visitExpression(node, context); - } - protected R visitExtract(Extract node, C context) { return visitExpression(node, context); } @@ -73,26 +69,10 @@ protected R visitStatement(Statement node, C context) { return visitNode(node, context); } - protected R visitExecute(Execute node, C context) { - return visitStatement(node, context); - } - protected R visitQuery(Query node, C context) { return visitStatement(node, context); } - protected R visitShowTables(ShowTables node, C context) { - return visitStatement(node, context); - } - - protected R visitShowColumns(ShowColumns node, C context) { - return visitStatement(node, context); - } - - protected R visitUse(Use node, C context) { - return visitStatement(node, context); - } - protected R visitGenericLiteral(GenericLiteral node, C context) { return visitLiteral(node, context); } @@ -101,14 +81,6 @@ protected R visitTimeLiteral(TimeLiteral node, C context) { return visitLiteral(node, context); } - protected R visitWith(With node, C context) { - return visitNode(node, context); - } - - protected R visitWithQuery(WithQuery node, C context) { - return visitNode(node, context); - } - protected R visitSelect(Select node, C context) { return visitNode(node, context); } @@ -285,14 +257,6 @@ protected R visitTable(Table node, C context) { return visitQueryBody(node, context); } - protected R visitUnnest(Unnest node, C context) { - return visitRelation(node, context); - } - - protected R visitLateral(Lateral node, C context) { - return visitRelation(node, context); - } - protected R visitValues(Values node, C context) { return visitQueryBody(node, context); } @@ -345,66 +309,10 @@ protected R visitFrameBound(FrameBound node, C context) { return visitNode(node, context); } - protected R visitTableElement(TableElement node, C context) { - return visitNode(node, context); - } - protected R visitColumnDefinition(ColumnDefinition node, C context) { - return visitTableElement(node, context); - } - - protected R visitLikeClause(LikeClause node, C context) { - return visitTableElement(node, context); - } - - protected R visitCreateSchema(CreateSchema node, C context) { - return visitStatement(node, context); - } - - protected R visitRenameSchema(RenameSchema node, C context) { - return visitStatement(node, context); - } - - protected R visitCreateTable(CreateTable node, C context) { - return visitStatement(node, context); - } - - protected R visitCreateTableAsSelect(CreateTableAsSelect node, C context) { - return visitStatement(node, context); - } - - protected R visitProperty(Property node, C context) { return visitNode(node, context); } - protected R visitDropTable(DropTable node, C context) { - return visitStatement(node, context); - } - - protected R visitRenameTable(RenameTable node, C context) { - return visitStatement(node, context); - } - - protected R visitRenameColumn(RenameColumn node, C context) { - return visitStatement(node, context); - } - - protected R visitDropColumn(DropColumn node, C context) { - return visitStatement(node, context); - } - - protected R visitAddColumn(AddColumn node, C context) { - return visitStatement(node, context); - } - - protected R visitInsert(Insert node, C context) { - return visitStatement(node, context); - } - - protected R visitDelete(Delete node, C context) { - return visitStatement(node, context); - } - protected R visitAtTimeZone(AtTimeZone node, C context) { return visitExpression(node, context); } @@ -449,14 +357,6 @@ protected R visitGroupingOperation(GroupingOperation node, C context) { return visitExpression(node, context); } - public R visitAggregate(Aggregate node, C context) { - return visitNode(node, context); - } - - public R visitAggregateExpression(AggregateExpression node, C context) { - return visitNode(node, context); - } - public R visitRatioMetricExpression(RatioMetricExpression node, C context) { return visitExpression(node, context); } @@ -464,16 +364,4 @@ public R visitRatioMetricExpression(RatioMetricExpression node, C context) { public R visitImportCsv(ImportCsv node, C context) { return visitStatement(node, context); } - - public R visitDelimiterExpression(DelimiterExpression node, C context) { - return visitNode(node, context); - } - - public R visitMinRatioExpression(MinRatioExpression node, C context) { - return visitNode(node, context); - } - - public R visitMinSupportExpression(MinSupportExpression node, C context) { - return visitNode(node, context); - } } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ColumnDefinition.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ColumnDefinition.java index 6c9e5274f..52cfc86b2 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ColumnDefinition.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ColumnDefinition.java @@ -21,8 +21,7 @@ import java.util.Objects; import java.util.Optional; -public final class ColumnDefinition - extends TableElement { +public final class ColumnDefinition extends Node { private final Identifier name; private final String type; diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateSchema.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateSchema.java deleted file mode 100644 index de9dff79a..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateSchema.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class CreateSchema - extends Statement { - - private final QualifiedName schemaName; - private final boolean notExists; - private final List properties; - - public CreateSchema(QualifiedName schemaName, boolean notExists, List properties) { - this(Optional.empty(), schemaName, notExists, properties); - } - - public CreateSchema(NodeLocation location, QualifiedName schemaName, boolean notExists, - List properties) { - this(Optional.of(location), schemaName, notExists, properties); - } - - private CreateSchema(Optional location, QualifiedName schemaName, boolean notExists, - List properties) { - super(location); - this.schemaName = requireNonNull(schemaName, "schemaName is null"); - this.notExists = notExists; - this.properties = ImmutableList.copyOf(requireNonNull(properties, "properties is null")); - } - - public QualifiedName getSchemaName() { - return schemaName; - } - - public boolean isNotExists() { - return notExists; - } - - public List getProperties() { - return properties; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitCreateSchema(this, context); - } - - @Override - public List getChildren() { - return properties; - } - - @Override - public int hashCode() { - return Objects.hash(schemaName, notExists, properties); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - CreateSchema o = (CreateSchema) obj; - return Objects.equals(schemaName, o.schemaName) && - Objects.equals(notExists, o.notExists) && - Objects.equals(properties, o.properties); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("schemaName", schemaName) - .add("notExists", notExists) - .add("properties", properties) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateTable.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateTable.java deleted file mode 100644 index aa370396d..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateTable.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class CreateTable - extends Statement { - - private final QualifiedName name; - private final List elements; - private final boolean notExists; - private final List properties; - private final Optional comment; - - public CreateTable(QualifiedName name, List elements, boolean notExists, - List properties, Optional comment) { - this(Optional.empty(), name, elements, notExists, properties, comment); - } - - public CreateTable(NodeLocation location, QualifiedName name, List elements, - boolean notExists, List properties, Optional comment) { - this(Optional.of(location), name, elements, notExists, properties, comment); - } - - private CreateTable(Optional location, QualifiedName name, - List elements, boolean notExists, List properties, - Optional comment) { - super(location); - this.name = requireNonNull(name, "table is null"); - this.elements = ImmutableList.copyOf(requireNonNull(elements, "elements is null")); - this.notExists = notExists; - this.properties = requireNonNull(properties, "properties is null"); - this.comment = requireNonNull(comment, "comment is null"); - } - - public QualifiedName getName() { - return name; - } - - public List getElements() { - return elements; - } - - public boolean isNotExists() { - return notExists; - } - - public List getProperties() { - return properties; - } - - public Optional getComment() { - return comment; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitCreateTable(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.builder() - .addAll(elements) - .addAll(properties) - .build(); - } - - @Override - public int hashCode() { - return Objects.hash(name, elements, notExists, properties, comment); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - CreateTable o = (CreateTable) obj; - return Objects.equals(name, o.name) && - Objects.equals(elements, o.elements) && - Objects.equals(notExists, o.notExists) && - Objects.equals(properties, o.properties) && - Objects.equals(comment, o.comment); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("name", name) - .add("elements", elements) - .add("notExists", notExists) - .add("properties", properties) - .add("comment", comment) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateTableAsSelect.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateTableAsSelect.java deleted file mode 100644 index e5416166d..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CreateTableAsSelect.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class CreateTableAsSelect - extends Statement { - - private final QualifiedName name; - private final Query query; - private final boolean notExists; - private final List properties; - private final boolean withData; - private final Optional> columnAliases; - private final Optional comment; - - public CreateTableAsSelect(QualifiedName name, Query query, boolean notExists, - List properties, boolean withData, Optional> columnAliases, - Optional comment) { - this(Optional.empty(), name, query, notExists, properties, withData, columnAliases, comment); - } - - public CreateTableAsSelect(NodeLocation location, QualifiedName name, Query query, - boolean notExists, List properties, boolean withData, - Optional> columnAliases, Optional comment) { - this(Optional.of(location), name, query, notExists, properties, withData, columnAliases, - comment); - } - - private CreateTableAsSelect(Optional location, QualifiedName name, Query query, - boolean notExists, List properties, boolean withData, - Optional> columnAliases, Optional comment) { - super(location); - this.name = requireNonNull(name, "name is null"); - this.query = requireNonNull(query, "query is null"); - this.notExists = notExists; - this.properties = ImmutableList.copyOf(requireNonNull(properties, "properties is null")); - this.withData = withData; - this.columnAliases = columnAliases; - this.comment = requireNonNull(comment, "comment is null"); - } - - public QualifiedName getName() { - return name; - } - - public Query getQuery() { - return query; - } - - public boolean isNotExists() { - return notExists; - } - - public List getProperties() { - return properties; - } - - public boolean isWithData() { - return withData; - } - - public Optional> getColumnAliases() { - return columnAliases; - } - - public Optional getComment() { - return comment; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitCreateTableAsSelect(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.builder() - .add(query) - .addAll(properties) - .build(); - } - - @Override - public int hashCode() { - return Objects.hash(name, query, properties, withData, columnAliases, comment); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - CreateTableAsSelect o = (CreateTableAsSelect) obj; - return Objects.equals(name, o.name) - && Objects.equals(query, o.query) - && Objects.equals(notExists, o.notExists) - && Objects.equals(properties, o.properties) - && Objects.equals(withData, o.withData) - && Objects.equals(columnAliases, o.columnAliases) - && Objects.equals(comment, o.comment); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("name", name) - .add("query", query) - .add("notExists", notExists) - .add("properties", properties) - .add("withData", withData) - .add("columnAliases", columnAliases) - .add("comment", comment) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CurrentTime.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CurrentTime.java deleted file mode 100644 index c58b8ca68..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/CurrentTime.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class CurrentTime - extends Expression { - - private final Type type; - private final Integer precision; - - public enum Type { - TIME("current_time"), - DATE("current_date"), - TIMESTAMP("current_timestamp"), - LOCALTIME("localtime"), - LOCALTIMESTAMP("localtimestamp"); - - private final String name; - - Type(String name) { - this.name = name; - } - - public String getName() { - return name; - } - } - - public CurrentTime(Type type) { - this(Optional.empty(), type, null); - } - - public CurrentTime(NodeLocation location, Type type) { - this(Optional.of(location), type, null); - } - - public CurrentTime(Type type, Integer precision) { - this(Optional.empty(), type, precision); - } - - public CurrentTime(NodeLocation location, Type type, Integer precision) { - this(Optional.of(location), type, precision); - } - - private CurrentTime(Optional location, Type type, Integer precision) { - super(location); - requireNonNull(type, "type is null"); - this.type = type; - this.precision = precision; - } - - public Type getType() { - return type; - } - - public Integer getPrecision() { - return precision; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitCurrentTime(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if ((o == null) || (getClass() != o.getClass())) { - return false; - } - CurrentTime that = (CurrentTime) o; - return (type == that.type) && - Objects.equals(precision, that.precision); - } - - @Override - public int hashCode() { - return Objects.hash(type, precision); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Delete.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Delete.java deleted file mode 100644 index 32bf2123e..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Delete.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class Delete - extends Statement { - - private final Table table; - private final Optional where; - - public Delete(Table table, Optional where) { - this(Optional.empty(), table, where); - } - - public Delete(NodeLocation location, Table table, Optional where) { - this(Optional.of(location), table, where); - } - - private Delete(Optional location, Table table, Optional where) { - super(location); - this.table = requireNonNull(table, "table is null"); - this.where = requireNonNull(where, "where is null"); - } - - public Table getTable() { - return table; - } - - public Optional getWhere() { - return where; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitDelete(this, context); - } - - @Override - public List getChildren() { - ImmutableList.Builder nodes = ImmutableList.builder(); - nodes.add(table); - where.ifPresent(nodes::add); - return nodes.build(); - } - - @Override - public int hashCode() { - return Objects.hash(table, where); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - Delete o = (Delete) obj; - return Objects.equals(table, o.table) && - Objects.equals(where, o.where); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("table", table.getName()) - .add("where", where) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DelimiterExpression.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DelimiterClause.java similarity index 71% rename from sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DelimiterExpression.java rename to sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DelimiterClause.java index fef22c054..8a91c5b5d 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DelimiterExpression.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DelimiterClause.java @@ -7,29 +7,24 @@ import java.util.Optional; import org.apache.commons.lang3.StringEscapeUtils; -public class DelimiterExpression extends Node { +public class DelimiterClause extends Node { private final String delimiter; - public DelimiterExpression(String delimiter) { + public DelimiterClause(String delimiter) { this(Optional.empty(), delimiter); } - public DelimiterExpression(NodeLocation location, String delimiter) { + public DelimiterClause(NodeLocation location, String delimiter) { this(Optional.of(location), delimiter); } - private DelimiterExpression(Optional location, String delimiter) { + private DelimiterClause(Optional location, String delimiter) { super(location); requireNonNull(delimiter, "delimiter is null"); this.delimiter = StringEscapeUtils.unescapeJava(delimiter); } - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitDelimiterExpression(this, context); - } - @Override public List getChildren() { ImmutableList.Builder nodes = ImmutableList.builder(); @@ -51,7 +46,7 @@ public boolean equals(Object obj) { return false; } - DelimiterExpression o = (DelimiterExpression) obj; + DelimiterClause o = (DelimiterClause) obj; return o.delimiter.equals(delimiter); } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DiffQuerySpecification.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DiffQuerySpecification.java index b034bba93..3b8f9071f 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DiffQuerySpecification.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DiffQuerySpecification.java @@ -11,8 +11,8 @@ public class DiffQuerySpecification extends QueryBody { private final Select select; - private final Optional first; - private final Optional second; + private final Optional first; + private final Optional second; private final List attributeCols; private final Optional minRatioExpr; private final Optional minSupportExpr; @@ -21,7 +21,7 @@ public class DiffQuerySpecification extends QueryBody { private final Optional where; private final Optional orderBy; private final Optional limit; - private final Optional exportExpr; + private final Optional exportExpr; private static final LongLiteral DEFAULT_MAX_COMBO = new LongLiteral("3"); private static final MinRatioExpression DEFAULT_MIN_RATIO_EXPRESSION = new MinRatioExpression( @@ -34,8 +34,8 @@ public class DiffQuerySpecification extends QueryBody { public DiffQuerySpecification( Select select, - Optional first, - Optional second, + Optional first, + Optional second, List attributeCols, Optional minRatioExpr, Optional minSupportExpr, @@ -44,7 +44,7 @@ public DiffQuerySpecification( Optional where, Optional orderBy, Optional limit, - Optional exportExpr) { + Optional exportExpr) { this(Optional.empty(), select, first, second, attributeCols, minRatioExpr, minSupportExpr, ratioMetricExpr, maxCombo, where, orderBy, limit, exportExpr); @@ -53,8 +53,8 @@ public DiffQuerySpecification( public DiffQuerySpecification( NodeLocation location, Select select, - Optional first, - Optional second, + Optional first, + Optional second, List attributeCols, Optional minRatioExpr, Optional minSupportExpr, @@ -63,7 +63,7 @@ public DiffQuerySpecification( Optional where, Optional orderBy, Optional limit, - Optional exportExpr) { + Optional exportExpr) { this(Optional.of(location), select, first, second, attributeCols, minRatioExpr, minSupportExpr, ratioMetricExpr, maxCombo, where, orderBy, limit, exportExpr); @@ -72,8 +72,8 @@ public DiffQuerySpecification( private DiffQuerySpecification( Optional location, Select select, - Optional first, - Optional second, + Optional first, + Optional second, List attributeCols, Optional minRatioExpr, Optional minSupportExpr, @@ -82,7 +82,7 @@ private DiffQuerySpecification( Optional where, Optional orderBy, Optional limit, - Optional exportExpr) { + Optional exportExpr) { super(location); requireNonNull(select, "select is null"); requireNonNull(first, "first is null"); @@ -115,11 +115,11 @@ public Select getSelect() { return select; } - public Optional getFirst() { + public Optional getFirst() { return first; } - public Optional getSecond() { + public Optional getSecond() { return second; } @@ -155,7 +155,7 @@ public Optional getLimit() { return limit; } - public Optional getExportExpr() { + public Optional getExportExpr() { return exportExpr; } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DropColumn.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DropColumn.java deleted file mode 100644 index 680d373d0..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DropColumn.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class DropColumn - extends Statement { - - private final QualifiedName table; - private final Identifier column; - - public DropColumn(QualifiedName table, Identifier column) { - this(Optional.empty(), table, column); - } - - public DropColumn(NodeLocation location, QualifiedName table, Identifier column) { - this(Optional.of(location), table, column); - } - - private DropColumn(Optional location, QualifiedName table, Identifier column) { - super(location); - this.table = requireNonNull(table, "table is null"); - this.column = requireNonNull(column, "column is null"); - } - - public QualifiedName getTable() { - return table; - } - - public Identifier getColumn() { - return column; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitDropColumn(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - DropColumn that = (DropColumn) o; - return Objects.equals(table, that.table) && - Objects.equals(column, that.column); - } - - @Override - public int hashCode() { - return Objects.hash(table, column); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("table", table) - .add("column", column) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DropTable.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DropTable.java deleted file mode 100644 index 3d02fe1ff..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/DropTable.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class DropTable - extends Statement { - - private final QualifiedName tableName; - private final boolean exists; - - public DropTable(QualifiedName tableName, boolean exists) { - this(Optional.empty(), tableName, exists); - } - - public DropTable(NodeLocation location, QualifiedName tableName, boolean exists) { - this(Optional.of(location), tableName, exists); - } - - private DropTable(Optional location, QualifiedName tableName, boolean exists) { - super(location); - this.tableName = tableName; - this.exists = exists; - } - - public QualifiedName getTableName() { - return tableName; - } - - public boolean isExists() { - return exists; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitDropTable(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(); - } - - @Override - public int hashCode() { - return Objects.hash(tableName, exists); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - DropTable o = (DropTable) obj; - return Objects.equals(tableName, o.tableName) - && (exists == o.exists); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("tableName", tableName) - .add("exists", exists) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Except.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Except.java index 41853b6b8..f544774ff 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Except.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Except.java @@ -57,7 +57,7 @@ public R accept(AstVisitor visitor, C context) { } @Override - public Optional getExportExpr() { + public Optional getExportExpr() { return Optional.empty(); } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Execute.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Execute.java deleted file mode 100644 index 6176ff373..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Execute.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class Execute - extends Statement { - - private final Identifier name; - private final List parameters; - - public Execute(NodeLocation location, Identifier name, List parameters) { - this(Optional.of(location), name, parameters); - } - - public Execute(Identifier name, List parameters) { - this(Optional.empty(), name, parameters); - } - - private Execute(Optional location, Identifier name, List parameters) { - super(location); - this.name = requireNonNull(name, "name is null"); - this.parameters = requireNonNull(ImmutableList.copyOf(parameters), "parameters is null"); - } - - public Identifier getName() { - return name; - } - - public List getParameters() { - return parameters; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitExecute(this, context); - } - - @Override - public List getChildren() { - return parameters; - } - - @Override - public int hashCode() { - return Objects.hash(name, parameters); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - Execute o = (Execute) obj; - return Objects.equals(name, o.name) && - Objects.equals(parameters, o.parameters); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("name", name) - .add("parameters", parameters) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExportExpression.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExportClause.java similarity index 74% rename from sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExportExpression.java rename to sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExportClause.java index d01ef507f..0752e8d33 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExportExpression.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExportClause.java @@ -8,40 +8,40 @@ import java.util.Objects; import java.util.Optional; -public class ExportExpression extends Node { +public class ExportClause extends Node { private final String fieldDelimiter; private final String lineDelimiter; private final String filename; - public ExportExpression(Optional fieldDelimiter, - Optional lineDelimiter, + public ExportClause(Optional fieldDelimiter, + Optional lineDelimiter, String filename) { this(Optional.empty(), fieldDelimiter, lineDelimiter, filename); } - public ExportExpression( + public ExportClause( NodeLocation location, - Optional fieldDelimiter, Optional lineDelimiter, + Optional fieldDelimiter, Optional lineDelimiter, String filename) { this(Optional.of(location), fieldDelimiter, lineDelimiter, filename); } - private ExportExpression( + private ExportClause( Optional location, - Optional fieldDelimiter, Optional lineDelimiter, + Optional fieldDelimiter, Optional lineDelimiter, String filename) { super(location); requireNonNull(fieldDelimiter, "fieldDelimiter is null"); requireNonNull(lineDelimiter, "lineDelimiter is null"); requireNonNull(filename, "filename is null"); - this.fieldDelimiter = fieldDelimiter.orElse(new DelimiterExpression(",")).toString(); + this.fieldDelimiter = fieldDelimiter.orElse(new DelimiterClause(",")).toString(); // TODO: change this to throw a parseError if (this.fieldDelimiter.length() != 1) { throw new IllegalArgumentException("fieldDelimiter's length not equal to 1"); } - this.lineDelimiter = lineDelimiter.orElse(new DelimiterExpression("\n")).toString(); + this.lineDelimiter = lineDelimiter.orElse(new DelimiterClause("\n")).toString(); this.filename = filename; } @@ -60,8 +60,8 @@ public String getLineDelimiter() { @Override public List getChildren() { ImmutableList.Builder nodes = ImmutableList.builder(); - nodes.add(new DelimiterExpression(fieldDelimiter)) - .add(new DelimiterExpression(lineDelimiter)) + nodes.add(new DelimiterClause(fieldDelimiter)) + .add(new DelimiterClause(lineDelimiter)) .add(new StringLiteral(filename)); return nodes.build(); } @@ -79,7 +79,7 @@ public boolean equals(Object obj) { if ((obj == null) || (getClass() != obj.getClass())) { return false; } - ExportExpression o = (ExportExpression) obj; + ExportClause o = (ExportClause) obj; return Objects.equals(fieldDelimiter, o.fieldDelimiter) && Objects.equals(lineDelimiter, o.lineDelimiter) && Objects.equals(filename, o.filename); diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExpressionRewriter.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExpressionRewriter.java deleted file mode 100644 index 718112ff0..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExpressionRewriter.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -public class ExpressionRewriter { - - public Expression rewriteExpression(Expression node, C context, - ExpressionTreeRewriter treeRewriter) { - return null; - } - - public Expression rewriteRow(Row node, C context, ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteArithmeticUnary(ArithmeticUnaryExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteArithmeticBinary(ArithmeticBinaryExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteComparisonExpression(ComparisonExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteBetweenPredicate(BetweenPredicate node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteLogicalBinaryExpression(LogicalBinaryExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteNotExpression(NotExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteIsNullPredicate(IsNullPredicate node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteIsNotNullPredicate(IsNotNullPredicate node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteNullIfExpression(NullIfExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteIfExpression(IfExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteSearchedCaseExpression(SearchedCaseExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteSimpleCaseExpression(SimpleCaseExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteWhenClause(WhenClause node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteCoalesceExpression(CoalesceExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteInListExpression(InListExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteFunctionCall(FunctionCall node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteLambdaExpression(LambdaExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteBindExpression(BindExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteLikePredicate(LikePredicate node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteInPredicate(InPredicate node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteExists(ExistsPredicate node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteSubqueryExpression(SubqueryExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteLiteral(Literal node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteArrayConstructor(ArrayConstructor node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteSubscriptExpression(SubscriptExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteIdentifier(Identifier node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteDereferenceExpression(DereferenceExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteExtract(Extract node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteCurrentTime(CurrentTime node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteCast(Cast node, C context, ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteTryExpression(TryExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteAtTimeZone(AtTimeZone node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteFieldReference(FieldReference node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteParameter(Parameter node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteQuantifiedComparison(QuantifiedComparisonExpression node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } - - public Expression rewriteGroupingOperation(GroupingOperation node, C context, - ExpressionTreeRewriter treeRewriter) { - return rewriteExpression(node, context, treeRewriter); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExpressionTreeRewriter.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExpressionTreeRewriter.java deleted file mode 100644 index d9f9e7597..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ExpressionTreeRewriter.java +++ /dev/null @@ -1,911 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.collect.ImmutableList.toImmutableList; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.Iterables; -import java.util.Iterator; -import java.util.List; -import java.util.Optional; - -public final class ExpressionTreeRewriter { - - private final ExpressionRewriter rewriter; - private final AstVisitor> visitor; - - public static T rewriteWith(ExpressionRewriter rewriter, T node) { - return new ExpressionTreeRewriter<>(rewriter).rewrite(node, null); - } - - public static T rewriteWith(ExpressionRewriter rewriter, T node, - C context) { - return new ExpressionTreeRewriter<>(rewriter).rewrite(node, context); - } - - public ExpressionTreeRewriter(ExpressionRewriter rewriter) { - this.rewriter = rewriter; - this.visitor = new RewritingVisitor(); - } - - @SuppressWarnings("unchecked") - public T rewrite(T node, C context) { - return (T) visitor.process(node, new Context<>(context, false)); - } - - /** - * Invoke the default rewrite logic explicitly. Specifically, it skips the invocation of the - * expression rewriter for the provided node. - */ - @SuppressWarnings("unchecked") - public T defaultRewrite(T node, C context) { - return (T) visitor.process(node, new Context<>(context, true)); - } - - private class RewritingVisitor - extends AstVisitor> { - - @Override - protected Expression visitExpression(Expression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - throw new UnsupportedOperationException( - "not yet implemented: " + getClass().getSimpleName() + " for " + node.getClass() - .getName()); - } - - @Override - protected Expression visitRow(Row node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter.rewriteRow(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - ImmutableList.Builder builder = ImmutableList.builder(); - for (Expression expression : node.getItems()) { - builder.add(rewrite(expression, context.get())); - } - - if (!sameElements(node.getItems(), builder.build())) { - return new Row(builder.build()); - } - - return node; - } - - @Override - protected Expression visitArithmeticUnary(ArithmeticUnaryExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteArithmeticUnary(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression child = rewrite(node.getValue(), context.get()); - if (child != node.getValue()) { - return new ArithmeticUnaryExpression(node.getSign(), child); - } - - return node; - } - - @Override - public Expression visitArithmeticBinary(ArithmeticBinaryExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteArithmeticBinary(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression left = rewrite(node.getLeft(), context.get()); - Expression right = rewrite(node.getRight(), context.get()); - - if (left != node.getLeft() || right != node.getRight()) { - return new ArithmeticBinaryExpression(node.getType(), left, right); - } - - return node; - } - - @Override - protected Expression visitArrayConstructor(ArrayConstructor node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteArrayConstructor(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - ImmutableList.Builder builder = ImmutableList.builder(); - for (Expression expression : node.getValues()) { - builder.add(rewrite(expression, context.get())); - } - - if (!sameElements(node.getValues(), builder.build())) { - return new ArrayConstructor(builder.build()); - } - - return node; - } - - @Override - protected Expression visitAtTimeZone(AtTimeZone node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteAtTimeZone(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression value = rewrite(node.getValue(), context.get()); - Expression timeZone = rewrite(node.getTimeZone(), context.get()); - - if (value != node.getValue() || timeZone != node.getTimeZone()) { - return new AtTimeZone(value, timeZone); - } - - return node; - } - - @Override - protected Expression visitSubscriptExpression(SubscriptExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteSubscriptExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression base = rewrite(node.getBase(), context.get()); - Expression index = rewrite(node.getIndex(), context.get()); - - if (base != node.getBase() || index != node.getIndex()) { - return new SubscriptExpression(base, index); - } - - return node; - } - - @Override - public Expression visitComparisonExpression(ComparisonExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteComparisonExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression left = rewrite(node.getLeft(), context.get()); - Expression right = rewrite(node.getRight(), context.get()); - - if (left != node.getLeft() || right != node.getRight()) { - return new ComparisonExpression(node.getType(), left, right); - } - - return node; - } - - @Override - protected Expression visitBetweenPredicate(BetweenPredicate node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteBetweenPredicate(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression value = rewrite(node.getValue(), context.get()); - Expression min = rewrite(node.getMin(), context.get()); - Expression max = rewrite(node.getMax(), context.get()); - - if (value != node.getValue() || min != node.getMin() || max != node.getMax()) { - return new BetweenPredicate(value, min, max); - } - - return node; - } - - @Override - public Expression visitLogicalBinaryExpression(LogicalBinaryExpression node, - Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteLogicalBinaryExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression left = rewrite(node.getLeft(), context.get()); - Expression right = rewrite(node.getRight(), context.get()); - - if (left != node.getLeft() || right != node.getRight()) { - return new LogicalBinaryExpression(node.getType(), left, right); - } - - return node; - } - - @Override - public Expression visitNotExpression(NotExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteNotExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression value = rewrite(node.getValue(), context.get()); - - if (value != node.getValue()) { - return new NotExpression(value); - } - - return node; - } - - @Override - protected Expression visitIsNullPredicate(IsNullPredicate node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteIsNullPredicate(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression value = rewrite(node.getValue(), context.get()); - - if (value != node.getValue()) { - return new IsNullPredicate(value); - } - - return node; - } - - @Override - protected Expression visitIsNotNullPredicate(IsNotNullPredicate node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteIsNotNullPredicate(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression value = rewrite(node.getValue(), context.get()); - - if (value != node.getValue()) { - return new IsNotNullPredicate(value); - } - - return node; - } - - @Override - protected Expression visitNullIfExpression(NullIfExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteNullIfExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression first = rewrite(node.getFirst(), context.get()); - Expression second = rewrite(node.getSecond(), context.get()); - - if (first != node.getFirst() || second != node.getSecond()) { - return new NullIfExpression(first, second); - } - - return node; - } - - @Override - protected Expression visitIfExpression(IfExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteIfExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression condition = rewrite(node.getCondition(), context.get()); - Expression trueValue = rewrite(node.getTrueValue(), context.get()); - Expression falseValue = null; - if (node.getFalseValue().isPresent()) { - falseValue = rewrite(node.getFalseValue().get(), context.get()); - } - - if ((condition != node.getCondition()) || (trueValue != node.getTrueValue()) || (falseValue - != node.getFalseValue().orElse(null))) { - return new IfExpression(condition, trueValue, falseValue); - } - - return node; - } - - @Override - protected Expression visitSearchedCaseExpression(SearchedCaseExpression node, - Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteSearchedCaseExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - ImmutableList.Builder builder = ImmutableList.builder(); - for (WhenClause expression : node.getWhenClauses()) { - builder.add(rewrite(expression, context.get())); - } - - Optional defaultValue = node.getDefaultValue() - .map(value -> rewrite(value, context.get())); - - if (!sameElements(node.getDefaultValue(), defaultValue) || !sameElements( - node.getWhenClauses(), builder.build())) { - return new SearchedCaseExpression(builder.build(), defaultValue); - } - - return node; - } - - @Override - protected Expression visitSimpleCaseExpression(SimpleCaseExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteSimpleCaseExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression operand = rewrite(node.getOperand(), context.get()); - - ImmutableList.Builder builder = ImmutableList.builder(); - for (WhenClause expression : node.getWhenClauses()) { - builder.add(rewrite(expression, context.get())); - } - - Optional defaultValue = node.getDefaultValue() - .map(value -> rewrite(value, context.get())); - - if (operand != node.getOperand() || - !sameElements(node.getDefaultValue(), defaultValue) || - !sameElements(node.getWhenClauses(), builder.build())) { - return new SimpleCaseExpression(operand, builder.build(), defaultValue); - } - - return node; - } - - @Override - protected Expression visitWhenClause(WhenClause node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteWhenClause(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression operand = rewrite(node.getOperand(), context.get()); - Expression result = rewrite(node.getResult(), context.get()); - - if (operand != node.getOperand() || result != node.getResult()) { - return new WhenClause(operand, result); - } - return node; - } - - @Override - protected Expression visitCoalesceExpression(CoalesceExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteCoalesceExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - ImmutableList.Builder builder = ImmutableList.builder(); - for (Expression expression : node.getOperands()) { - builder.add(rewrite(expression, context.get())); - } - - if (!sameElements(node.getOperands(), builder.build())) { - return new CoalesceExpression(builder.build()); - } - - return node; - } - - @Override - public Expression visitTryExpression(TryExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteTryExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression expression = rewrite(node.getInnerExpression(), context.get()); - - if (node.getInnerExpression() != expression) { - return new TryExpression(expression); - } - - return node; - } - - @Override - public Expression visitFunctionCall(FunctionCall node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteFunctionCall(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Optional filter = node.getFilter(); - if (filter.isPresent()) { - Expression filterExpression = filter.get(); - Expression newFilterExpression = rewrite(filterExpression, context.get()); - filter = Optional.of(newFilterExpression); - } - - Optional rewrittenWindow = node.getWindow(); - if (node.getWindow().isPresent()) { - Window window = node.getWindow().get(); - - ImmutableList.Builder partitionBy = ImmutableList.builder(); - for (Expression expression : window.getPartitionBy()) { - partitionBy.add(rewrite(expression, context.get())); - } - - Optional orderBy = Optional.empty(); - if (window.getOrderBy().isPresent()) { - orderBy = Optional.of(rewriteOrderBy(window.getOrderBy().get(), context)); - } - - Optional rewrittenFrame = window.getFrame(); - if (rewrittenFrame.isPresent()) { - WindowFrame frame = rewrittenFrame.get(); - - FrameBound start = frame.getStart(); - if (start.getValue().isPresent()) { - Expression value = rewrite(start.getValue().get(), context.get()); - if (value != start.getValue().get()) { - start = new FrameBound(start.getType(), value, start.getOriginalValue().get()); - } - } - - Optional rewrittenEnd = frame.getEnd(); - if (rewrittenEnd.isPresent()) { - Optional value = rewrittenEnd.get().getValue(); - if (value.isPresent()) { - Expression rewrittenValue = rewrite(value.get(), context.get()); - if (rewrittenValue != value.get()) { - rewrittenEnd = Optional.of(new FrameBound(rewrittenEnd.get().getType(), - rewrittenValue, rewrittenEnd.get().getOriginalValue().get())); - } - } - } - - if ((frame.getStart() != start) || !sameElements(frame.getEnd(), rewrittenEnd)) { - rewrittenFrame = Optional.of(new WindowFrame(frame.getType(), start, rewrittenEnd)); - } - } - - if (!sameElements(window.getPartitionBy(), partitionBy.build()) || - !sameElements(window.getOrderBy(), orderBy) || - !sameElements(window.getFrame(), rewrittenFrame)) { - rewrittenWindow = Optional.of(new Window(partitionBy.build(), orderBy, rewrittenFrame)); - } - } - - ImmutableList.Builder arguments = ImmutableList.builder(); - for (Expression expression : node.getArguments()) { - arguments.add(rewrite(expression, context.get())); - } - - if (!sameElements(node.getArguments(), arguments.build()) || !sameElements(rewrittenWindow, - node.getWindow()) - || !sameElements(filter, node.getFilter())) { - return new FunctionCall(node.getName(), rewrittenWindow, filter, node.isDistinct(), - arguments.build()); - } - return node; - } - - // Since OrderBy contains list of SortItems, we want to process each SortItem's key, which is an expression - private OrderBy rewriteOrderBy(OrderBy orderBy, Context context) { - ImmutableList.Builder sortItems = ImmutableList.builder(); - for (SortItem sortItem : orderBy.getSortItems()) { - Expression sortKey = rewrite(sortItem.getSortKey(), context.get()); - if (sortItem.getSortKey() != sortKey) { - sortItems.add(new SortItem(sortKey, sortItem.getOrdering(), sortItem.getNullOrdering())); - } else { - sortItems.add(sortItem); - } - } - List rewrittenSortItems = sortItems.build(); - if (sameElements(orderBy.getSortItems(), rewrittenSortItems)) { - return orderBy; - } - - return new OrderBy(rewrittenSortItems); - } - - @Override - protected Expression visitLambdaExpression(LambdaExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteLambdaExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression body = rewrite(node.getBody(), context.get()); - if (body != node.getBody()) { - return new LambdaExpression(node.getArguments(), body); - } - - return node; - } - - @Override - protected Expression visitBindExpression(BindExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteBindExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - List values = node.getValues().stream() - .map(value -> rewrite(value, context.get())) - .collect(toImmutableList()); - Expression function = rewrite(node.getFunction(), context.get()); - - if (!sameElements(values, node.getValues()) || (function != node.getFunction())) { - return new BindExpression(values, function); - } - return node; - } - - @Override - public Expression visitLikePredicate(LikePredicate node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteLikePredicate(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression value = rewrite(node.getValue(), context.get()); - Expression pattern = rewrite(node.getPattern(), context.get()); - Expression escape = null; - if (node.getEscape() != null) { - escape = rewrite(node.getEscape(), context.get()); - } - - if (value != node.getValue() || pattern != node.getPattern() || escape != node.getEscape()) { - return new LikePredicate(value, pattern, escape); - } - - return node; - } - - @Override - public Expression visitInPredicate(InPredicate node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteInPredicate(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression value = rewrite(node.getValue(), context.get()); - Expression list = rewrite(node.getValueList(), context.get()); - - if (node.getValue() != value || node.getValueList() != list) { - return new InPredicate(value, list); - } - - return node; - } - - @Override - protected Expression visitInListExpression(InListExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteInListExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - ImmutableList.Builder builder = ImmutableList.builder(); - for (Expression expression : node.getValues()) { - builder.add(rewrite(expression, context.get())); - } - - if (!sameElements(node.getValues(), builder.build())) { - return new InListExpression(builder.build()); - } - - return node; - } - - @Override - protected Expression visitExists(ExistsPredicate node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteExists(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - // No default rewrite for ExistsPredicate since we do not want to traverse subqueries - return node; - } - - @Override - public Expression visitSubqueryExpression(SubqueryExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteSubqueryExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - // No default rewrite for SubqueryExpression since we do not want to traverse subqueries - return node; - } - - @Override - public Expression visitLiteral(Literal node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteLiteral(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - return node; - } - - @Override - public Expression visitParameter(Parameter node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteParameter(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - return node; - } - - @Override - public Expression visitIdentifier(Identifier node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteIdentifier(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - return node; - } - - @Override - public Expression visitDereferenceExpression(DereferenceExpression node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteDereferenceExpression(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression base = rewrite(node.getBase(), context.get()); - if (base != node.getBase()) { - return new DereferenceExpression(base, node.getField()); - } - - return node; - } - - @Override - protected Expression visitExtract(Extract node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteExtract(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression expression = rewrite(node.getExpression(), context.get()); - - if (node.getExpression() != expression) { - return new Extract(expression, node.getField()); - } - - return node; - } - - @Override - protected Expression visitCurrentTime(CurrentTime node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteCurrentTime(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - return node; - } - - @Override - public Expression visitCast(Cast node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter.rewriteCast(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression expression = rewrite(node.getExpression(), context.get()); - - if (node.getExpression() != expression) { - return new Cast(expression, node.getType(), node.isSafe(), node.isTypeOnly()); - } - - return node; - } - - @Override - protected Expression visitFieldReference(FieldReference node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteFieldReference(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - return node; - } - - @Override - protected Expression visitQuantifiedComparisonExpression(QuantifiedComparisonExpression node, - Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteQuantifiedComparison(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - Expression value = rewrite(node.getValue(), context.get()); - Expression subquery = rewrite(node.getSubquery(), context.get()); - - if (node.getValue() != value || node.getSubquery() != subquery) { - return new QuantifiedComparisonExpression(node.getComparisonType(), node.getQuantifier(), - value, subquery); - } - - return node; - } - - @Override - public Expression visitGroupingOperation(GroupingOperation node, Context context) { - if (!context.isDefaultRewrite()) { - Expression result = rewriter - .rewriteGroupingOperation(node, context.get(), ExpressionTreeRewriter.this); - if (result != null) { - return result; - } - } - - return node; - } - } - - public static class Context { - - private final boolean defaultRewrite; - private final C context; - - private Context(C context, boolean defaultRewrite) { - this.context = context; - this.defaultRewrite = defaultRewrite; - } - - public C get() { - return context; - } - - public boolean isDefaultRewrite() { - return defaultRewrite; - } - } - - private static boolean sameElements(Optional a, Optional b) { - if (!a.isPresent() && !b.isPresent()) { - return true; - } else if (a.isPresent() != b.isPresent()) { - return false; - } - - return a.get() == b.get(); - } - - @SuppressWarnings("ObjectEquality") - private static boolean sameElements(Iterable a, Iterable b) { - if (Iterables.size(a) != Iterables.size(b)) { - return false; - } - - Iterator first = a.iterator(); - Iterator second = b.iterator(); - - while (first.hasNext() && second.hasNext()) { - if (first.next() != second.next()) { - return false; - } - } - - return true; - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Insert.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Insert.java deleted file mode 100644 index 036a790fb..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Insert.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public final class Insert - extends Statement { - - private final QualifiedName target; - private final Query query; - private final Optional> columns; - - public Insert(QualifiedName target, Optional> columns, Query query) { - this(Optional.empty(), columns, target, query); - } - - private Insert(Optional location, Optional> columns, - QualifiedName target, Query query) { - super(location); - this.target = requireNonNull(target, "target is null"); - this.columns = requireNonNull(columns, "columns is null"); - this.query = requireNonNull(query, "query is null"); - } - - public QualifiedName getTarget() { - return target; - } - - public Optional> getColumns() { - return columns; - } - - public Query getQuery() { - return query; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitInsert(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(query); - } - - @Override - public int hashCode() { - return Objects.hash(target, columns, query); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - Insert o = (Insert) obj; - return Objects.equals(target, o.target) && - Objects.equals(columns, o.columns) && - Objects.equals(query, o.query); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("target", target) - .add("columns", columns) - .add("query", query) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Intersect.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Intersect.java index 23ebe4832..936081204 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Intersect.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Intersect.java @@ -20,7 +20,6 @@ import java.util.List; import java.util.Objects; import java.util.Optional; -import javax.swing.text.html.Option; public class Intersect extends SetOperation { @@ -51,7 +50,7 @@ public R accept(AstVisitor visitor, C context) { } @Override - public Optional getExportExpr() { + public Optional getExportExpr() { return Optional.empty(); } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Lateral.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Lateral.java deleted file mode 100644 index 8770542f3..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Lateral.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public final class Lateral - extends Relation { - - private final Query query; - - public Lateral(Query query) { - this(Optional.empty(), query); - } - - public Lateral(NodeLocation location, Query query) { - this(Optional.of(location), query); - } - - private Lateral(Optional location, Query query) { - super(location); - this.query = requireNonNull(query, "query is null"); - } - - public Query getQuery() { - return query; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitLateral(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(query); - } - - @Override - public String toString() { - return "LATERAL(" + query + ")"; - } - - @Override - public int hashCode() { - return Objects.hash(query); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - Lateral other = (Lateral) obj; - return Objects.equals(this.query, other.query); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/LikeClause.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/LikeClause.java deleted file mode 100644 index 91a1288cf..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/LikeClause.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public final class LikeClause - extends TableElement { - - private final QualifiedName tableName; - private final Optional propertiesOption; - - public enum PropertiesOption { - INCLUDING, - EXCLUDING - } - - public LikeClause(QualifiedName tableName, Optional propertiesOption) { - this(Optional.empty(), tableName, propertiesOption); - } - - public LikeClause(NodeLocation location, QualifiedName tableName, - Optional propertiesOption) { - this(Optional.of(location), tableName, propertiesOption); - } - - private LikeClause(Optional location, QualifiedName tableName, - Optional propertiesOption) { - super(location); - this.tableName = requireNonNull(tableName, "tableName is null"); - this.propertiesOption = requireNonNull(propertiesOption, "propertiesOption is null"); - } - - public QualifiedName getTableName() { - return tableName; - } - - public Optional getPropertiesOption() { - return propertiesOption; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitLikeClause(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - LikeClause o = (LikeClause) obj; - return Objects.equals(this.tableName, o.tableName) && - Objects.equals(this.propertiesOption, o.propertiesOption); - } - - @Override - public int hashCode() { - return Objects.hash(tableName, propertiesOption); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("tableName", tableName) - .add("propertiesOption", propertiesOption) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/MinRatioExpression.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/MinRatioExpression.java index cd29d0b2b..dd90f9ab3 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/MinRatioExpression.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/MinRatioExpression.java @@ -24,11 +24,6 @@ private MinRatioExpression(Optional location, DecimalLiteral minRa this.minRatio = minRatio; } - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitMinRatioExpression(this, context); - } - @Override public List getChildren() { ImmutableList.Builder nodes = ImmutableList.builder(); diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/MinSupportExpression.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/MinSupportExpression.java index b74628c6a..d73411a8d 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/MinSupportExpression.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/MinSupportExpression.java @@ -24,11 +24,6 @@ private MinSupportExpression(Optional location, DecimalLiteral min this.minSupport = minSupport; } - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitMinSupportExpression(this, context); - } - @Override public List getChildren() { ImmutableList.Builder nodes = ImmutableList.builder(); diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/NodeRef.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/NodeRef.java deleted file mode 100644 index 581f13c4d..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/NodeRef.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static java.lang.String.format; -import static java.lang.System.identityHashCode; -import static java.util.Objects.requireNonNull; - -public final class NodeRef { - - public static NodeRef of(T node) { - return new NodeRef<>(node); - } - - private final T node; - - private NodeRef(T node) { - this.node = requireNonNull(node, "node is null"); - } - - public T getNode() { - return node; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - NodeRef other = (NodeRef) o; - return node == other.node; - } - - @Override - public int hashCode() { - return identityHashCode(node); - } - - @Override - public String toString() { - return format( - "@%s: %s", - Integer.toHexString(identityHashCode(node)), - node); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Property.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Property.java deleted file mode 100644 index 2dc3e90dc..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Property.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class Property - extends Node { - - private final Identifier name; - private final Expression value; - - public Property(Identifier name, Expression value) { - this(Optional.empty(), name, value); - } - - public Property(NodeLocation location, Identifier name, Expression value) { - this(Optional.of(location), name, value); - } - - private Property(Optional location, Identifier name, Expression value) { - super(location); - this.name = requireNonNull(name, "name is null"); - this.value = requireNonNull(value, "value is null"); - } - - public Identifier getName() { - return name; - } - - public Expression getValue() { - return value; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitProperty(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(name, value); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - Property other = (Property) obj; - return Objects.equals(name, other.name) && - Objects.equals(value, other.value); - } - - @Override - public int hashCode() { - return Objects.hash(name, value); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("name", name) - .add("value", value) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Query.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Query.java index 2188957e0..76ea89a1e 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Query.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Query.java @@ -20,67 +20,30 @@ import java.util.List; import java.util.Objects; import java.util.Optional; -import javax.swing.text.html.Option; -public class Query - extends Statement { +public class Query extends Statement { - private final Optional with; private final QueryBody queryBody; - private final Optional orderBy; - private final Optional limit; - public Query( - Optional with, - QueryBody queryBody, - Optional orderBy, - Optional limit) { - this(Optional.empty(), with, queryBody, orderBy, limit); + public Query(QueryBody queryBody) { + this(Optional.empty(), queryBody); } - public Query( - NodeLocation location, - Optional with, - QueryBody queryBody, - Optional orderBy, - Optional limit) { - this(Optional.of(location), with, queryBody, orderBy, limit); + public Query(NodeLocation location, QueryBody queryBody) { + this(Optional.of(location), queryBody); } - private Query( - Optional location, - Optional with, - QueryBody queryBody, - Optional orderBy, - Optional limit) { + private Query(Optional location, QueryBody queryBody) { super(location); - requireNonNull(with, "with is null"); requireNonNull(queryBody, "queryBody is null"); - requireNonNull(orderBy, "orderBy is null"); - requireNonNull(limit, "limit is null"); - this.with = with; this.queryBody = queryBody; - this.orderBy = orderBy; - this.limit = limit; - } - - public Optional getWith() { - return with; } public QueryBody getQueryBody() { return queryBody; } - public Optional getOrderBy() { - return orderBy; - } - - public Optional getLimit() { - return limit; - } - @Override public R accept(AstVisitor visitor, C context) { return visitor.visitQuery(this, context); @@ -89,19 +52,14 @@ public R accept(AstVisitor visitor, C context) { @Override public List getChildren() { ImmutableList.Builder nodes = ImmutableList.builder(); - with.ifPresent(nodes::add); nodes.add(queryBody); - orderBy.ifPresent(nodes::add); return nodes.build(); } @Override public String toString() { return toStringHelper(this) - .add("with", with.orElse(null)) .add("queryBody", queryBody) - .add("orderBy", orderBy) - .add("limit", limit.orElse(null)) .omitNullValues() .toString(); } @@ -115,14 +73,11 @@ public boolean equals(Object obj) { return false; } Query o = (Query) obj; - return Objects.equals(with, o.with) && - Objects.equals(queryBody, o.queryBody) && - Objects.equals(orderBy, o.orderBy) && - Objects.equals(limit, o.limit); + return Objects.equals(queryBody, o.queryBody); } @Override public int hashCode() { - return Objects.hash(with, queryBody, orderBy, limit); + return Objects.hash(queryBody); } } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/QueryBody.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/QueryBody.java index 3731ba087..fd6062df3 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/QueryBody.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/QueryBody.java @@ -39,5 +39,5 @@ public R accept(AstVisitor visitor, C context) { public abstract Optional getLimit(); - public abstract Optional getExportExpr(); + public abstract Optional getExportExpr(); } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/QuerySpecification.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/QuerySpecification.java index 7f4c64870..bb85cde6a 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/QuerySpecification.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/QuerySpecification.java @@ -30,7 +30,7 @@ public class QuerySpecification extends QueryBody { private final Optional having; private final Optional orderBy; private final Optional limit; - private final Optional exportExpr; + private final Optional exportExpr; public QuerySpecification( Select select, @@ -40,7 +40,7 @@ public QuerySpecification( Optional having, Optional orderBy, Optional limit, - Optional exportExpr) { + Optional exportExpr) { this(Optional.empty(), select, from, where, groupBy, having, orderBy, limit, exportExpr); } @@ -53,7 +53,7 @@ public QuerySpecification( Optional having, Optional orderBy, Optional limit, - Optional exportExpr) { + Optional exportExpr) { this(Optional.of(location), select, from, where, groupBy, having, orderBy, limit, exportExpr); } @@ -66,7 +66,7 @@ private QuerySpecification( Optional having, Optional orderBy, Optional limit, - Optional exportExpr) { + Optional exportExpr) { super(location); requireNonNull(select, "select is null"); requireNonNull(from, "from is null"); @@ -115,7 +115,7 @@ public Optional getLimit() { return limit; } - public Optional getExportExpr() { + public Optional getExportExpr() { return exportExpr; } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Relation.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Relation.java index 7f5af9b28..763c24043 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Relation.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Relation.java @@ -15,8 +15,7 @@ import java.util.Optional; -public abstract class Relation - extends Node { +public abstract class Relation extends Node { protected Relation(Optional location) { super(location); diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameColumn.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameColumn.java deleted file mode 100644 index 756fc149f..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameColumn.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class RenameColumn - extends Statement { - - private final QualifiedName table; - private final Identifier source; - private final Identifier target; - - public RenameColumn(QualifiedName table, Identifier source, Identifier target) { - this(Optional.empty(), table, source, target); - } - - public RenameColumn(NodeLocation location, QualifiedName table, Identifier source, - Identifier target) { - this(Optional.of(location), table, source, target); - } - - private RenameColumn(Optional location, QualifiedName table, Identifier source, - Identifier target) { - super(location); - this.table = requireNonNull(table, "table is null"); - this.source = requireNonNull(source, "source is null"); - this.target = requireNonNull(target, "target is null"); - } - - public QualifiedName getTable() { - return table; - } - - public Identifier getSource() { - return source; - } - - public Identifier getTarget() { - return target; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitRenameColumn(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - RenameColumn that = (RenameColumn) o; - return Objects.equals(table, that.table) && - Objects.equals(source, that.source) && - Objects.equals(target, that.target); - } - - @Override - public int hashCode() { - return Objects.hash(table, source, target); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("table", table) - .add("source", source) - .add("target", target) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameSchema.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameSchema.java deleted file mode 100644 index db350b122..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameSchema.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public final class RenameSchema - extends Statement { - - private final QualifiedName source; - private final Identifier target; - - public RenameSchema(QualifiedName source, Identifier target) { - this(Optional.empty(), source, target); - } - - public RenameSchema(NodeLocation location, QualifiedName source, Identifier target) { - this(Optional.of(location), source, target); - } - - private RenameSchema(Optional location, QualifiedName source, Identifier target) { - super(location); - this.source = requireNonNull(source, "source is null"); - this.target = requireNonNull(target, "target is null"); - } - - public QualifiedName getSource() { - return source; - } - - public Identifier getTarget() { - return target; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitRenameSchema(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(); - } - - @Override - public int hashCode() { - return Objects.hash(source, target); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - RenameSchema o = (RenameSchema) obj; - return Objects.equals(source, o.source) && - Objects.equals(target, o.target); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("source", source) - .add("target", target) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameTable.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameTable.java deleted file mode 100644 index 4d18abb5b..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/RenameTable.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public final class RenameTable - extends Statement { - - private final QualifiedName source; - private final QualifiedName target; - - public RenameTable(QualifiedName source, QualifiedName target) { - this(Optional.empty(), source, target); - } - - public RenameTable(NodeLocation location, QualifiedName source, QualifiedName target) { - this(Optional.of(location), source, target); - } - - private RenameTable(Optional location, QualifiedName source, QualifiedName target) { - super(location); - this.source = requireNonNull(source, "source name is null"); - this.target = requireNonNull(target, "target name is null"); - } - - public QualifiedName getSource() { - return source; - } - - public QualifiedName getTarget() { - return target; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitRenameTable(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(); - } - - @Override - public int hashCode() { - return Objects.hash(source, target); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - RenameTable o = (RenameTable) obj; - return Objects.equals(source, o.source) && - Objects.equals(target, o.target); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("source", source) - .add("target", target) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Rollup.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Rollup.java index 722f34469..474300da9 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Rollup.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Rollup.java @@ -26,8 +26,7 @@ import java.util.Set; import java.util.stream.IntStream; -public final class Rollup - extends GroupingElement { +public final class Rollup extends GroupingElement { private final List columns; diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ShowColumns.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ShowColumns.java deleted file mode 100644 index 2f5188f2b..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ShowColumns.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class ShowColumns - extends Statement { - - private final QualifiedName table; - - public ShowColumns(QualifiedName table) { - this(Optional.empty(), table); - } - - public ShowColumns(NodeLocation location, QualifiedName table) { - this(Optional.of(location), table); - } - - private ShowColumns(Optional location, QualifiedName table) { - super(location); - this.table = requireNonNull(table, "table is null"); - } - - public QualifiedName getTable() { - return table; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitShowColumns(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(); - } - - @Override - public int hashCode() { - return Objects.hash(table); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - ShowColumns o = (ShowColumns) obj; - return Objects.equals(table, o.table); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("table", table) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ShowTables.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ShowTables.java deleted file mode 100644 index c1adb6a0d..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/ShowTables.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class ShowTables - extends Statement { - - private final Optional schema; - private final Optional likePattern; - - public ShowTables(Optional schema, Optional likePattern) { - this(Optional.empty(), schema, likePattern); - } - - public ShowTables(NodeLocation location, Optional schema, - Optional likePattern) { - this(Optional.of(location), schema, likePattern); - } - - private ShowTables(Optional location, Optional schema, - Optional likePattern) { - super(location); - requireNonNull(schema, "schema is null"); - requireNonNull(likePattern, "likePattern is null"); - - this.schema = schema; - this.likePattern = likePattern; - } - - public Optional getSchema() { - return schema; - } - - public Optional getLikePattern() { - return likePattern; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitShowTables(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(); - } - - @Override - public int hashCode() { - return Objects.hash(schema, likePattern); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - ShowTables o = (ShowTables) obj; - return Objects.equals(schema, o.schema) && - Objects.equals(likePattern, o.likePattern); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("schema", schema) - .add("likePattern", likePattern) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/StackableAstVisitor.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/StackableAstVisitor.java deleted file mode 100644 index d7304cd07..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/StackableAstVisitor.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import java.util.LinkedList; -import java.util.Optional; - -public class StackableAstVisitor - extends AstVisitor> { - - public R process(Node node, StackableAstVisitorContext context) { - context.push(node); - try { - return node.accept(this, context); - } finally { - context.pop(); - } - } - - public static class StackableAstVisitorContext { - - private final LinkedList stack = new LinkedList<>(); - private final C context; - - public StackableAstVisitorContext(C context) { - this.context = context; - } - - public C getContext() { - return context; - } - - private void pop() { - stack.pop(); - } - - void push(Node node) { - stack.push(node); - } - - public Optional getPreviousNode() { - if (stack.size() > 1) { - return Optional.of(stack.get(1)); - } - return Optional.empty(); - } - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/StringLiteral.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/StringLiteral.java index a44a46f1d..09ec6a4b2 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/StringLiteral.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/StringLiteral.java @@ -20,8 +20,7 @@ import java.util.Objects; import java.util.Optional; -public class StringLiteral - extends Literal { +public class StringLiteral extends Literal { private final String value; private final Slice slice; diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Table.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Table.java index f3c250879..6d7c21f14 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Table.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Table.java @@ -67,7 +67,7 @@ public Optional getLimit() { } @Override - public Optional getExportExpr() { + public Optional getExportExpr() { return Optional.empty(); } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/TableElement.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/TableElement.java deleted file mode 100644 index b2f6c5845..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/TableElement.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import java.util.Optional; - -public abstract class TableElement - extends Node { - - public TableElement(Optional location) { - super(location); - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitTableElement(this, context); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/TableSubquery.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/TableSubquery.java index 8b34b1490..1dafd877a 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/TableSubquery.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/TableSubquery.java @@ -68,7 +68,7 @@ public Optional getLimit() { } @Override - public Optional getExportExpr() { + public Optional getExportExpr() { return Optional.empty(); } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Union.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Union.java index d24511cf6..e7ec43860 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Union.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Union.java @@ -50,7 +50,7 @@ public R accept(AstVisitor visitor, C context) { } @Override - public Optional getExportExpr() { + public Optional getExportExpr() { return Optional.empty(); } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Unnest.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Unnest.java deleted file mode 100644 index 0ffbc319c..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Unnest.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public final class Unnest - extends Relation { - - private final List expressions; - private final boolean withOrdinality; - - public Unnest(List expressions, boolean withOrdinality) { - this(Optional.empty(), expressions, withOrdinality); - } - - public Unnest(NodeLocation location, List expressions, boolean withOrdinality) { - this(Optional.of(location), expressions, withOrdinality); - } - - private Unnest(Optional location, List expressions, - boolean withOrdinality) { - super(location); - requireNonNull(expressions, "expressions is null"); - this.expressions = ImmutableList.copyOf(expressions); - this.withOrdinality = withOrdinality; - } - - public List getExpressions() { - return expressions; - } - - public boolean isWithOrdinality() { - return withOrdinality; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitUnnest(this, context); - } - - @Override - public List getChildren() { - return expressions; - } - - @Override - public String toString() { - return toStringHelper(this) - .add("expressions", expressions) - .add("withOrdinality", withOrdinality) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(expressions, withOrdinality); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - Unnest other = (Unnest) obj; - return Objects.equals(expressions, other.expressions) && withOrdinality == other.withOrdinality; - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Use.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Use.java deleted file mode 100644 index 6856cd7ba..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Use.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public final class Use - extends Statement { - - private final Optional catalog; - private final Identifier schema; - - public Use(Optional catalog, Identifier schema) { - this(Optional.empty(), catalog, schema); - } - - public Use(NodeLocation location, Optional catalog, Identifier schema) { - this(Optional.of(location), catalog, schema); - } - - private Use(Optional location, Optional catalog, Identifier schema) { - super(location); - requireNonNull(catalog, "catalog is null"); - requireNonNull(schema, "schema is null"); - this.catalog = catalog; - this.schema = schema; - } - - public Optional getCatalog() { - return catalog; - } - - public Identifier getSchema() { - return schema; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitUse(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(); - } - - @Override - public int hashCode() { - return Objects.hash(catalog, schema); - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - Use use = (Use) o; - - if (!catalog.equals(use.catalog)) { - return false; - } - return schema.equals(use.schema); - } - - @Override - public String toString() { - return toStringHelper(this).toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Values.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Values.java index d33f20d5c..abd0b3164 100644 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Values.java +++ b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/Values.java @@ -69,7 +69,7 @@ public Optional getLimit() { } @Override - public Optional getExportExpr() { + public Optional getExportExpr() { return Optional.empty(); } diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/With.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/With.java deleted file mode 100644 index a6142c544..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/With.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkArgument; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class With - extends Node { - - private final boolean recursive; - private final List queries; - - public With(boolean recursive, List queries) { - this(Optional.empty(), recursive, queries); - } - - public With(NodeLocation location, boolean recursive, List queries) { - this(Optional.of(location), recursive, queries); - } - - private With(Optional location, boolean recursive, List queries) { - super(location); - requireNonNull(queries, "queries is null"); - checkArgument(!queries.isEmpty(), "queries is empty"); - - this.recursive = recursive; - this.queries = ImmutableList.copyOf(queries); - } - - public boolean isRecursive() { - return recursive; - } - - public List getQueries() { - return queries; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitWith(this, context); - } - - @Override - public List getChildren() { - return queries; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - With o = (With) obj; - return Objects.equals(recursive, o.recursive) && - Objects.equals(queries, o.queries); - } - - @Override - public int hashCode() { - return Objects.hash(recursive, queries); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("recursive", recursive) - .add("queries", queries) - .toString(); - } -} diff --git a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/WithQuery.java b/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/WithQuery.java deleted file mode 100644 index dc67277a5..000000000 --- a/sql/src/main/java/edu/stanford/futuredata/macrobase/sql/tree/WithQuery.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * 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 edu.stanford.futuredata.macrobase.sql.tree; - -import static com.google.common.base.MoreObjects.toStringHelper; -import static java.util.Objects.requireNonNull; - -import com.google.common.collect.ImmutableList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class WithQuery - extends Node { - - private final Identifier name; - private final Query query; - private final Optional> columnNames; - - public WithQuery(Identifier name, Query query, Optional> columnNames) { - this(Optional.empty(), name, query, columnNames); - } - - public WithQuery(NodeLocation location, Identifier name, Query query, - Optional> columnNames) { - this(Optional.of(location), name, query, columnNames); - } - - private WithQuery(Optional location, Identifier name, Query query, - Optional> columnNames) { - super(location); - this.name = name; - this.query = requireNonNull(query, "query is null"); - this.columnNames = requireNonNull(columnNames, "columnNames is null"); - } - - public Identifier getName() { - return name; - } - - public Query getQuery() { - return query; - } - - public Optional> getColumnNames() { - return columnNames; - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitWithQuery(this, context); - } - - @Override - public List getChildren() { - return ImmutableList.of(query); - } - - @Override - public String toString() { - return toStringHelper(this) - .add("name", name) - .add("query", query) - .add("columnNames", columnNames) - .omitNullValues() - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(name, query, columnNames); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if ((obj == null) || (getClass() != obj.getClass())) { - return false; - } - WithQuery o = (WithQuery) obj; - return Objects.equals(name, o.name) && - Objects.equals(query, o.query) && - Objects.equals(columnNames, o.columnNames); - } -}