DRILL-8208: Create builder for SqlSelect (#2532)
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlSelectBuilder.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlSelectBuilder.java
new file mode 100644
index 0000000..852bdcb
--- /dev/null
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/SqlSelectBuilder.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.drill.exec.planner.sql;
+
+import org.apache.calcite.sql.SqlNode;
+import org.apache.calcite.sql.SqlNodeList;
+import org.apache.calcite.sql.SqlSelect;
+import org.apache.calcite.sql.parser.SqlParserPos;
+
+public class SqlSelectBuilder {
+ private SqlParserPos parserPosition;
+ private SqlNodeList keywordList;
+ private SqlNodeList selectList;
+ private SqlNode from;
+ private SqlNode where;
+ private SqlNodeList groupBy;
+ private SqlNode having;
+ private SqlNodeList windowDecls;
+ private SqlNodeList orderBy;
+ private SqlNode offset;
+ private SqlNode fetch;
+
+ public SqlSelectBuilder parserPosition(SqlParserPos parserPosition) {
+ this.parserPosition = parserPosition;
+ return this;
+ }
+
+ public SqlSelectBuilder keywordList(SqlNodeList keywordList) {
+ this.keywordList = keywordList;
+ return this;
+ }
+
+ public SqlSelectBuilder selectList(SqlNodeList selectList) {
+ this.selectList = selectList;
+ return this;
+ }
+
+ public SqlSelectBuilder from(SqlNode from) {
+ this.from = from;
+ return this;
+ }
+
+ public SqlSelectBuilder where(SqlNode where) {
+ this.where = where;
+ return this;
+ }
+
+ public SqlSelectBuilder groupBy(SqlNodeList groupBy) {
+ this.groupBy = groupBy;
+ return this;
+ }
+
+ public SqlSelectBuilder having(SqlNode having) {
+ this.having = having;
+ return this;
+ }
+
+ public SqlSelectBuilder windowDecls(SqlNodeList windowDecls) {
+ this.windowDecls = windowDecls;
+ return this;
+ }
+
+ public SqlSelectBuilder orderBy(SqlNodeList orderBy) {
+ this.orderBy = orderBy;
+ return this;
+ }
+
+ public SqlSelectBuilder offset(SqlNode offset) {
+ this.offset = offset;
+ return this;
+ }
+
+ public SqlSelectBuilder fetch(SqlNode fetch) {
+ this.fetch = fetch;
+ return this;
+ }
+
+ public SqlSelect build() {
+ return new SqlSelect(parserPosition, keywordList, selectList, from, where, groupBy, having, windowDecls, orderBy, offset, fetch);
+ }
+
+}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/AnalyzeTableHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/AnalyzeTableHandler.java
index c2b7e0f..33e06b9 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/AnalyzeTableHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/AnalyzeTableHandler.java
@@ -42,6 +42,7 @@
import org.apache.drill.exec.planner.logical.DrillWriterRel;
import org.apache.drill.exec.planner.physical.Prel;
import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SqlSelectBuilder;
import org.apache.drill.exec.planner.sql.parser.SqlAnalyzeTable;
import org.apache.drill.exec.store.AbstractSchema;
import org.apache.drill.exec.store.dfs.DrillFileSystem;
@@ -70,19 +71,12 @@
verifyNoUnsupportedFunctions(sqlAnalyzeTable);
SqlNode tableRef = sqlAnalyzeTable.getTableRef();
- SqlSelect scanSql = new SqlSelect(
- SqlParserPos.ZERO, /* position */
- SqlNodeList.EMPTY, /* keyword list */
- getColumnList(sqlAnalyzeTable), /* select list */
- tableRef, /* from */
- null, /* where */
- null, /* group by */
- null, /* having */
- null, /* windowDecls */
- null, /* orderBy */
- null, /* offset */
- null /* fetch */
- );
+ SqlSelect scanSql = new SqlSelectBuilder()
+ .parserPosition(SqlParserPos.ZERO)
+ .keywordList(SqlNodeList.EMPTY)
+ .selectList(getColumnList(sqlAnalyzeTable))
+ .from(tableRef)
+ .build();
ConvertedRelNode convertedRelNode = validateAndConvert(rewrite(scanSql));
RelDataType validatedRowType = convertedRelNode.getValidatedRowType();
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
index 9d296c3..de058d1 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DescribeTableHandler.java
@@ -34,7 +34,6 @@
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlNodeList;
-import org.apache.calcite.sql.SqlSelect;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import org.apache.calcite.tools.RelConversionException;
@@ -44,6 +43,7 @@
import org.apache.calcite.util.Util;
import org.apache.drill.common.exceptions.UserException;
import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SqlSelectBuilder;
import org.apache.drill.exec.planner.sql.conversion.SqlConverter;
import org.apache.drill.exec.planner.sql.parser.DrillParserUtil;
import org.apache.drill.exec.planner.sql.parser.DrillSqlDescribeTable;
@@ -141,8 +141,12 @@
where = DrillParserUtil.createCondition(where, SqlStdOperatorTable.AND, columnFilter);
- return new SqlSelect(SqlParserPos.ZERO, null, new SqlNodeList(selectList, SqlParserPos.ZERO),
- fromClause, where, null, null, null, null, null, null);
+ return new SqlSelectBuilder()
+ .parserPosition(SqlParserPos.ZERO)
+ .selectList(new SqlNodeList(selectList, SqlParserPos.ZERO))
+ .from(fromClause)
+ .where(where)
+ .build();
} catch (Exception ex) {
throw UserException.planError(ex)
.message("Error while rewriting DESCRIBE query: %d", ex.getMessage())
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/MetastoreAnalyzeTableHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/MetastoreAnalyzeTableHandler.java
index e8378e6..4de3f81 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/MetastoreAnalyzeTableHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/MetastoreAnalyzeTableHandler.java
@@ -55,6 +55,7 @@
import org.apache.drill.exec.planner.logical.MetadataHandlerRel;
import org.apache.drill.exec.planner.physical.PlannerSettings;
import org.apache.drill.exec.planner.physical.Prel;
+import org.apache.drill.exec.planner.sql.SqlSelectBuilder;
import org.apache.drill.exec.planner.sql.parser.SqlMetastoreAnalyzeTable;
import org.apache.drill.exec.store.AbstractSchema;
import org.apache.drill.exec.store.dfs.FormatSelection;
@@ -69,7 +70,6 @@
import org.apache.drill.metastore.metadata.TableInfo;
import org.apache.drill.shaded.guava.com.google.common.collect.ArrayListMultimap;
import org.apache.drill.shaded.guava.com.google.common.collect.Multimap;
-import org.apache.parquet.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -119,19 +119,16 @@
ColumnNamesOptions columnNamesOptions = new ColumnNamesOptions(context.getOptions());
// creates select with DYNAMIC_STAR column and analyze specific columns to obtain corresponding table scan
- SqlSelect scanSql = new SqlSelect(
- SqlParserPos.ZERO,
- SqlNodeList.EMPTY,
- getColumnList(analyzeInfoProvider.getProjectionFields(drillTableInfo.drillTable(), getMetadataType(sqlAnalyzeTable), columnNamesOptions)),
- tableRef,
- null,
- null,
- null,
- null,
- null,
- null,
- null
- );
+ SqlSelect scanSql = new SqlSelectBuilder()
+ .parserPosition(SqlParserPos.ZERO)
+ .keywordList(SqlNodeList.EMPTY)
+ .selectList(
+ getColumnList(analyzeInfoProvider.getProjectionFields(
+ drillTableInfo.drillTable(),
+ getMetadataType(sqlAnalyzeTable),
+ columnNamesOptions)))
+ .from(tableRef)
+ .build();
ConvertedRelNode convertedRelNode = validateAndConvert(rewrite(scanSql));
RelDataType validatedRowType = convertedRelNode.getValidatedRowType();
@@ -184,7 +181,7 @@
List<String> schemaPath = drillTableInfo.schemaPath();
String pluginName = schemaPath.get(0);
- String workspaceName = Strings.join(schemaPath.subList(1, schemaPath.size()), AbstractSchema.SCHEMA_SEPARATOR);
+ String workspaceName = String.join(AbstractSchema.SCHEMA_SEPARATOR, schemaPath.subList(1, schemaPath.size()));
String tableName = drillTableInfo.tableName();
TableInfo tableInfo = TableInfo.builder()
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowSchemasHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowSchemasHandler.java
index 2c07d2c..7ff14c1 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowSchemasHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowSchemasHandler.java
@@ -23,6 +23,7 @@
import org.apache.calcite.sql.SqlCharStringLiteral;
import org.apache.calcite.util.NlsString;
+import org.apache.drill.exec.planner.sql.SqlSelectBuilder;
import org.apache.drill.exec.planner.sql.parser.DrillParserUtil;
import org.apache.drill.exec.planner.sql.parser.SqlShowSchemas;
import static org.apache.drill.exec.store.ischema.InfoSchemaConstants.IS_SCHEMA_NAME;
@@ -33,7 +34,6 @@
import org.apache.calcite.sql.SqlIdentifier;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlNodeList;
-import org.apache.calcite.sql.SqlSelect;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
@@ -67,7 +67,11 @@
where = node.getWhereClause();
}
- return new SqlSelect(SqlParserPos.ZERO, null, new SqlNodeList(selectList, SqlParserPos.ZERO),
- fromClause, where, null, null, null, null, null, null);
+ return new SqlSelectBuilder()
+ .parserPosition(SqlParserPos.ZERO)
+ .selectList(new SqlNodeList(selectList, SqlParserPos.ZERO))
+ .from(fromClause)
+ .where(where)
+ .build();
}
}
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java
index 42cb7e9..86d2e70 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/ShowTablesHandler.java
@@ -26,7 +26,6 @@
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.SqlNodeList;
-import org.apache.calcite.sql.SqlSelect;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import org.apache.calcite.tools.RelConversionException;
@@ -35,6 +34,7 @@
import org.apache.calcite.util.Util;
import org.apache.drill.common.exceptions.UserException;
import org.apache.drill.exec.planner.sql.SchemaUtilites;
+import org.apache.drill.exec.planner.sql.SqlSelectBuilder;
import org.apache.drill.exec.planner.sql.parser.DrillParserUtil;
import org.apache.drill.exec.planner.sql.parser.SqlShowTables;
import org.apache.drill.exec.store.AbstractSchema;
@@ -110,8 +110,12 @@
where = DrillParserUtil.createCondition(where, SqlStdOperatorTable.AND, filter);
- return new SqlSelect(SqlParserPos.ZERO, null, new SqlNodeList(selectList, SqlParserPos.ZERO),
- fromClause, where, null, null, null, null, null, null);
+ return new SqlSelectBuilder()
+ .parserPosition(SqlParserPos.ZERO)
+ .selectList(new SqlNodeList(selectList, SqlParserPos.ZERO))
+ .from(fromClause)
+ .where(where)
+ .build();
}
/**
@@ -137,4 +141,4 @@
config.getConverter().useRootSchemaAsDefault(false);
}
}
-}
\ No newline at end of file
+}