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)));
     }
   }