You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by ji...@apache.org on 2017/10/10 18:25:54 UTC
[24/38] incubator-quickstep git commit: Add array expression
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/1792b9f4/parser/preprocessed/SqlParser_gen.hpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlParser_gen.hpp b/parser/preprocessed/SqlParser_gen.hpp
index 035e325..69b78e7 100644
--- a/parser/preprocessed/SqlParser_gen.hpp
+++ b/parser/preprocessed/SqlParser_gen.hpp
@@ -126,61 +126,63 @@ extern int quickstep_yydebug;
TOKEN_JOIN = 336,
TOKEN_KEY = 337,
TOKEN_LAST = 338,
- TOKEN_LEFT = 339,
- TOKEN_LIMIT = 340,
- TOKEN_LONG = 341,
- TOKEN_MINUTE = 342,
- TOKEN_MONTH = 343,
- TOKEN_NULL = 344,
- TOKEN_NULLS = 345,
- TOKEN_OFF = 346,
- TOKEN_ON = 347,
- TOKEN_ORDER = 348,
- TOKEN_OUTER = 349,
- TOKEN_OVER = 350,
- TOKEN_PARTITION = 351,
- TOKEN_PARTITIONS = 352,
- TOKEN_PERCENT = 353,
- TOKEN_PRECEDING = 354,
- TOKEN_PRIMARY = 355,
- TOKEN_PRIORITY = 356,
- TOKEN_QUIT = 357,
- TOKEN_RANGE = 358,
- TOKEN_REAL = 359,
- TOKEN_REFERENCES = 360,
- TOKEN_RIGHT = 361,
- TOKEN_ROW = 362,
- TOKEN_ROW_DELIMITER = 363,
- TOKEN_ROWS = 364,
- TOKEN_SECOND = 365,
- TOKEN_SELECT = 366,
- TOKEN_SET = 367,
- TOKEN_SMA = 368,
- TOKEN_SMALLINT = 369,
- TOKEN_STDERR = 370,
- TOKEN_STDOUT = 371,
- TOKEN_SUBSTRING = 372,
- TOKEN_TABLE = 373,
- TOKEN_THEN = 374,
- TOKEN_TIME = 375,
- TOKEN_TIMESTAMP = 376,
- TOKEN_TO = 377,
- TOKEN_TRUE = 378,
- TOKEN_TUPLESAMPLE = 379,
- TOKEN_UNBOUNDED = 380,
- TOKEN_UNIQUE = 381,
- TOKEN_UPDATE = 382,
- TOKEN_USING = 383,
- TOKEN_VALUES = 384,
- TOKEN_VARCHAR = 385,
- TOKEN_WHEN = 386,
- TOKEN_WHERE = 387,
- TOKEN_WINDOW = 388,
- TOKEN_WITH = 389,
- TOKEN_YEAR = 390,
- TOKEN_YEARMONTH = 391,
- TOKEN_EOF = 392,
- TOKEN_LEX_ERROR = 393
+ TOKEN_LBRACE = 339,
+ TOKEN_LEFT = 340,
+ TOKEN_LIMIT = 341,
+ TOKEN_LONG = 342,
+ TOKEN_MINUTE = 343,
+ TOKEN_MONTH = 344,
+ TOKEN_NULL = 345,
+ TOKEN_NULLS = 346,
+ TOKEN_OFF = 347,
+ TOKEN_ON = 348,
+ TOKEN_ORDER = 349,
+ TOKEN_OUTER = 350,
+ TOKEN_OVER = 351,
+ TOKEN_PARTITION = 352,
+ TOKEN_PARTITIONS = 353,
+ TOKEN_PERCENT = 354,
+ TOKEN_PRECEDING = 355,
+ TOKEN_PRIMARY = 356,
+ TOKEN_PRIORITY = 357,
+ TOKEN_QUIT = 358,
+ TOKEN_RANGE = 359,
+ TOKEN_RBRACE = 360,
+ TOKEN_REAL = 361,
+ TOKEN_REFERENCES = 362,
+ TOKEN_RIGHT = 363,
+ TOKEN_ROW = 364,
+ TOKEN_ROW_DELIMITER = 365,
+ TOKEN_ROWS = 366,
+ TOKEN_SECOND = 367,
+ TOKEN_SELECT = 368,
+ TOKEN_SET = 369,
+ TOKEN_SMA = 370,
+ TOKEN_SMALLINT = 371,
+ TOKEN_STDERR = 372,
+ TOKEN_STDOUT = 373,
+ TOKEN_SUBSTRING = 374,
+ TOKEN_TABLE = 375,
+ TOKEN_THEN = 376,
+ TOKEN_TIME = 377,
+ TOKEN_TIMESTAMP = 378,
+ TOKEN_TO = 379,
+ TOKEN_TRUE = 380,
+ TOKEN_TUPLESAMPLE = 381,
+ TOKEN_UNBOUNDED = 382,
+ TOKEN_UNIQUE = 383,
+ TOKEN_UPDATE = 384,
+ TOKEN_USING = 385,
+ TOKEN_VALUES = 386,
+ TOKEN_VARCHAR = 387,
+ TOKEN_WHEN = 388,
+ TOKEN_WHERE = 389,
+ TOKEN_WINDOW = 390,
+ TOKEN_WITH = 391,
+ TOKEN_YEAR = 392,
+ TOKEN_YEARMONTH = 393,
+ TOKEN_EOF = 394,
+ TOKEN_LEX_ERROR = 395
};
#endif
@@ -264,6 +266,7 @@ union YYSTYPE
quickstep::ParseString *unary_operation_;
quickstep::ParseString *binary_operation_;
+ quickstep::ParseArray *array_expression_;
quickstep::ParseFunctionCall *function_call_;
quickstep::PtrList<quickstep::ParseExpression> *expression_list_;
@@ -290,7 +293,7 @@ union YYSTYPE
quickstep::ParsePriority *opt_priority_clause_;
-#line 294 "SqlParser_gen.hpp" /* yacc.c:1915 */
+#line 297 "SqlParser_gen.hpp" /* yacc.c:1915 */
};
typedef union YYSTYPE YYSTYPE;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/1792b9f4/query_optimizer/resolver/Resolver.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/Resolver.cpp b/query_optimizer/resolver/Resolver.cpp
index 959fc7e..7c257bb 100644
--- a/query_optimizer/resolver/Resolver.cpp
+++ b/query_optimizer/resolver/Resolver.cpp
@@ -2381,6 +2381,11 @@ E::ScalarPtr Resolver::resolveExpression(
const Type *type_hint,
ExpressionResolutionInfo *expression_resolution_info) {
switch (parse_expression.getExpressionType()) {
+ case ParseExpression::kArray: {
+ const ParseArray &parse_array =
+ static_cast<const ParseArray&>(parse_expression);
+ return resolveArray(parse_array, type_hint, expression_resolution_info);
+ }
case ParseExpression::kAttribute: {
const ParseAttribute &parse_attribute_scalar =
static_cast<const ParseAttribute&>(parse_expression);
@@ -2484,6 +2489,29 @@ E::ScalarPtr Resolver::resolveExpression(
}
}
+E::ScalarPtr Resolver::resolveArray(
+ const ParseArray &parse_array,
+ const Type *type_hint,
+ ExpressionResolutionInfo *expression_resolution_info) {
+// std::vector<E::ScalarPtr> elements;
+// const auto &parse_elements = parse_array.elements();
+// if (parse_elements.empty()) {
+// // TODO(jianqiao): Figure out how to handle empty array.
+//
+// } else {
+// elements.reserve(parse_elements.size());
+// for (const auto &parse_element : parse_elements) {
+// elements.emplace_back(
+// resolveExpression(*parse_element, nullptr, expression_resolution_info));
+// }
+//
+// // Currently we only support homogeneous array with literal values.
+// }
+
+ LOG(FATAL) << "Not supported";
+}
+
+
E::ScalarPtr Resolver::resolveSearchedCaseExpression(
const ParseSearchedCaseExpression &parse_searched_case_expression,
const Type *type_hint,
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/1792b9f4/query_optimizer/resolver/Resolver.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/Resolver.hpp b/query_optimizer/resolver/Resolver.hpp
index bb924bb..c44d8ef 100644
--- a/query_optimizer/resolver/Resolver.hpp
+++ b/query_optimizer/resolver/Resolver.hpp
@@ -41,6 +41,7 @@ namespace quickstep {
class CatalogDatabase;
class CatalogRelation;
class Comparison;
+class ParseArray;
class ParseExpression;
class ParseFunctionCall;
class ParseGeneratorTableReference;
@@ -446,6 +447,11 @@ class Resolver {
const Type *type_hint,
ExpressionResolutionInfo *expression_resolution_info);
+ expressions::ScalarPtr resolveArray(
+ const ParseArray &parse_array,
+ const Type *type_hint,
+ ExpressionResolutionInfo *expression_resolution_info);
+
/**
* @brief Resolves a searched CASE expression.
*
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/1792b9f4/types/ArrayType.cpp
----------------------------------------------------------------------
diff --git a/types/ArrayType.cpp b/types/ArrayType.cpp
index 198e580..c0f3a87 100644
--- a/types/ArrayType.cpp
+++ b/types/ArrayType.cpp
@@ -35,7 +35,7 @@ std::string ArrayType::printValueToString(const UntypedLiteral *value) const {
if (!literals.empty()) {
ret.append(element_type_.printValueToString(literals.front()));
for (std::size_t i = 1; i < literals.size(); ++i) {
- ret.append(", ");
+ ret.append(",");
ret.append(element_type_.printValueToString(literals.at(i)));
}
}