http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/a7031a34/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/a7031a34/query_optimizer/resolver/Resolver.cpp ---------------------------------------------------------------------- diff --git a/query_optimizer/resolver/Resolver.cpp b/query_optimizer/resolver/Resolver.cpp index fdd132d..230f7c5 100644 --- a/query_optimizer/resolver/Resolver.cpp +++ b/query_optimizer/resolver/Resolver.cpp @@ -2384,6 +2384,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); @@ -2487,6 +2492,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/a7031a34/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/a7031a34/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))); } }
