15 package com.cloudera.impala.analysis;
17 import java.util.ArrayList;
19 import org.apache.hadoop.hive.metastore.MetaStoreUtils;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
27 import com.cloudera.impala.thrift.TExprNode;
28 import com.google.common.base.Preconditions;
29 import com.google.common.collect.Lists;
30 import com.google.common.collect.Sets;
37 private final static Logger
LOG = LoggerFactory.getLogger(Subquery.class);
47 public String
toSqlImpl() {
return "(" + stmt_.toSql() +
")"; }
54 Preconditions.checkNotNull(queryStmt);
63 stmt_ = other.stmt_.clone();
73 super.analyze(analyzer);
80 analyzer_.setIsSubquery();
85 ArrayList<Expr> stmtResultExprs = stmt_.getResultExprs();
86 if (stmtResultExprs.size() == 1) {
88 Preconditions.checkState(!type_.isComplexType());
96 Preconditions.checkNotNull(
type_);
104 ArrayList<Expr> stmtResultExprs = stmt_.getResultExprs();
105 if (stmtResultExprs.size() == 1 && stmtResultExprs.get(0).
getType().isScalarType()) {
115 ArrayList<Expr> stmtResultExprs = stmt_.getResultExprs();
116 ArrayList<StructField> structFields = Lists.newArrayList();
118 ArrayList<String> labels = stmt_.getColLabels();
119 boolean hasUniqueLabels =
true;
120 if (Sets.newHashSet(labels).size() != labels.size()) hasUniqueLabels =
false;
123 for (
int i = 0; i < stmtResultExprs.size(); ++i) {
124 Expr expr = stmtResultExprs.get(i);
125 String fieldName = null;
127 if (MetaStoreUtils.validateName(labels.get(i))) {
128 fieldName = labels.get(i);
130 if (!hasUniqueLabels) {
131 fieldName =
"_" + Integer.toString(i) +
"_" + fieldName;
135 fieldName =
"_" + Integer.toString(i);
137 Preconditions.checkNotNull(fieldName);
140 Preconditions.checkState(structFields.size() != 0);
Subquery(QueryStmt queryStmt)
boolean returnsScalarColumn()
void toThrift(TExprNode msg)
StructType createStructTypeFromExprList()
void analyze(Analyzer analyzer)