You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by zu...@apache.org on 2016/06/27 21:33:36 UTC
[01/18] incubator-quickstep git commit: Bug fixed in \analyze command
and reuse code. [Forced Update!]
Repository: incubator-quickstep
Updated Branches:
refs/heads/travis-grpc 044877b30 -> 6b3aa0329 (forced update)
Bug fixed in \analyze command and reuse code.
- The \analyze command issues SQL queries. Due to a recent change in the
execution engine, there was a bug in issuing the queries, which is
fixed in this branch.
- Reuse code to receive feedback from Foreman upon query completion.
- Minor inclusion fixes in touched files.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/a7013627
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/a7013627
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/a7013627
Branch: refs/heads/travis-grpc
Commit: a7013627ecfab78aa80b483ee7f910ef7ea014d9
Parents: 4931623
Author: Harshad Deshmukh <hb...@apache.org>
Authored: Wed Jun 15 14:10:43 2016 -0500
Committer: Harshad Deshmukh <hb...@apache.org>
Committed: Wed Jun 15 14:10:43 2016 -0500
----------------------------------------------------------------------
cli/CommandExecutor.cpp | 2 ++
cli/QuickstepCli.cpp | 9 ++------
query_execution/QueryExecutionUtil.hpp | 23 ++++++++++++++++++++
.../tests/ExecutionGeneratorTestRunner.cpp | 10 ++++-----
.../tests/ExecutionGeneratorTestRunner.hpp | 3 +++
5 files changed, 34 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/a7013627/cli/CommandExecutor.cpp
----------------------------------------------------------------------
diff --git a/cli/CommandExecutor.cpp b/cli/CommandExecutor.cpp
index dc14741..7083ef5 100644
--- a/cli/CommandExecutor.cpp
+++ b/cli/CommandExecutor.cpp
@@ -220,6 +220,8 @@ inline TypedValue executeQueryForSingleResult(
QueryExecutionUtil::ConstructAndSendAdmitRequestMessage(
main_thread_client_id, foreman_client_id, query_handle.get(), bus);
+ QueryExecutionUtil::ReceiveQueryCompletionMessage(main_thread_client_id, bus);
+
// Retrieve the scalar result from the result relation.
const CatalogRelation *query_result_relation = query_handle->getQueryResultRelation();
DCHECK(query_result_relation != nullptr);
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/a7013627/cli/QuickstepCli.cpp
----------------------------------------------------------------------
diff --git a/cli/QuickstepCli.cpp b/cli/QuickstepCli.cpp
index 0b64fda..35bd16e 100644
--- a/cli/QuickstepCli.cpp
+++ b/cli/QuickstepCli.cpp
@@ -88,7 +88,6 @@ typedef quickstep::LineReaderDumb LineReaderImpl;
#include "tmb/id_typedefs.h"
#include "tmb/message_bus.h"
#include "tmb/message_style.h"
-#include "tmb/tagged_message.h"
namespace quickstep {
class CatalogRelation;
@@ -119,7 +118,6 @@ using quickstep::QueryHandle;
using quickstep::QueryPlan;
using quickstep::QueryProcessor;
using quickstep::SqlParserWrapper;
-using quickstep::TaggedMessage;
using quickstep::Worker;
using quickstep::WorkerDirectory;
using quickstep::WorkerMessage;
@@ -128,7 +126,6 @@ using quickstep::kPoisonMessage;
using quickstep::kWorkloadCompletionMessage;
using tmb::client_id;
-using tmb::AnnotatedMessage;
namespace quickstep {
@@ -440,10 +437,8 @@ int main(int argc, char* argv[]) {
&bus);
try {
- const AnnotatedMessage annotated_msg =
- bus.Receive(main_thread_client_id, 0, true);
- const TaggedMessage &tagged_message = annotated_msg.tagged_message;
- DCHECK_EQ(kWorkloadCompletionMessage, tagged_message.message_type());
+ QueryExecutionUtil::ReceiveQueryCompletionMessage(
+ main_thread_client_id, &bus);
end = std::chrono::steady_clock::now();
const CatalogRelation *query_result_relation = query_handle->getQueryResultRelation();
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/a7013627/query_execution/QueryExecutionUtil.hpp
----------------------------------------------------------------------
diff --git a/query_execution/QueryExecutionUtil.hpp b/query_execution/QueryExecutionUtil.hpp
index 78fd159..6ea4a29 100644
--- a/query_execution/QueryExecutionUtil.hpp
+++ b/query_execution/QueryExecutionUtil.hpp
@@ -25,13 +25,18 @@
#include "query_execution/WorkerMessage.hpp"
#include "utility/Macros.hpp"
+#include "glog/logging.h"
+
#include "tmb/address.h"
+#include "tmb/id_typedefs.h"
#include "tmb/message_style.h"
#include "tmb/message_bus.h"
#include "tmb/tagged_message.h"
namespace quickstep {
+class QueryHandle;
+
/**
* @brief A static class for reusable methods in query_execution module.
**/
@@ -91,6 +96,24 @@ class QueryExecutionUtil {
bus, sender_id, receiver_id, std::move(admit_tagged_message));
}
+ /**
+ * @brief Receive a query completion message.
+ *
+ * @param receiver_id The TMB client ID of the receiver thread.
+ * @param bus A pointer to the TMB.
+ *
+ * @note Right now the query completion message is of no interest to the
+ * caller. In the future, if this message needs to be fetched, make this
+ * function return the TaggedMessage.
+ **/
+ static void ReceiveQueryCompletionMessage(const tmb::client_id receiver_id,
+ tmb::MessageBus *bus) {
+ const AnnotatedMessage annotated_msg =
+ bus->Receive(receiver_id, 0, true);
+ const TaggedMessage &tagged_message = annotated_msg.tagged_message;
+ DCHECK_EQ(kWorkloadCompletionMessage, tagged_message.message_type());
+ }
+
static void BroadcastPoisonMessage(const tmb::client_id sender_id, tmb::MessageBus *bus) {
// Terminate all threads.
// The sender thread broadcasts poison message to the workers and foreman.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/a7013627/query_optimizer/tests/ExecutionGeneratorTestRunner.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/tests/ExecutionGeneratorTestRunner.cpp b/query_optimizer/tests/ExecutionGeneratorTestRunner.cpp
index ea871d0..8c1d306 100644
--- a/query_optimizer/tests/ExecutionGeneratorTestRunner.cpp
+++ b/query_optimizer/tests/ExecutionGeneratorTestRunner.cpp
@@ -42,7 +42,8 @@
#include "glog/logging.h"
-#include "tmb/tagged_message.h"
+#include "tmb/id_typedefs.h"
+#include "tmb/message_bus.h"
namespace quickstep {
@@ -101,11 +102,8 @@ void ExecutionGeneratorTestRunner::runTestCase(
&query_handle,
&bus_);
- // Receive workload completion message from Foreman.
- const AnnotatedMessage annotated_msg =
- bus_.Receive(main_thread_client_id_, 0, true);
- const TaggedMessage &tagged_message = annotated_msg.tagged_message;
- DCHECK_EQ(kWorkloadCompletionMessage, tagged_message.message_type());
+ QueryExecutionUtil::ReceiveQueryCompletionMessage(
+ main_thread_client_id_, &bus_);
const CatalogRelation *query_result_relation = query_handle.getQueryResultRelation();
if (query_result_relation) {
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/a7013627/query_optimizer/tests/ExecutionGeneratorTestRunner.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/tests/ExecutionGeneratorTestRunner.hpp b/query_optimizer/tests/ExecutionGeneratorTestRunner.hpp
index 9204073..bb2a26f 100644
--- a/query_optimizer/tests/ExecutionGeneratorTestRunner.hpp
+++ b/query_optimizer/tests/ExecutionGeneratorTestRunner.hpp
@@ -35,6 +35,9 @@
#include "utility/Macros.hpp"
#include "utility/textbased_test/TextBasedTestDriver.hpp"
+#include "tmb/id_typedefs.h"
+#include "tmb/message_bus.h"
+
namespace quickstep {
namespace optimizer {
[13/18] incubator-quickstep git commit: Added PRIORITY clause in
parser.
Posted by zu...@apache.org.
Added PRIORITY clause in parser.
- SQL statements (right now only SELECT statements) support "WITH
PRIORITY N" clause.
- The priority value should be a non-zero unsigned integer.
- The priority value is a part of the QueryHandle class.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/d6428914
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/d6428914
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/d6428914
Branch: refs/heads/travis-grpc
Commit: d64289148bee499e2232637602b4197da6791fc4
Parents: 07435a4
Author: Harshad Deshmukh <hb...@apache.org>
Authored: Fri Jun 17 16:01:19 2016 -0500
Committer: Harshad Deshmukh <hb...@apache.org>
Committed: Mon Jun 20 12:30:20 2016 -0500
----------------------------------------------------------------------
parser/CMakeLists.txt | 8 +
parser/ParsePriority.hpp | 94 +
parser/ParseStatement.hpp | 33 +-
parser/SqlLexer.lpp | 2 +
parser/SqlParser.ypp | 37 +-
parser/preprocessed/SqlLexer_gen.cpp | 1263 +++---
parser/preprocessed/SqlLexer_gen.hpp | 16 +-
parser/preprocessed/SqlParser_gen.cpp | 5699 +++++++++++++++-------------
parser/preprocessed/SqlParser_gen.hpp | 323 +-
parser/tests/Select.test | 43 +
query_optimizer/QueryHandle.hpp | 13 +-
query_optimizer/QueryProcessor.cpp | 4 +-
12 files changed, 4120 insertions(+), 3415 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/parser/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/parser/CMakeLists.txt b/parser/CMakeLists.txt
index 114ad14..32ea1a9 100644
--- a/parser/CMakeLists.txt
+++ b/parser/CMakeLists.txt
@@ -103,6 +103,7 @@ add_library(quickstep_parser_ParsePartitionClause ../empty_src.cpp ParsePartitio
add_library(quickstep_parser_ParsePredicate ParsePredicate.cpp ParsePredicate.hpp)
add_library(quickstep_parser_ParsePredicateExists ../empty_src.cpp ParsePredicateExists.hpp)
add_library(quickstep_parser_ParsePredicateInTableQuery ../empty_src.cpp ParsePredicateInTableQuery.hpp)
+add_library(quickstep_parser_ParsePriority ../empty_src.cpp ParsePriority.hpp)
add_library(quickstep_parser_ParseSample ParseSample.cpp ParseSample.hpp)
add_library(quickstep_parser_ParseSelect ../empty_src.cpp ParseSelect.hpp)
add_library(quickstep_parser_ParseSelectionClause ParseSelectionClause.cpp ParseSelectionClause.hpp)
@@ -229,6 +230,10 @@ target_link_libraries(quickstep_parser_ParsePredicateInTableQuery
quickstep_parser_ParsePredicate
quickstep_parser_ParseSubqueryExpression
quickstep_utility_Macros)
+target_link_libraries(quickstep_parser_ParsePriority
+ quickstep_parser_ParseLiteralValue
+ quickstep_parser_ParseTreeNode
+ quickstep_utility_Macros)
target_link_libraries(quickstep_parser_ParseSample
quickstep_parser_ParseLiteralValue
quickstep_parser_ParseTreeNode
@@ -267,6 +272,7 @@ target_link_libraries(quickstep_parser_ParseStatement
quickstep_parser_ParseKeyValue
quickstep_parser_ParsePartitionClause
quickstep_parser_ParsePredicate
+ quickstep_parser_ParsePriority
quickstep_parser_ParseSelect
quickstep_parser_ParseString
quickstep_parser_ParseSubqueryTableReference
@@ -337,6 +343,7 @@ target_link_libraries(quickstep_parser_SqlParser
quickstep_parser_ParsePredicate
quickstep_parser_ParsePredicateExists
quickstep_parser_ParsePredicateInTableQuery
+ quickstep_parser_ParsePriority
quickstep_parser_ParseSample
quickstep_parser_ParseSelect
quickstep_parser_ParseSelectionClause
@@ -414,6 +421,7 @@ target_link_libraries(quickstep_parser
quickstep_parser_ParsePredicate
quickstep_parser_ParsePredicateExists
quickstep_parser_ParsePredicateInTableQuery
+ quickstep_parser_ParsePriority
quickstep_parser_ParserUtil
quickstep_parser_ParseSample
quickstep_parser_ParseSelect
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/parser/ParsePriority.hpp
----------------------------------------------------------------------
diff --git a/parser/ParsePriority.hpp b/parser/ParsePriority.hpp
new file mode 100644
index 0000000..89806d4
--- /dev/null
+++ b/parser/ParsePriority.hpp
@@ -0,0 +1,94 @@
+/**
+ * Copyright 2016, Quickstep Research Group, Computer Sciences Department,
+ * University of Wisconsin\u2014Madison.
+ *
+ * Licensed 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.
+ **/
+
+#ifndef QUICKSTEP_PARSER_PARSE_PRIORITY_HPP_
+#define QUICKSTEP_PARSER_PARSE_PRIORITY_HPP_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "parser/ParseLiteralValue.hpp"
+#include "parser/ParseTreeNode.hpp"
+#include "utility/Macros.hpp"
+
+namespace quickstep {
+
+/** \addtogroup Parser
+ * @{
+ */
+
+/**
+ * @brief A parsed representation of PRIORITY.
+ **/
+class ParsePriority : public ParseTreeNode {
+ public:
+ /**
+ * @brief Constructor.
+ *
+ * @param line_number The line number of "PRIORITY" in the SQL statement.
+ * @param column_number The column number of "PRIORITY" in the SQL statement.
+ * @param priority_expression The PRIORITY value expression.
+ **/
+ ParsePriority(const int line_number,
+ const int column_number,
+ NumericParseLiteralValue *priority_expression)
+ : ParseTreeNode(line_number, column_number),
+ priority_expression_(priority_expression) {}
+
+ /**
+ * @brief Destructor.
+ */
+ ~ParsePriority() override {}
+
+ /**
+ * @brief Gets the PRIORITY expression.
+ *
+ * @return PRIORITY expression
+ */
+ const NumericParseLiteralValue* priority_expression() const {
+ return priority_expression_.get();
+ }
+
+ std::string getName() const override {
+ return "PRIORITY";
+ }
+
+ protected:
+ void getFieldStringItems(
+ std::vector<std::string> *inline_field_names,
+ std::vector<std::string> *inline_field_values,
+ std::vector<std::string> *non_container_child_field_names,
+ std::vector<const ParseTreeNode *> *non_container_child_fields,
+ std::vector<std::string> *container_child_field_names,
+ std::vector<std::vector<const ParseTreeNode *>> *container_child_fields)
+ const override {
+ non_container_child_field_names->push_back("");
+ non_container_child_fields->push_back(priority_expression_.get());
+ }
+
+ private:
+ std::unique_ptr<NumericParseLiteralValue> priority_expression_;
+
+ DISALLOW_COPY_AND_ASSIGN(ParsePriority);
+};
+
+/** @} */
+
+} // namespace quickstep
+
+#endif // QUICKSTEP_PARSER_PARSE_PRIORITY_HPP_
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/parser/ParseStatement.hpp
----------------------------------------------------------------------
diff --git a/parser/ParseStatement.hpp b/parser/ParseStatement.hpp
index 65acc68..61475a9 100644
--- a/parser/ParseStatement.hpp
+++ b/parser/ParseStatement.hpp
@@ -32,6 +32,7 @@
#include "parser/ParseKeyValue.hpp"
#include "parser/ParsePartitionClause.hpp"
#include "parser/ParsePredicate.hpp"
+#include "parser/ParsePriority.hpp"
#include "parser/ParseSelect.hpp"
#include "parser/ParseString.hpp"
#include "parser/ParseSubqueryTableReference.hpp"
@@ -83,6 +84,16 @@ class ParseStatement : public ParseTreeNode {
**/
virtual StatementType getStatementType() const = 0;
+ /**
+ * @brief Get the priority of the SQL statement. Note that the priority is
+ * an unsigned non-zero integer.
+ *
+ * @return The priority of the SQL statement. The default priority is 1.
+ **/
+ virtual const std::uint64_t getPriority() const {
+ return 1;
+ }
+
protected:
ParseStatement(const int line_number, const int column_number)
: ParseTreeNode(line_number, column_number) {
@@ -480,14 +491,18 @@ class ParseStatementSelect : public ParseStatement {
* @param column_number Column number of the first token of this node in the SQL statement.
* @param select_query The top-level SELECT query.
* @param with_clause The WITH clause of common table query expressions.
+ * @param priority_clause The PRIORITY clause of this query. If not valid or
+ * not present, this is NULL.
**/
ParseStatementSelect(const int line_number,
const int column_number,
ParseSelect *select_query,
- PtrVector<ParseSubqueryTableReference> *with_clause)
+ PtrVector<ParseSubqueryTableReference> *with_clause,
+ ParsePriority *priority_clause)
: ParseStatement(line_number, column_number),
select_query_(select_query),
- with_clause_(with_clause) {
+ with_clause_(with_clause),
+ priority_clause_(priority_clause) {
}
/**
@@ -518,6 +533,14 @@ class ParseStatementSelect : public ParseStatement {
return with_clause_.get();
}
+ const std::uint64_t getPriority() const override {
+ if (priority_clause_ != nullptr) {
+ DCHECK(priority_clause_->priority_expression() != nullptr);
+ return priority_clause_->priority_expression()->long_value();
+ }
+ return 1;
+ }
+
protected:
void getFieldStringItems(
std::vector<std::string> *inline_field_names,
@@ -536,11 +559,17 @@ class ParseStatementSelect : public ParseStatement {
container_child_fields->back().push_back(&common_subquery);
}
}
+
+ if (priority_clause_ != nullptr) {
+ non_container_child_field_names->push_back("priority");
+ non_container_child_fields->push_back(priority_clause_.get());
+ }
}
private:
std::unique_ptr<ParseSelect> select_query_;
std::unique_ptr<PtrVector<ParseSubqueryTableReference>> with_clause_;
+ std::unique_ptr<ParsePriority> priority_clause_;
DISALLOW_COPY_AND_ASSIGN(ParseStatementSelect);
};
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/parser/SqlLexer.lpp
----------------------------------------------------------------------
diff --git a/parser/SqlLexer.lpp b/parser/SqlLexer.lpp
index ee34400..ec18f38 100644
--- a/parser/SqlLexer.lpp
+++ b/parser/SqlLexer.lpp
@@ -61,6 +61,7 @@ class ParseOrderBy;
class ParseOrderByItem;
class ParsePartitionClause;
class ParsePredicate;
+class ParsePriority;
class ParseSample;
class ParseScalarLiteral;
class ParseSearchedWhenClause;
@@ -253,6 +254,7 @@ unsigned_numeric_literal {exact_numeric_literal}|{approximate_numeric_literal}
"percent" return TOKEN_PERCENT;
"preceding" return TOKEN_PRECEDING;
"primary" return TOKEN_PRIMARY;
+ "priority" return TOKEN_PRIORITY;
"quit" return TOKEN_QUIT;
"range" return TOKEN_RANGE;
"real" return TOKEN_REAL;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/parser/SqlParser.ypp
----------------------------------------------------------------------
diff --git a/parser/SqlParser.ypp b/parser/SqlParser.ypp
index 81fa3ae..382ea44 100644
--- a/parser/SqlParser.ypp
+++ b/parser/SqlParser.ypp
@@ -85,6 +85,7 @@ typedef struct YYLTYPE {
#include "parser/ParsePredicate.hpp"
#include "parser/ParsePredicateExists.hpp"
#include "parser/ParsePredicateInTableQuery.hpp"
+#include "parser/ParsePriority.hpp"
#include "parser/ParserUtil.hpp"
#include "parser/ParseSample.hpp"
#include "parser/ParseSelect.hpp"
@@ -212,6 +213,8 @@ typedef void* yyscan_t;
quickstep::PtrVector<quickstep::ParseSubqueryTableReference> *with_list_;
quickstep::ParseSubqueryTableReference *with_list_element_;
+
+ quickstep::ParsePriority *opt_priority_clause_;
}
%{
@@ -319,6 +322,7 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%token TOKEN_PERCENT;
%token TOKEN_PRECEDING;
%token TOKEN_PRIMARY;
+%token TOKEN_PRIORITY;
%token TOKEN_QUIT;
%token TOKEN_RANGE;
%token TOKEN_REAL;
@@ -583,6 +587,9 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%type <window_frame_info_>
opt_window_frame
+%type <opt_priority_clause_>
+ opt_priority_clause
+
%type <with_list_>
with_clause
with_list
@@ -1143,13 +1150,35 @@ assignment_item:
/* Select Queries */
select_statement:
- select_query {
- $$ = new quickstep::ParseStatementSelect(@1.first_line, @1.first_column, $1, nullptr);
+ select_query opt_priority_clause {
+ $$ = new quickstep::ParseStatementSelect(@1.first_line, @1.first_column, $1, nullptr, $2);
}
- | with_clause select_query {
- $$ = new quickstep::ParseStatementSelect(@1.first_line, @1.first_column, $2, $1);
+ | with_clause select_query opt_priority_clause {
+ $$ = new quickstep::ParseStatementSelect(@1.first_line, @1.first_column, $2, $1, $3);
};
+opt_priority_clause:
+ {
+ $$ = nullptr;
+ }
+ | TOKEN_WITH TOKEN_PRIORITY TOKEN_UNSIGNED_NUMVAL {
+ if ($3->float_like()) {
+ delete $3;
+ $$ = nullptr;
+ quickstep_yyerror(&@3, yyscanner, nullptr, "PRIORITY value must be an integer");
+ YYERROR;
+ } else {
+ if ($3->long_value() <= 0) {
+ delete $3;
+ $$ = nullptr;
+ quickstep_yyerror(&@3, yyscanner, nullptr, "PRIORITY value must be positive");
+ YYERROR;
+ } else {
+ $$ = new quickstep::ParsePriority(@1.first_line, @1.first_column, $3);
+ }
+ }
+ };
+
with_clause:
TOKEN_WITH with_list {
$$ = $2;
[04/18] incubator-quickstep git commit: QUICKSTEP-20: Added parser
support for SQL window aggregation function
Posted by zu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/preprocessed/SqlParser_gen.cpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlParser_gen.cpp b/parser/preprocessed/SqlParser_gen.cpp
index 038db14..c02baf4 100644
--- a/parser/preprocessed/SqlParser_gen.cpp
+++ b/parser/preprocessed/SqlParser_gen.cpp
@@ -131,6 +131,7 @@ typedef struct YYLTYPE {
#include "parser/ParseSubqueryExpression.hpp"
#include "parser/ParseSubqueryTableReference.hpp"
#include "parser/ParseTableReference.hpp"
+#include "parser/ParseWindow.hpp"
#include "storage/StorageBlockInfo.hpp"
#include "types/Type.hpp"
#include "types/TypeFactory.hpp"
@@ -150,7 +151,7 @@ typedef struct YYLTYPE {
// Needed for Bison 2.6 and higher, which do not automatically provide this typedef.
typedef void* yyscan_t;
-#line 154 "SqlParser_gen.cpp" /* yacc.c:339 */
+#line 155 "SqlParser_gen.cpp" /* yacc.c:339 */
# ifndef YY_NULLPTR
# if defined __cplusplus && 201103L <= __cplusplus
@@ -225,88 +226,96 @@ extern int quickstep_yydebug;
TOKEN_CONSTRAINT = 295,
TOKEN_COPY = 296,
TOKEN_CREATE = 297,
- TOKEN_DATE = 298,
- TOKEN_DATETIME = 299,
- TOKEN_DAY = 300,
- TOKEN_DECIMAL = 301,
- TOKEN_DEFAULT = 302,
- TOKEN_DELETE = 303,
- TOKEN_DELIMITER = 304,
- TOKEN_DESC = 305,
- TOKEN_DISTINCT = 306,
- TOKEN_DOUBLE = 307,
- TOKEN_DROP = 308,
- TOKEN_ELSE = 309,
- TOKEN_END = 310,
- TOKEN_ESCAPE_STRINGS = 311,
- TOKEN_EXISTS = 312,
- TOKEN_EXTRACT = 313,
- TOKEN_FALSE = 314,
- TOKEN_FIRST = 315,
- TOKEN_FLOAT = 316,
- TOKEN_FOR = 317,
- TOKEN_FOREIGN = 318,
- TOKEN_FROM = 319,
- TOKEN_FULL = 320,
- TOKEN_GROUP = 321,
- TOKEN_HASH = 322,
- TOKEN_HAVING = 323,
- TOKEN_HOUR = 324,
- TOKEN_IN = 325,
- TOKEN_INDEX = 326,
- TOKEN_INNER = 327,
- TOKEN_INSERT = 328,
- TOKEN_INTEGER = 329,
- TOKEN_INTERVAL = 330,
- TOKEN_INTO = 331,
- TOKEN_JOIN = 332,
- TOKEN_KEY = 333,
- TOKEN_LAST = 334,
- TOKEN_LEFT = 335,
- TOKEN_LIMIT = 336,
- TOKEN_LONG = 337,
- TOKEN_MINUTE = 338,
- TOKEN_MONTH = 339,
- TOKEN_NULL = 340,
- TOKEN_NULLS = 341,
- TOKEN_OFF = 342,
- TOKEN_ON = 343,
- TOKEN_ORDER = 344,
- TOKEN_OUTER = 345,
- TOKEN_PARTITION = 346,
- TOKEN_PARTITIONS = 347,
- TOKEN_PERCENT = 348,
- TOKEN_PRIMARY = 349,
- TOKEN_QUIT = 350,
- TOKEN_RANGE = 351,
- TOKEN_REAL = 352,
- TOKEN_REFERENCES = 353,
- TOKEN_RIGHT = 354,
- TOKEN_ROW_DELIMITER = 355,
- TOKEN_SECOND = 356,
- TOKEN_SELECT = 357,
- TOKEN_SET = 358,
- TOKEN_SMA = 359,
- TOKEN_SMALLINT = 360,
- TOKEN_SUBSTRING = 361,
- TOKEN_TABLE = 362,
- TOKEN_THEN = 363,
- TOKEN_TIME = 364,
- TOKEN_TIMESTAMP = 365,
- TOKEN_TRUE = 366,
- TOKEN_TUPLESAMPLE = 367,
- TOKEN_UNIQUE = 368,
- TOKEN_UPDATE = 369,
- TOKEN_USING = 370,
- TOKEN_VALUES = 371,
- TOKEN_VARCHAR = 372,
- TOKEN_WHEN = 373,
- TOKEN_WHERE = 374,
- TOKEN_WITH = 375,
- TOKEN_YEAR = 376,
- TOKEN_YEARMONTH = 377,
- TOKEN_EOF = 378,
- TOKEN_LEX_ERROR = 379
+ TOKEN_CURRENT = 298,
+ TOKEN_DATE = 299,
+ TOKEN_DATETIME = 300,
+ TOKEN_DAY = 301,
+ TOKEN_DECIMAL = 302,
+ TOKEN_DEFAULT = 303,
+ TOKEN_DELETE = 304,
+ TOKEN_DELIMITER = 305,
+ TOKEN_DESC = 306,
+ TOKEN_DISTINCT = 307,
+ TOKEN_DOUBLE = 308,
+ TOKEN_DROP = 309,
+ TOKEN_ELSE = 310,
+ TOKEN_END = 311,
+ TOKEN_ESCAPE_STRINGS = 312,
+ TOKEN_EXISTS = 313,
+ TOKEN_EXTRACT = 314,
+ TOKEN_FALSE = 315,
+ TOKEN_FIRST = 316,
+ TOKEN_FLOAT = 317,
+ TOKEN_FOLLOWING = 318,
+ TOKEN_FOR = 319,
+ TOKEN_FOREIGN = 320,
+ TOKEN_FROM = 321,
+ TOKEN_FULL = 322,
+ TOKEN_GROUP = 323,
+ TOKEN_HASH = 324,
+ TOKEN_HAVING = 325,
+ TOKEN_HOUR = 326,
+ TOKEN_IN = 327,
+ TOKEN_INDEX = 328,
+ TOKEN_INNER = 329,
+ TOKEN_INSERT = 330,
+ TOKEN_INTEGER = 331,
+ TOKEN_INTERVAL = 332,
+ TOKEN_INTO = 333,
+ TOKEN_JOIN = 334,
+ TOKEN_KEY = 335,
+ TOKEN_LAST = 336,
+ TOKEN_LEFT = 337,
+ TOKEN_LIMIT = 338,
+ TOKEN_LONG = 339,
+ TOKEN_MINUTE = 340,
+ TOKEN_MONTH = 341,
+ TOKEN_NULL = 342,
+ TOKEN_NULLS = 343,
+ TOKEN_OFF = 344,
+ TOKEN_ON = 345,
+ TOKEN_ORDER = 346,
+ TOKEN_OUTER = 347,
+ TOKEN_OVER = 348,
+ TOKEN_PARTITION = 349,
+ TOKEN_PARTITIONS = 350,
+ TOKEN_PERCENT = 351,
+ TOKEN_PRECEDING = 352,
+ TOKEN_PRIMARY = 353,
+ TOKEN_QUIT = 354,
+ TOKEN_RANGE = 355,
+ TOKEN_REAL = 356,
+ TOKEN_REFERENCES = 357,
+ TOKEN_RIGHT = 358,
+ TOKEN_ROW = 359,
+ TOKEN_ROW_DELIMITER = 360,
+ TOKEN_ROWS = 361,
+ TOKEN_SECOND = 362,
+ TOKEN_SELECT = 363,
+ TOKEN_SET = 364,
+ TOKEN_SMA = 365,
+ TOKEN_SMALLINT = 366,
+ TOKEN_SUBSTRING = 367,
+ TOKEN_TABLE = 368,
+ TOKEN_THEN = 369,
+ TOKEN_TIME = 370,
+ TOKEN_TIMESTAMP = 371,
+ TOKEN_TRUE = 372,
+ TOKEN_TUPLESAMPLE = 373,
+ TOKEN_UNBOUNDED = 374,
+ TOKEN_UNIQUE = 375,
+ TOKEN_UPDATE = 376,
+ TOKEN_USING = 377,
+ TOKEN_VALUES = 378,
+ TOKEN_VARCHAR = 379,
+ TOKEN_WHEN = 380,
+ TOKEN_WHERE = 381,
+ TOKEN_WINDOW = 382,
+ TOKEN_WITH = 383,
+ TOKEN_YEAR = 384,
+ TOKEN_YEARMONTH = 385,
+ TOKEN_EOF = 386,
+ TOKEN_LEX_ERROR = 387
};
#endif
@@ -315,7 +324,7 @@ extern int quickstep_yydebug;
union YYSTYPE
{
-#line 118 "../SqlParser.ypp" /* yacc.c:355 */
+#line 119 "../SqlParser.ypp" /* yacc.c:355 */
quickstep::ParseString *string_value_;
@@ -401,13 +410,19 @@ union YYSTYPE
quickstep::ParseSample *opt_sample_clause_;
+ quickstep::PtrList<quickstep::ParseWindow> *opt_window_clause_;
+ quickstep::ParseWindow *window_definition_;
+ quickstep::PtrList<quickstep::ParseExpression> *window_partition_by_list_;
+ quickstep::PtrList<quickstep::ParseOrderByItem> *window_order_by_list_;
+ quickstep::ParseFrameInfo *window_frame_info_;
+
quickstep::PtrList<quickstep::ParseOrderByItem> *order_commalist_;
quickstep::ParseOrderByItem *order_item_;
quickstep::PtrVector<quickstep::ParseSubqueryTableReference> *with_list_;
quickstep::ParseSubqueryTableReference *with_list_element_;
-#line 411 "SqlParser_gen.cpp" /* yacc.c:355 */
+#line 426 "SqlParser_gen.cpp" /* yacc.c:355 */
};
typedef union YYSTYPE YYSTYPE;
@@ -436,13 +451,13 @@ int quickstep_yyparse (yyscan_t yyscanner, quickstep::ParseStatement **parsedSta
#endif /* !YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED */
/* Copy the second part of user declarations. */
-#line 210 "../SqlParser.ypp" /* yacc.c:358 */
+#line 217 "../SqlParser.ypp" /* yacc.c:358 */
/* This header needs YYSTYPE, which is defined by the %union directive above */
#include "SqlLexer_gen.hpp"
void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string &feature);
-#line 446 "SqlParser_gen.cpp" /* yacc.c:358 */
+#line 461 "SqlParser_gen.cpp" /* yacc.c:358 */
#ifdef short
# undef short
@@ -686,21 +701,21 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 47
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 1215
+#define YYLAST 1347
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 136
+#define YYNTOKENS 144
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 96
+#define YYNNTS 106
/* YYNRULES -- Number of rules. */
-#define YYNRULES 265
+#define YYNRULES 287
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 488
+#define YYNSTATES 531
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 379
+#define YYMAXUTOK 387
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -710,11 +725,11 @@ union yyalloc
static const yytype_uint8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 131, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 139, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 135, 2, 2,
- 132, 133, 23, 21, 134, 22, 27, 24, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 130,
+ 2, 2, 2, 2, 2, 2, 2, 143, 2, 2,
+ 140, 141, 23, 21, 142, 22, 27, 24, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 138,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -746,40 +761,43 @@ static const yytype_uint8 yytranslate[] =
90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127, 128, 129
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 585, 585, 589, 593, 597, 601, 604, 611, 614,
- 617, 620, 623, 626, 629, 632, 635, 638, 644, 650,
- 657, 663, 670, 679, 684, 693, 698, 703, 707, 713,
- 718, 721, 724, 729, 732, 735, 738, 741, 744, 747,
- 750, 753, 756, 768, 771, 774, 792, 812, 815, 818,
- 823, 828, 834, 840, 849, 853, 859, 862, 867, 872,
- 877, 884, 891, 895, 901, 904, 909, 912, 917, 920,
- 925, 928, 947, 951, 957, 961, 967, 970, 973, 978,
- 981, 988, 993, 1004, 1009, 1013, 1017, 1023, 1026, 1032,
- 1040, 1043, 1046, 1052, 1057, 1060, 1065, 1069, 1073, 1077,
- 1083, 1088, 1093, 1097, 1103, 1109, 1112, 1117, 1122, 1126,
- 1132, 1138, 1144, 1147, 1151, 1157, 1160, 1165, 1169, 1175,
- 1178, 1181, 1186, 1191, 1196, 1199, 1202, 1207, 1210, 1213,
- 1216, 1219, 1222, 1225, 1228, 1233, 1236, 1241, 1245, 1249,
- 1252, 1256, 1259, 1264, 1267, 1272, 1275, 1280, 1284, 1290,
- 1293, 1298, 1301, 1306, 1309, 1314, 1317, 1336, 1340, 1346,
- 1353, 1356, 1359, 1364, 1367, 1370, 1376, 1379, 1384, 1389,
- 1398, 1403, 1412, 1417, 1420, 1425, 1428, 1433, 1439, 1445,
- 1448, 1451, 1454, 1457, 1460, 1466, 1475, 1478, 1483, 1486,
- 1491, 1494, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520,
- 1525, 1529, 1533, 1536, 1541, 1546, 1550, 1556, 1559, 1564,
- 1568, 1574, 1579, 1583, 1589, 1594, 1597, 1602, 1606, 1612,
- 1615, 1618, 1621, 1633, 1637, 1656, 1669, 1684, 1687, 1690,
- 1693, 1696, 1699, 1704, 1708, 1714, 1717, 1722, 1726, 1733,
- 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1765,
- 1776, 1779, 1784, 1787, 1790, 1796, 1800, 1806, 1809, 1817,
- 1820, 1823, 1826, 1832, 1837, 1842
+ 0, 622, 622, 626, 630, 634, 638, 641, 648, 651,
+ 654, 657, 660, 663, 666, 669, 672, 675, 681, 687,
+ 694, 700, 707, 716, 721, 730, 735, 740, 744, 750,
+ 755, 758, 761, 766, 769, 772, 775, 778, 781, 784,
+ 787, 790, 793, 805, 808, 811, 829, 849, 852, 855,
+ 860, 865, 871, 877, 886, 890, 896, 899, 904, 909,
+ 914, 921, 928, 932, 938, 941, 946, 949, 954, 957,
+ 962, 965, 984, 988, 994, 998, 1004, 1007, 1010, 1015,
+ 1018, 1025, 1030, 1041, 1046, 1050, 1054, 1060, 1063, 1069,
+ 1077, 1080, 1083, 1089, 1094, 1097, 1102, 1106, 1110, 1114,
+ 1120, 1125, 1130, 1134, 1140, 1146, 1149, 1154, 1159, 1163,
+ 1169, 1175, 1181, 1184, 1188, 1194, 1197, 1202, 1206, 1212,
+ 1215, 1218, 1223, 1228, 1233, 1236, 1239, 1244, 1247, 1250,
+ 1253, 1256, 1259, 1262, 1265, 1270, 1273, 1278, 1282, 1286,
+ 1289, 1293, 1296, 1301, 1304, 1309, 1312, 1317, 1321, 1327,
+ 1330, 1335, 1338, 1343, 1346, 1351, 1354, 1373, 1376, 1379,
+ 1383, 1389, 1395, 1400, 1403, 1408, 1411, 1416, 1419, 1424,
+ 1427, 1432, 1433, 1436, 1441, 1442, 1445, 1450, 1454, 1460,
+ 1467, 1470, 1473, 1478, 1481, 1484, 1490, 1493, 1498, 1503,
+ 1512, 1517, 1526, 1531, 1534, 1539, 1542, 1547, 1553, 1559,
+ 1562, 1565, 1568, 1571, 1574, 1580, 1589, 1592, 1597, 1600,
+ 1605, 1608, 1613, 1616, 1619, 1622, 1626, 1630, 1633, 1636,
+ 1639, 1642, 1647, 1651, 1655, 1658, 1663, 1668, 1672, 1678,
+ 1681, 1686, 1690, 1696, 1701, 1705, 1711, 1716, 1719, 1724,
+ 1728, 1734, 1737, 1740, 1743, 1755, 1759, 1778, 1791, 1806,
+ 1809, 1812, 1815, 1818, 1821, 1826, 1830, 1836, 1839, 1844,
+ 1848, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879,
+ 1882, 1887, 1898, 1901, 1906, 1909, 1912, 1918, 1922, 1928,
+ 1931, 1939, 1942, 1945, 1948, 1954, 1959, 1964
};
#endif
@@ -798,47 +816,51 @@ static const char *const yytname[] =
"TOKEN_BIGINT", "TOKEN_BIT", "TOKEN_BITWEAVING", "TOKEN_BLOCKPROPERTIES",
"TOKEN_BLOCKSAMPLE", "TOKEN_BLOOM_FILTER", "TOKEN_CSB_TREE", "TOKEN_BY",
"TOKEN_CASE", "TOKEN_CHARACTER", "TOKEN_CHECK", "TOKEN_COLUMN",
- "TOKEN_CONSTRAINT", "TOKEN_COPY", "TOKEN_CREATE", "TOKEN_DATE",
- "TOKEN_DATETIME", "TOKEN_DAY", "TOKEN_DECIMAL", "TOKEN_DEFAULT",
- "TOKEN_DELETE", "TOKEN_DELIMITER", "TOKEN_DESC", "TOKEN_DISTINCT",
- "TOKEN_DOUBLE", "TOKEN_DROP", "TOKEN_ELSE", "TOKEN_END",
- "TOKEN_ESCAPE_STRINGS", "TOKEN_EXISTS", "TOKEN_EXTRACT", "TOKEN_FALSE",
- "TOKEN_FIRST", "TOKEN_FLOAT", "TOKEN_FOR", "TOKEN_FOREIGN", "TOKEN_FROM",
- "TOKEN_FULL", "TOKEN_GROUP", "TOKEN_HASH", "TOKEN_HAVING", "TOKEN_HOUR",
- "TOKEN_IN", "TOKEN_INDEX", "TOKEN_INNER", "TOKEN_INSERT",
- "TOKEN_INTEGER", "TOKEN_INTERVAL", "TOKEN_INTO", "TOKEN_JOIN",
- "TOKEN_KEY", "TOKEN_LAST", "TOKEN_LEFT", "TOKEN_LIMIT", "TOKEN_LONG",
- "TOKEN_MINUTE", "TOKEN_MONTH", "TOKEN_NULL", "TOKEN_NULLS", "TOKEN_OFF",
- "TOKEN_ON", "TOKEN_ORDER", "TOKEN_OUTER", "TOKEN_PARTITION",
- "TOKEN_PARTITIONS", "TOKEN_PERCENT", "TOKEN_PRIMARY", "TOKEN_QUIT",
- "TOKEN_RANGE", "TOKEN_REAL", "TOKEN_REFERENCES", "TOKEN_RIGHT",
- "TOKEN_ROW_DELIMITER", "TOKEN_SECOND", "TOKEN_SELECT", "TOKEN_SET",
- "TOKEN_SMA", "TOKEN_SMALLINT", "TOKEN_SUBSTRING", "TOKEN_TABLE",
- "TOKEN_THEN", "TOKEN_TIME", "TOKEN_TIMESTAMP", "TOKEN_TRUE",
- "TOKEN_TUPLESAMPLE", "TOKEN_UNIQUE", "TOKEN_UPDATE", "TOKEN_USING",
- "TOKEN_VALUES", "TOKEN_VARCHAR", "TOKEN_WHEN", "TOKEN_WHERE",
- "TOKEN_WITH", "TOKEN_YEAR", "TOKEN_YEARMONTH", "TOKEN_EOF",
- "TOKEN_LEX_ERROR", "';'", "'\\n'", "'('", "')'", "','", "'%'", "$accept",
- "start", "sql_statement", "quit_statement", "alter_table_statement",
- "create_table_statement", "create_index_statement",
- "drop_table_statement", "column_def", "column_def_commalist",
- "data_type", "column_constraint_def", "column_constraint_def_list",
- "opt_column_constraint_def_list", "table_constraint_def",
- "table_constraint_def_commalist", "opt_table_constraint_def_commalist",
- "opt_column_list", "opt_block_properties", "opt_partition_clause",
- "partition_type", "key_value_list", "key_value", "key_string_value",
- "key_string_list", "key_integer_value", "index_type",
- "opt_index_properties", "insert_statement", "copy_from_statement",
- "opt_copy_from_params", "copy_from_params", "update_statement",
- "delete_statement", "assignment_list", "assignment_item",
- "select_statement", "with_clause", "with_list", "with_list_element",
- "select_query", "opt_all_distinct", "selection",
- "selection_item_commalist", "selection_item", "from_clause",
+ "TOKEN_CONSTRAINT", "TOKEN_COPY", "TOKEN_CREATE", "TOKEN_CURRENT",
+ "TOKEN_DATE", "TOKEN_DATETIME", "TOKEN_DAY", "TOKEN_DECIMAL",
+ "TOKEN_DEFAULT", "TOKEN_DELETE", "TOKEN_DELIMITER", "TOKEN_DESC",
+ "TOKEN_DISTINCT", "TOKEN_DOUBLE", "TOKEN_DROP", "TOKEN_ELSE",
+ "TOKEN_END", "TOKEN_ESCAPE_STRINGS", "TOKEN_EXISTS", "TOKEN_EXTRACT",
+ "TOKEN_FALSE", "TOKEN_FIRST", "TOKEN_FLOAT", "TOKEN_FOLLOWING",
+ "TOKEN_FOR", "TOKEN_FOREIGN", "TOKEN_FROM", "TOKEN_FULL", "TOKEN_GROUP",
+ "TOKEN_HASH", "TOKEN_HAVING", "TOKEN_HOUR", "TOKEN_IN", "TOKEN_INDEX",
+ "TOKEN_INNER", "TOKEN_INSERT", "TOKEN_INTEGER", "TOKEN_INTERVAL",
+ "TOKEN_INTO", "TOKEN_JOIN", "TOKEN_KEY", "TOKEN_LAST", "TOKEN_LEFT",
+ "TOKEN_LIMIT", "TOKEN_LONG", "TOKEN_MINUTE", "TOKEN_MONTH", "TOKEN_NULL",
+ "TOKEN_NULLS", "TOKEN_OFF", "TOKEN_ON", "TOKEN_ORDER", "TOKEN_OUTER",
+ "TOKEN_OVER", "TOKEN_PARTITION", "TOKEN_PARTITIONS", "TOKEN_PERCENT",
+ "TOKEN_PRECEDING", "TOKEN_PRIMARY", "TOKEN_QUIT", "TOKEN_RANGE",
+ "TOKEN_REAL", "TOKEN_REFERENCES", "TOKEN_RIGHT", "TOKEN_ROW",
+ "TOKEN_ROW_DELIMITER", "TOKEN_ROWS", "TOKEN_SECOND", "TOKEN_SELECT",
+ "TOKEN_SET", "TOKEN_SMA", "TOKEN_SMALLINT", "TOKEN_SUBSTRING",
+ "TOKEN_TABLE", "TOKEN_THEN", "TOKEN_TIME", "TOKEN_TIMESTAMP",
+ "TOKEN_TRUE", "TOKEN_TUPLESAMPLE", "TOKEN_UNBOUNDED", "TOKEN_UNIQUE",
+ "TOKEN_UPDATE", "TOKEN_USING", "TOKEN_VALUES", "TOKEN_VARCHAR",
+ "TOKEN_WHEN", "TOKEN_WHERE", "TOKEN_WINDOW", "TOKEN_WITH", "TOKEN_YEAR",
+ "TOKEN_YEARMONTH", "TOKEN_EOF", "TOKEN_LEX_ERROR", "';'", "'\\n'", "'('",
+ "')'", "','", "'%'", "$accept", "start", "sql_statement",
+ "quit_statement", "alter_table_statement", "create_table_statement",
+ "create_index_statement", "drop_table_statement", "column_def",
+ "column_def_commalist", "data_type", "column_constraint_def",
+ "column_constraint_def_list", "opt_column_constraint_def_list",
+ "table_constraint_def", "table_constraint_def_commalist",
+ "opt_table_constraint_def_commalist", "opt_column_list",
+ "opt_block_properties", "opt_partition_clause", "partition_type",
+ "key_value_list", "key_value", "key_string_value", "key_string_list",
+ "key_integer_value", "index_type", "opt_index_properties",
+ "insert_statement", "copy_from_statement", "opt_copy_from_params",
+ "copy_from_params", "update_statement", "delete_statement",
+ "assignment_list", "assignment_item", "select_statement", "with_clause",
+ "with_list", "with_list_element", "select_query", "opt_all_distinct",
+ "selection", "selection_item_commalist", "selection_item", "from_clause",
"subquery_expression", "opt_sample_clause", "join_type",
"joined_table_reference", "table_reference", "table_reference_signature",
"table_reference_signature_primary", "joined_table_reference_commalist",
"opt_group_by_clause", "opt_having_clause", "opt_order_by_clause",
- "opt_limit_clause", "order_commalist", "order_item",
+ "opt_limit_clause", "opt_window_clause", "window_declaration_list",
+ "window_declaration", "window_definition", "opt_window_partition",
+ "opt_window_order", "opt_window_frame", "frame_mode", "frame_preceding",
+ "frame_following", "order_commalist", "order_item",
"opt_order_direction", "opt_nulls_first", "opt_where_clause",
"where_clause", "or_expression", "and_expression", "not_expression",
"predicate_expression_base", "add_expression", "multiply_expression",
@@ -872,14 +894,15 @@ static const yytype_uint16 yytoknum[] =
350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
370, 371, 372, 373, 374, 375, 376, 377, 378, 379,
- 59, 10, 40, 41, 44, 37
+ 380, 381, 382, 383, 384, 385, 386, 387, 59, 10,
+ 40, 41, 44, 37
};
# endif
-#define YYPACT_NINF -230
+#define YYPACT_NINF -239
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-230)))
+ (!!((Yystate) == (-239)))
#define YYTABLE_NINF -128
@@ -890,55 +913,60 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- 162, -230, -230, -75, 181, 7, 17, 23, 19, -230,
- 41, 181, 181, -230, 151, 129, -230, -230, -230, -230,
- -230, -230, -230, -230, -230, -230, -38, -230, -36, 166,
- 181, -230, -230, 138, 181, 181, 181, 181, 181, -230,
- -230, 644, 111, 93, -230, 220, 128, -230, -230, -230,
- 202, -230, -230, -230, -230, 65, 273, 192, 163, 172,
- -230, 11, -230, -230, 295, 300, -230, -230, -230, 699,
- 207, -230, 233, -230, -230, 218, -230, -230, 310, -230,
- -230, -230, -230, 219, -230, -230, 229, 245, 786, 322,
- 261, 224, -230, -230, 182, 35, -230, -230, -230, -230,
- -230, -230, -230, -230, 928, -12, 181, 181, 235, 181,
- 181, 194, 226, 238, 181, 181, 542, -230, -230, 237,
- 181, -230, -230, -230, 542, 53, -34, -230, 359, -230,
- 105, 105, 983, 363, -230, 241, 40, -230, 18, 172,
- 983, -230, -230, 181, 983, -230, -230, -230, -230, 983,
- 300, -230, 181, 331, 82, -230, 360, -230, 268, -230,
- -7, -230, 268, 181, 146, 181, 181, 244, -230, 246,
- -230, 143, 1088, 841, 235, 455, 369, 372, -230, -230,
- 624, 364, 1069, 155, 15, 983, 8, -230, 983, -230,
- 323, 252, -230, -230, -230, -230, -230, -230, 317, -230,
- 60, 256, -230, -230, 10, 90, 197, -230, 257, 90,
- -10, 319, -230, -230, 35, -230, -230, 259, 983, -230,
- 270, 160, 181, -230, 983, -230, 181, -230, -230, 263,
- 313, 315, 267, -230, -230, -230, 174, 181, 281, 146,
- 181, -230, 81, -230, -230, 20, 34, 542, 542, 61,
- -230, -230, -230, -230, -230, -230, -230, -230, 983, 271,
- 983, 47, -230, 165, 283, 983, 55, -230, 342, 270,
- -230, -230, 983, 398, -230, 125, 181, -230, -230, 311,
- -230, 312, 318, 326, 18, -230, 405, 407, 90, 375,
- 344, -230, 171, -230, 983, -230, 270, -230, 542, 287,
- 288, 181, 417, 157, 175, -230, 177, 396, 49, -230,
- 290, 301, -230, 335, 296, 1069, -230, 346, 181, -230,
- -230, 81, -230, -230, 372, -230, -230, -230, 983, 298,
- 203, 786, -230, 270, 337, -230, -230, 1069, 299, 270,
- 983, -230, 42, -25, -230, -230, -230, -230, -230, 18,
- 197, 334, 336, -230, 983, 542, 341, -230, 270, 21,
- 181, 181, 183, -230, -230, -230, -230, -230, -230, -230,
- 193, -230, 181, -230, -230, -230, -230, 307, 146, 404,
- 347, -230, 542, -230, -230, 316, -230, 234, 786, -230,
- 983, 185, -230, -230, 1069, 270, -230, 437, -230, 354,
- -230, -230, 320, 369, 409, 365, -230, 188, 190, -230,
- 451, 157, -230, 181, -230, -230, 325, 426, -230, 31,
- 181, 983, 195, 270, -230, 198, 338, 542, 983, 460,
- -230, 366, -230, -230, -230, 200, -230, -230, -230, -230,
- 14, 181, 13, -230, 339, 270, -230, -230, -230, 369,
- 345, -230, 231, -230, 181, -230, 181, -230, -230, 181,
- -230, 208, -230, -230, 343, -230, 983, -230, -230, 377,
- 348, -230, 210, -230, 181, -230, 113, -230, 181, -230,
- 213, -230, -230, 215, 376, -230, 471, -230
+ 71, -239, -239, -52, 270, -19, 22, -43, 31, -239,
+ 16, 270, 270, -239, 97, 162, -239, -239, -239, -239,
+ -239, -239, -239, -239, -239, -239, -24, -239, 98, 117,
+ 270, -239, -239, 58, 270, 270, 270, 270, 270, -239,
+ -239, 619, 69, 29, -239, 155, 52, -239, -239, -239,
+ 126, -239, -239, -239, -239, 36, 233, 151, 60, 127,
+ -239, 68, -239, -239, 255, 260, -239, -239, -239, 700,
+ 131, -239, 217, -239, -239, 137, -239, -239, 288, -239,
+ -239, -239, -239, 172, -239, -239, 176, 241, 792, 320,
+ 297, 189, -239, -239, 286, -1, -239, -239, 271, -239,
+ -239, -239, -239, -239, 954, 0, 270, 270, 234, 270,
+ 270, 184, 210, 240, 270, 270, 538, -239, -239, 239,
+ 270, -239, -239, -239, 538, 47, -9, -239, 373, -239,
+ 154, 154, 1035, 374, -239, 242, 26, -239, 33, 127,
+ 1035, -239, -239, 270, 1035, -239, -239, -239, -239, 1035,
+ 38, 260, -239, 270, 354, 48, -239, 371, -239, 272,
+ -239, 140, -239, 272, 270, -18, 270, 270, 244, -239,
+ 246, -239, 163, 1144, 873, 234, 457, 382, 383, -239,
+ -239, 1270, 377, 1116, 169, 46, 1035, -2, -239, 1035,
+ -239, 332, 253, -239, -239, -239, -239, -239, -239, 327,
+ -239, 65, 259, -239, -239, 34, 220, 177, -239, 263,
+ 220, -8, 328, -239, -239, -1, -239, 303, -239, -239,
+ 266, 1035, -239, 293, 180, 270, -239, 1035, -239, 270,
+ -239, -239, 268, 325, 329, 273, -239, -239, -239, 125,
+ 270, 290, -18, 270, -239, 188, -239, -239, 2, 201,
+ 538, 538, 105, -239, -239, -239, -239, -239, -239, -239,
+ -239, 1035, 279, 1035, 43, -239, 185, 287, 1035, 57,
+ -239, 359, 293, -239, -239, 1035, 415, -239, 178, 270,
+ -239, -239, 326, -239, 330, 331, 340, 33, -239, 419,
+ 422, 220, 390, 356, 393, 296, 338, -239, 187, -239,
+ 1035, -239, 293, -239, 538, 298, 299, 270, 435, -3,
+ 192, -239, 195, 414, 42, -239, 300, 311, -239, 353,
+ 307, 1116, -239, 364, 270, -239, -239, 188, -239, -239,
+ 383, -239, -239, -239, 1035, 310, 275, 792, -239, 293,
+ 360, -239, -239, 1116, 313, 293, 1035, -239, 28, -33,
+ -239, -239, -239, -239, -239, 33, 177, 350, 357, -239,
+ 1035, 538, 358, 1035, -239, 425, -17, -239, 293, 4,
+ 270, 270, 197, -239, -239, -239, -239, -239, -239, -239,
+ 148, -239, 270, -239, -239, -239, -239, 315, -18, 423,
+ 367, -239, 538, -239, -239, 333, -239, 280, 792, -239,
+ 1035, 199, -239, -239, 1116, 293, -239, 462, -239, 381,
+ -239, -239, 335, 382, 432, 396, 335, 1035, -239, -239,
+ -239, 467, -239, 202, 204, -239, 476, -3, -239, 270,
+ -239, -239, 347, 448, -239, 11, 270, 1035, 206, 293,
+ -239, 208, 351, 538, 1035, 486, 365, 361, -239, 238,
+ 7, 389, -239, -239, -239, 211, -239, -239, -239, -239,
+ 14, 270, -7, -239, 363, 293, -239, -239, -239, 382,
+ 361, -239, 270, -239, 365, -239, 1035, -239, -239, 407,
+ 399, 401, 400, 499, 270, -239, 270, -239, -239, 270,
+ -239, 213, -239, -239, 372, -239, 480, -239, -239, 102,
+ -239, -239, -239, -239, 17, 376, -239, 215, -239, 270,
+ 378, -239, -239, 446, 408, 451, -239, 270, -239, 221,
+ 303, -239, -239, -239, 223, 426, 384, -239, 515, -239,
+ -239
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -946,85 +974,92 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 0, 6, 265, 0, 0, 0, 0, 0, 0, 18,
+ 0, 6, 287, 0, 0, 0, 0, 0, 0, 18,
112, 0, 0, 7, 0, 0, 15, 8, 10, 11,
- 13, 14, 9, 17, 12, 16, 0, 105, 0, 263,
- 0, 257, 258, 0, 0, 0, 0, 0, 0, 113,
+ 13, 14, 9, 17, 12, 16, 0, 105, 0, 285,
+ 0, 279, 280, 0, 0, 0, 0, 0, 0, 113,
114, 0, 0, 107, 108, 0, 145, 1, 3, 2,
- 0, 106, 5, 4, 264, 0, 0, 0, 0, 166,
- 25, 0, 223, 220, 0, 249, 115, 40, 29, 0,
+ 0, 106, 5, 4, 286, 0, 0, 0, 0, 186,
+ 25, 0, 245, 242, 0, 271, 115, 40, 29, 0,
0, 30, 31, 34, 36, 0, 37, 39, 0, 41,
- 219, 35, 38, 0, 32, 33, 0, 0, 0, 0,
- 0, 116, 117, 199, 121, 187, 189, 191, 194, 195,
- 196, 197, 193, 192, 0, 235, 0, 0, 0, 0,
- 0, 0, 0, 94, 0, 0, 0, 101, 167, 0,
- 0, 91, 221, 222, 0, 0, 215, 212, 0, 43,
- 0, 224, 0, 0, 44, 0, 0, 226, 0, 166,
- 0, 250, 251, 0, 0, 120, 253, 254, 252, 0,
- 0, 190, 0, 0, 166, 103, 0, 109, 0, 110,
- 0, 255, 0, 0, 0, 0, 0, 0, 93, 66,
- 27, 0, 0, 0, 0, 0, 168, 170, 172, 174,
- 0, 192, 0, 0, 0, 0, 215, 209, 0, 213,
- 0, 0, 229, 230, 231, 228, 232, 227, 0, 225,
- 0, 0, 123, 198, 0, 0, 147, 136, 122, 141,
- 124, 149, 118, 119, 186, 188, 236, 0, 0, 200,
- 217, 0, 0, 100, 0, 146, 0, 92, 19, 0,
- 0, 0, 0, 20, 21, 22, 0, 0, 0, 64,
- 0, 42, 56, 173, 181, 0, 0, 0, 0, 0,
- 239, 241, 242, 243, 244, 240, 245, 247, 0, 0,
- 0, 0, 233, 0, 0, 0, 0, 210, 0, 216,
- 208, 45, 0, 0, 46, 127, 0, 137, 143, 133,
- 128, 129, 131, 0, 0, 140, 0, 0, 139, 0,
- 151, 201, 0, 202, 0, 102, 104, 256, 0, 0,
- 0, 0, 0, 0, 0, 237, 0, 235, 0, 63,
- 65, 68, 28, 0, 0, 0, 47, 0, 0, 49,
- 55, 57, 26, 180, 169, 171, 246, 248, 0, 0,
- 0, 0, 182, 179, 0, 178, 90, 0, 0, 214,
- 0, 207, 0, 0, 142, 144, 134, 130, 132, 0,
- 148, 0, 0, 138, 0, 0, 153, 203, 218, 0,
- 0, 0, 0, 96, 261, 262, 260, 259, 97, 95,
+ 241, 35, 38, 0, 32, 33, 0, 0, 0, 0,
+ 0, 116, 117, 221, 121, 207, 209, 211, 214, 217,
+ 218, 219, 213, 212, 0, 257, 0, 0, 0, 0,
+ 0, 0, 0, 94, 0, 0, 0, 101, 187, 0,
+ 0, 91, 243, 244, 0, 0, 237, 234, 0, 43,
+ 0, 246, 0, 0, 44, 0, 0, 248, 0, 186,
+ 0, 272, 273, 0, 0, 120, 275, 276, 274, 0,
+ 0, 0, 210, 0, 0, 186, 103, 0, 109, 0,
+ 110, 0, 277, 0, 0, 0, 0, 0, 0, 93,
+ 66, 27, 0, 0, 0, 0, 0, 188, 190, 192,
+ 194, 0, 212, 0, 0, 0, 0, 237, 231, 0,
+ 235, 0, 0, 251, 252, 253, 250, 254, 249, 0,
+ 247, 0, 0, 123, 220, 0, 0, 147, 136, 122,
+ 141, 124, 149, 118, 119, 206, 208, 163, 215, 258,
+ 0, 0, 222, 239, 0, 0, 100, 0, 146, 0,
+ 92, 19, 0, 0, 0, 0, 20, 21, 22, 0,
+ 0, 0, 64, 0, 42, 56, 193, 201, 0, 0,
+ 0, 0, 0, 261, 263, 264, 265, 266, 262, 267,
+ 269, 0, 0, 0, 0, 255, 0, 0, 0, 0,
+ 232, 0, 238, 230, 45, 0, 0, 46, 127, 0,
+ 137, 143, 133, 128, 129, 131, 0, 0, 140, 0,
+ 0, 139, 0, 151, 0, 0, 165, 223, 0, 224,
+ 0, 102, 104, 278, 0, 0, 0, 0, 0, 0,
+ 0, 259, 0, 257, 0, 63, 65, 68, 28, 0,
+ 0, 0, 47, 0, 0, 49, 55, 57, 26, 200,
+ 189, 191, 268, 270, 0, 0, 0, 0, 202, 199,
+ 0, 198, 90, 0, 0, 236, 0, 229, 0, 0,
+ 142, 144, 134, 130, 132, 0, 148, 0, 0, 138,
+ 0, 0, 153, 0, 216, 0, 167, 225, 240, 0,
+ 0, 0, 0, 96, 283, 284, 282, 281, 97, 95,
0, 67, 0, 83, 84, 85, 86, 87, 0, 0,
- 70, 48, 0, 51, 50, 0, 54, 0, 0, 184,
- 0, 0, 177, 234, 0, 211, 204, 0, 205, 0,
- 125, 126, 150, 152, 0, 155, 61, 0, 0, 58,
- 0, 0, 238, 0, 24, 62, 0, 0, 23, 0,
- 0, 0, 0, 175, 183, 0, 0, 0, 0, 0,
- 111, 0, 59, 98, 99, 0, 74, 76, 77, 78,
- 0, 0, 0, 52, 0, 176, 185, 89, 206, 135,
- 154, 157, 160, 156, 0, 88, 0, 82, 80, 0,
- 79, 0, 72, 73, 0, 53, 0, 161, 162, 163,
- 0, 75, 0, 69, 0, 158, 0, 159, 0, 81,
- 0, 164, 165, 0, 0, 60, 0, 71
+ 70, 48, 0, 51, 50, 0, 54, 0, 0, 204,
+ 0, 0, 197, 256, 0, 233, 226, 0, 227, 0,
+ 125, 126, 150, 152, 0, 155, 164, 0, 170, 169,
+ 162, 0, 61, 0, 0, 58, 0, 0, 260, 0,
+ 24, 62, 0, 0, 23, 0, 0, 0, 0, 195,
+ 203, 0, 0, 0, 0, 0, 157, 166, 177, 180,
+ 0, 0, 59, 98, 99, 0, 74, 76, 77, 78,
+ 0, 0, 0, 52, 0, 196, 205, 89, 228, 135,
+ 154, 156, 0, 111, 158, 159, 0, 181, 182, 183,
+ 0, 0, 0, 0, 0, 88, 0, 82, 80, 0,
+ 79, 0, 72, 73, 0, 53, 0, 160, 178, 0,
+ 179, 171, 173, 172, 0, 0, 75, 0, 69, 0,
+ 0, 184, 185, 0, 0, 0, 168, 0, 81, 0,
+ 163, 174, 176, 175, 0, 0, 0, 60, 0, 161,
+ 71
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -230, -230, -230, -230, -230, -230, -230, -230, -127, -230,
- 309, 161, -230, -230, -229, -230, -230, -230, -230, -230,
- -230, 43, 27, -230, -230, -230, -230, -230, -230, -230,
- -230, -230, -230, -230, -230, 264, -230, -230, -230, 378,
- 12, -230, -230, -230, 350, -230, -103, -230, -230, -139,
- 142, -190, -8, -230, -230, -230, -230, -230, -230, 26,
- -230, -230, 44, -230, -121, 240, 247, 321, -28, 349,
- 351, 394, -132, -230, -230, -230, -230, 324, -230, 373,
- 327, -216, -171, 370, 108, -107, -230, -230, -230, -230,
- -230, -119, -4, 94, -230, -230
+ -239, -239, -239, -239, -239, -239, -239, -239, -88, -239,
+ 355, 196, -239, -239, -238, -239, -239, -239, -239, -239,
+ -239, 66, 44, -239, -239, -239, -239, -239, -239, -239,
+ -239, -239, -239, -239, -239, 304, -239, -239, -239, 424,
+ 9, -239, -239, -239, 392, -239, -92, -239, -239, -134,
+ 179, -182, -11, -239, -239, -239, -239, -239, -239, -239,
+ 59, 15, -239, -239, -239, -239, -239, -239, 92, 61,
+ -239, -239, -55, -239, -119, 291, 289, 379, -28, 403,
+ 402, 450, -123, -239, -239, -239, -239, 368, -239, 430,
+ 370, -204, -177, 421, 146, -113, -239, -239, -239, -239,
+ -239, -118, -4, 134, -239, -239
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 14, 15, 16, 17, 18, 19, 20, 170, 171,
- 89, 320, 321, 322, 233, 310, 311, 238, 380, 418,
- 464, 435, 436, 437, 438, 439, 377, 414, 21, 22,
- 168, 304, 23, 24, 154, 155, 25, 26, 43, 44,
- 135, 41, 90, 91, 92, 139, 93, 288, 283, 206,
- 207, 277, 278, 208, 290, 356, 405, 430, 450, 451,
- 469, 477, 117, 118, 176, 177, 178, 179, 180, 95,
- 96, 97, 98, 99, 100, 101, 186, 187, 126, 127,
- 190, 221, 102, 198, 263, 103, 306, 260, 104, 144,
- 149, 160, 105, 368, 28, 29
+ -1, 14, 15, 16, 17, 18, 19, 20, 171, 172,
+ 89, 326, 327, 328, 236, 316, 317, 241, 390, 434,
+ 494, 455, 456, 457, 458, 459, 387, 430, 21, 22,
+ 169, 310, 23, 24, 155, 156, 25, 26, 43, 44,
+ 135, 41, 90, 91, 92, 139, 93, 291, 286, 207,
+ 208, 280, 281, 209, 293, 362, 415, 446, 473, 474,
+ 475, 295, 296, 366, 420, 421, 483, 516, 447, 448,
+ 479, 500, 117, 118, 177, 178, 179, 180, 181, 95,
+ 96, 97, 98, 99, 100, 101, 187, 188, 126, 127,
+ 191, 224, 102, 199, 266, 103, 312, 263, 104, 144,
+ 149, 161, 105, 378, 28, 29
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -1032,341 +1067,374 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 33, 183, 292, 184, 45, 159, 209, 42, 46, 181,
- 309, 262, 27, 94, 31, 152, 32, 181, 31, 285,
- 32, 457, 31, 247, 32, 188, 55, 286, 247, 247,
- 57, 58, 59, 60, 61, 205, 228, 30, 51, 247,
- 50, 125, 397, 458, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 245, 141, 142, 334, 146, 147,
- 136, 141, 142, 141, 142, 275, 181, 188, 181, 10,
- 39, 244, 209, 121, 141, 142, 141, 142, 326, 327,
- 328, 141, 142, 34, 373, 462, 36, 374, 375, 124,
- 145, 313, 52, 111, 31, 53, 32, 40, 353, 45,
- 38, 205, 156, 46, 200, 161, 162, 287, 398, 259,
- 169, 172, 94, 312, 463, 391, 161, 10, 10, 35,
- 153, 276, 153, 112, 314, 220, 225, 226, 265, 273,
- 305, 185, 119, 315, 210, 37, 329, 335, 402, 213,
- 181, 181, 204, 120, 383, 350, 459, 246, 216, 415,
- 204, 47, 209, 323, 406, 192, 332, 266, 376, 172,
- 269, 234, 235, 1, 443, 2, 393, 203, 340, 54,
- 148, 316, 422, 203, 227, 396, 185, 359, 481, 193,
- 317, 205, 362, 211, 318, 31, 31, 32, 32, 229,
- 220, 181, 3, 194, 195, 279, 296, 482, 223, 319,
- 210, 46, 280, 141, 142, 46, 116, 56, 4, 5,
- 281, 196, 390, 143, 230, 6, 222, 209, 156, 106,
- 7, 364, 297, 262, 141, 142, 389, 107, 302, 282,
- 330, 197, 333, 307, 403, 303, 172, 339, 163, 164,
- 8, 407, 408, 421, 342, 231, 205, 410, 181, 365,
- 366, 108, 141, 142, 411, 141, 142, 48, 344, 49,
- 109, 419, 9, 467, 232, 412, 358, 279, 345, 10,
- 165, 166, 46, 367, 280, 181, 239, 240, 113, -127,
- 210, 11, 281, 110, 46, 114, 468, 12, 264, 226,
- 13, 141, 142, 293, 294, 115, 116, 161, 336, 337,
- 387, 282, 122, 220, 357, 294, 449, 123, 369, 370,
- 371, 372, 395, 129, 385, 131, 409, 226, 424, 294,
- 181, 431, 226, 432, 226, 134, 220, 137, 446, 294,
- 138, 447, 337, 455, 456, 31, 62, 32, 63, 128,
- 472, 473, 456, 479, 226, 210, 484, 226, 485, 226,
- 130, 132, 64, 65, 217, 480, 161, 161, 140, 483,
- 220, 133, 423, 167, 67, 68, 191, 158, 307, 182,
- 201, 224, 69, 70, 202, 10, 236, 247, 237, 71,
- 72, 248, 73, 270, 261, 271, 272, 218, 74, 274,
- 289, 284, 291, 445, 75, 298, 299, 76, 300, 301,
- 452, 308, 341, 331, 338, 343, 346, 347, 349, 440,
- 77, 78, 351, 348, 352, 354, 444, 355, 79, 360,
- 361, 80, 363, 152, 378, 381, 379, 392, 382, 384,
- 388, 394, 400, 81, 401, 404, 460, 440, 452, 413,
- 416, 82, 83, 417, 426, 84, 85, 427, 420, 428,
- 470, 429, 440, 86, 294, 161, 433, 441, 87, 31,
- 62, 32, 63, 88, 219, 173, 442, 453, 476, 454,
- 161, 448, 465, 486, 161, 474, 64, 65, 487, 466,
- 478, 242, 386, 471, 461, 157, 295, 324, 67, 68,
- 212, 399, 475, 214, 243, 325, 69, 70, 151, 189,
- 215, 199, 425, 71, 72, 434, 73, 0, 0, 0,
- 267, 0, 74, 268, 0, 0, 0, 174, 75, 0,
- 0, 76, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 77, 78, 0, 0, 0, 0,
- 0, 0, 79, 0, 0, 80, 31, 62, 32, 63,
- 0, 0, 173, 0, 0, 0, 0, 81, 0, 0,
- 0, 0, 10, 64, 65, 82, 83, 0, 0, 84,
- 85, 0, 0, 0, 0, 67, 68, 86, 0, 0,
- 0, 0, 87, 69, 70, 0, 0, 175, 0, 0,
- 71, 72, 0, 73, 0, 0, 0, 0, 0, 74,
- 0, 0, 0, 0, 174, 75, 0, 0, 76, 0,
+ 33, 45, 184, 182, 315, 185, 265, 42, 46, 27,
+ 250, 182, 250, 94, 480, 210, 160, 298, 31, 250,
+ 32, 487, 146, 147, 513, 232, 55, 153, 288, 289,
+ 57, 58, 59, 60, 61, 51, 407, 31, 31, 32,
+ 32, 125, 31, 488, 32, 39, 206, 141, 142, 141,
+ 142, 189, 233, 340, 250, 481, 50, 248, 189, 34,
+ 136, 182, 374, 182, 111, 514, 30, 492, 141, 142,
+ 121, 278, 1, 40, 2, 37, 231, 383, 141, 142,
+ 384, 385, 210, 247, 212, 234, 141, 142, 418, 10,
+ 145, 375, 376, 36, 419, 112, 45, 47, 493, 35,
+ 226, 3, 157, 46, 201, 162, 163, 235, 408, 359,
+ 170, 173, 94, 206, 38, 290, 162, 4, 5, 377,
+ 54, 124, 332, 333, 334, 6, 223, 311, 186, 56,
+ 7, 482, 154, 401, 211, 341, 276, 182, 182, 214,
+ 154, 515, 148, 329, 393, 422, 218, 10, 249, 219,
+ 431, 8, 463, 356, 489, 318, 412, 386, 269, 416,
+ 173, 272, 237, 238, 210, 268, 403, 204, 511, 406,
+ 338, 107, 230, 205, 205, 9, 346, 186, 217, 116,
+ 308, 10, 335, 106, 10, 369, 108, 309, 512, 372,
+ 225, 182, 109, 223, 438, 206, 119, 11, 319, 302,
+ 115, 211, 46, 426, 12, 193, 46, 13, 120, 110,
+ 427, 252, 253, 254, 255, 256, 257, 258, 259, 260,
+ 261, 157, 141, 142, 31, 303, 32, 265, 164, 165,
+ 194, 320, 210, 336, 52, 339, 313, 53, 113, 173,
+ 345, 321, 413, 399, 195, 196, 114, 348, 182, 282,
+ 282, 279, 423, 424, 166, 167, 283, 283, 116, 141,
+ 142, -127, 122, 206, 284, 284, 197, 123, 351, 428,
+ 477, 128, 368, 435, 31, 46, 32, 130, 262, 182,
+ 322, 228, 229, 211, 400, 285, 285, 46, 198, 437,
+ 31, 323, 32, 131, 478, 324, 141, 142, 48, 129,
+ 49, 141, 142, 162, 242, 243, 397, 141, 142, 223,
+ 267, 229, 132, 325, 141, 142, 133, 143, 405, 350,
+ 395, 299, 300, 134, 469, 137, 342, 343, 367, 300,
+ 182, 140, 223, 379, 380, 223, 381, 382, 425, 229,
+ 440, 300, 204, 451, 229, 452, 229, 466, 300, 467,
+ 343, 211, 485, 486, 508, 486, 518, 229, 31, 62,
+ 32, 63, 525, 229, 527, 229, 162, 162, 138, 150,
+ 223, 507, 439, 168, 159, 64, 65, 220, 313, 183,
+ 192, 202, 227, 203, 239, 10, 240, 67, 68, 449,
+ 250, 519, 251, 273, 274, 69, 70, 264, 275, 524,
+ 277, 292, 294, 71, 72, 287, 73, 297, 304, 465,
+ 305, 221, 74, 307, 306, 344, 449, 314, 75, 337,
+ 347, 76, 349, 352, 355, 460, 357, 353, 354, 358,
+ 360, 361, 464, 363, 365, 77, 78, 364, 370, 371,
+ 373, 153, 388, 79, 389, 391, 80, 392, 449, 394,
+ 398, 410, 402, 404, 414, 429, 490, 460, 411, 432,
+ 81, 31, 62, 32, 63, 417, 433, 174, 496, 442,
+ 82, 83, 444, 436, 84, 85, 443, 300, 64, 65,
+ 505, 453, 460, 86, 445, 162, 450, 461, 462, 87,
+ 67, 68, 468, 471, 88, 222, 484, 472, 69, 70,
+ 499, 501, 503, 476, 495, 162, 71, 72, 504, 73,
+ 502, 510, 509, 162, 521, 74, 517, 522, 520, 523,
+ 175, 75, 530, 396, 76, 529, 528, 491, 245, 301,
+ 506, 158, 213, 497, 409, 526, 470, 498, 77, 78,
+ 331, 330, 31, 62, 32, 63, 79, 215, 174, 80,
+ 441, 216, 200, 246, 152, 270, 190, 271, 0, 64,
+ 65, 454, 0, 81, 0, 0, 0, 0, 0, 0,
+ 10, 67, 68, 82, 83, 0, 0, 84, 85, 69,
+ 70, 0, 0, 0, 0, 0, 86, 71, 72, 0,
+ 73, 0, 87, 0, 0, 0, 74, 176, 0, 0,
+ 0, 175, 75, 0, 0, 76, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,
+ 78, 0, 0, 31, 62, 32, 63, 79, 0, 0,
+ 80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 64, 65, 66, 0, 81, 0, 0, 0, 0, 0,
+ 0, 0, 67, 68, 82, 83, 0, 0, 84, 85,
+ 69, 70, 0, 0, 0, 0, 0, 86, 71, 72,
+ 0, 73, 0, 87, 0, 0, 0, 74, 176, 0,
+ 0, 0, 0, 75, 0, 0, 76, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 77, 78, 0, 0, 31, 62, 32, 63, 79, 0,
+ 0, 80, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 64, 65, 0, 0, 81, 0, 0, 0, 0,
+ 0, 0, 0, 67, 68, 82, 83, 0, 0, 84,
+ 85, 69, 70, 0, 0, 0, 0, 0, 86, 71,
+ 72, 0, 73, 0, 87, 0, 0, 0, 74, 88,
+ 0, 0, 0, 0, 75, 0, 0, 76, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 77, 78, 0, 0, 0, 0, 0, 0, 79,
- 0, 0, 80, 0, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 81, 141, 142, 0, 31, 62,
- 32, 63, 82, 83, 0, 0, 84, 85, 0, 0,
- 0, 0, 0, 0, 86, 64, 65, 66, 0, 87,
- 0, 0, 0, 0, 175, 0, 0, 67, 68, 0,
- 0, 0, 0, 0, 0, 69, 70, 0, 0, 0,
- 0, 0, 71, 72, 0, 73, 0, 0, 0, 259,
- 0, 74, 0, 31, 62, 32, 63, 75, 0, 0,
+ 0, 0, 80, 0, 0, 0, 31, 62, 32, 63,
+ 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
+ 0, 0, 0, 64, 65, 0, 82, 83, 0, 0,
+ 84, 85, 0, 0, 0, 67, 68, 0, 0, 86,
+ 124, 0, 0, 69, 70, 87, 0, 0, 0, 0,
+ 88, 71, 72, 0, 73, 0, 0, 0, 0, 0,
+ 74, 0, 0, 0, 0, 0, 75, 0, 0, 76,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 77, 78, 0, 0, 31, 62, 32,
+ 63, 79, 0, 0, 80, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 64, 65, 0, 0, 81, 0,
+ 0, 0, 0, 0, 0, 10, 67, 68, 82, 83,
+ 0, 0, 84, 85, 69, 70, 0, 0, 0, 0,
+ 0, 86, 71, 72, 0, 73, 0, 87, 0, 0,
+ 0, 74, 88, 0, 0, 0, 175, 75, 0, 0,
76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 64, 65, 0, 77, 78, 0, 0, 0, 0, 0,
- 0, 79, 67, 68, 80, 0, 0, 0, 0, 0,
- 69, 70, 0, 0, 0, 0, 81, 71, 72, 0,
- 73, 0, 0, 0, 82, 83, 74, 0, 84, 85,
- 0, 0, 75, 0, 0, 76, 86, 0, 0, 0,
- 0, 87, 0, 0, 0, 0, 88, 0, 77, 78,
- 0, 0, 0, 0, 0, 0, 79, 0, 0, 80,
- 31, 62, 32, 63, 0, 0, 0, 0, 0, 0,
- 0, 81, 0, 0, 0, 0, 0, 64, 65, 82,
- 83, 0, 0, 84, 85, 0, 0, 0, 0, 67,
- 68, 86, 124, 0, 0, 0, 87, 69, 70, 0,
- 0, 88, 0, 0, 71, 72, 0, 73, 0, 0,
- 0, 0, 0, 74, 0, 31, 62, 32, 63, 75,
+ 0, 0, 0, 0, 77, 78, 0, 0, 31, 62,
+ 32, 63, 79, 0, 0, 80, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 64, 151, 0, 0, 81,
+ 0, 0, 0, 0, 0, 0, 0, 67, 68, 82,
+ 83, 0, 0, 84, 85, 69, 70, 0, 0, 0,
+ 0, 0, 86, 71, 72, 0, 73, 0, 87, 0,
+ 0, 0, 74, 176, 0, 0, 0, 0, 75, 0,
+ 0, 76, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 77, 78, 0, 0, 31,
+ 62, 32, 63, 79, 0, 0, 80, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 64, 65, 0, 0,
+ 81, 0, 0, 0, 0, 0, 0, 0, 67, 68,
+ 82, 83, 0, 0, 84, 85, 69, 70, 0, 0,
+ 0, 0, 0, 86, 71, 72, 0, 73, 0, 87,
+ 0, 0, 0, 74, 88, 0, 0, 0, 0, 75,
0, 0, 76, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 64, 65, 0, 77, 78, 0, 0, 0,
- 0, 0, 0, 79, 67, 68, 80, 0, 0, 0,
- 0, 0, 69, 70, 0, 0, 0, 0, 81, 71,
- 72, 0, 73, 10, 0, 0, 82, 83, 74, 0,
- 84, 85, 0, 174, 75, 0, 0, 76, 86, 0,
- 0, 0, 0, 87, 0, 0, 0, 0, 88, 0,
- 77, 78, 0, 0, 0, 0, 0, 0, 79, 0,
- 0, 80, 31, 62, 32, 63, 0, 0, 0, 0,
- 0, 0, 0, 81, 0, 0, 0, 0, 0, 64,
- 150, 82, 83, 0, 0, 84, 85, 0, 0, 0,
- 0, 67, 68, 86, 0, 0, 0, 0, 87, 69,
- 70, 0, 0, 175, 0, 0, 71, 72, 0, 73,
- 0, 0, 0, 0, 0, 74, 0, 31, 62, 32,
- 63, 75, 0, 0, 76, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 64, 65, 0, 77, 78, 0,
- 0, 0, 0, 0, 0, 79, 67, 68, 80, 0,
- 0, 0, 0, 0, 69, 70, 0, 0, 0, 0,
- 81, 71, 72, 0, 73, 0, 0, 0, 82, 83,
- 74, 0, 84, 85, 0, 0, 75, 0, 0, 76,
- 86, 0, 0, 0, 0, 87, 0, 0, 0, 0,
- 88, 0, 77, 78, 0, 0, 0, 0, 0, 0,
- 79, 0, 0, 80, 62, 0, 63, 0, 0, 0,
- 0, 0, 0, 0, 0, 81, 0, 0, 0, 0,
- 64, 150, 0, 82, 83, 0, 0, 84, 85, 0,
- 0, 0, 67, 68, 0, 86, 0, 0, 0, 0,
- 87, 70, 0, 0, 0, 88, 0, 71, 72, 0,
- 73, 67, 68, 0, 0, 0, 74, 0, 0, 0,
- 70, 0, 0, 0, 0, 76, 71, 72, 0, 73,
- 0, 0, 0, 0, 0, 74, 0, 0, 77, 78,
- 0, 0, 0, 0, 76, 0, 79, 0, 0, 80,
- 0, 0, 0, 0, 0, 0, 0, 77, 241, 0,
- 0, 81, 0, 0, 0, 79, 0, 0, 0, 82,
- 0, 0, 0, 84, 85, 0, 0, 0, 0, 0,
- 81, 86, 0, 0, 0, 0, 87, 0, 82, 0,
- 0, 0, 84, 85, 0, 0, 0, 0, 0, 0,
- 86, 0, 0, 0, 0, 87
+ 0, 0, 0, 0, 0, 0, 77, 78, 0, 0,
+ 0, 62, 0, 63, 79, 0, 0, 80, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 64, 151, 0,
+ 0, 81, 0, 0, 0, 0, 0, 0, 0, 67,
+ 68, 82, 83, 0, 0, 84, 85, 0, 70, 0,
+ 0, 0, 0, 0, 86, 71, 72, 0, 73, 0,
+ 87, 0, 0, 0, 74, 88, 0, 67, 68, 0,
+ 0, 0, 0, 76, 0, 0, 70, 0, 0, 0,
+ 0, 0, 0, 71, 72, 0, 73, 77, 78, 0,
+ 0, 0, 74, 0, 0, 79, 0, 0, 80, 0,
+ 0, 76, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 81, 0, 0, 77, 244, 0, 0, 0,
+ 0, 0, 82, 79, 0, 0, 84, 85, 0, 0,
+ 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
+ 81, 87, 0, 0, 0, 0, 0, 0, 0, 0,
+ 82, 0, 0, 0, 84, 85, 0, 0, 0, 0,
+ 0, 0, 0, 86, 0, 0, 0, 0, 0, 87,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
+ 0, 141, 142, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 262
};
static const yytype_int16 yycheck[] =
{
- 4, 120, 218, 124, 12, 108, 138, 11, 12, 116,
- 239, 182, 0, 41, 4, 27, 6, 124, 4, 209,
- 6, 7, 4, 8, 6, 59, 30, 37, 8, 8,
- 34, 35, 36, 37, 38, 138, 163, 112, 26, 8,
- 78, 69, 67, 29, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 175, 21, 22, 10, 23, 24,
- 88, 21, 22, 21, 22, 204, 173, 59, 175, 107,
- 29, 174, 204, 61, 21, 22, 21, 22, 17, 18,
- 19, 21, 22, 76, 35, 72, 69, 38, 39, 123,
- 94, 10, 128, 28, 4, 131, 6, 56, 288, 107,
- 81, 204, 106, 107, 132, 109, 110, 117, 133, 75,
- 114, 115, 140, 240, 101, 331, 120, 107, 107, 112,
- 132, 31, 132, 58, 43, 153, 133, 134, 113, 69,
- 237, 123, 121, 52, 138, 112, 75, 90, 354, 143,
- 247, 248, 132, 132, 315, 284, 132, 175, 152, 378,
- 132, 0, 284, 133, 133, 50, 259, 185, 109, 163,
- 188, 165, 166, 1, 133, 3, 337, 133, 113, 3,
- 135, 90, 388, 133, 162, 133, 123, 298, 65, 74,
- 99, 284, 301, 139, 103, 4, 4, 6, 6, 43,
- 218, 298, 30, 88, 89, 70, 224, 84, 154, 118,
- 204, 205, 77, 21, 22, 209, 124, 69, 46, 47,
- 85, 106, 9, 31, 68, 53, 134, 349, 222, 108,
- 58, 64, 226, 394, 21, 22, 329, 134, 54, 104,
- 258, 126, 260, 237, 355, 61, 240, 265, 44, 45,
- 78, 360, 361, 9, 272, 99, 349, 54, 355, 92,
- 93, 31, 21, 22, 61, 21, 22, 128, 133, 130,
- 132, 382, 100, 32, 118, 372, 294, 70, 276, 107,
- 44, 45, 276, 116, 77, 382, 133, 134, 5, 82,
- 284, 119, 85, 81, 288, 93, 55, 125, 133, 134,
- 128, 21, 22, 133, 134, 132, 124, 301, 133, 134,
- 328, 104, 7, 331, 133, 134, 427, 7, 133, 134,
- 133, 134, 340, 80, 318, 5, 133, 134, 133, 134,
- 427, 133, 134, 133, 134, 80, 354, 5, 133, 134,
- 69, 133, 134, 133, 134, 4, 5, 6, 7, 132,
- 459, 133, 134, 133, 134, 349, 133, 134, 133, 134,
- 132, 132, 21, 22, 23, 474, 360, 361, 134, 478,
- 388, 132, 390, 125, 33, 34, 7, 132, 372, 132,
- 7, 11, 41, 42, 133, 107, 132, 8, 132, 48,
- 49, 9, 51, 60, 20, 133, 69, 56, 57, 133,
- 71, 134, 133, 421, 63, 132, 83, 66, 83, 132,
- 428, 120, 60, 132, 121, 7, 95, 95, 82, 413,
- 79, 80, 7, 95, 7, 40, 420, 73, 87, 132,
- 132, 90, 5, 27, 134, 90, 125, 90, 132, 83,
- 132, 132, 98, 102, 98, 94, 440, 441, 466, 132,
- 36, 110, 111, 96, 7, 114, 115, 93, 132, 40,
- 454, 86, 456, 122, 134, 459, 5, 132, 127, 4,
- 5, 6, 7, 132, 133, 10, 40, 7, 91, 103,
- 474, 133, 133, 97, 478, 132, 21, 22, 7, 134,
- 132, 172, 321, 456, 441, 107, 222, 247, 33, 34,
- 140, 349, 466, 144, 173, 248, 41, 42, 104, 126,
- 149, 131, 394, 48, 49, 411, 51, -1, -1, -1,
- 186, -1, 57, 186, -1, -1, -1, 62, 63, -1,
- -1, 66, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 79, 80, -1, -1, -1, -1,
- -1, -1, 87, -1, -1, 90, 4, 5, 6, 7,
- -1, -1, 10, -1, -1, -1, -1, 102, -1, -1,
- -1, -1, 107, 21, 22, 110, 111, -1, -1, 114,
- 115, -1, -1, -1, -1, 33, 34, 122, -1, -1,
- -1, -1, 127, 41, 42, -1, -1, 132, -1, -1,
- 48, 49, -1, 51, -1, -1, -1, -1, -1, 57,
- -1, -1, -1, -1, 62, 63, -1, -1, 66, -1,
+ 4, 12, 120, 116, 242, 124, 183, 11, 12, 0,
+ 8, 124, 8, 41, 7, 138, 108, 221, 4, 8,
+ 6, 7, 23, 24, 7, 43, 30, 27, 210, 37,
+ 34, 35, 36, 37, 38, 26, 69, 4, 4, 6,
+ 6, 69, 4, 29, 6, 29, 138, 21, 22, 21,
+ 22, 60, 70, 10, 8, 48, 80, 176, 60, 78,
+ 88, 174, 65, 176, 28, 48, 118, 74, 21, 22,
+ 61, 205, 1, 57, 3, 118, 164, 35, 21, 22,
+ 38, 39, 205, 175, 139, 103, 21, 22, 105, 113,
+ 94, 94, 95, 71, 111, 59, 107, 0, 105, 118,
+ 155, 30, 106, 107, 132, 109, 110, 125, 141, 291,
+ 114, 115, 140, 205, 83, 123, 120, 46, 47, 122,
+ 3, 130, 17, 18, 19, 54, 154, 240, 130, 71,
+ 59, 124, 140, 337, 138, 92, 71, 250, 251, 143,
+ 140, 124, 143, 141, 321, 141, 150, 113, 176, 153,
+ 388, 80, 141, 287, 140, 243, 360, 115, 186, 363,
+ 164, 189, 166, 167, 287, 119, 343, 141, 66, 141,
+ 262, 142, 163, 140, 140, 104, 119, 130, 140, 131,
+ 55, 113, 77, 114, 113, 304, 31, 62, 86, 307,
+ 142, 304, 140, 221, 398, 287, 128, 126, 10, 227,
+ 140, 205, 206, 55, 133, 51, 210, 136, 140, 83,
+ 62, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 225, 21, 22, 4, 229, 6, 404, 44, 45,
+ 76, 43, 355, 261, 136, 263, 240, 139, 5, 243,
+ 268, 53, 361, 335, 90, 91, 95, 275, 361, 72,
+ 72, 31, 370, 371, 44, 45, 79, 79, 131, 21,
+ 22, 84, 7, 355, 87, 87, 112, 7, 279, 382,
+ 32, 140, 300, 392, 4, 279, 6, 140, 77, 392,
+ 92, 141, 142, 287, 9, 108, 108, 291, 134, 9,
+ 4, 103, 6, 5, 56, 107, 21, 22, 136, 82,
+ 138, 21, 22, 307, 141, 142, 334, 21, 22, 337,
+ 141, 142, 140, 125, 21, 22, 140, 31, 346, 141,
+ 324, 141, 142, 82, 443, 5, 141, 142, 141, 142,
+ 443, 142, 360, 141, 142, 363, 141, 142, 141, 142,
+ 141, 142, 141, 141, 142, 141, 142, 141, 142, 141,
+ 142, 355, 141, 142, 141, 142, 141, 142, 4, 5,
+ 6, 7, 141, 142, 141, 142, 370, 371, 71, 98,
+ 398, 489, 400, 133, 140, 21, 22, 23, 382, 140,
+ 7, 7, 11, 141, 140, 113, 140, 33, 34, 417,
+ 8, 509, 9, 61, 141, 41, 42, 20, 71, 517,
+ 141, 73, 99, 49, 50, 142, 52, 141, 140, 437,
+ 85, 57, 58, 140, 85, 128, 444, 127, 64, 140,
+ 61, 67, 7, 97, 84, 429, 7, 97, 97, 7,
+ 40, 75, 436, 40, 96, 81, 82, 141, 140, 140,
+ 5, 27, 142, 89, 133, 92, 92, 140, 476, 85,
+ 140, 101, 92, 140, 96, 140, 460, 461, 101, 36,
+ 106, 4, 5, 6, 7, 40, 99, 10, 472, 7,
+ 116, 117, 40, 140, 120, 121, 95, 142, 21, 22,
+ 484, 5, 486, 129, 88, 489, 19, 140, 40, 135,
+ 33, 34, 141, 7, 140, 141, 107, 132, 41, 42,
+ 93, 102, 102, 142, 141, 509, 49, 50, 9, 52,
+ 109, 31, 140, 517, 68, 58, 140, 109, 140, 68,
+ 63, 64, 7, 327, 67, 141, 100, 461, 173, 225,
+ 486, 107, 140, 474, 355, 520, 444, 476, 81, 82,
+ 251, 250, 4, 5, 6, 7, 89, 144, 10, 92,
+ 404, 149, 131, 174, 104, 187, 126, 187, -1, 21,
+ 22, 427, -1, 106, -1, -1, -1, -1, -1, -1,
+ 113, 33, 34, 116, 117, -1, -1, 120, 121, 41,
+ 42, -1, -1, -1, -1, -1, 129, 49, 50, -1,
+ 52, -1, 135, -1, -1, -1, 58, 140, -1, -1,
+ -1, 63, 64, -1, -1, 67, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 81,
+ 82, -1, -1, 4, 5, 6, 7, 89, -1, -1,
+ 92, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 21, 22, 23, -1, 106, -1, -1, -1, -1, -1,
+ -1, -1, 33, 34, 116, 117, -1, -1, 120, 121,
+ 41, 42, -1, -1, -1, -1, -1, 129, 49, 50,
+ -1, 52, -1, 135, -1, -1, -1, 58, 140, -1,
+ -1, -1, -1, 64, -1, -1, 67, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 81, 82, -1, -1, 4, 5, 6, 7, 89, -1,
+ -1, 92, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 21, 22, -1, -1, 106, -1, -1, -1, -1,
+ -1, -1, -1, 33, 34, 116, 117, -1, -1, 120,
+ 121, 41, 42, -1, -1, -1, -1, -1, 129, 49,
+ 50, -1, 52, -1, 135, -1, -1, -1, 58, 140,
+ -1, -1, -1, -1, 64, -1, -1, 67, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 81, 82, -1, -1, -1, -1, -1, -1, 89,
+ -1, -1, 92, -1, -1, -1, 4, 5, 6, 7,
+ -1, -1, -1, -1, -1, -1, 106, -1, -1, -1,
+ -1, -1, -1, 21, 22, -1, 116, 117, -1, -1,
+ 120, 121, -1, -1, -1, 33, 34, -1, -1, 129,
+ 130, -1, -1, 41, 42, 135, -1, -1, -1, -1,
+ 140, 49, 50, -1, 52, -1, -1, -1, -1, -1,
+ 58, -1, -1, -1, -1, -1, 64, -1, -1, 67,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 81, 82, -1, -1, 4, 5, 6,
+ 7, 89, -1, -1, 92, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 21, 22, -1, -1, 106, -1,
+ -1, -1, -1, -1, -1, 113, 33, 34, 116, 117,
+ -1, -1, 120, 121, 41, 42, -1, -1, -1, -1,
+ -1, 129, 49, 50, -1, 52, -1, 135, -1, -1,
+ -1, 58, 140, -1, -1, -1, 63, 64, -1, -1,
+ 67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 81, 82, -1, -1, 4, 5,
+ 6, 7, 89, -1, -1, 92, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 21, 22, -1, -1, 106,
+ -1, -1, -1, -1, -1, -1, -1, 33, 34, 116,
+ 117, -1, -1, 120, 121, 41, 42, -1, -1, -1,
+ -1, -1, 129, 49, 50, -1, 52, -1, 135, -1,
+ -1, -1, 58, 140, -1, -1, -1, -1, 64, -1,
+ -1, 67, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 81, 82, -1, -1, 4,
+ 5, 6, 7, 89, -1, -1, 92, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 21, 22, -1, -1,
+ 106, -1, -1, -1, -1, -1, -1, -1, 33, 34,
+ 116, 117, -1, -1, 120, 121, 41, 42, -1, -1,
+ -1, -1, -1, 129, 49, 50, -1, 52, -1, 135,
+ -1, -1, -1, 58, 140, -1, -1, -1, -1, 64,
+ -1, -1, 67, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 81, 82, -1, -1,
+ -1, 5, -1, 7, 89, -1, -1, 92, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 21, 22, -1,
+ -1, 106, -1, -1, -1, -1, -1, -1, -1, 33,
+ 34, 116, 117, -1, -1, 120, 121, -1, 42, -1,
+ -1, -1, -1, -1, 129, 49, 50, -1, 52, -1,
+ 135, -1, -1, -1, 58, 140, -1, 33, 34, -1,
+ -1, -1, -1, 67, -1, -1, 42, -1, -1, -1,
+ -1, -1, -1, 49, 50, -1, 52, 81, 82, -1,
+ -1, -1, 58, -1, -1, 89, -1, -1, 92, -1,
+ -1, 67, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 106, -1, -1, 81, 82, -1, -1, -1,
+ -1, -1, 116, 89, -1, -1, 120, 121, -1, -1,
+ -1, -1, -1, -1, -1, 129, -1, -1, -1, -1,
+ 106, 135, -1, -1, -1, -1, -1, -1, -1, -1,
+ 116, -1, -1, -1, 120, 121, -1, -1, -1, -1,
+ -1, -1, -1, 129, -1, -1, -1, -1, -1, 135,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ -1, 21, 22, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 79, 80, -1, -1, -1, -1, -1, -1, 87,
- -1, -1, 90, -1, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 102, 21, 22, -1, 4, 5,
- 6, 7, 110, 111, -1, -1, 114, 115, -1, -1,
- -1, -1, -1, -1, 122, 21, 22, 23, -1, 127,
- -1, -1, -1, -1, 132, -1, -1, 33, 34, -1,
- -1, -1, -1, -1, -1, 41, 42, -1, -1, -1,
- -1, -1, 48, 49, -1, 51, -1, -1, -1, 75,
- -1, 57, -1, 4, 5, 6, 7, 63, -1, -1,
- 66, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 21, 22, -1, 79, 80, -1, -1, -1, -1, -1,
- -1, 87, 33, 34, 90, -1, -1, -1, -1, -1,
- 41, 42, -1, -1, -1, -1, 102, 48, 49, -1,
- 51, -1, -1, -1, 110, 111, 57, -1, 114, 115,
- -1, -1, 63, -1, -1, 66, 122, -1, -1, -1,
- -1, 127, -1, -1, -1, -1, 132, -1, 79, 80,
- -1, -1, -1, -1, -1, -1, 87, -1, -1, 90,
- 4, 5, 6, 7, -1, -1, -1, -1, -1, -1,
- -1, 102, -1, -1, -1, -1, -1, 21, 22, 110,
- 111, -1, -1, 114, 115, -1, -1, -1, -1, 33,
- 34, 122, 123, -1, -1, -1, 127, 41, 42, -1,
- -1, 132, -1, -1, 48, 49, -1, 51, -1, -1,
- -1, -1, -1, 57, -1, 4, 5, 6, 7, 63,
- -1, -1, 66, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 21, 22, -1, 79, 80, -1, -1, -1,
- -1, -1, -1, 87, 33, 34, 90, -1, -1, -1,
- -1, -1, 41, 42, -1, -1, -1, -1, 102, 48,
- 49, -1, 51, 107, -1, -1, 110, 111, 57, -1,
- 114, 115, -1, 62, 63, -1, -1, 66, 122, -1,
- -1, -1, -1, 127, -1, -1, -1, -1, 132, -1,
- 79, 80, -1, -1, -1, -1, -1, -1, 87, -1,
- -1, 90, 4, 5, 6, 7, -1, -1, -1, -1,
- -1, -1, -1, 102, -1, -1, -1, -1, -1, 21,
- 22, 110, 111, -1, -1, 114, 115, -1, -1, -1,
- -1, 33, 34, 122, -1, -1, -1, -1, 127, 41,
- 42, -1, -1, 132, -1, -1, 48, 49, -1, 51,
- -1, -1, -1, -1, -1, 57, -1, 4, 5, 6,
- 7, 63, -1, -1, 66, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 21, 22, -1, 79, 80, -1,
- -1, -1, -1, -1, -1, 87, 33, 34, 90, -1,
- -1, -1, -1, -1, 41, 42, -1, -1, -1, -1,
- 102, 48, 49, -1, 51, -1, -1, -1, 110, 111,
- 57, -1, 114, 115, -1, -1, 63, -1, -1, 66,
- 122, -1, -1, -1, -1, 127, -1, -1, -1, -1,
- 132, -1, 79, 80, -1, -1, -1, -1, -1, -1,
- 87, -1, -1, 90, 5, -1, 7, -1, -1, -1,
- -1, -1, -1, -1, -1, 102, -1, -1, -1, -1,
- 21, 22, -1, 110, 111, -1, -1, 114, 115, -1,
- -1, -1, 33, 34, -1, 122, -1, -1, -1, -1,
- 127, 42, -1, -1, -1, 132, -1, 48, 49, -1,
- 51, 33, 34, -1, -1, -1, 57, -1, -1, -1,
- 42, -1, -1, -1, -1, 66, 48, 49, -1, 51,
- -1, -1, -1, -1, -1, 57, -1, -1, 79, 80,
- -1, -1, -1, -1, 66, -1, 87, -1, -1, 90,
- -1, -1, -1, -1, -1, -1, -1, 79, 80, -1,
- -1, 102, -1, -1, -1, 87, -1, -1, -1, 110,
- -1, -1, -1, 114, 115, -1, -1, -1, -1, -1,
- 102, 122, -1, -1, -1, -1, 127, -1, 110, -1,
- -1, -1, 114, 115, -1, -1, -1, -1, -1, -1,
- 122, -1, -1, -1, -1, 127
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 77
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 1, 3, 30, 46, 47, 53, 58, 78, 100,
- 107, 119, 125, 128, 137, 138, 139, 140, 141, 142,
- 143, 164, 165, 168, 169, 172, 173, 176, 230, 231,
- 112, 4, 6, 228, 76, 112, 69, 112, 81, 29,
- 56, 177, 228, 174, 175, 188, 228, 0, 128, 130,
- 78, 176, 128, 131, 3, 228, 69, 228, 228, 228,
- 228, 228, 5, 7, 21, 22, 23, 33, 34, 41,
- 42, 48, 49, 51, 57, 63, 66, 79, 80, 87,
- 90, 102, 110, 111, 114, 115, 122, 127, 132, 146,
- 178, 179, 180, 182, 204, 205, 206, 207, 208, 209,
- 210, 211, 218, 221, 224, 228, 108, 134, 31, 132,
- 81, 28, 58, 5, 93, 132, 124, 198, 199, 121,
- 132, 176, 7, 7, 123, 204, 214, 215, 132, 80,
- 132, 5, 132, 132, 80, 176, 204, 5, 69, 181,
- 134, 21, 22, 31, 225, 228, 23, 24, 135, 226,
- 22, 207, 27, 132, 170, 171, 228, 175, 132, 182,
- 227, 228, 228, 44, 45, 44, 45, 125, 166, 228,
- 144, 145, 228, 10, 62, 132, 200, 201, 202, 203,
- 204, 221, 132, 227, 200, 123, 212, 213, 59, 215,
- 216, 7, 50, 74, 88, 89, 106, 126, 219, 219,
- 204, 7, 133, 133, 132, 182, 185, 186, 189, 208,
- 228, 198, 180, 228, 205, 206, 228, 23, 56, 133,
- 204, 217, 134, 198, 11, 133, 134, 176, 144, 43,
- 68, 99, 118, 150, 228, 228, 132, 132, 153, 133,
- 134, 80, 146, 203, 182, 200, 204, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 75,
- 223, 20, 218, 220, 133, 113, 204, 213, 216, 204,
- 60, 133, 69, 69, 133, 185, 31, 187, 188, 70,
- 77, 85, 104, 184, 134, 187, 37, 117, 183, 71,
- 190, 133, 217, 133, 134, 171, 204, 228, 132, 83,
- 83, 132, 54, 61, 167, 221, 222, 228, 120, 150,
- 151, 152, 144, 10, 43, 52, 90, 99, 103, 118,
- 147, 148, 149, 133, 201, 202, 17, 18, 19, 75,
- 204, 132, 182, 204, 10, 90, 133, 134, 121, 204,
- 113, 60, 204, 7, 133, 188, 95, 95, 95, 82,
- 185, 7, 7, 187, 40, 73, 191, 133, 204, 200,
- 132, 132, 227, 5, 64, 92, 93, 116, 229, 133,
- 134, 133, 134, 35, 38, 39, 109, 162, 134, 125,
- 154, 90, 132, 218, 83, 228, 147, 204, 132, 182,
- 9, 217, 90, 218, 132, 204, 133, 67, 133, 186,
- 98, 98, 217, 200, 94, 192, 133, 227, 227, 133,
- 54, 61, 221, 132, 163, 150, 36, 96, 155, 200,
- 132, 9, 217, 204, 133, 220, 7, 93, 40, 86,
- 193, 133, 133, 5, 229, 157, 158, 159, 160, 161,
- 228, 132, 40, 133, 228, 204, 133, 133, 133, 200,
- 194, 195, 204, 7, 103, 133, 134, 7, 29, 132,
- 228, 157, 72, 101, 156, 133, 134, 32, 55, 196,
- 228, 158, 227, 133, 132, 195, 91, 197, 132, 133,
- 227, 65, 84, 227, 133, 133, 97, 7
+ 0, 1, 3, 30, 46, 47, 54, 59, 80, 104,
+ 113, 126, 133, 136, 145, 146, 147, 148, 149, 150,
+ 151, 172, 173, 176, 177, 180, 181, 184, 248, 249,
+ 118, 4, 6, 246, 78, 118, 71, 118, 83, 29,
+ 57, 185, 246, 182, 183, 196, 246, 0, 136, 138,
+ 80, 184, 136, 139, 3, 246, 71, 246, 246, 246,
+ 246, 246, 5, 7, 21, 22, 23, 33, 34, 41,
+ 42, 49, 50, 52, 58, 64, 67, 81, 82, 89,
+ 92, 106, 116, 117, 120, 121, 129, 135, 140, 154,
+ 186, 187, 188, 190, 222, 223, 224, 225, 226, 227,
+ 228, 229, 236, 239, 242, 246, 114, 142, 31, 140,
+ 83, 28, 59, 5, 95, 140, 131, 216, 217, 128,
+ 140, 184, 7, 7, 130, 222, 232, 233, 140, 82,
+ 140, 5, 140, 140, 82, 184, 222, 5, 71, 189,
+ 142, 21, 22, 31, 243, 246, 23, 24, 143, 244,
+ 98, 22, 225, 27, 140, 178, 179, 246, 183, 140,
+ 190, 245, 246, 246, 44, 45, 44, 45, 133, 174,
+ 246, 152, 153, 246, 10, 63, 140, 218, 219, 220,
+ 221, 222, 239, 140, 245, 218, 130, 230, 231, 60,
+ 233, 234, 7, 51, 76, 90, 91, 112, 134, 237,
+ 237, 222, 7, 141, 141, 140, 190, 193, 194, 197,
+ 226, 246, 216, 188, 246, 223, 224, 140, 246, 246,
+ 23, 57, 141, 222, 235, 142, 216, 11, 141, 142,
+ 184, 152, 43, 70, 103, 125, 158, 246, 246, 140,
+ 140, 161, 141, 142, 82, 154, 221, 190, 218, 222,
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 77, 241, 20, 236, 238, 141, 119, 222,
+ 231, 234, 222, 61, 141, 71, 71, 141, 193, 31,
+ 195, 196, 72, 79, 87, 108, 192, 142, 195, 37,
+ 123, 191, 73, 198, 99, 205, 206, 141, 235, 141,
+ 142, 179, 222, 246, 140, 85, 85, 140, 55, 62,
+ 175, 239, 240, 246, 127, 158, 159, 160, 152, 10,
+ 43, 53, 92, 103, 107, 125, 155, 156, 157, 141,
+ 219, 220, 17, 18, 19, 77, 222, 140, 190, 222,
+ 10, 92, 141, 142, 128, 222, 119, 61, 222, 7,
+ 141, 196, 97, 97, 97, 84, 193, 7, 7, 195,
+ 40, 75, 199, 40, 141, 96, 207, 141, 222, 218,
+ 140, 140, 245, 5, 65, 94, 95, 122, 247, 141,
+ 142, 141, 142, 35, 38, 39, 115, 170, 142, 133,
+ 162, 92, 140, 236, 85, 246, 155, 222, 140, 190,
+ 9, 235, 92, 236, 140, 222, 141, 69, 141, 194,
+ 101, 101, 235, 218, 96, 200, 235, 40, 105, 111,
+ 208, 209, 141, 245, 245, 141, 55, 62, 239, 140,
+ 171, 158, 36, 99, 163, 218, 140, 9, 235, 222,
+ 141, 238, 7, 95, 40, 88, 201, 212, 213, 222,
+ 19, 141, 141, 5, 247, 165, 166, 167, 168, 169,
+ 246, 140, 40, 141, 246, 222, 141, 141, 141, 218,
+ 212, 7, 132, 202, 203, 204, 142, 32, 56, 214,
+ 7, 48, 124, 210, 107, 141, 142, 7, 29, 140,
+ 246, 165, 74, 105, 164, 141, 246, 204, 213, 93,
+ 215, 102, 109, 102, 9, 246, 166, 245, 141, 140,
+ 31, 66, 86, 7, 48, 124, 211, 140, 141, 245,
+ 140, 68, 109, 68, 245, 141, 205, 141, 100, 141,
+ 7
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 136, 137, 137, 137, 137, 137, 137, 138, 138,
- 138, 138, 138, 138, 138, 138, 138, 138, 139, 140,
- 140, 140, 140, 141, 142, 143, 144, 145, 145, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 147, 147, 147,
- 147, 147, 147, 147, 148, 148, 149, 149, 150, 150,
- 150, 150, 151, 151, 152, 152, 153, 153, 154, 154,
- 155, 155, 156, 156, 157, 157, 158, 158, 158, 159,
- 159, 160, 161, 162, 162, 162, 162, 163, 163, 164,
- 164, 164, 164, 165, 166, 166, 167, 167, 167, 167,
- 168, 169, 170, 170, 171, 172, 172, 173, 174, 174,
- 175, 176, 177, 177, 177, 178, 178, 179, 179, 180,
- 180, 180, 181, 182, 183, 183, 183, 184, 184, 184,
- 184, 184, 184, 184, 184, 185, 185, 186, 186, 186,
- 186, 186, 186, 187, 187, 188, 188, 189, 189, 190,
- 190, 191, 191, 192, 192, 193, 193, 194, 194, 195,
- 196, 196, 196, 197, 197, 197, 198, 198, 199, 200,
- 200, 201, 201, 202, 202, 203, 203, 203, 203, 203,
- 203, 203, 203, 203, 203, 203, 204, 204, 205, 205,
- 206, 206, 207, 207, 207, 207, 207, 207, 207, 207,
- 208, 208, 208, 208, 209, 210, 210, 211, 211, 212,
- 212, 213, 214, 214, 215, 216, 216, 217, 217, 218,
- 218, 218, 218, 218, 218, 218, 218, 219, 219, 219,
- 219, 219, 219, 220, 220, 221, 221, 222, 222, 223,
- 223, 223, 223, 223, 223, 223, 223, 223, 223, 224,
- 225, 225, 226, 226, 226, 227, 227, 228, 228, 229,
- 229, 229, 229, 230, 231, 231
+ 0, 144, 145, 145, 145, 145, 145, 145, 146, 146,
+ 146, 146, 146, 146, 146, 146, 146, 146, 147, 148,
+ 148, 148, 148, 149, 150, 151, 152, 153, 153, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 155, 155, 155,
+ 155, 155, 155, 155, 156, 156, 157, 157, 158, 158,
+ 158, 158, 159, 159, 160, 160, 161, 161, 162, 162,
+ 163, 163, 164, 164, 165, 165, 166, 166, 166, 167,
+ 167, 168, 169, 170, 170, 170, 170, 171, 171, 172,
+ 172, 172, 172, 173, 174, 174, 175, 175, 175, 175,
+ 176, 177, 178, 178, 179, 180, 180, 181, 182, 182,
+ 183, 184, 185, 185, 185, 186, 186, 187, 187, 188,
+ 188, 188, 189, 190, 191, 191, 191, 192, 192, 192,
+ 192, 192, 192, 192, 192, 193, 193, 194, 194, 194,
+ 194, 194, 194, 195, 195, 196, 196, 197, 197, 198,
+ 198, 199, 199, 200, 200, 201, 201, 202, 202, 203,
+ 203, 204, 205, 206, 206, 207, 207, 208, 208, 209,
+ 209, 210, 210, 210, 211, 211, 211, 212, 212, 213,
+ 214, 214, 214, 215, 215, 215, 216, 216, 217, 218,
+ 218, 219, 219, 220, 220, 221, 221, 221, 221, 221,
+ 221, 221, 221, 221, 221, 221, 222, 222, 223, 223,
+ 224, 224, 225, 225, 225, 225, 225, 225, 225, 225,
+ 225, 225, 226, 226, 226, 226, 227, 228, 228, 229,
+ 229, 230, 230, 231, 232, 232, 233, 234, 234, 235,
+ 235, 236, 236, 236, 236, 236, 236, 236, 236, 237,
+ 237, 237, 237, 237, 237, 238, 238, 239, 239, 240,
+ 240, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 242, 243, 243, 244, 244, 244, 245, 245, 246,
+ 246, 247, 247, 247, 247, 248, 249, 249
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -1383,22 +1451,24 @@ static const yytype_uint8 yyr2[] =
2, 4, 2, 1, 1, 1, 1, 0, 3, 10,
7, 4, 5, 5, 0, 4, 2, 2, 4, 4,
5, 4, 3, 1, 3, 1, 2, 2, 1, 3,
- 3, 9, 0, 1, 1, 1, 1, 1, 3, 3,
+ 3, 10, 0, 1, 1, 1, 1, 1, 3, 3,
2, 1, 2, 3, 0, 3, 3, 0, 1, 1,
2, 1, 2, 1, 2, 6, 1, 2, 3, 2,
2, 1, 3, 1, 2, 1, 4, 1, 3, 0,
- 3, 0, 2, 0, 3, 0, 2, 1, 3, 3,
+ 3, 0, 2, 0, 3, 0, 2, 0, 1, 1,
+ 2, 6, 3,
<TRUNCATED>
[09/18] incubator-quickstep git commit: Basic support to report
individual work order profiling results
Posted by zu...@apache.org.
Basic support to report individual work order profiling results
- A flag to enable work order profiling report generation.
- At the end of each query, a report is generated which includes worker
ID, its NUMA socket, the operator that produced the WorkOrder
and the execution time in microseconds for the latest query.
- The output is printed on stdout in CSV format as of now.
- As this is a rudimentary support for the functionality, there is a lot of
future work in this regards, which includes printing of CPU core information,
printing operator name, allowing user to specify a file where the output can
be written etc.
- Fixed a bug in constructing Foreman thread.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/07435a43
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/07435a43
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/07435a43
Branch: refs/heads/travis-grpc
Commit: 07435a430776c0b8b6381a4c0f0470250814c14b
Parents: c1476d1
Author: Harshad Deshmukh <hb...@apache.org>
Authored: Thu Jun 16 14:03:34 2016 -0500
Committer: Harshad Deshmukh <hb...@apache.org>
Committed: Mon Jun 20 09:56:52 2016 -0500
----------------------------------------------------------------------
cli/QuickstepCli.cpp | 12 +++++++-
query_execution/CMakeLists.txt | 2 ++
query_execution/Foreman.cpp | 26 +++++++++++++++--
query_execution/Foreman.hpp | 22 ++++++++++++++-
query_execution/PolicyEnforcer.cpp | 15 ++++++++++
query_execution/PolicyEnforcer.hpp | 50 +++++++++++++++++++++++++++++++--
6 files changed, 121 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/07435a43/cli/QuickstepCli.cpp
----------------------------------------------------------------------
diff --git a/cli/QuickstepCli.cpp b/cli/QuickstepCli.cpp
index 35bd16e..3f99130 100644
--- a/cli/QuickstepCli.cpp
+++ b/cli/QuickstepCli.cpp
@@ -137,6 +137,9 @@ static constexpr char kPathSeparator = '/';
static constexpr char kDefaultStoragePath[] = "qsstor/";
#endif
+DEFINE_bool(profile_and_report_workorder_perf, false,
+ "If true, Quickstep will record the exceution time of all the individual "
+ "normal work orders and report it at the end of query execution.");
DEFINE_int32(num_workers, 0, "Number of worker threads. If this value is "
"specified and is greater than 0, then this "
"user-supplied value is used. Else (i.e. the"
@@ -356,7 +359,9 @@ int main(int argc, char* argv[]) {
&bus,
query_processor->getDefaultDatabase(),
query_processor->getStorageManager(),
- num_numa_nodes_system);
+ -1, // Don't pin the Foreman thread.
+ num_numa_nodes_system,
+ quickstep::FLAGS_profile_and_report_workorder_perf);
// Start the worker threads.
for (Worker &worker : workers) {
@@ -461,6 +466,11 @@ int main(int argc, char* argv[]) {
printf("Time: %s ms\n",
quickstep::DoubleToStringWithSignificantDigits(
time_ms.count(), 3).c_str());
+ if (quickstep::FLAGS_profile_and_report_workorder_perf) {
+ // TODO(harshad) - Allow user specified file instead of stdout.
+ foreman.printWorkOrderProfilingResults(query_handle->query_id(),
+ stdout);
+ }
} catch (const std::exception &e) {
fprintf(stderr, "QUERY EXECUTION ERROR: %s\n", e.what());
break;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/07435a43/query_execution/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_execution/CMakeLists.txt b/query_execution/CMakeLists.txt
index 501166e..b031a44 100644
--- a/query_execution/CMakeLists.txt
+++ b/query_execution/CMakeLists.txt
@@ -1,5 +1,7 @@
# Copyright 2011-2015 Quickstep Technologies LLC.
# Copyright 2015-2016 Pivotal Software, Inc.
+# Copyright 2016, Quickstep Research Group, Computer Sciences Department,
+# University of Wisconsin\u2014Madison.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/07435a43/query_execution/Foreman.cpp
----------------------------------------------------------------------
diff --git a/query_execution/Foreman.cpp b/query_execution/Foreman.cpp
index 828834d..f9f2e7a 100644
--- a/query_execution/Foreman.cpp
+++ b/query_execution/Foreman.cpp
@@ -18,7 +18,9 @@
#include "query_execution/Foreman.hpp"
#include <cstddef>
+#include <cstdio>
#include <memory>
+#include <tuple>
#include <utility>
#include <vector>
@@ -54,7 +56,8 @@ Foreman::Foreman(const tmb::client_id main_thread_client_id,
CatalogDatabaseLite *catalog_database,
StorageManager *storage_manager,
const int cpu_id,
- const size_t num_numa_nodes)
+ const size_t num_numa_nodes,
+ const bool profile_individual_workorders)
: ForemanLite(bus, cpu_id),
main_thread_client_id_(main_thread_client_id),
worker_directory_(DCHECK_NOTNULL(worker_directory)),
@@ -90,7 +93,8 @@ Foreman::Foreman(const tmb::client_id main_thread_client_id,
catalog_database_,
storage_manager_,
worker_directory_,
- bus_));
+ bus_,
+ profile_individual_workorders));
}
void Foreman::run() {
@@ -229,4 +233,22 @@ void Foreman::sendWorkerMessage(const size_t worker_thread_index,
<< worker_directory_->getClientID(worker_thread_index);
}
+void Foreman::printWorkOrderProfilingResults(const std::size_t query_id,
+ std::FILE *out) const {
+ const std::vector<
+ std::tuple<std::size_t, std::size_t, std::size_t>>
+ &recorded_times = policy_enforcer_->getProfilingResults(query_id);
+ fputs("Worker ID, NUMA Socket, Operator ID, Time (microseconds)\n", out);
+ for (auto workorder_entry : recorded_times) {
+ // Note: Index of the "worker thread index" in the tuple is 0.
+ const std::size_t worker_id = std::get<0>(workorder_entry);
+ fprintf(out,
+ "%lu, %d, %lu, %lu\n",
+ worker_id,
+ worker_directory_->getNUMANode(worker_id),
+ std::get<1>(workorder_entry),
+ std::get<2>(workorder_entry));
+ }
+}
+
} // namespace quickstep
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/07435a43/query_execution/Foreman.hpp
----------------------------------------------------------------------
diff --git a/query_execution/Foreman.hpp b/query_execution/Foreman.hpp
index 94cb9fc..7be57e7 100644
--- a/query_execution/Foreman.hpp
+++ b/query_execution/Foreman.hpp
@@ -19,6 +19,7 @@
#define QUICKSTEP_QUERY_EXECUTION_FOREMAN_HPP_
#include <cstddef>
+#include <cstdio>
#include <memory>
#include <vector>
@@ -57,6 +58,8 @@ class Foreman final : public ForemanLite {
* @param storage_manager The StorageManager to use.
* @param cpu_id The ID of the CPU to which the Foreman thread can be pinned.
* @param num_numa_nodes The number of NUMA nodes in the system.
+ * @param profile_individual_workorders Whether every workorder's execution
+ * be profiled or not.
*
* @note If cpu_id is not specified, Foreman thread can be possibly moved
* around on different CPUs by the OS.
@@ -67,10 +70,27 @@ class Foreman final : public ForemanLite {
CatalogDatabaseLite *catalog_database,
StorageManager *storage_manager,
const int cpu_id = -1,
- const std::size_t num_numa_nodes = 1);
+ const std::size_t num_numa_nodes = 1,
+ const bool profile_individual_workorders = false);
~Foreman() override {}
+ /**
+ * @brief Print the results of profiling individual work orders for a given
+ * query.
+ *
+ * TODO(harshad) - Add the name of the operator to the output.
+ * TODO(harshad) - Add the CPU core ID of the operator to the output. This
+ * will require modifying the WorkerDirectory to remember worker affinities.
+ * Until then, the users can refer to the worker_affinities provided to the
+ * cli to infer the CPU core ID where a given worker is pinned.
+ *
+ * @param query_id The ID of the query for which the results are to be printed.
+ * @param out The file stream.
+ **/
+ void printWorkOrderProfilingResults(const std::size_t query_id,
+ std::FILE *out) const;
+
protected:
void run() override;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/07435a43/query_execution/PolicyEnforcer.cpp
----------------------------------------------------------------------
diff --git a/query_execution/PolicyEnforcer.cpp b/query_execution/PolicyEnforcer.cpp
index 9f0502d..84aa86a 100644
--- a/query_execution/PolicyEnforcer.cpp
+++ b/query_execution/PolicyEnforcer.cpp
@@ -76,6 +76,9 @@ void PolicyEnforcer::processMessage(const TaggedMessage &tagged_message) {
query_id = proto.query_id();
worker_directory_->decrementNumQueuedWorkOrders(
proto.worker_thread_index());
+ if (profile_individual_workorders_) {
+ recordTimeForWorkOrder(proto);
+ }
break;
}
case kRebuildWorkOrderCompleteMessage: {
@@ -197,4 +200,16 @@ bool PolicyEnforcer::admitQueries(
return true;
}
+void PolicyEnforcer::recordTimeForWorkOrder(
+ const serialization::NormalWorkOrderCompletionMessage &proto) {
+ const std::size_t query_id = proto.query_id();
+ if (workorder_time_recorder_.find(query_id) == workorder_time_recorder_.end()) {
+ workorder_time_recorder_[query_id];
+ }
+ workorder_time_recorder_[query_id].emplace_back(
+ proto.worker_thread_index(),
+ proto.operator_index(),
+ proto.execution_time_in_microseconds());
+}
+
} // namespace quickstep
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/07435a43/query_execution/PolicyEnforcer.hpp
----------------------------------------------------------------------
diff --git a/query_execution/PolicyEnforcer.hpp b/query_execution/PolicyEnforcer.hpp
index 9f87056..470ff2a 100644
--- a/query_execution/PolicyEnforcer.hpp
+++ b/query_execution/PolicyEnforcer.hpp
@@ -21,6 +21,7 @@
#include <cstddef>
#include <memory>
#include <queue>
+#include <tuple>
#include <unordered_map>
#include <vector>
@@ -62,13 +63,15 @@ class PolicyEnforcer {
CatalogDatabaseLite *catalog_database,
StorageManager *storage_manager,
WorkerDirectory *worker_directory,
- tmb::MessageBus *bus)
+ tmb::MessageBus *bus,
+ const bool profile_individual_workorders = false)
: foreman_client_id_(foreman_client_id),
num_numa_nodes_(num_numa_nodes),
catalog_database_(catalog_database),
storage_manager_(storage_manager),
worker_directory_(worker_directory),
- bus_(bus) {}
+ bus_(bus),
+ profile_individual_workorders_(profile_individual_workorders) {}
/**
* @brief Destructor.
@@ -143,9 +146,40 @@ class PolicyEnforcer {
return !(admitted_queries_.empty() && waiting_queries_.empty());
}
+ /**
+ * @brief Get the profiling results for individual work order execution for a
+ * given query.
+ *
+ * @note This function should only be called if profiling individual work
+ * orders option is enabled.
+ *
+ * @param query_id The ID of the query for which the profiling results are
+ * requested.
+ *
+ * @return A vector of tuples, each being a single profiling entry.
+ **/
+ inline const std::vector<std::tuple<std::size_t, std::size_t, std::size_t>>&
+ getProfilingResults(const std::size_t query_id) const {
+ DCHECK(profile_individual_workorders_);
+ DCHECK(workorder_time_recorder_.find(query_id) !=
+ workorder_time_recorder_.end());
+ return workorder_time_recorder_.at(query_id);
+ }
+
private:
static constexpr std::size_t kMaxConcurrentQueries = 1;
+ /**
+ * @brief Record the execution time for a finished WorkOrder.
+ *
+ * TODO(harshad) - Extend the functionality to rebuild work orders.
+ *
+ * @param proto The completion message proto sent after the WorkOrder
+ * execution.
+ **/
+ void recordTimeForWorkOrder(
+ const serialization::NormalWorkOrderCompletionMessage &proto);
+
const tmb::client_id foreman_client_id_;
const std::size_t num_numa_nodes_;
@@ -154,6 +188,7 @@ class PolicyEnforcer {
WorkerDirectory *worker_directory_;
tmb::MessageBus *bus_;
+ const bool profile_individual_workorders_;
// Key = query ID, value = QueryManager* for the key query.
std::unordered_map<std::size_t, std::unique_ptr<QueryManager>> admitted_queries_;
@@ -161,6 +196,17 @@ class PolicyEnforcer {
// The queries which haven't been admitted yet.
std::queue<QueryHandle*> waiting_queries_;
+ // Key = Query ID.
+ // Value = A tuple indicating a record of executing a work order.
+ // Within a tuple ...
+ // 1st element: Logical worker ID.
+ // 2nd element: Operator ID.
+ // 3rd element: Time in microseconds to execute the work order.
+ std::unordered_map<
+ std::size_t,
+ std::vector<std::tuple<std::size_t, std::size_t, std::size_t>>>
+ workorder_time_recorder_;
+
DISALLOW_COPY_AND_ASSIGN(PolicyEnforcer);
};
[02/18] incubator-quickstep git commit: Measure execution time of
WorkOrders.
Posted by zu...@apache.org.
Measure execution time of WorkOrders.
- Measure order execution time for both normal and rebuild work
orders.
- Split the WorkOrderCompletion proto message in two: Normal and Rebuild
work orders, with a possibility that in the future the two messages
will have different fields.
- Add execution time field in both WorkOrderComplete proto messages.
- Include the recorded time in both WorkOrderComplete proto messages
that are sent back to Foreman.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/8e825f15
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/8e825f15
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/8e825f15
Branch: refs/heads/travis-grpc
Commit: 8e825f1525d5080e6c4bd02ee2ce0e14d81ab6c5
Parents: a701362
Author: Harshad Deshmukh <hb...@apache.org>
Authored: Tue Jun 14 14:02:45 2016 -0500
Committer: Harshad Deshmukh <hb...@apache.org>
Committed: Wed Jun 15 15:59:35 2016 -0500
----------------------------------------------------------------------
query_execution/PolicyEnforcer.cpp | 23 ++++-
query_execution/QueryExecutionMessages.proto | 29 +++++--
query_execution/QueryManager.cpp | 4 +-
query_execution/Worker.cpp | 89 ++++++++++++--------
query_execution/Worker.hpp | 38 +++++++--
query_execution/tests/QueryManager_unittest.cpp | 9 +-
6 files changed, 132 insertions(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/8e825f15/query_execution/PolicyEnforcer.cpp
----------------------------------------------------------------------
diff --git a/query_execution/PolicyEnforcer.cpp b/query_execution/PolicyEnforcer.cpp
index 4501026..9f0502d 100644
--- a/query_execution/PolicyEnforcer.cpp
+++ b/query_execution/PolicyEnforcer.cpp
@@ -67,13 +67,26 @@ void PolicyEnforcer::processMessage(const TaggedMessage &tagged_message) {
// TaggedMessage only once.
std::size_t query_id;
switch (tagged_message.message_type()) {
- case kWorkOrderCompleteMessage: // Fall through.
+ case kWorkOrderCompleteMessage: {
+ serialization::NormalWorkOrderCompletionMessage proto;
+ // Note: This proto message contains the time it took to execute the
+ // WorkOrder. It can be accessed in this scope.
+ CHECK(proto.ParseFromArray(tagged_message.message(),
+ tagged_message.message_bytes()));
+ query_id = proto.query_id();
+ worker_directory_->decrementNumQueuedWorkOrders(
+ proto.worker_thread_index());
+ break;
+ }
case kRebuildWorkOrderCompleteMessage: {
- serialization::WorkOrderCompletionMessage proto;
+ serialization::RebuildWorkOrderCompletionMessage proto;
+ // Note: This proto message contains the time it took to execute the
+ // rebuild WorkOrder. It can be accessed in this scope.
CHECK(proto.ParseFromArray(tagged_message.message(),
tagged_message.message_bytes()));
query_id = proto.query_id();
- worker_directory_->decrementNumQueuedWorkOrders(proto.worker_thread_index());
+ worker_directory_->decrementNumQueuedWorkOrders(
+ proto.worker_thread_index());
break;
}
case kCatalogRelationNewBlockMessage: {
@@ -98,7 +111,9 @@ void PolicyEnforcer::processMessage(const TaggedMessage &tagged_message) {
break;
}
case kWorkOrderFeedbackMessage: {
- WorkOrder::FeedbackMessage msg(const_cast<void *>(tagged_message.message()), tagged_message.message_bytes());
+ WorkOrder::FeedbackMessage msg(
+ const_cast<void *>(tagged_message.message()),
+ tagged_message.message_bytes());
query_id = msg.header().query_id;
break;
}
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/8e825f15/query_execution/QueryExecutionMessages.proto
----------------------------------------------------------------------
diff --git a/query_execution/QueryExecutionMessages.proto b/query_execution/QueryExecutionMessages.proto
index 9d9a9e5..65a8946 100644
--- a/query_execution/QueryExecutionMessages.proto
+++ b/query_execution/QueryExecutionMessages.proto
@@ -20,14 +20,33 @@ package quickstep.serialization;
message EmptyMessage {
}
-// Used for both Normal WorkOrders and RebuildWorkOrders.
-// NOTE(zuyu): we might need to seperate the completion messages to contain
-// run-time information for Foreman to make better decisions on scheduling
-// WorkOrders.
-message WorkOrderCompletionMessage {
+// Note: There are different types of completion messages for normal work orders
+// rebuild work orders. This can be potentially helpful when we want to collect
+// different statistics for executing different types of work orders.
+// e.g. In select normal work order completion message, we could be interested
+// in the selectivity of the block whose work order got execute. In rebuild work
+// order completion message, we may be interested in adding the compression
+// ratio or dictionary size of the rebuilt block.
+
+// TODO(harshad) : If there are different fields in the two message types below,
+// create a base message class called WorkOrderCompletionMessage and make the
+// two classes below extend the base class. All the common fields in both the
+// classes can be moved to the base class.
+
+// A message sent upon completion of a normal (not rebuild) WorkOrder execution.
+message NormalWorkOrderCompletionMessage {
+ required uint64 operator_index = 1;
+ required uint64 worker_thread_index = 2;
+ required uint64 query_id = 3;
+ optional uint64 execution_time_in_microseconds = 4;
+}
+
+// A message sent upon completion of a rebuild WorkOrder execution.
+message RebuildWorkOrderCompletionMessage {
required uint64 operator_index = 1;
required uint64 worker_thread_index = 2;
required uint64 query_id = 3;
+ optional uint64 execution_time_in_microseconds = 4;
}
message CatalogRelationNewBlockMessage {
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/8e825f15/query_execution/QueryManager.cpp
----------------------------------------------------------------------
diff --git a/query_execution/QueryManager.cpp b/query_execution/QueryManager.cpp
index e4e4c9d..d20b592 100644
--- a/query_execution/QueryManager.cpp
+++ b/query_execution/QueryManager.cpp
@@ -161,7 +161,7 @@ QueryManager::QueryStatusCode QueryManager::processMessage(
dag_node_index op_index;
switch (tagged_message.message_type()) {
case kWorkOrderCompleteMessage: {
- serialization::WorkOrderCompletionMessage proto;
+ serialization::NormalWorkOrderCompletionMessage proto;
CHECK(proto.ParseFromArray(tagged_message.message(),
tagged_message.message_bytes()));
@@ -170,7 +170,7 @@ QueryManager::QueryStatusCode QueryManager::processMessage(
break;
}
case kRebuildWorkOrderCompleteMessage: {
- serialization::WorkOrderCompletionMessage proto;
+ serialization::RebuildWorkOrderCompletionMessage proto;
CHECK(proto.ParseFromArray(tagged_message.message(),
tagged_message.message_bytes()));
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/8e825f15/query_execution/Worker.cpp
----------------------------------------------------------------------
diff --git a/query_execution/Worker.cpp b/query_execution/Worker.cpp
index ef596e1..ae889c7 100644
--- a/query_execution/Worker.cpp
+++ b/query_execution/Worker.cpp
@@ -16,7 +16,9 @@
#include "query_execution/Worker.hpp"
+#include <chrono>
#include <cstddef>
+#include <cstdint>
#include <cstdlib>
#include <utility>
@@ -36,6 +38,7 @@
#include "tmb/tagged_message.h"
using std::size_t;
+using std::uint64_t;
using tmb::TaggedMessage;
@@ -50,22 +53,27 @@ void Worker::run() {
for (;;) {
// Receive() is a blocking call, causing this thread to sleep until next
// message is received.
- const AnnotatedMessage annotated_msg = bus_->Receive(worker_client_id_, 0, true);
+ const AnnotatedMessage annotated_msg =
+ bus_->Receive(worker_client_id_, 0, true);
const TaggedMessage &tagged_message = annotated_msg.tagged_message;
switch (tagged_message.message_type()) {
- case kWorkOrderMessage: // Fall through.
+ case kWorkOrderMessage: {
+ serialization::NormalWorkOrderCompletionMessage proto;
+ executeWorkOrderHelper<serialization::NormalWorkOrderCompletionMessage>(
+ tagged_message, &proto);
+ sendWorkOrderCompleteMessage<
+ serialization::NormalWorkOrderCompletionMessage>(
+ annotated_msg.sender, proto, kWorkOrderCompleteMessage);
+ break;
+ }
case kRebuildWorkOrderMessage: {
- WorkerMessage message(*static_cast<const WorkerMessage*>(tagged_message.message()));
- DCHECK(message.getWorkOrder() != nullptr);
- message.getWorkOrder()->execute();
- const std::size_t query_id_for_workorder =
- message.getWorkOrder()->getQueryID();
- delete message.getWorkOrder();
-
- sendWorkOrderCompleteMessage(
- annotated_msg.sender, message.getRelationalOpIndex(),
- query_id_for_workorder,
- tagged_message.message_type() == kRebuildWorkOrderMessage);
+ serialization::RebuildWorkOrderCompletionMessage proto;
+ executeWorkOrderHelper<
+ serialization::RebuildWorkOrderCompletionMessage>(tagged_message,
+ &proto);
+ sendWorkOrderCompleteMessage<
+ serialization::RebuildWorkOrderCompletionMessage>(
+ annotated_msg.sender, proto, kRebuildWorkOrderCompleteMessage);
break;
}
case kPoisonMessage: {
@@ -77,34 +85,49 @@ void Worker::run() {
}
}
+template <typename CompletionMessageProtoT>
void Worker::sendWorkOrderCompleteMessage(const tmb::client_id receiver,
- const size_t op_index,
- const size_t query_id,
- const bool is_rebuild_work_order) {
- serialization::WorkOrderCompletionMessage proto;
- proto.set_operator_index(op_index);
- proto.set_worker_thread_index(worker_thread_index_);
- proto.set_query_id(query_id);
-
+ const CompletionMessageProtoT &proto,
+ const message_type_id message_type) {
// NOTE(zuyu): Using the heap memory to serialize proto as a c-like string.
const size_t proto_length = proto.ByteSize();
- char *proto_bytes = static_cast<char*>(std::malloc(proto_length));
+ char *proto_bytes = static_cast<char *>(std::malloc(proto_length));
CHECK(proto.SerializeToArray(proto_bytes, proto_length));
- TaggedMessage message(static_cast<const void*>(proto_bytes),
- proto_length,
- is_rebuild_work_order ? kRebuildWorkOrderCompleteMessage
- : kWorkOrderCompleteMessage);
+ TaggedMessage tagged_message(
+ static_cast<const void *>(proto_bytes), proto_length, message_type);
std::free(proto_bytes);
const tmb::MessageBus::SendStatus send_status =
- QueryExecutionUtil::SendTMBMessage(bus_,
- worker_client_id_,
- receiver,
- std::move(message));
- CHECK(send_status == tmb::MessageBus::SendStatus::kOK) << "Message could not "
- "be sent from worker with TMB client ID " << worker_client_id_ << " to "
- "Foreman with TMB client ID " << receiver;
+ QueryExecutionUtil::SendTMBMessage(
+ bus_, worker_client_id_, receiver, std::move(tagged_message));
+ CHECK(send_status == tmb::MessageBus::SendStatus::kOK)
+ << "Message could not be sent from worker with TMB client ID "
+ << worker_client_id_ << " to Foreman with TMB client ID " << receiver;
+}
+
+template <typename CompletionMessageProtoT>
+void Worker::executeWorkOrderHelper(const TaggedMessage &tagged_message,
+ CompletionMessageProtoT *proto) {
+ std::chrono::time_point<std::chrono::steady_clock> start, end;
+ WorkerMessage worker_message(
+ *static_cast<const WorkerMessage *>(tagged_message.message()));
+ DCHECK(worker_message.getWorkOrder() != nullptr);
+ const size_t query_id_for_workorder = worker_message.getWorkOrder()->getQueryID();
+
+ // Start measuring the execution time.
+ start = std::chrono::steady_clock::now();
+ worker_message.getWorkOrder()->execute();
+ end = std::chrono::steady_clock::now();
+ delete worker_message.getWorkOrder();
+ const uint64_t execution_time_microseconds =
+ std::chrono::duration_cast<std::chrono::milliseconds>(end - start)
+ .count();
+ // Construct the proto message.
+ proto->set_operator_index(worker_message.getRelationalOpIndex());
+ proto->set_query_id(query_id_for_workorder);
+ proto->set_worker_thread_index(worker_thread_index_);
+ proto->set_execution_time_in_microseconds(execution_time_microseconds);
}
} // namespace quickstep
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/8e825f15/query_execution/Worker.hpp
----------------------------------------------------------------------
diff --git a/query_execution/Worker.hpp b/query_execution/Worker.hpp
index c0bafdc..71d3ec9 100644
--- a/query_execution/Worker.hpp
+++ b/query_execution/Worker.hpp
@@ -19,6 +19,7 @@
#define QUICKSTEP_QUERY_EXECUTION_WORKER_HPP_
#include <cstddef>
+#include <cstdint>
#include "query_execution/QueryExecutionTypedefs.hpp"
#include "threading/Thread.hpp"
@@ -27,6 +28,8 @@
#include "tmb/id_typedefs.h"
#include "tmb/message_bus.h"
+namespace tmb { class TaggedMessge; }
+
namespace quickstep {
/** \addtogroup QueryExecution
@@ -93,18 +96,35 @@ class Worker : public Thread {
private:
/**
- * @brief Send the response WorkOrder completion message.
+ * @brief A helper method to execute the WorkOrder and construct a
+ * completion message.
+ *
+ * @note CompletionMessageProtoT is the type of the completion message.
+ * @note Right now a single helper method works for all message types.
+ * If different message types need to collect different statistics for
+ * the WorkOrder execution, we need to create different helper methods,
+ * one for each message type.
+ *
+ * @param tagged_message The TaggedMessage which consists of the WorkOrder.
+ * @param proto The proto message to be sent.
+ **/
+ template <typename CompletionMessageProtoT>
+ void executeWorkOrderHelper(const TaggedMessage &tagged_message,
+ CompletionMessageProtoT *proto);
+
+ /**
+ * @brief A helper method to send the WorkOrder completion message.
+ *
+ * @note CompletionMessageProtoT is the type of the completion message.
*
- * @param receiver The id of the TMB client which should receive the response.
- * @param op_index The index of the operator to which the WorkOrder belongs.
- * @param query_id The ID of the query which the WorkOrder belongs to.
- * @param is_rebuild_work_order True if it is a RebuildWorkOrder. Otherwise
- * false.
+ * @param receiver The TMB client ID of the receiver.
+ * @param proto The proto message to be sent.
+ * @param message_type The ID of the type of the message being sent.
**/
+ template <typename CompletionMessageProtoT>
void sendWorkOrderCompleteMessage(const tmb::client_id receiver,
- const std::size_t op_index,
- const std::size_t query_id,
- const bool is_rebuild_work_order);
+ const CompletionMessageProtoT &proto,
+ const message_type_id message_type);
const std::size_t worker_thread_index_;
MessageBus *bus_;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/8e825f15/query_execution/tests/QueryManager_unittest.cpp
----------------------------------------------------------------------
diff --git a/query_execution/tests/QueryManager_unittest.cpp b/query_execution/tests/QueryManager_unittest.cpp
index 4f98748..37e2cdd 100644
--- a/query_execution/tests/QueryManager_unittest.cpp
+++ b/query_execution/tests/QueryManager_unittest.cpp
@@ -275,7 +275,7 @@ class QueryManagerTest : public ::testing::Test {
inline bool placeWorkOrderCompleteMessage(const QueryPlan::DAGNodeIndex index) {
VLOG(3) << "Place WorkOrderComplete message for Op[" << index << "]";
TaggedMessage tagged_message;
- serialization::WorkOrderCompletionMessage proto;
+ serialization::NormalWorkOrderCompletionMessage proto;
proto.set_operator_index(index);
proto.set_worker_thread_index(1); // dummy worker ID.
proto.set_query_id(0); // dummy query ID.
@@ -296,8 +296,7 @@ class QueryManagerTest : public ::testing::Test {
inline bool placeRebuildWorkOrderCompleteMessage(const QueryPlan::DAGNodeIndex index) {
VLOG(3) << "Place RebuildWorkOrderComplete message for Op[" << index << "]";
- // foreman_->processRebuildWorkOrderCompleteMessage(index, 0 /* worker id */);
- serialization::WorkOrderCompletionMessage proto;
+ serialization::RebuildWorkOrderCompletionMessage proto;
proto.set_operator_index(index);
proto.set_worker_thread_index(1); // dummy worker thread ID.
proto.set_query_id(0); // dummy query ID.
@@ -346,7 +345,6 @@ class QueryManagerTest : public ::testing::Test {
unique_ptr<QueryHandle> query_handle_;
unique_ptr<QueryManager> query_manager_;
- // unique_ptr<Foreman> foreman_;
MessageBusImpl bus_;
client_id worker_client_id_;
@@ -357,7 +355,6 @@ class QueryManagerTest : public ::testing::Test {
TEST_F(QueryManagerTest, SingleNodeDAGNoWorkOrdersTest) {
// This test creates a DAG of a single node. No workorders are generated.
query_plan_->addRelationalOperator(new MockOperator(false, false));
- // foreman_->setQueryPlan(query_plan_->getQueryPlanDAGMutable());
const MockOperator &op = static_cast<const MockOperator &>(
query_plan_->getQueryPlanDAG().getNodePayload(0));
@@ -377,7 +374,6 @@ TEST_F(QueryManagerTest, SingleNodeDAGStaticWorkOrdersTest) {
// This test creates a DAG of a single node. Static workorders are generated.
const QueryPlan::DAGNodeIndex id =
query_plan_->addRelationalOperator(new MockOperator(true, false, 1));
- // foreman_->setQueryPlan(query_plan_->getQueryPlanDAGMutable());
const MockOperator &op = static_cast<const MockOperator &>(
query_plan_->getQueryPlanDAG().getNodePayload(id));
@@ -429,7 +425,6 @@ TEST_F(QueryManagerTest, SingleNodeDAGDynamicWorkOrdersTest) {
// scaffolding of mocking. If we use gMock, we can do much better.
const QueryPlan::DAGNodeIndex id =
query_plan_->addRelationalOperator(new MockOperator(true, false, 4, 3));
- // foreman_->setQueryPlan(query_plan_->getQueryPlanDAGMutable());
const MockOperator &op = static_cast<const MockOperator &>(
query_plan_->getQueryPlanDAG().getNodePayload(id));
[05/18] incubator-quickstep git commit: QUICKSTEP-20: Added parser
support for SQL window aggregation function
Posted by zu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/preprocessed/SqlLexer_gen.hpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlLexer_gen.hpp b/parser/preprocessed/SqlLexer_gen.hpp
index c14559b..f6cd8ad 100644
--- a/parser/preprocessed/SqlLexer_gen.hpp
+++ b/parser/preprocessed/SqlLexer_gen.hpp
@@ -12,8 +12,8 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 0
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 39
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
@@ -222,7 +222,7 @@ void quickstep_yyfree (void * ,yyscan_t yyscanner );
/* Begin user sect3 */
-#define quickstep_yywrap(yyscanner) (/*CONSTCOND*/1)
+#define quickstep_yywrap(yyscanner) 1
#define YY_SKIP_YYWRAP
#define yytext_ptr yytext_r
@@ -268,11 +268,11 @@ void quickstep_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
FILE *quickstep_yyget_in (yyscan_t yyscanner );
-void quickstep_yyset_in (FILE * _in_str ,yyscan_t yyscanner );
+void quickstep_yyset_in (FILE * in_str ,yyscan_t yyscanner );
FILE *quickstep_yyget_out (yyscan_t yyscanner );
-void quickstep_yyset_out (FILE * _out_str ,yyscan_t yyscanner );
+void quickstep_yyset_out (FILE * out_str ,yyscan_t yyscanner );
yy_size_t quickstep_yyget_leng (yyscan_t yyscanner );
@@ -280,11 +280,11 @@ char *quickstep_yyget_text (yyscan_t yyscanner );
int quickstep_yyget_lineno (yyscan_t yyscanner );
-void quickstep_yyset_lineno (int _line_number ,yyscan_t yyscanner );
+void quickstep_yyset_lineno (int line_number ,yyscan_t yyscanner );
int quickstep_yyget_column (yyscan_t yyscanner );
-void quickstep_yyset_column (int _column_no ,yyscan_t yyscanner );
+void quickstep_yyset_column (int column_no ,yyscan_t yyscanner );
YYSTYPE * quickstep_yyget_lval (yyscan_t yyscanner );
@@ -360,7 +360,7 @@ extern int quickstep_yylex \
#undef YY_DECL
#endif
-#line 454 "../SqlLexer.lpp"
+#line 463 "../SqlLexer.lpp"
#line 367 "SqlLexer_gen.hpp"
[18/18] incubator-quickstep git commit: Disabled shared build.
Posted by zu...@apache.org.
Disabled shared build.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/6b3aa032
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/6b3aa032
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/6b3aa032
Branch: refs/heads/travis-grpc
Commit: 6b3aa03291a5b25245aa45732d0aa912422542e3
Parents: 338b856
Author: Zuyu Zhang <zu...@apache.org>
Authored: Tue Jun 14 20:04:51 2016 -0700
Committer: Zuyu Zhang <zu...@apache.org>
Committed: Mon Jun 27 14:32:55 2016 -0700
----------------------------------------------------------------------
.travis.yml | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/6b3aa032/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 3c00cd7..2650b6c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -56,7 +56,6 @@ before_script:
- $PROTOC --version
- (cd build &&
cmake -D CMAKE_BUILD_TYPE=$BUILD_TYPE
- -D BUILD_SHARED_LIBS=On
-D CMAKE_C_FLAGS_DEBUG="$DEBUG_FLAGS"
-D CMAKE_CXX_FLAGS_DEBUG="$DEBUG_FLAGS"
-D CMAKE_C_FLAGS_RELEASE="$RELEASE_FLAGS"
[15/18] incubator-quickstep git commit: Go back to using LLVM Apt
repositories
Posted by zu...@apache.org.
Go back to using LLVM Apt repositories
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/c0c13f67
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/c0c13f67
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/c0c13f67
Branch: refs/heads/travis-grpc
Commit: c0c13f67e330ccc4b233d9fd9033453211d9c584
Parents: 714874c
Author: Navneet Potti <na...@gmail.com>
Authored: Mon Jun 27 11:06:58 2016 -0500
Committer: Navneet Potti <na...@gmail.com>
Committed: Mon Jun 27 11:06:58 2016 -0500
----------------------------------------------------------------------
.travis.yml | 15 ++-------------
1 file changed, 2 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/c0c13f67/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index fce3ba0..54a0c8a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -20,19 +20,6 @@ env:
- BUILD_TYPE=Debug VECTOR_COPY_ELISION_LEVEL=selection
- BUILD_TYPE=Release VECTOR_COPY_ELISION_LEVEL=selection
-before_install:
- - LLVM_VERSION=3.7.1
- - LLVM_ARCHIVE_PATH=$HOME/clang+llvm.tar.xz
- - if [[ $CC = "clang" ]]; then
- wget http://llvm.org/releases/$LLVM_VERSION/clang+llvm-$LLVM_VERSION-x86_64-linux-gnu-ubuntu-14.04.tar.xz -O $LLVM_ARCHIVE_PATH;
- mkdir -p $HOME/clang-$LLVM_VERSION;
- tar xf $LLVM_ARCHIVE_PATH -C $HOME/clang-$LLVM_VERSION --strip-components 1;
- ln -sf $HOME/clang-$LLVM_VERSION/bin/clang++ $HOME/clang-$LLVM_VERSION/bin/clang++-3.7;
- export PATH=$HOME/clang-$LLVM_VERSION/bin:$PATH;
- export CPPFLAGS="-I $HOME/clang-$LLVM_VERSION/include/c++/v1";
- echo "Using clang at " `which $CC-3.7` " and $CXX at " `which $CXX-3.7`;
- fi
-
install:
- if [ "$CC" = "gcc" ]; then
export MAKE_JOBS=1;
@@ -91,9 +78,11 @@ addons:
apt:
sources:
- ubuntu-toolchain-r-test
+ - llvm-toolchain-precise-3.7
packages:
- gcc-5
- g++-5
+ - clang-3.7
- binutils-gold
- libprotobuf-dev
- protobuf-compiler
[03/18] incubator-quickstep git commit: QUICKSTEP-20: Added parser
support for SQL window aggregation function
Posted by zu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/preprocessed/SqlParser_gen.hpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlParser_gen.hpp b/parser/preprocessed/SqlParser_gen.hpp
index 71e4332..fea31d6 100644
--- a/parser/preprocessed/SqlParser_gen.hpp
+++ b/parser/preprocessed/SqlParser_gen.hpp
@@ -85,88 +85,96 @@ extern int quickstep_yydebug;
TOKEN_CONSTRAINT = 295,
TOKEN_COPY = 296,
TOKEN_CREATE = 297,
- TOKEN_DATE = 298,
- TOKEN_DATETIME = 299,
- TOKEN_DAY = 300,
- TOKEN_DECIMAL = 301,
- TOKEN_DEFAULT = 302,
- TOKEN_DELETE = 303,
- TOKEN_DELIMITER = 304,
- TOKEN_DESC = 305,
- TOKEN_DISTINCT = 306,
- TOKEN_DOUBLE = 307,
- TOKEN_DROP = 308,
- TOKEN_ELSE = 309,
- TOKEN_END = 310,
- TOKEN_ESCAPE_STRINGS = 311,
- TOKEN_EXISTS = 312,
- TOKEN_EXTRACT = 313,
- TOKEN_FALSE = 314,
- TOKEN_FIRST = 315,
- TOKEN_FLOAT = 316,
- TOKEN_FOR = 317,
- TOKEN_FOREIGN = 318,
- TOKEN_FROM = 319,
- TOKEN_FULL = 320,
- TOKEN_GROUP = 321,
- TOKEN_HASH = 322,
- TOKEN_HAVING = 323,
- TOKEN_HOUR = 324,
- TOKEN_IN = 325,
- TOKEN_INDEX = 326,
- TOKEN_INNER = 327,
- TOKEN_INSERT = 328,
- TOKEN_INTEGER = 329,
- TOKEN_INTERVAL = 330,
- TOKEN_INTO = 331,
- TOKEN_JOIN = 332,
- TOKEN_KEY = 333,
- TOKEN_LAST = 334,
- TOKEN_LEFT = 335,
- TOKEN_LIMIT = 336,
- TOKEN_LONG = 337,
- TOKEN_MINUTE = 338,
- TOKEN_MONTH = 339,
- TOKEN_NULL = 340,
- TOKEN_NULLS = 341,
- TOKEN_OFF = 342,
- TOKEN_ON = 343,
- TOKEN_ORDER = 344,
- TOKEN_OUTER = 345,
- TOKEN_PARTITION = 346,
- TOKEN_PARTITIONS = 347,
- TOKEN_PERCENT = 348,
- TOKEN_PRIMARY = 349,
- TOKEN_QUIT = 350,
- TOKEN_RANGE = 351,
- TOKEN_REAL = 352,
- TOKEN_REFERENCES = 353,
- TOKEN_RIGHT = 354,
- TOKEN_ROW_DELIMITER = 355,
- TOKEN_SECOND = 356,
- TOKEN_SELECT = 357,
- TOKEN_SET = 358,
- TOKEN_SMA = 359,
- TOKEN_SMALLINT = 360,
- TOKEN_SUBSTRING = 361,
- TOKEN_TABLE = 362,
- TOKEN_THEN = 363,
- TOKEN_TIME = 364,
- TOKEN_TIMESTAMP = 365,
- TOKEN_TRUE = 366,
- TOKEN_TUPLESAMPLE = 367,
- TOKEN_UNIQUE = 368,
- TOKEN_UPDATE = 369,
- TOKEN_USING = 370,
- TOKEN_VALUES = 371,
- TOKEN_VARCHAR = 372,
- TOKEN_WHEN = 373,
- TOKEN_WHERE = 374,
- TOKEN_WITH = 375,
- TOKEN_YEAR = 376,
- TOKEN_YEARMONTH = 377,
- TOKEN_EOF = 378,
- TOKEN_LEX_ERROR = 379
+ TOKEN_CURRENT = 298,
+ TOKEN_DATE = 299,
+ TOKEN_DATETIME = 300,
+ TOKEN_DAY = 301,
+ TOKEN_DECIMAL = 302,
+ TOKEN_DEFAULT = 303,
+ TOKEN_DELETE = 304,
+ TOKEN_DELIMITER = 305,
+ TOKEN_DESC = 306,
+ TOKEN_DISTINCT = 307,
+ TOKEN_DOUBLE = 308,
+ TOKEN_DROP = 309,
+ TOKEN_ELSE = 310,
+ TOKEN_END = 311,
+ TOKEN_ESCAPE_STRINGS = 312,
+ TOKEN_EXISTS = 313,
+ TOKEN_EXTRACT = 314,
+ TOKEN_FALSE = 315,
+ TOKEN_FIRST = 316,
+ TOKEN_FLOAT = 317,
+ TOKEN_FOLLOWING = 318,
+ TOKEN_FOR = 319,
+ TOKEN_FOREIGN = 320,
+ TOKEN_FROM = 321,
+ TOKEN_FULL = 322,
+ TOKEN_GROUP = 323,
+ TOKEN_HASH = 324,
+ TOKEN_HAVING = 325,
+ TOKEN_HOUR = 326,
+ TOKEN_IN = 327,
+ TOKEN_INDEX = 328,
+ TOKEN_INNER = 329,
+ TOKEN_INSERT = 330,
+ TOKEN_INTEGER = 331,
+ TOKEN_INTERVAL = 332,
+ TOKEN_INTO = 333,
+ TOKEN_JOIN = 334,
+ TOKEN_KEY = 335,
+ TOKEN_LAST = 336,
+ TOKEN_LEFT = 337,
+ TOKEN_LIMIT = 338,
+ TOKEN_LONG = 339,
+ TOKEN_MINUTE = 340,
+ TOKEN_MONTH = 341,
+ TOKEN_NULL = 342,
+ TOKEN_NULLS = 343,
+ TOKEN_OFF = 344,
+ TOKEN_ON = 345,
+ TOKEN_ORDER = 346,
+ TOKEN_OUTER = 347,
+ TOKEN_OVER = 348,
+ TOKEN_PARTITION = 349,
+ TOKEN_PARTITIONS = 350,
+ TOKEN_PERCENT = 351,
+ TOKEN_PRECEDING = 352,
+ TOKEN_PRIMARY = 353,
+ TOKEN_QUIT = 354,
+ TOKEN_RANGE = 355,
+ TOKEN_REAL = 356,
+ TOKEN_REFERENCES = 357,
+ TOKEN_RIGHT = 358,
+ TOKEN_ROW = 359,
+ TOKEN_ROW_DELIMITER = 360,
+ TOKEN_ROWS = 361,
+ TOKEN_SECOND = 362,
+ TOKEN_SELECT = 363,
+ TOKEN_SET = 364,
+ TOKEN_SMA = 365,
+ TOKEN_SMALLINT = 366,
+ TOKEN_SUBSTRING = 367,
+ TOKEN_TABLE = 368,
+ TOKEN_THEN = 369,
+ TOKEN_TIME = 370,
+ TOKEN_TIMESTAMP = 371,
+ TOKEN_TRUE = 372,
+ TOKEN_TUPLESAMPLE = 373,
+ TOKEN_UNBOUNDED = 374,
+ TOKEN_UNIQUE = 375,
+ TOKEN_UPDATE = 376,
+ TOKEN_USING = 377,
+ TOKEN_VALUES = 378,
+ TOKEN_VARCHAR = 379,
+ TOKEN_WHEN = 380,
+ TOKEN_WHERE = 381,
+ TOKEN_WINDOW = 382,
+ TOKEN_WITH = 383,
+ TOKEN_YEAR = 384,
+ TOKEN_YEARMONTH = 385,
+ TOKEN_EOF = 386,
+ TOKEN_LEX_ERROR = 387
};
#endif
@@ -175,7 +183,7 @@ extern int quickstep_yydebug;
union YYSTYPE
{
-#line 118 "../SqlParser.ypp" /* yacc.c:1915 */
+#line 119 "../SqlParser.ypp" /* yacc.c:1909 */
quickstep::ParseString *string_value_;
@@ -261,13 +269,19 @@ union YYSTYPE
quickstep::ParseSample *opt_sample_clause_;
+ quickstep::PtrList<quickstep::ParseWindow> *opt_window_clause_;
+ quickstep::ParseWindow *window_definition_;
+ quickstep::PtrList<quickstep::ParseExpression> *window_partition_by_list_;
+ quickstep::PtrList<quickstep::ParseOrderByItem> *window_order_by_list_;
+ quickstep::ParseFrameInfo *window_frame_info_;
+
quickstep::PtrList<quickstep::ParseOrderByItem> *order_commalist_;
quickstep::ParseOrderByItem *order_item_;
quickstep::PtrVector<quickstep::ParseSubqueryTableReference> *with_list_;
quickstep::ParseSubqueryTableReference *with_list_element_;
-#line 271 "SqlParser_gen.hpp" /* yacc.c:1915 */
+#line 285 "SqlParser_gen.hpp" /* yacc.c:1909 */
};
typedef union YYSTYPE YYSTYPE;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/tests/Select.test
----------------------------------------------------------------------
diff --git a/parser/tests/Select.test b/parser/tests/Select.test
index e70ee5c..79da7ee 100644
--- a/parser/tests/Select.test
+++ b/parser/tests/Select.test
@@ -1,5 +1,7 @@
# Copyright 2011-2015 Quickstep Technologies LLC.
# Copyright 2015 Pivotal Software, Inc.
+# Copyright 2016, Quickstep Research Group, Computer Sciences Department,
+# University of Wisconsin\u2014Madison.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -1709,3 +1711,121 @@ SelectStatement
| +-TableReference[table=bar]
+-from_clause=
+-TableReference[table=test]
+==
+
+SELECT avg(attr1) OVER w FROM test
+WINDOW w AS
+(PARTITION BY attr2, attr3
+ ORDER BY attr4
+ ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING)
+--
+SelectStatement
++-select_query=Select
+ +-select_clause=SelectList
+ | +-SelectListItem
+ | +-FunctionCall[name=avg,window_name=w]
+ | +-AttributeReference[attribute_name=attr1]
+ +-from_clause=
+ | +-TableReference[table=test]
+ +-window_list=
+ +-window[window_name=w]
+ +-frame_info=FrameInfo[frame_mode=row,num_preceding=3,num_following=3]
+ +-partition_by=
+ | +-AttributeReference[attribute_name=attr2]
+ | +-AttributeReference[attribute_name=attr3]
+ +-order_by=
+ +-OrderByItem[is_asc=true,nulls_first=false]
+ +-AttributeReference[attribute_name=attr4]
+==
+
+SELECT avg(attr1) OVER w FROM test
+WINDOW w AS
+(PARTITION BY attr2, attr3
+ ORDER BY attr4 DESC NULLS FIRST, attr5 ASC NULLS LAST
+ RANGE BETWEEN 3 PRECEDING AND CURRENT ROW)
+--
+SelectStatement
++-select_query=Select
+ +-select_clause=SelectList
+ | +-SelectListItem
+ | +-FunctionCall[name=avg,window_name=w]
+ | +-AttributeReference[attribute_name=attr1]
+ +-from_clause=
+ | +-TableReference[table=test]
+ +-window_list=
+ +-window[window_name=w]
+ +-frame_info=FrameInfo[frame_mode=range,num_preceding=3,num_following=0]
+ +-partition_by=
+ | +-AttributeReference[attribute_name=attr2]
+ | +-AttributeReference[attribute_name=attr3]
+ +-order_by=
+ +-OrderByItem[is_asc=false,nulls_first=true]
+ | +-AttributeReference[attribute_name=attr4]
+ +-OrderByItem[is_asc=true,nulls_first=false]
+ +-AttributeReference[attribute_name=attr5]
+==
+
+SELECT avg(attr1) OVER w1 AS avg1, sum(attr5) OVER w2 AS sum5 FROM test
+WINDOW w1 AS
+(PARTITION BY attr2, attr3
+ ORDER BY attr4
+ ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING)
+WINDOW w2 AS
+(PARTITION BY attr1
+ ORDER BY attr6
+ RANGE BETWEEN 2 PRECEDING AND CURRENT ROW)
+--
+SelectStatement
++-select_query=Select
+ +-select_clause=SelectList
+ | +-SelectListItem[alias=avg1]
+ | | +-FunctionCall[name=avg,window_name=w1]
+ | | +-AttributeReference[attribute_name=attr1]
+ | +-SelectListItem[alias=sum5]
+ | +-FunctionCall[name=sum,window_name=w2]
+ | +-AttributeReference[attribute_name=attr5]
+ +-from_clause=
+ | +-TableReference[table=test]
+ +-window_list=
+ +-window[window_name=w1]
+ | +-frame_info=FrameInfo[frame_mode=row,num_preceding=3,num_following=3]
+ | +-partition_by=
+ | | +-AttributeReference[attribute_name=attr2]
+ | | +-AttributeReference[attribute_name=attr3]
+ | +-order_by=
+ | +-OrderByItem[is_asc=true,nulls_first=false]
+ | +-AttributeReference[attribute_name=attr4]
+ +-window[window_name=w2]
+ +-frame_info=FrameInfo[frame_mode=range,num_preceding=2,num_following=0]
+ +-partition_by=
+ | +-AttributeReference[attribute_name=attr1]
+ +-order_by=
+ +-OrderByItem[is_asc=true,nulls_first=false]
+ +-AttributeReference[attribute_name=attr6]
+==
+
+SELECT avg(attr1) OVER
+(PARTITION BY attr2, attr3
+ ORDER BY attr4 DESC NULLS FIRST, attr5 ASC NULLS LAST
+ RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
+FROM test
+--
+SelectStatement
++-select_query=Select
+ +-select_clause=SelectList
+ | +-SelectListItem
+ | +-FunctionCall[name=avg]
+ | +-AttributeReference[attribute_name=attr1]
+ | +-window=window
+ | +-frame_info=FrameInfo[frame_mode=range,num_preceding=-1,
+ | | num_following=0]
+ | +-partition_by=
+ | | +-AttributeReference[attribute_name=attr2]
+ | | +-AttributeReference[attribute_name=attr3]
+ | +-order_by=
+ | +-OrderByItem[is_asc=false,nulls_first=true]
+ | | +-AttributeReference[attribute_name=attr4]
+ | +-OrderByItem[is_asc=true,nulls_first=false]
+ | +-AttributeReference[attribute_name=attr5]
+ +-from_clause=
+ +-TableReference[table=test]
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/query_optimizer/resolver/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/CMakeLists.txt b/query_optimizer/resolver/CMakeLists.txt
index 5959879..dc7eac0 100644
--- a/query_optimizer/resolver/CMakeLists.txt
+++ b/query_optimizer/resolver/CMakeLists.txt
@@ -62,6 +62,7 @@ target_link_libraries(quickstep_queryoptimizer_resolver_Resolver
quickstep_parser_ParseSubqueryExpression
quickstep_parser_ParseSubqueryTableReference
quickstep_parser_ParseTableReference
+ quickstep_parser_ParseWindow
quickstep_queryoptimizer_OptimizerContext
quickstep_queryoptimizer_Validator
quickstep_queryoptimizer_expressions_AggregateFunction
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/query_optimizer/resolver/Resolver.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/Resolver.cpp b/query_optimizer/resolver/Resolver.cpp
index 78985a0..ffc173a 100644
--- a/query_optimizer/resolver/Resolver.cpp
+++ b/query_optimizer/resolver/Resolver.cpp
@@ -58,6 +58,7 @@
#include "parser/ParseSubqueryExpression.hpp"
#include "parser/ParseSubqueryTableReference.hpp"
#include "parser/ParseTableReference.hpp"
+#include "parser/ParseWindow.hpp"
#include "query_optimizer/OptimizerContext.hpp"
#include "query_optimizer/Validator.hpp"
#include "query_optimizer/expressions/AggregateFunction.hpp"
@@ -2366,6 +2367,12 @@ E::ScalarPtr Resolver::resolveFunctionCall(
ExpressionResolutionInfo *expression_resolution_info) {
std::string function_name = ToLower(parse_function_call.name()->value());
+ // TODO(Shixuan): Add support for window aggregation function.
+ if (parse_function_call.isWindow()) {
+ THROW_SQL_ERROR_AT(&parse_function_call)
+ << "Window Aggregation Function is not supported currently";
+ }
+
// First check for the special case COUNT(*).
bool count_star = false;
if (parse_function_call.star() != nullptr) {
[14/18] incubator-quickstep git commit: Added Window Aggregation
Function in optimizer.
Posted by zu...@apache.org.
Added Window Aggregation Function in optimizer.
- The resolver could understand optional window clause w/ aggregation functions.
- Only one window aggregation function is allowed.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/714874ce
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/714874ce
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/714874ce
Branch: refs/heads/travis-grpc
Commit: 714874ce54e12972285a43f92784ef6954a8b6fd
Parents: d642891
Author: shixuan <sh...@wisc.edu>
Authored: Tue Jun 21 20:08:52 2016 +0000
Committer: Zuyu Zhang <zu...@apache.org>
Committed: Fri Jun 24 18:59:47 2016 -0700
----------------------------------------------------------------------
query_optimizer/expressions/CMakeLists.txt | 17 +-
query_optimizer/expressions/ExpressionType.hpp | 3 +-
query_optimizer/expressions/PatternMatcher.hpp | 3 +
.../expressions/WindowAggregateFunction.cpp | 193 ++++++++++++
.../expressions/WindowAggregateFunction.hpp | 246 +++++++++++++++
query_optimizer/logical/CMakeLists.txt | 18 +-
query_optimizer/logical/LogicalType.hpp | 3 +-
query_optimizer/logical/PatternMatcher.hpp | 2 +
query_optimizer/logical/WindowAggregate.cpp | 85 +++++
query_optimizer/logical/WindowAggregate.hpp | 123 ++++++++
query_optimizer/resolver/CMakeLists.txt | 2 +
query_optimizer/resolver/Resolver.cpp | 314 ++++++++++++++++++-
query_optimizer/resolver/Resolver.hpp | 66 +++-
query_optimizer/strategy/CMakeLists.txt | 3 +-
query_optimizer/strategy/OneToOne.cpp | 5 +
.../tests/logical_generator/Select.test | 162 ++++++++++
query_optimizer/tests/resolver/Select.test | 162 ++++++++++
17 files changed, 1387 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/expressions/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/expressions/CMakeLists.txt b/query_optimizer/expressions/CMakeLists.txt
index 6c40741..08d7df5 100644
--- a/query_optimizer/expressions/CMakeLists.txt
+++ b/query_optimizer/expressions/CMakeLists.txt
@@ -43,6 +43,7 @@ add_library(quickstep_queryoptimizer_expressions_SearchedCase SearchedCase.cpp S
add_library(quickstep_queryoptimizer_expressions_SimpleCase SimpleCase.cpp SimpleCase.hpp)
add_library(quickstep_queryoptimizer_expressions_SubqueryExpression SubqueryExpression.cpp SubqueryExpression.hpp)
add_library(quickstep_queryoptimizer_expressions_UnaryExpression UnaryExpression.cpp UnaryExpression.hpp)
+add_library(quickstep_queryoptimizer_expressions_WindowAggregateFunction WindowAggregateFunction.cpp WindowAggregateFunction.hpp)
# Link dependencies:
target_link_libraries(quickstep_queryoptimizer_expressions_AggregateFunction
@@ -301,6 +302,19 @@ target_link_libraries(quickstep_queryoptimizer_expressions_UnaryExpression
quickstep_types_operations_unaryoperations_UnaryOperation
quickstep_types_operations_unaryoperations_UnaryOperationID
quickstep_utility_Macros)
+target_link_libraries(quickstep_queryoptimizer_expressions_WindowAggregateFunction
+ glog
+ quickstep_expressions_aggregation_AggregateFunction
+ quickstep_queryoptimizer_OptimizerTree
+ quickstep_queryoptimizer_expressions_AttributeReference
+ quickstep_queryoptimizer_expressions_Expression
+ quickstep_queryoptimizer_expressions_ExpressionType
+ quickstep_queryoptimizer_expressions_PatternMatcher
+ quickstep_queryoptimizer_expressions_Scalar
+ quickstep_types_Type
+ quickstep_utility_Cast
+ quickstep_utility_Macros)
+
# Module all-in-one library:
add_library(quickstep_queryoptimizer_expressions ../../empty_src.cpp OptimizerExpressionsModule.hpp)
@@ -330,4 +344,5 @@ target_link_libraries(quickstep_queryoptimizer_expressions
quickstep_queryoptimizer_expressions_SearchedCase
quickstep_queryoptimizer_expressions_SimpleCase
quickstep_queryoptimizer_expressions_SubqueryExpression
- quickstep_queryoptimizer_expressions_UnaryExpression)
+ quickstep_queryoptimizer_expressions_UnaryExpression
+ quickstep_queryoptimizer_expressions_WindowAggregateFunction)
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/expressions/ExpressionType.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/expressions/ExpressionType.hpp b/query_optimizer/expressions/ExpressionType.hpp
index 23770e0..77e0874 100644
--- a/query_optimizer/expressions/ExpressionType.hpp
+++ b/query_optimizer/expressions/ExpressionType.hpp
@@ -49,7 +49,8 @@ enum class ExpressionType {
kSearchedCase,
kSimpleCase,
kSubqueryExpression,
- kUnaryExpression
+ kUnaryExpression,
+ kWindowAggregateFunction
};
/** @} */
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/expressions/PatternMatcher.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/expressions/PatternMatcher.hpp b/query_optimizer/expressions/PatternMatcher.hpp
index 87bc52a..2cc91d6 100644
--- a/query_optimizer/expressions/PatternMatcher.hpp
+++ b/query_optimizer/expressions/PatternMatcher.hpp
@@ -52,6 +52,7 @@ class Scalar;
class ScalarLiteral;
class Sum;
class UnaryExpression;
+class WindowAggregateFunction;
/** \addtogroup OptimizerExpressions
* @{
@@ -155,6 +156,8 @@ using SomeScalar = SomeExpressionNode<Scalar,
ExpressionType::kUnaryExpression>;
using SomeScalarLiteral = SomeExpressionNode<ScalarLiteral, ExpressionType::kScalarLiteral>;
using SomeUnaryExpression = SomeExpressionNode<UnaryExpression, ExpressionType::kUnaryExpression>;
+using SomeWindowAggregateFunction = SomeExpressionNode<WindowAggregateFunction,
+ ExpressionType::kWindowAggregateFunction>;
using SomeAggregateFunction = SomeExpressionNode<AggregateFunction,
ExpressionType::kAggregateFunction>;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/expressions/WindowAggregateFunction.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/expressions/WindowAggregateFunction.cpp b/query_optimizer/expressions/WindowAggregateFunction.cpp
new file mode 100644
index 0000000..7b1f304
--- /dev/null
+++ b/query_optimizer/expressions/WindowAggregateFunction.cpp
@@ -0,0 +1,193 @@
+/**
+ * Copyright 2015 Pivotal Software, Inc.
+ * Copyright 2016, Quickstep Research Group, Computer Sciences Department,
+ * University of Wisconsin\u2014Madison.
+ *
+ * Licensed 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.
+ **/
+
+#include "query_optimizer/expressions/WindowAggregateFunction.hpp"
+
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "expressions/aggregation/AggregateFunction.hpp"
+#include "query_optimizer/expressions/AttributeReference.hpp"
+#include "query_optimizer/expressions/Expression.hpp"
+#include "query_optimizer/expressions/PatternMatcher.hpp"
+#include "query_optimizer/expressions/Scalar.hpp"
+#include "types/Type.hpp"
+#include "utility/Cast.hpp"
+
+#include "glog/logging.h"
+
+namespace quickstep {
+namespace optimizer {
+namespace expressions {
+
+bool WindowAggregateFunction::isNullable() const {
+ std::vector<const Type*> argument_types;
+ for (const ScalarPtr &argument : arguments_) {
+ argument_types.emplace_back(&argument->getValueType());
+ }
+
+ const Type *return_type = window_aggregate_.resultTypeForArgumentTypes(argument_types);
+ DCHECK(return_type != nullptr);
+ return return_type->isNullable();
+}
+
+const Type& WindowAggregateFunction::getValueType() const {
+ std::vector<const Type*> argument_types;
+ for (const ScalarPtr &argument : arguments_) {
+ argument_types.emplace_back(&argument->getValueType());
+ }
+
+ const Type *return_type = window_aggregate_.resultTypeForArgumentTypes(argument_types);
+ DCHECK(return_type != nullptr);
+ return *return_type;
+}
+
+WindowAggregateFunctionPtr WindowAggregateFunction::Create(
+ const ::quickstep::AggregateFunction &window_aggregate,
+ const std::vector<ScalarPtr> &arguments,
+ const WindowInfo &window_info,
+ const std::string &window_name,
+ const bool is_distinct) {
+#ifdef QUICKSTEP_DEBUG
+ std::vector<const Type*> argument_types;
+ for (const ScalarPtr &argument : arguments) {
+ argument_types.emplace_back(&argument->getValueType());
+ }
+ DCHECK(window_aggregate.canApplyToTypes(argument_types));
+#endif // QUICKSTEP_DEBUG
+
+ return WindowAggregateFunctionPtr(
+ new WindowAggregateFunction(window_aggregate, arguments, window_info, window_name, is_distinct));
+}
+
+ExpressionPtr WindowAggregateFunction::copyWithNewChildren(
+ const std::vector<ExpressionPtr> &new_children) const {
+ std::vector<ScalarPtr> new_arguments;
+ for (const ExpressionPtr &expression_ptr : new_children) {
+ ScalarPtr expr_as_scalar;
+ CHECK(SomeScalar::MatchesWithConditionalCast(expression_ptr, &expr_as_scalar))
+ << expression_ptr->toString();
+ new_arguments.emplace_back(std::move(expr_as_scalar));
+ }
+
+ return WindowAggregateFunctionPtr(
+ new WindowAggregateFunction(window_aggregate_,
+ new_arguments,
+ window_info_,
+ window_name_,
+ is_distinct_));
+}
+
+std::vector<AttributeReferencePtr> WindowAggregateFunction::getReferencedAttributes() const {
+ std::vector<AttributeReferencePtr> referenced_attributes;
+ for (const ScalarPtr &argument : arguments_) {
+ const std::vector<AttributeReferencePtr> referenced_attributes_in_argument =
+ argument->getReferencedAttributes();
+ referenced_attributes.insert(referenced_attributes.end(),
+ referenced_attributes_in_argument.begin(),
+ referenced_attributes_in_argument.end());
+ }
+
+ referenced_attributes.insert(referenced_attributes.end(),
+ window_info_.partition_by_attributes.begin(),
+ window_info_.partition_by_attributes.end());
+
+ referenced_attributes.insert(referenced_attributes.end(),
+ window_info_.order_by_attributes.begin(),
+ window_info_.order_by_attributes.end());
+
+ return referenced_attributes;
+}
+
+void WindowAggregateFunction::getFieldStringItems(
+ std::vector<std::string> *inline_field_names,
+ std::vector<std::string> *inline_field_values,
+ std::vector<std::string> *non_container_child_field_names,
+ std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields,
+ std::vector<std::string> *container_child_field_names,
+ std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const {
+ inline_field_names->push_back("function");
+ inline_field_values->push_back(window_aggregate_.getName());
+
+ container_child_field_names->push_back("arguments");
+ container_child_fields->emplace_back(CastSharedPtrVector<OptimizerTreeBase>(arguments_));
+
+ inline_field_names->push_back("window_name");
+ inline_field_values->push_back(window_name_);
+
+ container_child_field_names->push_back("partition_by");
+ container_child_fields->emplace_back(
+ CastSharedPtrVector<OptimizerTreeBase>(window_info_.partition_by_attributes));
+
+ container_child_field_names->push_back("order_by");
+ container_child_fields->emplace_back(
+ CastSharedPtrVector<OptimizerTreeBase>(window_info_.order_by_attributes));
+
+ inline_field_names->push_back("is_ascending");
+ std::string ascending_list("[");
+ for (const bool is_ascending : window_info_.order_by_directions) {
+ if (is_ascending) {
+ ascending_list.append("true,");
+ } else {
+ ascending_list.append("false,");
+ }
+ }
+ if (!window_info_.order_by_directions.empty()) {
+ ascending_list.pop_back();
+ }
+ ascending_list.append("]");
+ inline_field_values->push_back(ascending_list);
+
+ inline_field_names->push_back("nulls_first");
+ std::string nulls_first_flags("[");
+ for (const bool nulls_first_flag : window_info_.nulls_first) {
+ if (nulls_first_flag) {
+ nulls_first_flags.append("true,");
+ } else {
+ nulls_first_flags.append("false,");
+ }
+ }
+ if (!window_info_.nulls_first.empty()) {
+ nulls_first_flags.pop_back();
+ }
+ nulls_first_flags.append("]");
+ inline_field_values->push_back(nulls_first_flags);
+
+ if (window_info_.frame_info != nullptr) {
+ const WindowFrameInfo *frame_info = window_info_.frame_info;
+
+ inline_field_names->push_back("frame_mode");
+ inline_field_values->push_back(frame_info->is_row ? "row" : "range");
+
+ inline_field_names->push_back("num_preceding");
+ inline_field_values->push_back(std::to_string(frame_info->num_preceding));
+
+ inline_field_names->push_back("num_following");
+ inline_field_values->push_back(std::to_string(frame_info->num_following));
+ }
+
+ if (is_distinct_) {
+ inline_field_names->push_back("is_distinct");
+ inline_field_values->push_back("true");
+ }
+}
+
+} // namespace expressions
+} // namespace optimizer
+} // namespace quickstep
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/expressions/WindowAggregateFunction.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/expressions/WindowAggregateFunction.hpp b/query_optimizer/expressions/WindowAggregateFunction.hpp
new file mode 100644
index 0000000..0bee28f
--- /dev/null
+++ b/query_optimizer/expressions/WindowAggregateFunction.hpp
@@ -0,0 +1,246 @@
+/**
+ * Copyright 2011-2015 Quickstep Technologies LLC.
+ * Copyright 2015 Pivotal Software, Inc.
+ * Copyright 2016, Quickstep Research Group, Computer Sciences Department,
+ * University of Wisconsin\u2014Madison.
+ *
+ * Licensed 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.
+ **/
+
+#ifndef QUICKSTEP_QUERY_OPTIMIZER_EXPRESSIONS_WINDOW_AGGREGATE_FUNCTION_HPP_
+#define QUICKSTEP_QUERY_OPTIMIZER_EXPRESSIONS_WINDOW_AGGREGATE_FUNCTION_HPP_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "query_optimizer/OptimizerTree.hpp"
+#include "query_optimizer/expressions/AttributeReference.hpp"
+#include "query_optimizer/expressions/Expression.hpp"
+#include "query_optimizer/expressions/ExpressionType.hpp"
+#include "query_optimizer/expressions/Scalar.hpp"
+#include "utility/Macros.hpp"
+
+namespace quickstep {
+
+class AggregateFunction;
+class Type;
+
+namespace optimizer {
+namespace expressions {
+
+/** \addtogroup OptimizerExpressions
+ * @{
+ */
+
+struct WindowFrameInfo {
+ /**
+ * @brief Cosntructor.
+ *
+ * @param is_row_in True if this window frame is defined by ROWS, false if
+ * defined by RANGE.
+ * @param num_preceding_in The number of preceding tuples the window frame
+ * will cover, -1 means UNBOUNDED.
+ * @param num_following_in The number of following tuples the window frame
+ * will cover, -1 means UNBOUNDED.
+ **/
+ WindowFrameInfo(const bool is_row_in,
+ const int num_preceding_in,
+ const int num_following_in)
+ : is_row(is_row_in),
+ num_preceding(num_preceding_in),
+ num_following(num_following_in) {}
+
+ const bool is_row;
+ const int num_preceding;
+ const int num_following;
+};
+
+struct WindowInfo {
+ /**
+ * @brief Constructor.
+ *
+ * @param partition_by_attributes_in The partition keys for the window.
+ * @param order_by_attributes_in The order keys for the window.
+ * @param order_by_directions_in The order direction for order key.
+ * @param nulls_first_in The nulls' position for order key.
+ * @param frame_info_in The window frame information for the window. Null
+ * means there is no explicit window frame definition.
+ **/
+ WindowInfo(const std::vector<AttributeReferencePtr> &partition_by_attributes_in,
+ const std::vector<AttributeReferencePtr> &order_by_attributes_in,
+ const std::vector<bool> &order_by_directions_in,
+ const std::vector<bool> &nulls_first_in,
+ const WindowFrameInfo *frame_info_in)
+ : partition_by_attributes(partition_by_attributes_in),
+ order_by_attributes(order_by_attributes_in),
+ order_by_directions(order_by_directions_in),
+ nulls_first(nulls_first_in),
+ frame_info(frame_info_in) {}
+
+ const std::vector<AttributeReferencePtr> partition_by_attributes;
+ const std::vector<AttributeReferencePtr> order_by_attributes;
+ const std::vector<bool> order_by_directions;
+ const std::vector<bool> nulls_first;
+ const WindowFrameInfo *frame_info;
+};
+
+class WindowAggregateFunction;
+typedef std::shared_ptr<const WindowAggregateFunction> WindowAggregateFunctionPtr;
+
+/**
+ * @brief Represents a window aggregate function and its arguments in the
+ * optimizer. This class wraps some of the functionality from
+ * quickstep::AggregateFunction and represents a particular instance
+ * of an aggregate during query optimization.
+ **/
+class WindowAggregateFunction : public Expression {
+ public:
+ /**
+ * @brief Destructor.
+ */
+ ~WindowAggregateFunction() override {}
+
+ ExpressionType getExpressionType() const override {
+ return ExpressionType::kWindowAggregateFunction;
+ }
+
+ std::string getName() const override {
+ return "WindowAggregateFunction";
+ }
+
+ const Type& getValueType() const override;
+
+ bool isConstant() const override {
+ // Window aggregate function is never considered as a constant expression.
+ return false;
+ }
+
+ ExpressionPtr copyWithNewChildren(
+ const std::vector<ExpressionPtr> &new_children) const override;
+
+ std::vector<AttributeReferencePtr> getReferencedAttributes() const override;
+
+ /**
+ * @return Whether the type of the return value is nullable.
+ **/
+ bool isNullable() const;
+
+ /**
+ * @return The WindowAggregateFunction singleton (from the expression system)
+ * for this node.
+ **/
+ inline const ::quickstep::AggregateFunction& window_aggregate() const {
+ return window_aggregate_;
+ }
+
+ /**
+ * @return The list of scalar arguments to this aggregate.
+ **/
+ inline const std::vector<ScalarPtr>& arguments() const {
+ return arguments_;
+ }
+
+ /**
+ * @return The window info of this window aggregate function.
+ **/
+ inline const WindowInfo window_info() const {
+ return window_info_;
+ }
+
+ /**
+ * @return The name of the window.
+ **/
+ inline const std::string window_name() const {
+ return window_name_;
+ }
+
+ /**
+ * @return Whether this is a DISTINCT aggregation.
+ **/
+ inline bool is_distinct() const {
+ return is_distinct_;
+ }
+
+ /**
+ * @brief Create a new WindowAggregateFunction by directly defined window.
+ *
+ * @warning It is an error to call this with arguments that the given
+ * aggregate can not apply to.
+ *
+ * @param aggregate The underlying WindowAggregateFunction from the expression
+ * system.
+ * @param arguments A list of arguments to the window aggregate function.
+ * @param window_info The window info of the window aggregate function.
+ * @param is_distinct Whether this is a DISTINCT aggregation.
+ * @return A new AggregateFunctionPtr.
+ **/
+ static WindowAggregateFunctionPtr Create(const ::quickstep::AggregateFunction &window_aggregate,
+ const std::vector<ScalarPtr> &arguments,
+ const WindowInfo &window_info,
+ const std::string &window_name,
+ const bool is_distinct);
+
+ protected:
+ void getFieldStringItems(
+ std::vector<std::string> *inline_field_names,
+ std::vector<std::string> *inline_field_values,
+ std::vector<std::string> *non_container_child_field_names,
+ std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields,
+ std::vector<std::string> *container_child_field_names,
+ std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override;
+
+ private:
+ /**
+ * @brief Constructor.
+ *
+ * @param window_aggregate The actual AggregateFunction to use.
+ * @param arguments A list of arguments to the window aggregate function.
+ * @param window_info The window info of the window aggregate function.
+ * @param is_distinct Indicates whether this is a DISTINCT aggregation.
+ */
+ WindowAggregateFunction(const ::quickstep::AggregateFunction &window_aggregate,
+ const std::vector<ScalarPtr> &arguments,
+ const WindowInfo &window_info,
+ const std::string &window_name,
+ const bool is_distinct)
+ : window_aggregate_(window_aggregate),
+ arguments_(arguments),
+ window_info_(window_info),
+ window_name_(window_name),
+ is_distinct_(is_distinct) {
+ for (const ScalarPtr &child : arguments_) {
+ addChild(child);
+ }
+ }
+
+ // TODO(Shixuan): Currently this class uses AggregationFunction as
+ // window_aggregate_. If it really needs to be seperated from the
+ // AggregationFunction, a new class for WindowAggregationFunction should be
+ // created as quickstep::WindowAggregateFunction.
+ const ::quickstep::AggregateFunction &window_aggregate_;
+ std::vector<ScalarPtr> arguments_;
+ const WindowInfo window_info_;
+ const std::string window_name_;
+ const bool is_distinct_;
+
+ DISALLOW_COPY_AND_ASSIGN(WindowAggregateFunction);
+};
+
+/** @} */
+
+} // namespace expressions
+} // namespace optimizer
+} // namespace quickstep
+
+#endif // QUICKSTEP_QUERY_OPTIMIZER_EXPRESSIONS_WINDOW_AGGREGATE_FUNCTION_HPP_
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/logical/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/logical/CMakeLists.txt b/query_optimizer/logical/CMakeLists.txt
index 61c6234..b787c60 100644
--- a/query_optimizer/logical/CMakeLists.txt
+++ b/query_optimizer/logical/CMakeLists.txt
@@ -43,6 +43,7 @@ add_library(quickstep_queryoptimizer_logical_TableReference TableReference.cpp T
add_library(quickstep_queryoptimizer_logical_TableGenerator ../../empty_src.cpp TableGenerator.hpp)
add_library(quickstep_queryoptimizer_logical_TopLevelPlan TopLevelPlan.cpp TopLevelPlan.hpp)
add_library(quickstep_queryoptimizer_logical_UpdateTable UpdateTable.cpp UpdateTable.hpp)
+add_library(quickstep_queryoptimizer_logical_WindowAggregate WindowAggregate.cpp WindowAggregate.hpp)
# Link dependencies:
target_link_libraries(quickstep_queryoptimizer_logical_Aggregate
@@ -259,6 +260,20 @@ target_link_libraries(quickstep_queryoptimizer_logical_UpdateTable
quickstep_queryoptimizer_logical_LogicalType
quickstep_utility_Cast
quickstep_utility_Macros)
+target_link_libraries(quickstep_queryoptimizer_logical_WindowAggregate
+ glog
+ quickstep_queryoptimizer_expressions_Alias
+ quickstep_queryoptimizer_expressions_AttributeReference
+ quickstep_queryoptimizer_expressions_Expression
+ quickstep_queryoptimizer_expressions_ExpressionUtil
+ quickstep_queryoptimizer_expressions_NamedExpression
+ quickstep_queryoptimizer_expressions_PatternMatcher
+ quickstep_queryoptimizer_logical_Logical
+ quickstep_queryoptimizer_logical_LogicalType
+ quickstep_queryoptimizer_OptimizerTree
+ quickstep_utility_Cast
+ quickstep_utility_Macros)
+
# Module all-in-one library:
add_library(quickstep_queryoptimizer_logical ../../empty_src.cpp OptimizerLogicalModule.hpp)
@@ -287,4 +302,5 @@ target_link_libraries(quickstep_queryoptimizer_logical
quickstep_queryoptimizer_logical_TableGenerator
quickstep_queryoptimizer_logical_TableReference
quickstep_queryoptimizer_logical_TopLevelPlan
- quickstep_queryoptimizer_logical_UpdateTable)
+ quickstep_queryoptimizer_logical_UpdateTable
+ quickstep_queryoptimizer_logical_WindowAggregate)
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/logical/LogicalType.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/logical/LogicalType.hpp b/query_optimizer/logical/LogicalType.hpp
index 1b9366e..c82fb47 100644
--- a/query_optimizer/logical/LogicalType.hpp
+++ b/query_optimizer/logical/LogicalType.hpp
@@ -49,7 +49,8 @@ enum class LogicalType {
kTableGenerator,
kTableReference,
kTopLevelPlan,
- kUpdateTable
+ kUpdateTable,
+ kWindowAggregate
};
/** @} */
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/logical/PatternMatcher.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/logical/PatternMatcher.hpp b/query_optimizer/logical/PatternMatcher.hpp
index ff8f3d0..de8609e 100644
--- a/query_optimizer/logical/PatternMatcher.hpp
+++ b/query_optimizer/logical/PatternMatcher.hpp
@@ -45,6 +45,7 @@ class Sort;
class TableReference;
class TopLevelPlan;
class UpdateTable;
+class WindowAggregate;
/** \addtogroup OptimizerLogical
* @{
@@ -130,6 +131,7 @@ using SomeSort = SomeLogicalNode<Sort, LogicalType::kSort>;
using SomeTableReference = SomeLogicalNode<TableReference, LogicalType::kTableReference>;
using SomeTopLevelPlan = SomeLogicalNode<TopLevelPlan, LogicalType::kTopLevelPlan>;
using SomeUpdateTable = SomeLogicalNode<UpdateTable, LogicalType::kUpdateTable>;
+using SomeWindowAggregate = SomeLogicalNode<WindowAggregate, LogicalType::kWindowAggregate>;
/** @} */
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/logical/WindowAggregate.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/logical/WindowAggregate.cpp b/query_optimizer/logical/WindowAggregate.cpp
new file mode 100644
index 0000000..0d747b6
--- /dev/null
+++ b/query_optimizer/logical/WindowAggregate.cpp
@@ -0,0 +1,85 @@
+/**
+ * Copyright 2011-2015 Quickstep Technologies LLC.
+ * Copyright 2015 Pivotal Software, Inc.
+ * Copyright 2016, Quickstep Research Group, Computer Sciences Department,
+ * University of Wisconsin\u2014Madison.
+ *
+ * Licensed 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.
+ **/
+
+#include "query_optimizer/logical/WindowAggregate.hpp"
+
+#include <string>
+#include <vector>
+
+#include "query_optimizer/OptimizerTree.hpp"
+#include "query_optimizer/expressions/Alias.hpp"
+#include "query_optimizer/expressions/AttributeReference.hpp"
+#include "query_optimizer/expressions/ExpressionUtil.hpp"
+#include "query_optimizer/expressions/NamedExpression.hpp"
+#include "query_optimizer/expressions/PatternMatcher.hpp"
+#include "utility/Cast.hpp"
+
+#include "glog/logging.h"
+
+namespace quickstep {
+namespace optimizer {
+namespace logical {
+
+namespace E = ::quickstep::optimizer::expressions;
+
+LogicalPtr WindowAggregate::copyWithNewChildren(
+ const std::vector<LogicalPtr> &new_children) const {
+ DCHECK_EQ(getNumChildren(), new_children.size());
+ return Create(new_children[0], window_aggregate_expression_);
+}
+
+std::vector<E::AttributeReferencePtr> WindowAggregate::getOutputAttributes() const {
+ std::vector<E::AttributeReferencePtr> output_attributes(input_->getOutputAttributes());
+ output_attributes.push_back(E::ToRef(window_aggregate_expression_));
+ return output_attributes;
+}
+
+std::vector<E::AttributeReferencePtr> WindowAggregate::getReferencedAttributes() const {
+ return window_aggregate_expression_->getReferencedAttributes();
+}
+
+LogicalPtr WindowAggregate::copyWithNewInputExpressions(
+ const std::vector<E::ExpressionPtr> &input_expressions) const {
+ // Only one expression needed
+ DCHECK_EQ(1u, input_expressions.size());
+
+ E::AliasPtr window_aggregate_expression;
+ E::SomeAlias::MatchesWithConditionalCast(input_expressions[0],
+ &window_aggregate_expression);
+
+ return Create(input_, window_aggregate_expression);
+}
+
+void WindowAggregate::getFieldStringItems(
+ std::vector<std::string> *inline_field_names,
+ std::vector<std::string> *inline_field_values,
+ std::vector<std::string> *non_container_child_field_names,
+ std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields,
+ std::vector<std::string> *container_child_field_names,
+ std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const {
+ non_container_child_field_names->push_back("input");
+ non_container_child_fields->push_back(input_);
+
+ non_container_child_field_names->push_back("window_aggregate_expression");
+ non_container_child_fields->push_back(window_aggregate_expression_);
+}
+
+} // namespace logical
+} // namespace optimizer
+} // namespace quickstep
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/logical/WindowAggregate.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/logical/WindowAggregate.hpp b/query_optimizer/logical/WindowAggregate.hpp
new file mode 100644
index 0000000..dcd9a7d
--- /dev/null
+++ b/query_optimizer/logical/WindowAggregate.hpp
@@ -0,0 +1,123 @@
+/**
+ * Copyright 2011-2015 Quickstep Technologies LLC.
+ * Copyright 2015 Pivotal Software, Inc.
+ * Copyright 2016, Quickstep Research Group, Computer Sciences Department,
+ * University of Wisconsin\u2014Madison.
+ *
+ * Licensed 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.
+ **/
+
+#ifndef QUICKSTEP_QUERY_OPTIMIZER_LOGICAL_WINDOW_AGGREGATE_HPP_
+#define QUICKSTEP_QUERY_OPTIMIZER_LOGICAL_WINDOW_AGGREGATE_HPP_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "query_optimizer/OptimizerTree.hpp"
+#include "query_optimizer/expressions/Alias.hpp"
+#include "query_optimizer/expressions/AttributeReference.hpp"
+#include "query_optimizer/expressions/Expression.hpp"
+#include "query_optimizer/expressions/NamedExpression.hpp"
+#include "query_optimizer/logical/Logical.hpp"
+#include "query_optimizer/logical/LogicalType.hpp"
+#include "utility/Macros.hpp"
+
+namespace quickstep {
+namespace optimizer {
+namespace logical {
+
+/** \addtogroup OptimizerLogical
+ * @{
+ */
+
+class WindowAggregate;
+typedef std::shared_ptr<const WindowAggregate> WindowAggregatePtr;
+
+/**
+ * @brief Window aggregate operator that computes window aggregate expressions.
+ */
+class WindowAggregate : public Logical {
+ public:
+ LogicalType getLogicalType() const override {
+ return LogicalType::kWindowAggregate;
+ }
+
+ std::string getName() const override { return "WindowAggregate"; }
+
+ /**
+ * @return The input logical node.
+ */
+ const LogicalPtr& input() const { return input_; }
+
+ /**
+ * @return PARTITION BY expressions.
+ */
+ const expressions::AliasPtr window_aggregate_expression() const {
+ return window_aggregate_expression_;
+ }
+
+ LogicalPtr copyWithNewChildren(
+ const std::vector<LogicalPtr> &new_children) const override;
+
+ LogicalPtr copyWithNewInputExpressions(
+ const std::vector<expressions::ExpressionPtr> &input_expressions) const override;
+
+ std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override;
+
+ std::vector<expressions::AttributeReferencePtr> getReferencedAttributes() const override;
+
+ /**
+ * @brief Creates an Aggregate logical node.
+ *
+ * @param input The input node.
+ * @param window_aggregate_expression The window aggregate expression.
+ * @return An immutable WindowAggregate node.
+ */
+ static WindowAggregatePtr Create(
+ const LogicalPtr &input,
+ const expressions::AliasPtr &window_aggregate_expression) {
+ return WindowAggregatePtr(new WindowAggregate(input, window_aggregate_expression));
+ }
+
+ protected:
+ void getFieldStringItems(
+ std::vector<std::string> *inline_field_names,
+ std::vector<std::string> *inline_field_values,
+ std::vector<std::string> *non_container_child_field_names,
+ std::vector<OptimizerTreeBaseNodePtr> *non_container_child_fields,
+ std::vector<std::string> *container_child_field_names,
+ std::vector<std::vector<OptimizerTreeBaseNodePtr>> *container_child_fields) const override;
+
+ private:
+ WindowAggregate(const LogicalPtr &input,
+ const expressions::AliasPtr &window_aggregate_expression)
+ : input_(input),
+ window_aggregate_expression_(window_aggregate_expression) {
+ addChild(input_);
+ addInputExpression(window_aggregate_expression_);
+ }
+
+ const LogicalPtr input_;
+ const expressions::AliasPtr window_aggregate_expression_;
+
+ DISALLOW_COPY_AND_ASSIGN(WindowAggregate);
+};
+
+/** @} */
+
+} // namespace logical
+} // namespace optimizer
+} // namespace quickstep
+
+#endif // QUICKSTEP_QUERY_OPTIMIZER_LOGICAL_WINDOW_AGGREGATE_HPP_
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/resolver/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/CMakeLists.txt b/query_optimizer/resolver/CMakeLists.txt
index dc7eac0..fb75767 100644
--- a/query_optimizer/resolver/CMakeLists.txt
+++ b/query_optimizer/resolver/CMakeLists.txt
@@ -89,6 +89,7 @@ target_link_libraries(quickstep_queryoptimizer_resolver_Resolver
quickstep_queryoptimizer_expressions_SimpleCase
quickstep_queryoptimizer_expressions_SubqueryExpression
quickstep_queryoptimizer_expressions_UnaryExpression
+ quickstep_queryoptimizer_expressions_WindowAggregateFunction
quickstep_queryoptimizer_logical_Aggregate
quickstep_queryoptimizer_logical_CopyFrom
quickstep_queryoptimizer_logical_CreateIndex
@@ -109,6 +110,7 @@ target_link_libraries(quickstep_queryoptimizer_resolver_Resolver
quickstep_queryoptimizer_logical_TableReference
quickstep_queryoptimizer_logical_TopLevelPlan
quickstep_queryoptimizer_logical_UpdateTable
+ quickstep_queryoptimizer_logical_WindowAggregate
quickstep_queryoptimizer_resolver_NameResolver
quickstep_storage_StorageBlockLayout_proto
quickstep_storage_StorageConstants
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/resolver/Resolver.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/Resolver.cpp b/query_optimizer/resolver/Resolver.cpp
index ffc173a..f880ce7 100644
--- a/query_optimizer/resolver/Resolver.cpp
+++ b/query_optimizer/resolver/Resolver.cpp
@@ -85,6 +85,7 @@
#include "query_optimizer/expressions/SimpleCase.hpp"
#include "query_optimizer/expressions/SubqueryExpression.hpp"
#include "query_optimizer/expressions/UnaryExpression.hpp"
+#include "query_optimizer/expressions/WindowAggregateFunction.hpp"
#include "query_optimizer/logical/Aggregate.hpp"
#include "query_optimizer/logical/CopyFrom.hpp"
#include "query_optimizer/logical/CreateIndex.hpp"
@@ -104,6 +105,7 @@
#include "query_optimizer/logical/TableReference.hpp"
#include "query_optimizer/logical/TopLevelPlan.hpp"
#include "query_optimizer/logical/UpdateTable.hpp"
+#include "query_optimizer/logical/WindowAggregate.hpp"
#include "query_optimizer/resolver/NameResolver.hpp"
#include "storage/StorageBlockLayout.pb.h"
#include "storage/StorageConstants.hpp"
@@ -164,9 +166,11 @@ struct Resolver::ExpressionResolutionInfo {
*/
ExpressionResolutionInfo(const NameResolver &name_resolver_in,
QueryAggregationInfo *query_aggregation_info_in,
+ WindowAggregationInfo *window_aggregation_info_in,
SelectListInfo *select_list_info_in)
: name_resolver(name_resolver_in),
query_aggregation_info(query_aggregation_info_in),
+ window_aggregation_info(window_aggregation_info_in),
select_list_info(select_list_info_in) {}
/**
@@ -180,6 +184,7 @@ struct Resolver::ExpressionResolutionInfo {
: name_resolver(parent.name_resolver),
not_allow_aggregate_here(parent.not_allow_aggregate_here),
query_aggregation_info(parent.query_aggregation_info),
+ window_aggregation_info(parent.window_aggregation_info),
select_list_info(parent.select_list_info) {}
/**
@@ -187,16 +192,29 @@ struct Resolver::ExpressionResolutionInfo {
*/
bool hasAggregate() const { return parse_aggregate_expression != nullptr; }
+ /**
+ * @return True if the expression contains a window aggregate function.
+ **/
+ bool hasWindowAggregate() const {
+ return parse_window_aggregate_expression != nullptr;
+ }
+
const NameResolver &name_resolver;
// Empty if aggregations are allowed.
const std::string not_allow_aggregate_here;
// Can be NULL if aggregations are not allowed.
QueryAggregationInfo *query_aggregation_info = nullptr;
+
+ // Alias expressions that wraps window aggregate functions.
+ WindowAggregationInfo *window_aggregation_info = nullptr;
+
// Can be NULL if alias references to SELECT-list expressions are not allowed.
SelectListInfo *select_list_info = nullptr;
// The first aggregate in the expression.
const ParseTreeNode *parse_aggregate_expression = nullptr;
+ // The first window aggregate in the expression.
+ const ParseTreeNode *parse_window_aggregate_expression = nullptr;
};
struct Resolver::QueryAggregationInfo {
@@ -209,6 +227,26 @@ struct Resolver::QueryAggregationInfo {
std::vector<E::AliasPtr> aggregate_expressions;
};
+struct Resolver::WindowPlan {
+ WindowPlan(const E::WindowInfo &window_info_in,
+ const L::LogicalPtr &logical_plan_in)
+ : window_info(window_info_in),
+ logical_plan(logical_plan_in) {}
+
+ const E::WindowInfo window_info;
+ const L::LogicalPtr logical_plan;
+};
+
+struct Resolver::WindowAggregationInfo {
+ explicit WindowAggregationInfo(const std::unordered_map<std::string, WindowPlan> &window_map_in)
+ : window_map(window_map_in) {}
+
+ // Whether the current query block has a GROUP BY.
+ const std::unordered_map<std::string, WindowPlan> window_map;
+ // Alias expressions that wraps window aggregate functions.
+ std::vector<E::AliasPtr> window_aggregate_expressions;
+};
+
struct Resolver::SelectListInfo {
public:
/**
@@ -973,8 +1011,36 @@ L::LogicalPtr Resolver::resolveSelect(
logical_plan, resolvePredicate(parse_predicate, &expr_resolution_info));
}
+ // Resolve WINDOW clause.
+ std::unordered_map<std::string, WindowPlan> sorted_window_map;
+ if (select_query.window_list() != nullptr) {
+ if (select_query.window_list()->size() > 1) {
+ THROW_SQL_ERROR_AT(&(*select_query.window_list()->begin()))
+ << "Currently we don't support multiple window aggregation functions";
+ }
+
+ // Sort the table according to the window.
+ for (const ParseWindow &window : *select_query.window_list()) {
+ // Check for duplicate definition.
+ // Currently this is useless since we only support one window.
+ if (sorted_window_map.find(window.name()->value()) != sorted_window_map.end()) {
+ THROW_SQL_ERROR_AT(window.name())
+ << "Duplicate definition of window " << window.name()->value();
+ }
+
+ E::WindowInfo resolved_window = resolveWindow(window, *name_resolver);
+ L::LogicalPtr sorted_logical_plan = resolveSortInWindow(logical_plan,
+ resolved_window);
+
+ WindowPlan window_plan(resolved_window, sorted_logical_plan);
+
+ sorted_window_map.emplace(window.name()->value(), window_plan);
+ }
+ }
+
QueryAggregationInfo query_aggregation_info(
(select_query.group_by() != nullptr));
+ WindowAggregationInfo window_aggregation_info(sorted_window_map);
// Resolve SELECT-list clause.
std::vector<E::NamedExpressionPtr> select_list_expressions;
@@ -984,6 +1050,7 @@ L::LogicalPtr Resolver::resolveSelect(
type_hints,
*name_resolver,
&query_aggregation_info,
+ &window_aggregation_info,
&select_list_expressions,
&has_aggregate_per_expression);
DCHECK_EQ(has_aggregate_per_expression.size(),
@@ -992,6 +1059,29 @@ L::LogicalPtr Resolver::resolveSelect(
SelectListInfo select_list_info(select_list_expressions,
has_aggregate_per_expression);
+ // Create window aggregate node if needed
+ for (const E::AliasPtr &alias : window_aggregation_info.window_aggregate_expressions) {
+ E::WindowAggregateFunctionPtr window_aggregate_function;
+ if (!E::SomeWindowAggregateFunction::MatchesWithConditionalCast(alias->expression(),
+ &window_aggregate_function)) {
+ THROW_SQL_ERROR()
+ << "Unexpected expression in window aggregation function";
+ }
+ L::LogicalPtr sorted_logical_plan;
+
+ // Get the sorted logical plan
+ const std::string window_name = window_aggregate_function->window_name();
+ if (!window_name.empty()) {
+ sorted_logical_plan = sorted_window_map.at(window_name).logical_plan;
+ } else {
+ sorted_logical_plan = resolveSortInWindow(logical_plan,
+ window_aggregate_function->window_info());
+ }
+
+ logical_plan = L::WindowAggregate::Create(sorted_logical_plan,
+ alias);
+ }
+
// Resolve GROUP BY.
std::vector<E::NamedExpressionPtr> group_by_expressions;
if (select_query.group_by() != nullptr) {
@@ -1039,7 +1129,7 @@ L::LogicalPtr Resolver::resolveSelect(
E::PredicatePtr having_predicate;
if (select_query.having() != nullptr) {
ExpressionResolutionInfo expr_resolution_info(
- *name_resolver, &query_aggregation_info, &select_list_info);
+ *name_resolver, &query_aggregation_info, &window_aggregation_info, &select_list_info);
having_predicate = resolvePredicate(
*select_query.having()->having_predicate(), &expr_resolution_info);
}
@@ -1053,7 +1143,7 @@ L::LogicalPtr Resolver::resolveSelect(
for (const ParseOrderByItem &order_by_item :
*select_query.order_by()->order_by_items()) {
ExpressionResolutionInfo expr_resolution_info(
- *name_resolver, &query_aggregation_info, &select_list_info);
+ *name_resolver, &query_aggregation_info, &window_aggregation_info, &select_list_info);
E::ScalarPtr order_by_scalar = resolveExpression(
*order_by_item.ordering_expression(),
nullptr, // No Type hint.
@@ -1528,6 +1618,89 @@ L::LogicalPtr Resolver::RenameOutputColumns(
return L::Project::Create(logical_plan, project_expressions);
}
+E::WindowInfo Resolver::resolveWindow(const ParseWindow &parse_window,
+ const NameResolver &name_resolver) {
+ std::vector<E::AttributeReferencePtr> partition_by_attributes;
+ std::vector<E::AttributeReferencePtr> order_by_attributes;
+ std::vector<bool> order_by_directions;
+ std::vector<bool> nulls_first;
+ E::WindowFrameInfo *frame_info = nullptr;
+
+ // Resolve PARTITION BY
+ if (parse_window.partition_by_expressions() != nullptr) {
+ for (const ParseExpression &unresolved_partition_by_expression :
+ *parse_window.partition_by_expressions()) {
+ ExpressionResolutionInfo expr_resolution_info(
+ name_resolver,
+ "PARTITION BY clause" /* clause_name */,
+ nullptr /* select_list_info */);
+ E::ScalarPtr partition_by_scalar = resolveExpression(
+ unresolved_partition_by_expression,
+ nullptr, // No Type hint.
+ &expr_resolution_info);
+
+ if (partition_by_scalar->isConstant()) {
+ THROW_SQL_ERROR_AT(&unresolved_partition_by_expression)
+ << "Constant expression not allowed in PARTITION BY";
+ }
+
+ E::AttributeReferencePtr partition_by_attribute;
+ if (!E::SomeAttributeReference::MatchesWithConditionalCast(partition_by_scalar,
+ &partition_by_attribute)) {
+ THROW_SQL_ERROR_AT(&unresolved_partition_by_expression)
+ << "Only attribute name allowed in PARTITION BY in window definition";
+ }
+
+ partition_by_attributes.push_back(partition_by_attribute);
+ }
+ }
+
+ // Resolve ORDER BY
+ if (parse_window.order_by_expressions() != nullptr) {
+ for (const ParseOrderByItem &order_by_item :
+ *parse_window.order_by_expressions()) {
+ ExpressionResolutionInfo expr_resolution_info(
+ name_resolver,
+ "ORDER BY clause" /* clause name */,
+ nullptr /* select_list_info */);
+ E::ScalarPtr order_by_scalar = resolveExpression(
+ *order_by_item.ordering_expression(),
+ nullptr, // No Type hint.
+ &expr_resolution_info);
+
+ if (order_by_scalar->isConstant()) {
+ THROW_SQL_ERROR_AT(&order_by_item)
+ << "Constant expression not allowed in ORDER BY";
+ }
+
+ E::AttributeReferencePtr order_by_attribute;
+ if (!E::SomeAttributeReference::MatchesWithConditionalCast(order_by_scalar,
+ &order_by_attribute)) {
+ THROW_SQL_ERROR_AT(&order_by_item)
+ << "Only attribute name allowed in ORDER BY in window definition";
+ }
+
+ order_by_attributes.push_back(order_by_attribute);
+ order_by_directions.push_back(order_by_item.is_ascending());
+ nulls_first.push_back(order_by_item.nulls_first());
+ }
+ }
+
+ // Resolve window frame
+ if (parse_window.frame_info() != nullptr) {
+ const quickstep::ParseFrameInfo *parse_frame_info = parse_window.frame_info();
+ frame_info = new E::WindowFrameInfo(parse_frame_info->is_row,
+ parse_frame_info->num_preceding,
+ parse_frame_info->num_following);
+ }
+
+ return E::WindowInfo(partition_by_attributes,
+ order_by_attributes,
+ order_by_directions,
+ nulls_first,
+ frame_info);
+}
+
const CatalogRelation* Resolver::resolveRelationName(
const ParseString *relation_name) {
const CatalogRelation *relation =
@@ -1684,13 +1857,45 @@ L::LogicalPtr Resolver::resolveJoinedTableReference(
THROW_SQL_ERROR_AT(&joined_table_reference) << "Full outer join is not supported yet";
}
+L::LogicalPtr Resolver::resolveSortInWindow(
+ const L::LogicalPtr &logical_plan,
+ const E::WindowInfo &window_info) {
+ // Sort the table by (p_key, o_key)
+ std::vector<E::AttributeReferencePtr> sort_attributes(window_info.partition_by_attributes);
+ sort_attributes.insert(sort_attributes.end(),
+ window_info.order_by_attributes.begin(),
+ window_info.order_by_attributes.end());
+
+ std::vector<bool> sort_directions(
+ window_info.partition_by_attributes.size(), true);
+ sort_directions.insert(sort_directions.end(),
+ window_info.order_by_directions.begin(),
+ window_info.order_by_directions.end());
+
+ std::vector<bool> sort_nulls_first(
+ window_info.partition_by_attributes.size(), false);
+ sort_nulls_first.insert(sort_nulls_first.end(),
+ window_info.nulls_first.begin(),
+ window_info.nulls_first.end());
+
+ L::LogicalPtr sorted_logical_plan =
+ L::Sort::Create(logical_plan,
+ sort_attributes,
+ sort_directions,
+ sort_nulls_first,
+ -1 /* limit */);
+
+ return sorted_logical_plan;
+}
+
void Resolver::resolveSelectClause(
const ParseSelectionClause &parse_selection,
const std::string &select_name,
const std::vector<const Type*> *type_hints,
const NameResolver &name_resolver,
QueryAggregationInfo *query_aggregation_info,
- std::vector<expressions::NamedExpressionPtr> *project_expressions,
+ WindowAggregationInfo *window_aggregation_info,
+ std::vector<E::NamedExpressionPtr> *project_expressions,
std::vector<bool> *has_aggregate_per_expression) {
project_expressions->clear();
switch (parse_selection.getSelectionType()) {
@@ -1720,6 +1925,7 @@ void Resolver::resolveSelectClause(
ExpressionResolutionInfo expr_resolution_info(
name_resolver,
query_aggregation_info,
+ window_aggregation_info,
nullptr /* select_list_info */);
const E::ScalarPtr project_scalar =
resolveExpression(*parse_project_expression,
@@ -2362,16 +2568,12 @@ E::ScalarPtr Resolver::resolveSimpleCaseExpression(
// TODO(chasseur): For now this only handles resolving aggregate functions. In
// the future it should be extended to resolve scalar functions as well.
+// TODO(Shixuan): This will handle resolving window aggregation function as well,
+// which could be extended to general scalar functions.
E::ScalarPtr Resolver::resolveFunctionCall(
const ParseFunctionCall &parse_function_call,
ExpressionResolutionInfo *expression_resolution_info) {
- std::string function_name = ToLower(parse_function_call.name()->value());
-
- // TODO(Shixuan): Add support for window aggregation function.
- if (parse_function_call.isWindow()) {
- THROW_SQL_ERROR_AT(&parse_function_call)
- << "Window Aggregation Function is not supported currently";
- }
+ const std::string function_name = ToLower(parse_function_call.name()->value());
// First check for the special case COUNT(*).
bool count_star = false;
@@ -2386,8 +2588,9 @@ E::ScalarPtr Resolver::resolveFunctionCall(
std::vector<E::ScalarPtr> resolved_arguments;
const PtrList<ParseExpression> *unresolved_arguments =
parse_function_call.arguments();
- // The first aggregate function in the arguments.
+ // The first aggregate function and window aggregate function in the arguments.
const ParseTreeNode *first_aggregate_function = nullptr;
+ const ParseTreeNode *first_window_aggregate_function = nullptr;
if (unresolved_arguments != nullptr) {
for (const ParseExpression &unresolved_argument : *unresolved_arguments) {
ExpressionResolutionInfo expr_resolution_info(
@@ -2401,6 +2604,13 @@ E::ScalarPtr Resolver::resolveFunctionCall(
first_aggregate_function =
expr_resolution_info.parse_aggregate_expression;
}
+
+ if (expr_resolution_info.hasWindowAggregate() &&
+ first_window_aggregate_function == nullptr &&
+ parse_function_call.isWindow()) {
+ first_window_aggregate_function =
+ expr_resolution_info.parse_window_aggregate_expression;
+ }
}
}
@@ -2431,6 +2641,15 @@ E::ScalarPtr Resolver::resolveFunctionCall(
<< "Aggregation of Aggregates are not allowed";
}
+ // TODO(Shixuan): We currently don't support nested window aggregation since
+ // TPC-DS doesn't have that. However, it is essentially a nested scalar
+ // function, which should be supported in the future version of Quickstep.
+ if (parse_function_call.isWindow() &&
+ first_window_aggregate_function != nullptr) {
+ THROW_SQL_ERROR_AT(first_window_aggregate_function)
+ << "Window aggregation of window aggregates is not allowed";
+ }
+
// Make sure a naked COUNT() with no arguments wasn't specified.
if ((aggregate->getAggregationID() == AggregationID::kCount)
&& (resolved_arguments.empty())
@@ -2452,6 +2671,13 @@ E::ScalarPtr Resolver::resolveFunctionCall(
<< " can not apply to the given argument(s).";
}
+ if (parse_function_call.isWindow()) {
+ return resolveWindowAggregateFunction(parse_function_call,
+ expression_resolution_info,
+ aggregate,
+ resolved_arguments);
+ }
+
// Create the optimizer representation of the resolved aggregate and an alias
// for it to appear in the output relation.
const E::AggregateFunctionPtr aggregate_function
@@ -2471,6 +2697,62 @@ E::ScalarPtr Resolver::resolveFunctionCall(
return E::ToRef(aggregate_alias);
}
+E::ScalarPtr Resolver::resolveWindowAggregateFunction(
+ const ParseFunctionCall &parse_function_call,
+ ExpressionResolutionInfo *expression_resolution_info,
+ const ::quickstep::AggregateFunction *window_aggregate,
+ const std::vector<E::ScalarPtr> &resolved_arguments) {
+ // A window aggregate function might be defined OVER a window name or a window.
+ E::WindowAggregateFunctionPtr window_aggregate_function;
+ if (parse_function_call.window_name() != nullptr) {
+ std::unordered_map<std::string, WindowPlan> window_map
+ = expression_resolution_info->window_aggregation_info->window_map;
+ std::string window_name = parse_function_call.window_name()->value();
+ std::unordered_map<std::string, WindowPlan>::const_iterator map_it
+ = window_map.find(window_name);
+
+ if (map_it == window_map.end()) {
+ THROW_SQL_ERROR_AT(parse_function_call.window_name())
+ << "Undefined window " << window_name;
+ }
+
+ window_aggregate_function =
+ E::WindowAggregateFunction::Create(*window_aggregate,
+ resolved_arguments,
+ map_it->second.window_info,
+ parse_function_call.window_name()->value(),
+ parse_function_call.is_distinct());
+ } else {
+ E::WindowInfo resolved_window = resolveWindow(*parse_function_call.window(),
+ expression_resolution_info->name_resolver);
+
+ window_aggregate_function =
+ E::WindowAggregateFunction::Create(*window_aggregate,
+ resolved_arguments,
+ resolved_window,
+ "" /* window name */,
+ parse_function_call.is_distinct());
+ }
+
+ const std::string internal_alias = GenerateWindowAggregateAttributeAlias(
+ expression_resolution_info->query_aggregation_info->aggregate_expressions.size());
+ const E::AliasPtr aggregate_alias = E::Alias::Create(context_->nextExprId(),
+ window_aggregate_function,
+ "" /* attribute_name */,
+ internal_alias,
+ "$window_aggregate" /* relation_name */);
+
+ if (!expression_resolution_info->window_aggregation_info->window_aggregate_expressions.empty()) {
+ THROW_SQL_ERROR_AT(&parse_function_call)
+ << "Currently we only support single window aggregate in the query";
+ }
+
+ expression_resolution_info->window_aggregation_info
+ ->window_aggregate_expressions.emplace_back(aggregate_alias);
+ expression_resolution_info->parse_window_aggregate_expression = &parse_function_call;
+ return E::ToRef(aggregate_alias);
+}
+
std::vector<E::PredicatePtr> Resolver::resolvePredicates(
const PtrList<ParsePredicate> &parse_predicates,
ExpressionResolutionInfo *expression_resolution_info) {
@@ -2794,16 +3076,20 @@ void Resolver::rewriteIfOrdinalReference(
}
}
+std::string Resolver::GenerateWindowAggregateAttributeAlias(int index) {
+ return "$window_aggregate" + std::to_string(index);
+}
+
std::string Resolver::GenerateAggregateAttributeAlias(int index) {
- return std::string("$aggregate").append(std::to_string(index));
+ return "$aggregate" + std::to_string(index);
}
std::string Resolver::GenerateGroupingAttributeAlias(int index) {
- return std::string("$groupby").append(std::to_string(index));
+ return "$groupby" + std::to_string(index);
}
std::string Resolver::GenerateOrderingAttributeAlias(int index) {
- return std::string("$orderby").append(std::to_string(index));
+ return "$orderby" + std::to_string(index);
}
} // namespace resolver
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/resolver/Resolver.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/Resolver.hpp b/query_optimizer/resolver/Resolver.hpp
index a84c61c..f4024e9 100644
--- a/query_optimizer/resolver/Resolver.hpp
+++ b/query_optimizer/resolver/Resolver.hpp
@@ -24,11 +24,13 @@
#include <vector>
#include "query_optimizer/expressions/AggregateFunction.hpp"
+#include "query_optimizer/expressions/Alias.hpp"
#include "query_optimizer/expressions/ExprId.hpp"
#include "query_optimizer/expressions/NamedExpression.hpp"
#include "query_optimizer/expressions/Predicate.hpp"
#include "query_optimizer/expressions/SubqueryExpression.hpp"
#include "query_optimizer/expressions/Scalar.hpp"
+#include "query_optimizer/expressions/WindowAggregateFunction.hpp"
#include "query_optimizer/logical/Logical.hpp"
#include "utility/Macros.hpp"
#include "utility/PtrVector.hpp"
@@ -65,6 +67,7 @@ class ParseSubqueryExpression;
class ParseTableReference;
class ParseTableReferenceSignature;
class ParseTreeNode;
+class ParseWindow;
template <class T>
class PtrList;
class StorageBlockLayoutDescription;
@@ -123,6 +126,17 @@ class Resolver {
struct QueryAggregationInfo;
/**
+ * @brief Query-scoped info that contains window aggregate expressions and a
+ * window map.
+ **/
+ struct WindowAggregationInfo;
+
+ /**
+ * @brief A wrapper for resolved window and the corresponding sorted plan.
+ **/
+ struct WindowPlan;
+
+ /**
* @brief Query-scoped info that contains select-list expressions
* and whether an expression is referenced by an
* ordinal or alias reference.
@@ -271,6 +285,8 @@ class Resolver {
* @param name_resolver NameResolver to resolve the relation/attribute names.
* @param query_aggregation_info Passed down to each expression to collects
* aggregate expressions.
+ * @param window_aggregate_expressions Passed down to each expressions to
+ * collects window aggregate expressions.
* @param project_expressions Converted SELECT-list expressions.
* @param has_aggregate_per_expression For each SELECT-list expression,
* indicates whether it contains
@@ -282,6 +298,7 @@ class Resolver {
const std::vector<const Type*> *type_hints,
const NameResolver &name_resolver,
QueryAggregationInfo *query_aggregation_info,
+ WindowAggregationInfo *window_aggregation_info,
std::vector<expressions::NamedExpressionPtr> *project_expressions,
std::vector<bool> *has_aggregate_per_expression);
@@ -359,6 +376,17 @@ class Resolver {
const ParseTableReferenceSignature &table_signature);
/**
+ * @brief Sort the input table in (p_key, o_key) order specified by the window.
+ *
+ * @param logical_plan The input logical node.
+ * @param window_info The window that the input table has to be sorted accordingly.
+ * @return A logical plan that sorts the table according to window_info.
+ **/
+ logical::LogicalPtr resolveSortInWindow(
+ const logical::LogicalPtr &logical_plan,
+ const expressions::WindowInfo &window_info);
+
+ /**
* @brief Resolves a parse expression and converts it to a scalar expression
* in the query optimizer. A non-scalar parse expression is resolved
* to an AttributeReference to another optimizer expression.
@@ -412,7 +440,8 @@ class Resolver {
* @brief Resolves a function call. For a non-scalar function, the returned
* expression is an AttributeReference to the actual resolved expression.
*
- * @note This currently only handles resolving aggregate functions.
+ * @note This currently only handles resolving aggregate functions and window
+ * aggregate functions.
*
* @param parse_function_call The function call to be resolved.
* @param expression_resolution_info Resolution info that contains the name
@@ -425,6 +454,23 @@ class Resolver {
ExpressionResolutionInfo *expression_resolution_info);
/**
+ * @brief Resolves a window aggregate function.
+ *
+ * @param parse_function_call The function call to be resolved.
+ * @param expression_resolution_info Resolution info that contains the name
+ * resolver and info to be updated after
+ * resolution.
+ * @param aggregate The aggregate function.
+ * @param resolved_arguments The resolved arguments.
+ * @return An expression in the query optimizer.
+ */
+ expressions::ScalarPtr resolveWindowAggregateFunction(
+ const ParseFunctionCall &parse_function_call,
+ ExpressionResolutionInfo *expression_resolution_info,
+ const ::quickstep::AggregateFunction *aggregate,
+ const std::vector<expressions::ScalarPtr> &resolved_arguments);
+
+ /**
* @brief Resolves a parse Predicate and converts it to a predicate in the
* query optimizer.
*
@@ -469,6 +515,15 @@ class Resolver {
const bool has_single_column);
/**
+ * @brief Resolves a window definition.
+ *
+ * @param parse_window The parsed window definition.
+ * @param name_resolver The resolver to resolve names.
+ **/
+ expressions::WindowInfo resolveWindow(const ParseWindow &parse_window,
+ const NameResolver &name_resolver);
+
+ /**
* @brief Resolves a relation name to a pointer to the corresponding
* CatalogRelation with the name.
*
@@ -501,6 +556,15 @@ class Resolver {
static std::string GenerateAggregateAttributeAlias(int index);
/**
+ * @brief Generates an internal alias for a window aggregate attribute.
+ *
+ * @param index The index of the window aggregate attribute used for
+ * generating the name.
+ * @return A string for the name.
+ */
+ static std::string GenerateWindowAggregateAttributeAlias(int index);
+
+ /**
* @brief Generates an internal alias for a grouping attribute.
*
* @param index The index of the grouping attribute used for generating the
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/strategy/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/query_optimizer/strategy/CMakeLists.txt b/query_optimizer/strategy/CMakeLists.txt
index 74f5a4b..84e151e 100644
--- a/query_optimizer/strategy/CMakeLists.txt
+++ b/query_optimizer/strategy/CMakeLists.txt
@@ -105,7 +105,8 @@ target_link_libraries(quickstep_queryoptimizer_strategy_OneToOne
quickstep_queryoptimizer_physical_TopLevelPlan
quickstep_queryoptimizer_physical_UpdateTable
quickstep_queryoptimizer_strategy_Strategy
- quickstep_utility_Macros)
+ quickstep_utility_Macros
+ quickstep_utility_SqlError)
target_link_libraries(quickstep_queryoptimizer_strategy_Selection
glog
quickstep_queryoptimizer_LogicalToPhysicalMapper
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/strategy/OneToOne.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/strategy/OneToOne.cpp b/query_optimizer/strategy/OneToOne.cpp
index 7f59151..f49a25c 100644
--- a/query_optimizer/strategy/OneToOne.cpp
+++ b/query_optimizer/strategy/OneToOne.cpp
@@ -55,6 +55,7 @@
#include "query_optimizer/physical/TableReference.hpp"
#include "query_optimizer/physical/TopLevelPlan.hpp"
#include "query_optimizer/physical/UpdateTable.hpp"
+#include "utility/SqlError.hpp"
namespace quickstep {
namespace optimizer {
@@ -208,6 +209,10 @@ bool OneToOne::generatePlan(const L::LogicalPtr &logical_input,
update_table->predicate());
return true;
}
+ case L::LogicalType::kWindowAggregate: {
+ THROW_SQL_ERROR()
+ << "Window aggregate function is not supported currently :(";
+ }
default:
return false;
}
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/tests/logical_generator/Select.test
----------------------------------------------------------------------
diff --git a/query_optimizer/tests/logical_generator/Select.test b/query_optimizer/tests/logical_generator/Select.test
index 3c152e8..e0003bf 100644
--- a/query_optimizer/tests/logical_generator/Select.test
+++ b/query_optimizer/tests/logical_generator/Select.test
@@ -1354,3 +1354,165 @@ TopLevelPlan
+-output_attributes=
+-AttributeReference[id=5,name=x,relation=,type=Int]
+-AttributeReference[id=6,name=y,relation=,type=Int]
+==
+
+# Window Aggregate Function Test.
+SELECT avg(int_col) OVER w FROM test
+WINDOW w AS
+(PARTITION BY char_col
+ ORDER BY long_col DESC NULLS LAST
+ ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW);
+--
+TopLevelPlan
++-plan=Project
+| +-input=WindowAggregate
+| | +-input=Sort[is_ascending=[true,false],nulls_first=[false,false]]
+| | | +-input=TableReference[relation_name=Test,relation_alias=test]
+| | | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | | | +-AttributeReference[id=2,name=float_col,relation=test,type=Float]
+| | | | +-AttributeReference[id=3,name=double_col,relation=test,type=Double NULL]
+| | | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | | +-AttributeReference[id=5,name=vchar_col,relation=test,
+| | | | type=VarChar(20) NULL]
+| | | +-sort_expressions=
+| | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | +-window_aggregate_expression=Alias[id=6,name=,alias=$window_aggregate0,
+| | relation=$window_aggregate,type=Double NULL]
+| | +-WindowAggregateFunction[function=AVG,window_name=w,is_ascending=[false],
+| | nulls_first=[false],frame_mode=row,num_preceding=-1,num_following=0]
+| | +-arguments=
+| | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | +-partition_by=
+| | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | +-order_by=
+| | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| +-project_list=
+| +-Alias[id=6,name=,alias=avg(int_col),relation=,type=Double NULL]
+| +-AttributeReference[id=6,name=,alias=$window_aggregate0,
+| relation=$window_aggregate,type=Double NULL]
++-output_attributes=
+ +-AttributeReference[id=6,name=,alias=avg(int_col),relation=,type=Double NULL]
+==
+
+SELECT int_col, sum(float_col) OVER
+(PARTITION BY vchar_col, long_col
+ ORDER BY double_col DESC NULLS LAST, int_col ASC NULLS FIRST
+ RANGE BETWEEN 3 PRECEDING AND 3 FOLLOWING)
+FROM test;
+--
+TopLevelPlan
++-plan=Project
+| +-input=WindowAggregate
+| | +-input=Sort[is_ascending=[true,true,false,true],
+| | | nulls_first=[false,false,false,true]]
+| | | +-input=TableReference[relation_name=Test,relation_alias=test]
+| | | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | | | +-AttributeReference[id=2,name=float_col,relation=test,type=Float]
+| | | | +-AttributeReference[id=3,name=double_col,relation=test,type=Double NULL]
+| | | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | | +-AttributeReference[id=5,name=vchar_col,relation=test,
+| | | | type=VarChar(20) NULL]
+| | | +-sort_expressions=
+| | | +-AttributeReference[id=5,name=vchar_col,relation=test,
+| | | | type=VarChar(20) NULL]
+| | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | | +-AttributeReference[id=3,name=double_col,relation=test,type=Double NULL]
+| | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | +-window_aggregate_expression=Alias[id=6,name=,alias=$window_aggregate0,
+| | relation=$window_aggregate,type=Double NULL]
+| | +-WindowAggregateFunction[function=SUM,window_name=,
+| | is_ascending=[false,true],nulls_first=[false,true],frame_mode=range,
+| | num_preceding=3,num_following=3]
+| | +-arguments=
+| | | +-AttributeReference[id=2,name=float_col,relation=test,type=Float]
+| | +-partition_by=
+| | | +-AttributeReference[id=5,name=vchar_col,relation=test,
+| | | | type=VarChar(20) NULL]
+| | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | +-order_by=
+| | +-AttributeReference[id=3,name=double_col,relation=test,
+| | | type=Double NULL]
+| | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| +-project_list=
+| +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| +-Alias[id=6,name=,alias=sum(float_col),relation=,type=Double NULL]
+| +-AttributeReference[id=6,name=,alias=$window_aggregate0,
+| relation=$window_aggregate,type=Double NULL]
++-output_attributes=
+ +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+ +-AttributeReference[id=6,name=,alias=sum(float_col),relation=,
+ type=Double NULL]
+==
+
+SELECT sum(avg(int_col) OVER w) FROM test
+WINDOW w AS
+(PARTITION BY char_col
+ ORDER BY long_col
+ ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW);
+--
+TopLevelPlan
++-plan=Project
+| +-input=Aggregate
+| | +-input=WindowAggregate
+| | | +-input=Sort[is_ascending=[true,true],nulls_first=[false,false]]
+| | | | +-input=TableReference[relation_name=Test,relation_alias=test]
+| | | | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | | | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | | | | +-AttributeReference[id=2,name=float_col,relation=test,type=Float]
+| | | | | +-AttributeReference[id=3,name=double_col,relation=test,
+| | | | | | type=Double NULL]
+| | | | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | | | +-AttributeReference[id=5,name=vchar_col,relation=test,
+| | | | | type=VarChar(20) NULL]
+| | | | +-sort_expressions=
+| | | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | | +-window_aggregate_expression=Alias[id=6,name=,alias=$window_aggregate0,
+| | | relation=$window_aggregate,type=Double NULL]
+| | | +-WindowAggregateFunction[function=AVG,window_name=w,
+| | | is_ascending=[true],nulls_first=[false],frame_mode=row,
+| | | num_preceding=-1,num_following=0]
+| | | +-arguments=
+| | | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | | +-partition_by=
+| | | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | +-order_by=
+| | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | +-grouping_expressions=
+| | | +-[]
+| | +-aggregate_expressions=
+| | +-Alias[id=7,name=,alias=$aggregate0,relation=$aggregate,type=Double NULL]
+| | +-AggregateFunction[function=SUM]
+| | +-AttributeReference[id=6,name=,alias=$window_aggregate0,
+| | relation=$window_aggregate,type=Double NULL]
+| +-project_list=
+| +-Alias[id=7,name=,alias=sum(avg(int_col)),relation=,type=Double NULL]
+| +-AttributeReference[id=7,name=,alias=$aggregate0,relation=$aggregate,
+| type=Double NULL]
++-output_attributes=
+ +-AttributeReference[id=7,name=,alias=sum(avg(int_col)),relation=,
+ type=Double NULL]
+==
+
+SELECT int_col, sum(float_col) OVER w1 FROM test
+WINDOW w2 AS
+(PARTITION BY vchar_col, long_col
+ ORDER BY double_col DESC NULLS LAST, int_col ASC NULLS FIRST
+ RANGE BETWEEN 3 PRECEDING AND 3 FOLLOWING);
+--
+ERROR: Undefined window w1 (1 : 37)
+SELECT int_col, sum(float_col) OVER w1 FROM test
+ ^
+==
+
+SELECT sum(avg(int_col)) OVER w FROM test
+WINDOW w AS
+(PARTITION BY double_col
+ ORDER BY char_col)
+--
+ERROR: Aggregation of Aggregates are not allowed (1 : 12)
+SELECT sum(avg(int_col)) OVER w FROM test
+ ^
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/714874ce/query_optimizer/tests/resolver/Select.test
----------------------------------------------------------------------
diff --git a/query_optimizer/tests/resolver/Select.test b/query_optimizer/tests/resolver/Select.test
index 141bfa0..89ab84d 100644
--- a/query_optimizer/tests/resolver/Select.test
+++ b/query_optimizer/tests/resolver/Select.test
@@ -3126,3 +3126,165 @@ FROM test;
ERROR: The substring length must be greater than 0 (1 : 8)
SELECT SUBSTRING(char_col FROM 1 FOR ...
^
+==
+
+# Window Aggregate Function Test.
+SELECT avg(int_col) OVER w FROM test
+WINDOW w AS
+(PARTITION BY char_col
+ ORDER BY long_col DESC NULLS LAST
+ ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW);
+--
+TopLevelPlan
++-plan=Project
+| +-input=WindowAggregate
+| | +-input=Sort[is_ascending=[true,false],nulls_first=[false,false]]
+| | | +-input=TableReference[relation_name=Test,relation_alias=test]
+| | | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | | | +-AttributeReference[id=2,name=float_col,relation=test,type=Float]
+| | | | +-AttributeReference[id=3,name=double_col,relation=test,type=Double NULL]
+| | | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | | +-AttributeReference[id=5,name=vchar_col,relation=test,
+| | | | type=VarChar(20) NULL]
+| | | +-sort_expressions=
+| | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | +-window_aggregate_expression=Alias[id=6,name=,alias=$window_aggregate0,
+| | relation=$window_aggregate,type=Double NULL]
+| | +-WindowAggregateFunction[function=AVG,window_name=w,is_ascending=[false],
+| | nulls_first=[false],frame_mode=row,num_preceding=-1,num_following=0]
+| | +-arguments=
+| | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | +-partition_by=
+| | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | +-order_by=
+| | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| +-project_list=
+| +-Alias[id=6,name=,alias=avg(int_col),relation=,type=Double NULL]
+| +-AttributeReference[id=6,name=,alias=$window_aggregate0,
+| relation=$window_aggregate,type=Double NULL]
++-output_attributes=
+ +-AttributeReference[id=6,name=,alias=avg(int_col),relation=,type=Double NULL]
+==
+
+SELECT int_col, sum(float_col) OVER
+(PARTITION BY vchar_col, long_col
+ ORDER BY double_col DESC NULLS LAST, int_col ASC NULLS FIRST
+ RANGE BETWEEN 3 PRECEDING AND 3 FOLLOWING)
+FROM test;
+--
+TopLevelPlan
++-plan=Project
+| +-input=WindowAggregate
+| | +-input=Sort[is_ascending=[true,true,false,true],
+| | | nulls_first=[false,false,false,true]]
+| | | +-input=TableReference[relation_name=Test,relation_alias=test]
+| | | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | | | +-AttributeReference[id=2,name=float_col,relation=test,type=Float]
+| | | | +-AttributeReference[id=3,name=double_col,relation=test,type=Double NULL]
+| | | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | | +-AttributeReference[id=5,name=vchar_col,relation=test,
+| | | | type=VarChar(20) NULL]
+| | | +-sort_expressions=
+| | | +-AttributeReference[id=5,name=vchar_col,relation=test,
+| | | | type=VarChar(20) NULL]
+| | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | | +-AttributeReference[id=3,name=double_col,relation=test,type=Double NULL]
+| | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | +-window_aggregate_expression=Alias[id=6,name=,alias=$window_aggregate0,
+| | relation=$window_aggregate,type=Double NULL]
+| | +-WindowAggregateFunction[function=SUM,window_name=,
+| | is_ascending=[false,true],nulls_first=[false,true],frame_mode=range,
+| | num_preceding=3,num_following=3]
+| | +-arguments=
+| | | +-AttributeReference[id=2,name=float_col,relation=test,type=Float]
+| | +-partition_by=
+| | | +-AttributeReference[id=5,name=vchar_col,relation=test,
+| | | | type=VarChar(20) NULL]
+| | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | +-order_by=
+| | +-AttributeReference[id=3,name=double_col,relation=test,
+| | | type=Double NULL]
+| | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| +-project_list=
+| +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| +-Alias[id=6,name=,alias=sum(float_col),relation=,type=Double NULL]
+| +-AttributeReference[id=6,name=,alias=$window_aggregate0,
+| relation=$window_aggregate,type=Double NULL]
++-output_attributes=
+ +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+ +-AttributeReference[id=6,name=,alias=sum(float_col),relation=,
+ type=Double NULL]
+==
+
+SELECT sum(avg(int_col) OVER w) FROM test
+WINDOW w AS
+(PARTITION BY char_col
+ ORDER BY long_col
+ ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW);
+--
+TopLevelPlan
++-plan=Project
+| +-input=Aggregate
+| | +-input=WindowAggregate
+| | | +-input=Sort[is_ascending=[true,true],nulls_first=[false,false]]
+| | | | +-input=TableReference[relation_name=Test,relation_alias=test]
+| | | | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | | | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | | | | +-AttributeReference[id=2,name=float_col,relation=test,type=Float]
+| | | | | +-AttributeReference[id=3,name=double_col,relation=test,
+| | | | | | type=Double NULL]
+| | | | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | | | +-AttributeReference[id=5,name=vchar_col,relation=test,
+| | | | | type=VarChar(20) NULL]
+| | | | +-sort_expressions=
+| | | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | | +-window_aggregate_expression=Alias[id=6,name=,alias=$window_aggregate0,
+| | | relation=$window_aggregate,type=Double NULL]
+| | | +-WindowAggregateFunction[function=AVG,window_name=w,
+| | | is_ascending=[true],nulls_first=[false],frame_mode=row,
+| | | num_preceding=-1,num_following=0]
+| | | +-arguments=
+| | | | +-AttributeReference[id=0,name=int_col,relation=test,type=Int NULL]
+| | | +-partition_by=
+| | | | +-AttributeReference[id=4,name=char_col,relation=test,type=Char(20)]
+| | | +-order_by=
+| | | +-AttributeReference[id=1,name=long_col,relation=test,type=Long]
+| | +-grouping_expressions=
+| | | +-[]
+| | +-aggregate_expressions=
+| | +-Alias[id=7,name=,alias=$aggregate0,relation=$aggregate,type=Double NULL]
+| | +-AggregateFunction[function=SUM]
+| | +-AttributeReference[id=6,name=,alias=$window_aggregate0,
+| | relation=$window_aggregate,type=Double NULL]
+| +-project_list=
+| +-Alias[id=7,name=,alias=sum(avg(int_col)),relation=,type=Double NULL]
+| +-AttributeReference[id=7,name=,alias=$aggregate0,relation=$aggregate,
+| type=Double NULL]
++-output_attributes=
+ +-AttributeReference[id=7,name=,alias=sum(avg(int_col)),relation=,
+ type=Double NULL]
+==
+
+SELECT int_col, sum(float_col) OVER w1 FROM test
+WINDOW w2 AS
+(PARTITION BY vchar_col, long_col
+ ORDER BY double_col DESC NULLS LAST, int_col ASC NULLS FIRST
+ RANGE BETWEEN 3 PRECEDING AND 3 FOLLOWING);
+--
+ERROR: Undefined window w1 (1 : 37)
+SELECT int_col, sum(float_col) OVER w1 FROM test
+ ^
+==
+
+SELECT sum(avg(int_col)) OVER w FROM test
+WINDOW w AS
+(PARTITION BY double_col
+ ORDER BY char_col)
+--
+ERROR: Aggregation of Aggregates are not allowed (1 : 12)
+SELECT sum(avg(int_col)) OVER w FROM test
+ ^
[11/18] incubator-quickstep git commit: Added PRIORITY clause in
parser.
Posted by zu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/parser/preprocessed/SqlParser_gen.cpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlParser_gen.cpp b/parser/preprocessed/SqlParser_gen.cpp
index c02baf4..8fdf490 100644
--- a/parser/preprocessed/SqlParser_gen.cpp
+++ b/parser/preprocessed/SqlParser_gen.cpp
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 3.0.4. */
+/* A Bison parser, made by GNU Bison 2.7. */
/* Bison implementation for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
-
+
+ Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
@@ -26,7 +26,7 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "3.0.4"
+#define YYBISON_VERSION "2.7"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -63,12 +63,15 @@
#define yyparse quickstep_yyparse
#define yylex quickstep_yylex
#define yyerror quickstep_yyerror
+#define yylval quickstep_yylval
+#define yychar quickstep_yychar
#define yydebug quickstep_yydebug
#define yynerrs quickstep_yynerrs
-
+#define yylloc quickstep_yylloc
/* Copy the first part of user declarations. */
-#line 35 "../SqlParser.ypp" /* yacc.c:339 */
+/* Line 371 of yacc.c */
+#line 35 "../SqlParser.ypp"
/* Override the default definition, as we only need <first_line> and <first_column>. */
@@ -96,7 +99,8 @@ typedef struct YYLTYPE {
} \
} while (0)
-#line 64 "../SqlParser.ypp" /* yacc.c:339 */
+/* Line 371 of yacc.c */
+#line 64 "../SqlParser.ypp"
#include <cstdlib>
#include <string>
@@ -121,6 +125,7 @@ typedef struct YYLTYPE {
#include "parser/ParsePredicate.hpp"
#include "parser/ParsePredicateExists.hpp"
#include "parser/ParsePredicateInTableQuery.hpp"
+#include "parser/ParsePriority.hpp"
#include "parser/ParserUtil.hpp"
#include "parser/ParseSample.hpp"
#include "parser/ParseSelect.hpp"
@@ -151,13 +156,14 @@ typedef struct YYLTYPE {
// Needed for Bison 2.6 and higher, which do not automatically provide this typedef.
typedef void* yyscan_t;
-#line 155 "SqlParser_gen.cpp" /* yacc.c:339 */
+/* Line 371 of yacc.c */
+#line 161 "SqlParser_gen.cpp"
-# ifndef YY_NULLPTR
+# ifndef YY_NULL
# if defined __cplusplus && 201103L <= __cplusplus
-# define YY_NULLPTR nullptr
+# define YY_NULL nullptr
# else
-# define YY_NULLPTR 0
+# define YY_NULL 0
# endif
# endif
@@ -173,7 +179,7 @@ typedef void* yyscan_t;
by #include "SqlParser_gen.hpp". */
#ifndef YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED
# define YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED
-/* Debug traces. */
+/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
@@ -181,150 +187,152 @@ typedef void* yyscan_t;
extern int quickstep_yydebug;
#endif
-/* Token type. */
+/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
- enum yytokentype
- {
- TOKEN_COMMAND = 258,
- TOKEN_NAME = 259,
- TOKEN_STRING_SINGLE_QUOTED = 260,
- TOKEN_STRING_DOUBLE_QUOTED = 261,
- TOKEN_UNSIGNED_NUMVAL = 262,
- TOKEN_OR = 263,
- TOKEN_AND = 264,
- TOKEN_NOT = 265,
- TOKEN_EQ = 266,
- TOKEN_LT = 267,
- TOKEN_LEQ = 268,
- TOKEN_GT = 269,
- TOKEN_GEQ = 270,
- TOKEN_NEQ = 271,
- TOKEN_LIKE = 272,
- TOKEN_REGEXP = 273,
- TOKEN_BETWEEN = 274,
- TOKEN_IS = 275,
- UNARY_PLUS = 276,
- UNARY_MINUS = 277,
- TOKEN_ADD = 278,
- TOKEN_ALL = 279,
- TOKEN_ALTER = 280,
- TOKEN_AS = 281,
- TOKEN_ASC = 282,
- TOKEN_BIGINT = 283,
- TOKEN_BIT = 284,
- TOKEN_BITWEAVING = 285,
- TOKEN_BLOCKPROPERTIES = 286,
- TOKEN_BLOCKSAMPLE = 287,
- TOKEN_BLOOM_FILTER = 288,
- TOKEN_CSB_TREE = 289,
- TOKEN_BY = 290,
- TOKEN_CASE = 291,
- TOKEN_CHARACTER = 292,
- TOKEN_CHECK = 293,
- TOKEN_COLUMN = 294,
- TOKEN_CONSTRAINT = 295,
- TOKEN_COPY = 296,
- TOKEN_CREATE = 297,
- TOKEN_CURRENT = 298,
- TOKEN_DATE = 299,
- TOKEN_DATETIME = 300,
- TOKEN_DAY = 301,
- TOKEN_DECIMAL = 302,
- TOKEN_DEFAULT = 303,
- TOKEN_DELETE = 304,
- TOKEN_DELIMITER = 305,
- TOKEN_DESC = 306,
- TOKEN_DISTINCT = 307,
- TOKEN_DOUBLE = 308,
- TOKEN_DROP = 309,
- TOKEN_ELSE = 310,
- TOKEN_END = 311,
- TOKEN_ESCAPE_STRINGS = 312,
- TOKEN_EXISTS = 313,
- TOKEN_EXTRACT = 314,
- TOKEN_FALSE = 315,
- TOKEN_FIRST = 316,
- TOKEN_FLOAT = 317,
- TOKEN_FOLLOWING = 318,
- TOKEN_FOR = 319,
- TOKEN_FOREIGN = 320,
- TOKEN_FROM = 321,
- TOKEN_FULL = 322,
- TOKEN_GROUP = 323,
- TOKEN_HASH = 324,
- TOKEN_HAVING = 325,
- TOKEN_HOUR = 326,
- TOKEN_IN = 327,
- TOKEN_INDEX = 328,
- TOKEN_INNER = 329,
- TOKEN_INSERT = 330,
- TOKEN_INTEGER = 331,
- TOKEN_INTERVAL = 332,
- TOKEN_INTO = 333,
- TOKEN_JOIN = 334,
- TOKEN_KEY = 335,
- TOKEN_LAST = 336,
- TOKEN_LEFT = 337,
- TOKEN_LIMIT = 338,
- TOKEN_LONG = 339,
- TOKEN_MINUTE = 340,
- TOKEN_MONTH = 341,
- TOKEN_NULL = 342,
- TOKEN_NULLS = 343,
- TOKEN_OFF = 344,
- TOKEN_ON = 345,
- TOKEN_ORDER = 346,
- TOKEN_OUTER = 347,
- TOKEN_OVER = 348,
- TOKEN_PARTITION = 349,
- TOKEN_PARTITIONS = 350,
- TOKEN_PERCENT = 351,
- TOKEN_PRECEDING = 352,
- TOKEN_PRIMARY = 353,
- TOKEN_QUIT = 354,
- TOKEN_RANGE = 355,
- TOKEN_REAL = 356,
- TOKEN_REFERENCES = 357,
- TOKEN_RIGHT = 358,
- TOKEN_ROW = 359,
- TOKEN_ROW_DELIMITER = 360,
- TOKEN_ROWS = 361,
- TOKEN_SECOND = 362,
- TOKEN_SELECT = 363,
- TOKEN_SET = 364,
- TOKEN_SMA = 365,
- TOKEN_SMALLINT = 366,
- TOKEN_SUBSTRING = 367,
- TOKEN_TABLE = 368,
- TOKEN_THEN = 369,
- TOKEN_TIME = 370,
- TOKEN_TIMESTAMP = 371,
- TOKEN_TRUE = 372,
- TOKEN_TUPLESAMPLE = 373,
- TOKEN_UNBOUNDED = 374,
- TOKEN_UNIQUE = 375,
- TOKEN_UPDATE = 376,
- TOKEN_USING = 377,
- TOKEN_VALUES = 378,
- TOKEN_VARCHAR = 379,
- TOKEN_WHEN = 380,
- TOKEN_WHERE = 381,
- TOKEN_WINDOW = 382,
- TOKEN_WITH = 383,
- TOKEN_YEAR = 384,
- TOKEN_YEARMONTH = 385,
- TOKEN_EOF = 386,
- TOKEN_LEX_ERROR = 387
- };
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ TOKEN_COMMAND = 258,
+ TOKEN_NAME = 259,
+ TOKEN_STRING_SINGLE_QUOTED = 260,
+ TOKEN_STRING_DOUBLE_QUOTED = 261,
+ TOKEN_UNSIGNED_NUMVAL = 262,
+ TOKEN_OR = 263,
+ TOKEN_AND = 264,
+ TOKEN_NOT = 265,
+ TOKEN_EQ = 266,
+ TOKEN_NEQ = 267,
+ TOKEN_GEQ = 268,
+ TOKEN_GT = 269,
+ TOKEN_LEQ = 270,
+ TOKEN_LT = 271,
+ TOKEN_REGEXP = 272,
+ TOKEN_LIKE = 273,
+ TOKEN_BETWEEN = 274,
+ TOKEN_IS = 275,
+ UNARY_MINUS = 276,
+ UNARY_PLUS = 277,
+ TOKEN_ADD = 278,
+ TOKEN_ALL = 279,
+ TOKEN_ALTER = 280,
+ TOKEN_AS = 281,
+ TOKEN_ASC = 282,
+ TOKEN_BIGINT = 283,
+ TOKEN_BIT = 284,
+ TOKEN_BITWEAVING = 285,
+ TOKEN_BLOCKPROPERTIES = 286,
+ TOKEN_BLOCKSAMPLE = 287,
+ TOKEN_BLOOM_FILTER = 288,
+ TOKEN_CSB_TREE = 289,
+ TOKEN_BY = 290,
+ TOKEN_CASE = 291,
+ TOKEN_CHARACTER = 292,
+ TOKEN_CHECK = 293,
+ TOKEN_COLUMN = 294,
+ TOKEN_CONSTRAINT = 295,
+ TOKEN_COPY = 296,
+ TOKEN_CREATE = 297,
+ TOKEN_CURRENT = 298,
+ TOKEN_DATE = 299,
+ TOKEN_DATETIME = 300,
+ TOKEN_DAY = 301,
+ TOKEN_DECIMAL = 302,
+ TOKEN_DEFAULT = 303,
+ TOKEN_DELETE = 304,
+ TOKEN_DELIMITER = 305,
+ TOKEN_DESC = 306,
+ TOKEN_DISTINCT = 307,
+ TOKEN_DOUBLE = 308,
+ TOKEN_DROP = 309,
+ TOKEN_ELSE = 310,
+ TOKEN_END = 311,
+ TOKEN_ESCAPE_STRINGS = 312,
+ TOKEN_EXISTS = 313,
+ TOKEN_EXTRACT = 314,
+ TOKEN_FALSE = 315,
+ TOKEN_FIRST = 316,
+ TOKEN_FLOAT = 317,
+ TOKEN_FOLLOWING = 318,
+ TOKEN_FOR = 319,
+ TOKEN_FOREIGN = 320,
+ TOKEN_FROM = 321,
+ TOKEN_FULL = 322,
+ TOKEN_GROUP = 323,
+ TOKEN_HASH = 324,
+ TOKEN_HAVING = 325,
+ TOKEN_HOUR = 326,
+ TOKEN_IN = 327,
+ TOKEN_INDEX = 328,
+ TOKEN_INNER = 329,
+ TOKEN_INSERT = 330,
+ TOKEN_INTEGER = 331,
+ TOKEN_INTERVAL = 332,
+ TOKEN_INTO = 333,
+ TOKEN_JOIN = 334,
+ TOKEN_KEY = 335,
+ TOKEN_LAST = 336,
+ TOKEN_LEFT = 337,
+ TOKEN_LIMIT = 338,
+ TOKEN_LONG = 339,
+ TOKEN_MINUTE = 340,
+ TOKEN_MONTH = 341,
+ TOKEN_NULL = 342,
+ TOKEN_NULLS = 343,
+ TOKEN_OFF = 344,
+ TOKEN_ON = 345,
+ TOKEN_ORDER = 346,
+ TOKEN_OUTER = 347,
+ TOKEN_OVER = 348,
+ TOKEN_PARTITION = 349,
+ TOKEN_PARTITIONS = 350,
+ TOKEN_PERCENT = 351,
+ TOKEN_PRECEDING = 352,
+ TOKEN_PRIMARY = 353,
+ TOKEN_PRIORITY = 354,
+ TOKEN_QUIT = 355,
+ TOKEN_RANGE = 356,
+ TOKEN_REAL = 357,
+ TOKEN_REFERENCES = 358,
+ TOKEN_RIGHT = 359,
+ TOKEN_ROW = 360,
+ TOKEN_ROW_DELIMITER = 361,
+ TOKEN_ROWS = 362,
+ TOKEN_SECOND = 363,
+ TOKEN_SELECT = 364,
+ TOKEN_SET = 365,
+ TOKEN_SMA = 366,
+ TOKEN_SMALLINT = 367,
+ TOKEN_SUBSTRING = 368,
+ TOKEN_TABLE = 369,
+ TOKEN_THEN = 370,
+ TOKEN_TIME = 371,
+ TOKEN_TIMESTAMP = 372,
+ TOKEN_TRUE = 373,
+ TOKEN_TUPLESAMPLE = 374,
+ TOKEN_UNBOUNDED = 375,
+ TOKEN_UNIQUE = 376,
+ TOKEN_UPDATE = 377,
+ TOKEN_USING = 378,
+ TOKEN_VALUES = 379,
+ TOKEN_VARCHAR = 380,
+ TOKEN_WHEN = 381,
+ TOKEN_WHERE = 382,
+ TOKEN_WINDOW = 383,
+ TOKEN_WITH = 384,
+ TOKEN_YEAR = 385,
+ TOKEN_YEARMONTH = 386,
+ TOKEN_EOF = 387,
+ TOKEN_LEX_ERROR = 388
+ };
#endif
-/* Value type. */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-union YYSTYPE
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
{
-#line 119 "../SqlParser.ypp" /* yacc.c:355 */
+/* Line 387 of yacc.c */
+#line 120 "../SqlParser.ypp"
quickstep::ParseString *string_value_;
@@ -422,42 +430,57 @@ union YYSTYPE
quickstep::PtrVector<quickstep::ParseSubqueryTableReference> *with_list_;
quickstep::ParseSubqueryTableReference *with_list_element_;
-#line 426 "SqlParser_gen.cpp" /* yacc.c:355 */
-};
+ quickstep::ParsePriority *opt_priority_clause_;
-typedef union YYSTYPE YYSTYPE;
+
+/* Line 387 of yacc.c */
+#line 438 "SqlParser_gen.cpp"
+} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
-/* Location type. */
#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
-typedef struct YYLTYPE YYLTYPE;
-struct YYLTYPE
+typedef struct YYLTYPE
{
int first_line;
int first_column;
int last_line;
int last_column;
-};
+} YYLTYPE;
+# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
# define YYLTYPE_IS_DECLARED 1
# define YYLTYPE_IS_TRIVIAL 1
#endif
-
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int quickstep_yyparse (void *YYPARSE_PARAM);
+#else
+int quickstep_yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
int quickstep_yyparse (yyscan_t yyscanner, quickstep::ParseStatement **parsedStatement);
+#else
+int quickstep_yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
#endif /* !YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED */
/* Copy the second part of user declarations. */
-#line 217 "../SqlParser.ypp" /* yacc.c:358 */
+/* Line 390 of yacc.c */
+#line 220 "../SqlParser.ypp"
/* This header needs YYSTYPE, which is defined by the %union directive above */
#include "SqlLexer_gen.hpp"
void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string &feature);
-#line 461 "SqlParser_gen.cpp" /* yacc.c:358 */
+/* Line 390 of yacc.c */
+#line 484 "SqlParser_gen.cpp"
#ifdef short
# undef short
@@ -471,8 +494,11 @@ typedef unsigned char yytype_uint8;
#ifdef YYTYPE_INT8
typedef YYTYPE_INT8 yytype_int8;
-#else
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
#endif
#ifdef YYTYPE_UINT16
@@ -492,7 +518,8 @@ typedef short int yytype_int16;
# define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# else
@@ -514,33 +541,6 @@ typedef short int yytype_int16;
# endif
#endif
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__ \
- && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
- || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-# define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-# define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
- && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-# define _Noreturn __declspec (noreturn)
-# else
-# define _Noreturn YY_ATTRIBUTE ((__noreturn__))
-# endif
-#endif
-
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
# define YYUSE(E) ((void) (E))
@@ -548,26 +548,24 @@ typedef short int yytype_int16;
# define YYUSE(E) /* empty */
#endif
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized. */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
- _Pragma ("GCC diagnostic push") \
- _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
- _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
- _Pragma ("GCC diagnostic pop")
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(N) (N)
#else
-# define YY_INITIAL_VALUE(Value) Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+ int yyi;
#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
+{
+ return yyi;
+}
#endif
-
#if ! defined yyoverflow || YYERROR_VERBOSE
/* The parser invokes alloca or malloc; define the necessary symbols. */
@@ -585,7 +583,8 @@ typedef short int yytype_int16;
# define alloca _alloca
# else
# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
/* Use EXIT_SUCCESS as a witness for stdlib.h. */
# ifndef EXIT_SUCCESS
@@ -597,8 +596,8 @@ typedef short int yytype_int16;
# endif
# ifdef YYSTACK_ALLOC
- /* Pacify GCC's 'empty if-body' warning. */
-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
# ifndef YYSTACK_ALLOC_MAXIMUM
/* The OS might guarantee only one guard page at the bottom of the stack,
and a page size can be as small as 4096 bytes. So we cannot safely
@@ -614,7 +613,7 @@ typedef short int yytype_int16;
# endif
# if (defined __cplusplus && ! defined EXIT_SUCCESS \
&& ! ((defined YYMALLOC || defined malloc) \
- && (defined YYFREE || defined free)))
+ && (defined YYFREE || defined free)))
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
# ifndef EXIT_SUCCESS
# define EXIT_SUCCESS 0
@@ -622,13 +621,15 @@ typedef short int yytype_int16;
# endif
# ifndef YYMALLOC
# define YYMALLOC malloc
-# if ! defined malloc && ! defined EXIT_SUCCESS
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
# ifndef YYFREE
# define YYFREE free
-# if ! defined free && ! defined EXIT_SUCCESS
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
void free (void *); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
@@ -638,8 +639,8 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
#if (! defined yyoverflow \
&& (! defined __cplusplus \
- || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
- && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
+ && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
@@ -665,16 +666,16 @@ union yyalloc
elements in the stack, and YYPTR gives the new location of the
stack. Advance YYPTR to a properly aligned location for the next
stack. */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
- do \
- { \
- YYSIZE_T yynewbytes; \
- YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
- Stack = &yyptr->Stack_alloc; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
- } \
- while (0)
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
#endif
@@ -693,7 +694,7 @@ union yyalloc
for (yyi = 0; yyi < (Count); yyi++) \
(Dst)[yyi] = (Src)[yyi]; \
} \
- while (0)
+ while (YYID (0))
# endif
# endif
#endif /* !YYCOPY_NEEDED */
@@ -701,35 +702,33 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 47
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 1347
+#define YYLAST 1346
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 144
+#define YYNTOKENS 145
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 106
+#define YYNNTS 107
/* YYNRULES -- Number of rules. */
-#define YYNRULES 287
-/* YYNSTATES -- Number of states. */
-#define YYNSTATES 531
+#define YYNRULES 289
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 536
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
- by yylex, with out-of-bounds checking. */
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 387
+#define YYMAXUTOK 388
-#define YYTRANSLATE(YYX) \
+#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
- as returned by yylex, without out-of-bounds checking. */
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
static const yytype_uint8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 139, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 140, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 143, 2, 2,
- 140, 141, 23, 21, 142, 22, 27, 24, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 138,
+ 2, 2, 2, 2, 2, 2, 2, 144, 2, 2,
+ 141, 142, 23, 21, 143, 22, 27, 24, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 139,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -762,42 +761,174 @@ static const yytype_uint8 yytranslate[] =
100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
- 130, 131, 132, 133, 134, 135, 136, 137
+ 130, 131, 132, 133, 134, 135, 136, 137, 138
};
#if YYDEBUG
- /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint16 yyprhs[] =
+{
+ 0, 0, 3, 6, 9, 12, 15, 17, 19, 21,
+ 23, 25, 27, 29, 31, 33, 35, 37, 39, 41,
+ 48, 55, 62, 69, 79, 89, 93, 97, 99, 103,
+ 105, 107, 109, 111, 113, 115, 117, 119, 121, 123,
+ 125, 127, 129, 131, 134, 137, 142, 147, 149, 152,
+ 154, 157, 160, 165, 171, 174, 176, 177, 179, 184,
+ 190, 201, 206, 210, 212, 213, 215, 216, 220, 221,
+ 227, 228, 237, 239, 241, 243, 247, 249, 251, 253,
+ 256, 259, 264, 267, 269, 271, 273, 275, 276, 280,
+ 291, 299, 304, 310, 316, 317, 322, 325, 328, 333,
+ 338, 344, 349, 353, 355, 359, 362, 366, 367, 371,
+ 374, 376, 380, 384, 395, 396, 398, 400, 402, 404,
+ 406, 410, 414, 417, 419, 422, 426, 427, 431, 435,
+ 436, 438, 440, 443, 445, 448, 450, 453, 460, 462,
+ 465, 469, 472, 475, 477, 481, 483, 486, 488, 493,
+ 495, 499, 500, 504, 505, 508, 509, 513, 514, 517,
+ 518, 520, 522, 525, 532, 536, 537, 541, 542, 546,
+ 547, 553, 555, 557, 560, 563, 566, 569, 572, 575,
+ 577, 581, 585, 586, 588, 590, 591, 594, 597, 598,
+ 600, 603, 607, 609, 613, 615, 618, 620, 626, 633,
+ 638, 642, 646, 650, 653, 657, 663, 668, 675, 679,
+ 681, 685, 687, 690, 692, 694, 696, 698, 702, 708,
+ 710, 712, 714, 718, 720, 724, 729, 734, 740, 747,
+ 754, 763, 769, 774, 776, 779, 784, 786, 789, 794,
+ 795, 798, 800, 804, 806, 808, 811, 814, 816, 819,
+ 823, 826, 828, 830, 832, 834, 836, 838, 840, 844,
+ 846, 850, 852, 856, 858, 860, 862, 864, 866, 868,
+ 870, 873, 875, 878, 880, 882, 884, 886, 888, 890,
+ 892, 896, 898, 900, 902, 904, 906, 908, 911, 914
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int16 yyrhs[] =
+{
+ 146, 0, -1, 147, 139, -1, 147, 137, -1, 250,
+ 140, -1, 250, 137, -1, 1, -1, 137, -1, 149,
+ -1, 174, -1, 150, -1, 151, -1, 178, -1, 152,
+ -1, 173, -1, 148, -1, 181, -1, 177, -1, 105,
+ -1, 30, 119, 248, 28, 44, 153, -1, 30, 119,
+ 248, 28, 45, 159, -1, 30, 119, 248, 59, 44,
+ 248, -1, 30, 119, 248, 59, 45, 248, -1, 47,
+ 119, 248, 141, 154, 142, 161, 163, 164, -1, 47,
+ 78, 248, 95, 248, 162, 128, 171, 172, -1, 59,
+ 119, 248, -1, 248, 155, 158, -1, 153, -1, 154,
+ 143, 153, -1, 34, -1, 49, -1, 50, -1, 121,
+ -1, 122, -1, 52, -1, 107, -1, 58, -1, 67,
+ -1, 117, -1, 81, -1, 33, -1, 89, -1, 82,
+ -1, 50, 82, -1, 136, 82, -1, 42, 141, 7,
+ 142, -1, 130, 141, 7, 142, -1, 92, -1, 10,
+ 92, -1, 126, -1, 103, 85, -1, 53, 238, -1,
+ 43, 141, 220, 142, -1, 108, 248, 141, 248, 142,
+ -1, 157, 156, -1, 156, -1, -1, 157, -1, 126,
+ 141, 247, 142, -1, 103, 85, 141, 247, 142, -1,
+ 70, 85, 141, 247, 142, 108, 248, 141, 247, 142,
+ -1, 43, 141, 220, 142, -1, 160, 143, 159, -1,
+ 159, -1, -1, 160, -1, -1, 141, 242, 142, -1,
+ -1, 134, 36, 141, 166, 142, -1, -1, 99, 40,
+ 165, 141, 247, 142, 100, 7, -1, 74, -1, 106,
+ -1, 167, -1, 166, 143, 167, -1, 168, -1, 169,
+ -1, 170, -1, 248, 248, -1, 248, 29, -1, 248,
+ 141, 247, 142, -1, 248, 7, -1, 35, -1, 38,
+ -1, 39, -1, 116, -1, -1, 141, 166, 142, -1,
+ 80, 83, 248, 141, 247, 142, 129, 141, 240, 142,
+ -1, 80, 83, 248, 129, 141, 240, 142, -1, 80,
+ 83, 248, 186, -1, 183, 80, 83, 248, 186, -1,
+ 46, 248, 71, 5, 175, -1, -1, 134, 141, 176,
+ 142, -1, 55, 5, -1, 62, 249, -1, 176, 143,
+ 55, 5, -1, 176, 143, 62, 249, -1, 127, 248,
+ 115, 179, 218, -1, 54, 71, 248, 218, -1, 179,
+ 143, 180, -1, 180, -1, 248, 11, 224, -1, 186,
+ 182, -1, 183, 186, 182, -1, -1, 134, 104, 7,
+ -1, 134, 184, -1, 185, -1, 184, 143, 185, -1,
+ 198, 31, 192, -1, 114, 187, 188, 191, 218, 200,
+ 201, 202, 203, 204, -1, -1, 29, -1, 57, -1,
+ 23, -1, 189, -1, 190, -1, 189, 143, 190, -1,
+ 224, 31, 248, -1, 224, 248, -1, 224, -1, 71,
+ 199, -1, 141, 186, 142, -1, -1, 37, 7, 101,
+ -1, 124, 7, 101, -1, -1, 79, -1, 87, -1,
+ 87, 97, -1, 109, -1, 109, 97, -1, 72, -1,
+ 72, 97, -1, 195, 194, 84, 196, 95, 220, -1,
+ 196, -1, 192, 197, -1, 248, 193, 197, -1, 248,
+ 193, -1, 228, 197, -1, 228, -1, 141, 195, 142,
+ -1, 198, -1, 31, 198, -1, 248, -1, 248, 141,
+ 247, 142, -1, 195, -1, 199, 143, 195, -1, -1,
+ 73, 40, 237, -1, -1, 75, 220, -1, -1, 96,
+ 40, 214, -1, -1, 88, 7, -1, -1, 205, -1,
+ 206, -1, 205, 206, -1, 133, 248, 31, 141, 207,
+ 142, -1, 208, 209, 210, -1, -1, 99, 40, 237,
+ -1, -1, 96, 40, 214, -1, -1, 211, 19, 212,
+ 9, 213, -1, 112, -1, 106, -1, 7, 102, -1,
+ 125, 102, -1, 48, 110, -1, 7, 68, -1, 125,
+ 68, -1, 48, 110, -1, 215, -1, 214, 143, 215,
+ -1, 224, 216, 217, -1, -1, 32, -1, 56, -1,
+ -1, 93, 66, -1, 93, 86, -1, -1, 219, -1,
+ 132, 220, -1, 220, 8, 221, -1, 221, -1, 221,
+ 9, 222, -1, 222, -1, 10, 223, -1, 223, -1,
+ 224, 19, 224, 9, 224, -1, 224, 10, 19, 224,
+ 9, 224, -1, 241, 20, 10, 92, -1, 241, 20,
+ 92, -1, 224, 243, 224, -1, 141, 220, 142, -1,
+ 63, 192, -1, 224, 77, 192, -1, 224, 77, 141,
+ 237, 142, -1, 224, 10, 77, 192, -1, 224, 10,
+ 77, 141, 237, 142, -1, 224, 245, 225, -1, 225,
+ -1, 225, 246, 226, -1, 226, -1, 244, 227, -1,
+ 227, -1, 241, -1, 238, -1, 228, -1, 228, 98,
+ 248, -1, 228, 98, 141, 207, 142, -1, 229, -1,
+ 230, -1, 231, -1, 141, 224, 142, -1, 192, -1,
+ 248, 141, 142, -1, 248, 141, 23, 142, -1, 248,
+ 141, 237, 142, -1, 248, 141, 57, 237, 142, -1,
+ 64, 141, 239, 71, 224, 142, -1, 118, 141, 224,
+ 71, 7, 142, -1, 118, 141, 224, 71, 7, 69,
+ 7, 142, -1, 41, 224, 232, 236, 61, -1, 41,
+ 234, 236, 61, -1, 233, -1, 232, 233, -1, 131,
+ 224, 120, 224, -1, 235, -1, 234, 235, -1, 131,
+ 220, 120, 224, -1, -1, 60, 224, -1, 224, -1,
+ 237, 143, 224, -1, 92, -1, 7, -1, 21, 7,
+ -1, 22, 7, -1, 5, -1, 82, 5, -1, 82,
+ 5, 239, -1, 155, 5, -1, 135, -1, 91, -1,
+ 51, -1, 76, -1, 90, -1, 113, -1, 238, -1,
+ 240, 143, 238, -1, 248, -1, 248, 27, 248, -1,
+ 241, -1, 242, 143, 241, -1, 11, -1, 12, -1,
+ 16, -1, 15, -1, 14, -1, 13, -1, 18, -1,
+ 10, 18, -1, 17, -1, 10, 17, -1, 22, -1,
+ 21, -1, 22, -1, 144, -1, 23, -1, 24, -1,
+ 248, -1, 247, 143, 248, -1, 4, -1, 6, -1,
+ 123, -1, 95, -1, 65, -1, 94, -1, 3, 251,
+ -1, 251, 3, -1, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 622, 622, 626, 630, 634, 638, 641, 648, 651,
- 654, 657, 660, 663, 666, 669, 672, 675, 681, 687,
- 694, 700, 707, 716, 721, 730, 735, 740, 744, 750,
- 755, 758, 761, 766, 769, 772, 775, 778, 781, 784,
- 787, 790, 793, 805, 808, 811, 829, 849, 852, 855,
- 860, 865, 871, 877, 886, 890, 896, 899, 904, 909,
- 914, 921, 928, 932, 938, 941, 946, 949, 954, 957,
- 962, 965, 984, 988, 994, 998, 1004, 1007, 1010, 1015,
- 1018, 1025, 1030, 1041, 1046, 1050, 1054, 1060, 1063, 1069,
- 1077, 1080, 1083, 1089, 1094, 1097, 1102, 1106, 1110, 1114,
- 1120, 1125, 1130, 1134, 1140, 1146, 1149, 1154, 1159, 1163,
- 1169, 1175, 1181, 1184, 1188, 1194, 1197, 1202, 1206, 1212,
- 1215, 1218, 1223, 1228, 1233, 1236, 1239, 1244, 1247, 1250,
- 1253, 1256, 1259, 1262, 1265, 1270, 1273, 1278, 1282, 1286,
- 1289, 1293, 1296, 1301, 1304, 1309, 1312, 1317, 1321, 1327,
- 1330, 1335, 1338, 1343, 1346, 1351, 1354, 1373, 1376, 1379,
- 1383, 1389, 1395, 1400, 1403, 1408, 1411, 1416, 1419, 1424,
- 1427, 1432, 1433, 1436, 1441, 1442, 1445, 1450, 1454, 1460,
- 1467, 1470, 1473, 1478, 1481, 1484, 1490, 1493, 1498, 1503,
- 1512, 1517, 1526, 1531, 1534, 1539, 1542, 1547, 1553, 1559,
- 1562, 1565, 1568, 1571, 1574, 1580, 1589, 1592, 1597, 1600,
- 1605, 1608, 1613, 1616, 1619, 1622, 1626, 1630, 1633, 1636,
- 1639, 1642, 1647, 1651, 1655, 1658, 1663, 1668, 1672, 1678,
- 1681, 1686, 1690, 1696, 1701, 1705, 1711, 1716, 1719, 1724,
- 1728, 1734, 1737, 1740, 1743, 1755, 1759, 1778, 1791, 1806,
- 1809, 1812, 1815, 1818, 1821, 1826, 1830, 1836, 1839, 1844,
- 1848, 1855, 1858, 1861, 1864, 1867, 1870, 1873, 1876, 1879,
- 1882, 1887, 1898, 1901, 1906, 1909, 1912, 1918, 1922, 1928,
- 1931, 1939, 1942, 1945, 1948, 1954, 1959, 1964
+ 0, 629, 629, 633, 637, 641, 645, 648, 655, 658,
+ 661, 664, 667, 670, 673, 676, 679, 682, 688, 694,
+ 701, 707, 714, 723, 728, 737, 742, 747, 751, 757,
+ 762, 765, 768, 773, 776, 779, 782, 785, 788, 791,
+ 794, 797, 800, 812, 815, 818, 836, 856, 859, 862,
+ 867, 872, 878, 884, 893, 897, 903, 906, 911, 916,
+ 921, 928, 935, 939, 945, 948, 953, 956, 961, 964,
+ 969, 972, 991, 995, 1001, 1005, 1011, 1014, 1017, 1022,
+ 1025, 1032, 1037, 1048, 1053, 1057, 1061, 1067, 1070, 1076,
+ 1084, 1087, 1090, 1096, 1101, 1104, 1109, 1113, 1117, 1121,
+ 1127, 1132, 1137, 1141, 1147, 1153, 1156, 1161, 1164, 1183,
+ 1188, 1192, 1198, 1204, 1210, 1213, 1217, 1223, 1226, 1231,
+ 1235, 1241, 1244, 1247, 1252, 1257, 1262, 1265, 1268, 1273,
+ 1276, 1279, 1282, 1285, 1288, 1291, 1294, 1299, 1302, 1307,
+ 1311, 1315, 1318, 1322, 1325, 1330, 1333, 1338, 1341, 1346,
+ 1350, 1356, 1359, 1364, 1367, 1372, 1375, 1380, 1383, 1402,
+ 1405, 1410, 1414, 1420, 1426, 1431, 1434, 1439, 1442, 1447,
+ 1450, 1455, 1458, 1463, 1464, 1467, 1472, 1473, 1476, 1481,
+ 1485, 1491, 1498, 1501, 1504, 1509, 1512, 1515, 1521, 1524,
+ 1529, 1534, 1543, 1548, 1557, 1562, 1565, 1570, 1573, 1578,
+ 1584, 1590, 1593, 1596, 1599, 1602, 1605, 1611, 1620, 1623,
+ 1628, 1631, 1636, 1639, 1644, 1647, 1650, 1653, 1657, 1661,
+ 1664, 1667, 1670, 1673, 1678, 1682, 1686, 1689, 1694, 1699,
+ 1703, 1709, 1712, 1717, 1721, 1727, 1732, 1736, 1742, 1747,
+ 1750, 1755, 1759, 1765, 1768, 1771, 1774, 1786, 1790, 1809,
+ 1822, 1837, 1840, 1843, 1846, 1849, 1852, 1857, 1861, 1867,
+ 1870, 1875, 1879, 1886, 1889, 1892, 1895, 1898, 1901, 1904,
+ 1907, 1910, 1913, 1918, 1929, 1932, 1937, 1940, 1943, 1949,
+ 1953, 1959, 1962, 1970, 1973, 1976, 1979, 1985, 1990, 1995
};
#endif
@@ -809,9 +940,9 @@ static const char *const yytname[] =
"$end", "error", "$undefined", "TOKEN_COMMAND", "TOKEN_NAME",
"TOKEN_STRING_SINGLE_QUOTED", "TOKEN_STRING_DOUBLE_QUOTED",
"TOKEN_UNSIGNED_NUMVAL", "TOKEN_OR", "TOKEN_AND", "TOKEN_NOT",
- "TOKEN_EQ", "TOKEN_LT", "TOKEN_LEQ", "TOKEN_GT", "TOKEN_GEQ",
- "TOKEN_NEQ", "TOKEN_LIKE", "TOKEN_REGEXP", "TOKEN_BETWEEN", "TOKEN_IS",
- "'+'", "'-'", "'*'", "'/'", "UNARY_PLUS", "UNARY_MINUS", "'.'",
+ "TOKEN_EQ", "TOKEN_NEQ", "TOKEN_GEQ", "TOKEN_GT", "TOKEN_LEQ",
+ "TOKEN_LT", "TOKEN_REGEXP", "TOKEN_LIKE", "TOKEN_BETWEEN", "TOKEN_IS",
+ "'+'", "'-'", "'*'", "'/'", "UNARY_MINUS", "UNARY_PLUS", "'.'",
"TOKEN_ADD", "TOKEN_ALL", "TOKEN_ALTER", "TOKEN_AS", "TOKEN_ASC",
"TOKEN_BIGINT", "TOKEN_BIT", "TOKEN_BITWEAVING", "TOKEN_BLOCKPROPERTIES",
"TOKEN_BLOCKSAMPLE", "TOKEN_BLOOM_FILTER", "TOKEN_CSB_TREE", "TOKEN_BY",
@@ -829,30 +960,31 @@ static const char *const yytname[] =
"TOKEN_LIMIT", "TOKEN_LONG", "TOKEN_MINUTE", "TOKEN_MONTH", "TOKEN_NULL",
"TOKEN_NULLS", "TOKEN_OFF", "TOKEN_ON", "TOKEN_ORDER", "TOKEN_OUTER",
"TOKEN_OVER", "TOKEN_PARTITION", "TOKEN_PARTITIONS", "TOKEN_PERCENT",
- "TOKEN_PRECEDING", "TOKEN_PRIMARY", "TOKEN_QUIT", "TOKEN_RANGE",
- "TOKEN_REAL", "TOKEN_REFERENCES", "TOKEN_RIGHT", "TOKEN_ROW",
- "TOKEN_ROW_DELIMITER", "TOKEN_ROWS", "TOKEN_SECOND", "TOKEN_SELECT",
- "TOKEN_SET", "TOKEN_SMA", "TOKEN_SMALLINT", "TOKEN_SUBSTRING",
- "TOKEN_TABLE", "TOKEN_THEN", "TOKEN_TIME", "TOKEN_TIMESTAMP",
- "TOKEN_TRUE", "TOKEN_TUPLESAMPLE", "TOKEN_UNBOUNDED", "TOKEN_UNIQUE",
- "TOKEN_UPDATE", "TOKEN_USING", "TOKEN_VALUES", "TOKEN_VARCHAR",
- "TOKEN_WHEN", "TOKEN_WHERE", "TOKEN_WINDOW", "TOKEN_WITH", "TOKEN_YEAR",
- "TOKEN_YEARMONTH", "TOKEN_EOF", "TOKEN_LEX_ERROR", "';'", "'\\n'", "'('",
- "')'", "','", "'%'", "$accept", "start", "sql_statement",
- "quit_statement", "alter_table_statement", "create_table_statement",
- "create_index_statement", "drop_table_statement", "column_def",
- "column_def_commalist", "data_type", "column_constraint_def",
- "column_constraint_def_list", "opt_column_constraint_def_list",
- "table_constraint_def", "table_constraint_def_commalist",
- "opt_table_constraint_def_commalist", "opt_column_list",
- "opt_block_properties", "opt_partition_clause", "partition_type",
- "key_value_list", "key_value", "key_string_value", "key_string_list",
- "key_integer_value", "index_type", "opt_index_properties",
- "insert_statement", "copy_from_statement", "opt_copy_from_params",
- "copy_from_params", "update_statement", "delete_statement",
- "assignment_list", "assignment_item", "select_statement", "with_clause",
- "with_list", "with_list_element", "select_query", "opt_all_distinct",
- "selection", "selection_item_commalist", "selection_item", "from_clause",
+ "TOKEN_PRECEDING", "TOKEN_PRIMARY", "TOKEN_PRIORITY", "TOKEN_QUIT",
+ "TOKEN_RANGE", "TOKEN_REAL", "TOKEN_REFERENCES", "TOKEN_RIGHT",
+ "TOKEN_ROW", "TOKEN_ROW_DELIMITER", "TOKEN_ROWS", "TOKEN_SECOND",
+ "TOKEN_SELECT", "TOKEN_SET", "TOKEN_SMA", "TOKEN_SMALLINT",
+ "TOKEN_SUBSTRING", "TOKEN_TABLE", "TOKEN_THEN", "TOKEN_TIME",
+ "TOKEN_TIMESTAMP", "TOKEN_TRUE", "TOKEN_TUPLESAMPLE", "TOKEN_UNBOUNDED",
+ "TOKEN_UNIQUE", "TOKEN_UPDATE", "TOKEN_USING", "TOKEN_VALUES",
+ "TOKEN_VARCHAR", "TOKEN_WHEN", "TOKEN_WHERE", "TOKEN_WINDOW",
+ "TOKEN_WITH", "TOKEN_YEAR", "TOKEN_YEARMONTH", "TOKEN_EOF",
+ "TOKEN_LEX_ERROR", "';'", "'\\n'", "'('", "')'", "','", "'%'", "$accept",
+ "start", "sql_statement", "quit_statement", "alter_table_statement",
+ "create_table_statement", "create_index_statement",
+ "drop_table_statement", "column_def", "column_def_commalist",
+ "data_type", "column_constraint_def", "column_constraint_def_list",
+ "opt_column_constraint_def_list", "table_constraint_def",
+ "table_constraint_def_commalist", "opt_table_constraint_def_commalist",
+ "opt_column_list", "opt_block_properties", "opt_partition_clause",
+ "partition_type", "key_value_list", "key_value", "key_string_value",
+ "key_string_list", "key_integer_value", "index_type",
+ "opt_index_properties", "insert_statement", "copy_from_statement",
+ "opt_copy_from_params", "copy_from_params", "update_statement",
+ "delete_statement", "assignment_list", "assignment_item",
+ "select_statement", "opt_priority_clause", "with_clause", "with_list",
+ "with_list_element", "select_query", "opt_all_distinct", "selection",
+ "selection_item_commalist", "selection_item", "from_clause",
"subquery_expression", "opt_sample_clause", "join_type",
"joined_table_reference", "table_reference", "table_reference_signature",
"table_reference_signature_primary", "joined_table_reference_commalist",
@@ -872,13 +1004,13 @@ static const char *const yytname[] =
"literal_value_commalist", "attribute_ref", "attribute_ref_list",
"comparison_operation", "unary_operation", "add_operation",
"multiply_operation", "name_commalist", "any_name", "boolean_value",
- "command", "command_argument_list", YY_NULLPTR
+ "command", "command_argument_list", YY_NULL
};
#endif
# ifdef YYPRINT
-/* YYTOKNUM[NUM] -- (External) token number corresponding to the
- (internal) symbol number NUM (which must be that of a token). */
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
static const yytype_uint16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
@@ -894,593 +1026,605 @@ static const yytype_uint16 yytoknum[] =
350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
370, 371, 372, 373, 374, 375, 376, 377, 378, 379,
- 380, 381, 382, 383, 384, 385, 386, 387, 59, 10,
- 40, 41, 44, 37
+ 380, 381, 382, 383, 384, 385, 386, 387, 388, 59,
+ 10, 40, 41, 44, 37
};
# endif
-#define YYPACT_NINF -239
-
-#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-239)))
-
-#define YYTABLE_NINF -128
-
-#define yytable_value_is_error(Yytable_value) \
- 0
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 145, 146, 146, 146, 146, 146, 146, 147, 147,
+ 147, 147, 147, 147, 147, 147, 147, 147, 148, 149,
+ 149, 149, 149, 150, 151, 152, 153, 154, 154, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 156, 156, 156,
+ 156, 156, 156, 156, 157, 157, 158, 158, 159, 159,
+ 159, 159, 160, 160, 161, 161, 162, 162, 163, 163,
+ 164, 164, 165, 165, 166, 166, 167, 167, 167, 168,
+ 168, 169, 170, 171, 171, 171, 171, 172, 172, 173,
+ 173, 173, 173, 174, 175, 175, 176, 176, 176, 176,
+ 177, 178, 179, 179, 180, 181, 181, 182, 182, 183,
+ 184, 184, 185, 186, 187, 187, 187, 188, 188, 189,
+ 189, 190, 190, 190, 191, 192, 193, 193, 193, 194,
+ 194, 194, 194, 194, 194, 194, 194, 195, 195, 196,
+ 196, 196, 196, 196, 196, 197, 197, 198, 198, 199,
+ 199, 200, 200, 201, 201, 202, 202, 203, 203, 204,
+ 204, 205, 205, 206, 207, 208, 208, 209, 209, 210,
+ 210, 211, 211, 212, 212, 212, 213, 213, 213, 214,
+ 214, 215, 216, 216, 216, 217, 217, 217, 218, 218,
+ 219, 220, 220, 221, 221, 222, 222, 223, 223, 223,
+ 223, 223, 223, 223, 223, 223, 223, 223, 224, 224,
+ 225, 225, 226, 226, 227, 227, 227, 227, 227, 227,
+ 227, 227, 227, 227, 228, 228, 228, 228, 229, 230,
+ 230, 231, 231, 232, 232, 233, 234, 234, 235, 236,
+ 236, 237, 237, 238, 238, 238, 238, 238, 238, 238,
+ 238, 239, 239, 239, 239, 239, 239, 240, 240, 241,
+ 241, 242, 242, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 243, 244, 245, 245, 246, 246, 246, 247,
+ 247, 248, 248, 249, 249, 249, 249, 250, 251, 251
+};
- /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-static const yytype_int16 yypact[] =
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
{
- 71, -239, -239, -52, 270, -19, 22, -43, 31, -239,
- 16, 270, 270, -239, 97, 162, -239, -239, -239, -239,
- -239, -239, -239, -239, -239, -239, -24, -239, 98, 117,
- 270, -239, -239, 58, 270, 270, 270, 270, 270, -239,
- -239, 619, 69, 29, -239, 155, 52, -239, -239, -239,
- 126, -239, -239, -239, -239, 36, 233, 151, 60, 127,
- -239, 68, -239, -239, 255, 260, -239, -239, -239, 700,
- 131, -239, 217, -239, -239, 137, -239, -239, 288, -239,
- -239, -239, -239, 172, -239, -239, 176, 241, 792, 320,
- 297, 189, -239, -239, 286, -1, -239, -239, 271, -239,
- -239, -239, -239, -239, 954, 0, 270, 270, 234, 270,
- 270, 184, 210, 240, 270, 270, 538, -239, -239, 239,
- 270, -239, -239, -239, 538, 47, -9, -239, 373, -239,
- 154, 154, 1035, 374, -239, 242, 26, -239, 33, 127,
- 1035, -239, -239, 270, 1035, -239, -239, -239, -239, 1035,
- 38, 260, -239, 270, 354, 48, -239, 371, -239, 272,
- -239, 140, -239, 272, 270, -18, 270, 270, 244, -239,
- 246, -239, 163, 1144, 873, 234, 457, 382, 383, -239,
- -239, 1270, 377, 1116, 169, 46, 1035, -2, -239, 1035,
- -239, 332, 253, -239, -239, -239, -239, -239, -239, 327,
- -239, 65, 259, -239, -239, 34, 220, 177, -239, 263,
- 220, -8, 328, -239, -239, -1, -239, 303, -239, -239,
- 266, 1035, -239, 293, 180, 270, -239, 1035, -239, 270,
- -239, -239, 268, 325, 329, 273, -239, -239, -239, 125,
- 270, 290, -18, 270, -239, 188, -239, -239, 2, 201,
- 538, 538, 105, -239, -239, -239, -239, -239, -239, -239,
- -239, 1035, 279, 1035, 43, -239, 185, 287, 1035, 57,
- -239, 359, 293, -239, -239, 1035, 415, -239, 178, 270,
- -239, -239, 326, -239, 330, 331, 340, 33, -239, 419,
- 422, 220, 390, 356, 393, 296, 338, -239, 187, -239,
- 1035, -239, 293, -239, 538, 298, 299, 270, 435, -3,
- 192, -239, 195, 414, 42, -239, 300, 311, -239, 353,
- 307, 1116, -239, 364, 270, -239, -239, 188, -239, -239,
- 383, -239, -239, -239, 1035, 310, 275, 792, -239, 293,
- 360, -239, -239, 1116, 313, 293, 1035, -239, 28, -33,
- -239, -239, -239, -239, -239, 33, 177, 350, 357, -239,
- 1035, 538, 358, 1035, -239, 425, -17, -239, 293, 4,
- 270, 270, 197, -239, -239, -239, -239, -239, -239, -239,
- 148, -239, 270, -239, -239, -239, -239, 315, -18, 423,
- 367, -239, 538, -239, -239, 333, -239, 280, 792, -239,
- 1035, 199, -239, -239, 1116, 293, -239, 462, -239, 381,
- -239, -239, 335, 382, 432, 396, 335, 1035, -239, -239,
- -239, 467, -239, 202, 204, -239, 476, -3, -239, 270,
- -239, -239, 347, 448, -239, 11, 270, 1035, 206, 293,
- -239, 208, 351, 538, 1035, 486, 365, 361, -239, 238,
- 7, 389, -239, -239, -239, 211, -239, -239, -239, -239,
- 14, 270, -7, -239, 363, 293, -239, -239, -239, 382,
- 361, -239, 270, -239, 365, -239, 1035, -239, -239, 407,
- 399, 401, 400, 499, 270, -239, 270, -239, -239, 270,
- -239, 213, -239, -239, 372, -239, 480, -239, -239, 102,
- -239, -239, -239, -239, 17, 376, -239, 215, -239, 270,
- 378, -239, -239, 446, 408, 451, -239, 270, -239, 221,
- 303, -239, -239, -239, 223, 426, 384, -239, 515, -239,
- -239
+ 0, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 6,
+ 6, 6, 6, 9, 9, 3, 3, 1, 3, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 4, 4, 1, 2, 1,
+ 2, 2, 4, 5, 2, 1, 0, 1, 4, 5,
+ 10, 4, 3, 1, 0, 1, 0, 3, 0, 5,
+ 0, 8, 1, 1, 1, 3, 1, 1, 1, 2,
+ 2, 4, 2, 1, 1, 1, 1, 0, 3, 10,
+ 7, 4, 5, 5, 0, 4, 2, 2, 4, 4,
+ 5, 4, 3, 1, 3, 2, 3, 0, 3, 2,
+ 1, 3, 3, 10, 0, 1, 1, 1, 1, 1,
+ 3, 3, 2, 1, 2, 3, 0, 3, 3, 0,
+ 1, 1, 2, 1, 2, 1, 2, 6, 1, 2,
+ 3, 2, 2, 1, 3, 1, 2, 1, 4, 1,
+ 3, 0, 3, 0, 2, 0, 3, 0, 2, 0,
+ 1, 1, 2, 6, 3, 0, 3, 0, 3, 0,
+ 5, 1, 1, 2, 2, 2, 2, 2, 2, 1,
+ 3, 3, 0, 1, 1, 0, 2, 2, 0, 1,
+ 2, 3, 1, 3, 1, 2, 1, 5, 6, 4,
+ 3, 3, 3, 2, 3, 5, 4, 6, 3, 1,
+ 3, 1, 2, 1, 1, 1, 1, 3, 5, 1,
+ 1, 1, 3, 1, 3, 4, 4, 5, 6, 6,
+ 8, 5, 4, 1, 2, 4, 1, 2, 4, 0,
+ 2, 1, 3, 1, 1, 2, 2, 1, 2, 3,
+ 2, 1, 1, 1, 1, 1, 1, 1, 3, 1,
+ 3, 1, 3, 1, 1, 1, 1, 1, 1, 1,
+ 2, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 3, 1, 1, 1, 1, 1, 1, 2, 2, 0
};
- /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
- Performed when YYTABLE does not specify something else to do. Zero
- means the default is an error. */
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 0, 6, 287, 0, 0, 0, 0, 0, 0, 18,
- 112, 0, 0, 7, 0, 0, 15, 8, 10, 11,
- 13, 14, 9, 17, 12, 16, 0, 105, 0, 285,
- 0, 279, 280, 0, 0, 0, 0, 0, 0, 113,
- 114, 0, 0, 107, 108, 0, 145, 1, 3, 2,
- 0, 106, 5, 4, 286, 0, 0, 0, 0, 186,
- 25, 0, 245, 242, 0, 271, 115, 40, 29, 0,
- 0, 30, 31, 34, 36, 0, 37, 39, 0, 41,
- 241, 35, 38, 0, 32, 33, 0, 0, 0, 0,
- 0, 116, 117, 221, 121, 207, 209, 211, 214, 217,
- 218, 219, 213, 212, 0, 257, 0, 0, 0, 0,
- 0, 0, 0, 94, 0, 0, 0, 101, 187, 0,
- 0, 91, 243, 244, 0, 0, 237, 234, 0, 43,
- 0, 246, 0, 0, 44, 0, 0, 248, 0, 186,
- 0, 272, 273, 0, 0, 120, 275, 276, 274, 0,
- 0, 0, 210, 0, 0, 186, 103, 0, 109, 0,
- 110, 0, 277, 0, 0, 0, 0, 0, 0, 93,
- 66, 27, 0, 0, 0, 0, 0, 188, 190, 192,
- 194, 0, 212, 0, 0, 0, 0, 237, 231, 0,
- 235, 0, 0, 251, 252, 253, 250, 254, 249, 0,
- 247, 0, 0, 123, 220, 0, 0, 147, 136, 122,
- 141, 124, 149, 118, 119, 206, 208, 163, 215, 258,
- 0, 0, 222, 239, 0, 0, 100, 0, 146, 0,
- 92, 19, 0, 0, 0, 0, 20, 21, 22, 0,
- 0, 0, 64, 0, 42, 56, 193, 201, 0, 0,
- 0, 0, 0, 261, 263, 264, 265, 266, 262, 267,
- 269, 0, 0, 0, 0, 255, 0, 0, 0, 0,
- 232, 0, 238, 230, 45, 0, 0, 46, 127, 0,
- 137, 143, 133, 128, 129, 131, 0, 0, 140, 0,
- 0, 139, 0, 151, 0, 0, 165, 223, 0, 224,
- 0, 102, 104, 278, 0, 0, 0, 0, 0, 0,
- 0, 259, 0, 257, 0, 63, 65, 68, 28, 0,
- 0, 0, 47, 0, 0, 49, 55, 57, 26, 200,
- 189, 191, 268, 270, 0, 0, 0, 0, 202, 199,
- 0, 198, 90, 0, 0, 236, 0, 229, 0, 0,
- 142, 144, 134, 130, 132, 0, 148, 0, 0, 138,
- 0, 0, 153, 0, 216, 0, 167, 225, 240, 0,
- 0, 0, 0, 96, 283, 284, 282, 281, 97, 95,
- 0, 67, 0, 83, 84, 85, 86, 87, 0, 0,
- 70, 48, 0, 51, 50, 0, 54, 0, 0, 204,
- 0, 0, 197, 256, 0, 233, 226, 0, 227, 0,
- 125, 126, 150, 152, 0, 155, 164, 0, 170, 169,
- 162, 0, 61, 0, 0, 58, 0, 0, 260, 0,
- 24, 62, 0, 0, 23, 0, 0, 0, 0, 195,
- 203, 0, 0, 0, 0, 0, 157, 166, 177, 180,
- 0, 0, 59, 98, 99, 0, 74, 76, 77, 78,
- 0, 0, 0, 52, 0, 196, 205, 89, 228, 135,
- 154, 156, 0, 111, 158, 159, 0, 181, 182, 183,
- 0, 0, 0, 0, 0, 88, 0, 82, 80, 0,
- 79, 0, 72, 73, 0, 53, 0, 160, 178, 0,
- 179, 171, 173, 172, 0, 0, 75, 0, 69, 0,
- 0, 184, 185, 0, 0, 0, 168, 0, 81, 0,
- 163, 174, 176, 175, 0, 0, 0, 60, 0, 161,
- 71
+ 0, 6, 289, 0, 0, 0, 0, 0, 0, 18,
+ 114, 0, 0, 7, 0, 0, 15, 8, 10, 11,
+ 13, 14, 9, 17, 12, 16, 0, 107, 0, 287,
+ 0, 281, 282, 0, 0, 0, 0, 0, 0, 115,
+ 116, 0, 0, 109, 110, 0, 147, 1, 3, 2,
+ 0, 107, 0, 105, 5, 4, 288, 0, 0, 0,
+ 0, 188, 25, 0, 247, 244, 0, 273, 117, 40,
+ 29, 0, 0, 30, 31, 34, 36, 0, 37, 39,
+ 0, 41, 243, 35, 38, 0, 32, 33, 0, 0,
+ 0, 0, 0, 118, 119, 223, 123, 209, 211, 213,
+ 216, 219, 220, 221, 215, 214, 0, 259, 0, 0,
+ 0, 0, 0, 106, 0, 0, 0, 94, 0, 0,
+ 0, 101, 189, 0, 0, 91, 245, 246, 0, 0,
+ 239, 236, 0, 43, 0, 248, 0, 0, 44, 0,
+ 0, 250, 0, 188, 0, 274, 275, 0, 0, 122,
+ 277, 278, 276, 0, 0, 0, 212, 0, 0, 188,
+ 103, 0, 111, 0, 112, 0, 279, 0, 108, 0,
+ 0, 0, 0, 0, 93, 66, 27, 0, 0, 0,
+ 0, 0, 190, 192, 194, 196, 0, 214, 0, 0,
+ 0, 0, 239, 233, 0, 237, 0, 0, 253, 254,
+ 255, 252, 256, 251, 0, 249, 0, 0, 125, 222,
+ 0, 0, 149, 138, 124, 143, 126, 151, 120, 121,
+ 208, 210, 165, 217, 260, 0, 0, 224, 241, 0,
+ 0, 100, 0, 148, 0, 92, 19, 0, 0, 0,
+ 0, 20, 21, 22, 0, 0, 0, 64, 0, 42,
+ 56, 195, 203, 0, 0, 0, 0, 0, 263, 264,
+ 268, 267, 266, 265, 271, 269, 0, 0, 0, 0,
+ 257, 0, 0, 0, 0, 234, 0, 240, 232, 45,
+ 0, 0, 46, 129, 0, 139, 145, 135, 130, 131,
+ 133, 0, 0, 142, 0, 0, 141, 0, 153, 0,
+ 0, 167, 225, 0, 226, 0, 102, 104, 280, 0,
+ 0, 0, 0, 0, 0, 0, 261, 0, 259, 0,
+ 63, 65, 68, 28, 0, 0, 0, 47, 0, 0,
+ 49, 55, 57, 26, 202, 191, 193, 272, 270, 0,
+ 0, 0, 0, 204, 201, 0, 200, 90, 0, 0,
+ 238, 0, 231, 0, 0, 144, 146, 136, 132, 134,
+ 0, 150, 0, 0, 140, 0, 0, 155, 0, 218,
+ 0, 169, 227, 242, 0, 0, 0, 0, 96, 285,
+ 286, 284, 283, 97, 95, 0, 67, 0, 83, 84,
+ 85, 86, 87, 0, 0, 70, 48, 0, 51, 50,
+ 0, 54, 0, 0, 206, 0, 0, 199, 258, 0,
+ 235, 228, 0, 229, 0, 127, 128, 152, 154, 0,
+ 157, 166, 0, 172, 171, 164, 0, 61, 0, 0,
+ 58, 0, 0, 262, 0, 24, 62, 0, 0, 23,
+ 0, 0, 0, 0, 197, 205, 0, 0, 0, 0,
+ 0, 159, 168, 179, 182, 0, 0, 59, 98, 99,
+ 0, 74, 76, 77, 78, 0, 0, 0, 52, 0,
+ 198, 207, 89, 230, 137, 156, 158, 0, 113, 160,
+ 161, 0, 183, 184, 185, 0, 0, 0, 0, 0,
+ 88, 0, 82, 80, 0, 79, 0, 72, 73, 0,
+ 53, 0, 162, 180, 0, 181, 173, 175, 174, 0,
+ 0, 75, 0, 69, 0, 0, 186, 187, 0, 0,
+ 0, 170, 0, 81, 0, 165, 176, 178, 177, 0,
+ 0, 0, 60, 0, 163, 71
};
- /* YYPGOTO[NTERM-NUM]. */
-static const yytype_int16 yypgoto[] =
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
{
- -239, -239, -239, -239, -239, -239, -239, -239, -88, -239,
- 355, 196, -239, -239, -238, -239, -239, -239, -239, -239,
- -239, 66, 44, -239, -239, -239, -239, -239, -239, -239,
- -239, -239, -239, -239, -239, 304, -239, -239, -239, 424,
- 9, -239, -239, -239, 392, -239, -92, -239, -239, -134,
- 179, -182, -11, -239, -239, -239, -239, -239, -239, -239,
- 59, 15, -239, -239, -239, -239, -239, -239, 92, 61,
- -239, -239, -55, -239, -119, 291, 289, 379, -28, 403,
- 402, 450, -123, -239, -239, -239, -239, 368, -239, 430,
- 370, -204, -177, 421, 146, -113, -239, -239, -239, -239,
- -239, -118, -4, 134, -239, -239
+ -1, 14, 15, 16, 17, 18, 19, 20, 176, 177,
+ 91, 331, 332, 333, 241, 321, 322, 246, 395, 439,
+ 499, 460, 461, 462, 463, 464, 392, 435, 21, 22,
+ 174, 315, 23, 24, 159, 160, 25, 53, 26, 43,
+ 44, 139, 41, 92, 93, 94, 143, 95, 296, 291,
+ 212, 213, 285, 286, 214, 298, 367, 420, 451, 478,
+ 479, 480, 300, 301, 371, 425, 426, 488, 521, 452,
+ 453, 484, 505, 121, 122, 182, 183, 184, 185, 186,
+ 97, 98, 99, 100, 101, 102, 103, 192, 193, 130,
+ 131, 196, 229, 104, 204, 271, 105, 317, 268, 106,
+ 148, 153, 165, 107, 383, 28, 29
};
- /* YYDEFGOTO[NTERM-NUM]. */
-static const yytype_int16 yydefgoto[] =
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -234
+static const yytype_int16 yypact[] =
+{
+ 168, -234, -234, -58, 181, -19, 40, -37, 59, -234,
+ 123, 181, 181, -234, 208, 127, -234, -234, -234, -234,
+ -234, -234, -234, -234, -234, -234, -2, 95, -46, 233,
+ 181, -234, -234, 113, 181, 181, 181, 181, 181, -234,
+ -234, 667, 139, 114, -234, 236, 128, -234, -234, -234,
+ 189, 95, 183, -234, -234, -234, -234, 60, 272, 196,
+ 138, 191, -234, 80, -234, -234, 296, 299, -234, -234,
+ -234, 757, 187, -234, 242, -234, -234, 190, -234, -234,
+ 310, -234, -234, -234, -234, 205, -234, -234, 214, 277,
+ 850, 355, 290, 219, -234, -234, 182, 20, -234, -234,
+ 269, -234, -234, -234, -234, -234, 1030, -9, 181, 181,
+ 228, 181, 181, -234, 366, 89, 174, 241, 181, 181,
+ 577, -234, -234, 235, 181, -234, -234, -234, 577, 42,
+ 17, -234, 370, -234, 126, 126, 1120, 371, -234, 243,
+ 30, -234, 34, 191, 1120, -234, -234, 181, 1120, -234,
+ -234, -234, -234, 1120, 35, 299, -234, 181, 359, -56,
+ -234, 368, -234, 270, -234, 110, -234, 270, -234, 181,
+ -1, 181, 181, 247, -234, 248, -234, 141, 1158, 940,
+ 228, 487, 378, 381, -234, -234, 545, 375, 1210, 143,
+ 8, 1120, 58, -234, 1120, -234, 330, 254, -234, -234,
+ -234, -234, -234, -234, 327, -234, 50, 255, -234, -234,
+ 16, 245, 153, -234, 256, 245, -14, 331, -234, -234,
+ 20, -234, 306, -234, -234, 264, 1120, -234, 268, 151,
+ 181, -234, 1120, -234, 181, -234, -234, 271, 325, 328,
+ 274, -234, -234, -234, 31, 181, 291, -1, 181, -234,
+ 14, -234, -234, 2, 326, 577, 577, 62, -234, -234,
+ -234, -234, -234, -234, -234, -234, 1120, 279, 1120, 39,
+ -234, 154, 289, 1120, 25, -234, 360, 268, -234, -234,
+ 1120, 415, -234, 133, 181, -234, -234, 332, -234, 334,
+ 335, 340, 34, -234, 418, 420, 245, 388, 358, 394,
+ 293, 342, -234, 156, -234, 1120, -234, 268, -234, 577,
+ 295, 298, 181, 437, 1, 158, -234, 167, 416, 144,
+ -234, 301, 311, -234, 357, 309, 1210, -234, 362, 181,
+ -234, -234, 14, -234, -234, 381, -234, -234, -234, 1120,
+ 312, 76, 850, -234, 268, 363, -234, -234, 1210, 313,
+ 268, 1120, -234, 32, -13, -234, -234, -234, -234, -234,
+ 34, 153, 351, 356, -234, 1120, 577, 364, 1120, -234,
+ 419, 159, -234, 268, 7, 181, 181, 169, -234, -234,
+ -234, -234, -234, -234, -234, 173, -234, 181, -234, -234,
+ -234, -234, 315, -1, 422, 365, -234, 577, -234, -234,
+ 322, -234, 237, 850, -234, 1120, 171, -234, -234, 1210,
+ 268, -234, 458, -234, 372, -234, -234, 329, 378, 429,
+ 382, 329, 1120, -234, -234, -234, 452, -234, 175, 177,
+ -234, 469, 1, -234, 181, -234, -234, 337, 435, -234,
+ 9, 181, 1120, 179, 268, -234, 184, 341, 577, 1120,
+ 472, 349, 343, -234, 178, 22, 376, -234, -234, -234,
+ 192, -234, -234, -234, -234, 21, 181, -16, -234, 346,
+ 268, -234, -234, -234, 378, 343, -234, 181, -234, 349,
+ -234, 1120, -234, -234, 403, 396, 389, 400, 494, 181,
+ -234, 181, -234, -234, 181, -234, 207, -234, -234, 373,
+ -234, 473, -234, -234, 115, -234, -234, -234, -234, 41,
+ 374, -234, 209, -234, 181, 383, -234, -234, 438, 395,
+ 439, -234, 181, -234, 211, 306, -234, -234, -234, 215,
+ 411, 377, -234, 505, -234, -234
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
{
- -1, 14, 15, 16, 17, 18, 19, 20, 171, 172,
- 89, 326, 327, 328, 236, 316, 317, 241, 390, 434,
- 494, 455, 456, 457, 458, 459, 387, 430, 21, 22,
- 169, 310, 23, 24, 155, 156, 25, 26, 43, 44,
- 135, 41, 90, 91, 92, 139, 93, 291, 286, 207,
- 208, 280, 281, 209, 293, 362, 415, 446, 473, 474,
- 475, 295, 296, 366, 420, 421, 483, 516, 447, 448,
- 479, 500, 117, 118, 177, 178, 179, 180, 181, 95,
- 96, 97, 98, 99, 100, 101, 187, 188, 126, 127,
- 191, 224, 102, 199, 266, 103, 312, 263, 104, 144,
- 149, 161, 105, 378, 28, 29
+ -234, -234, -234, -234, -234, -234, -234, -234, -94, -234,
+ 338, 185, -234, -234, -233, -234, -234, -234, -234, -234,
+ -234, 47, 36, -234, -234, -234, -234, -234, -234, -234,
+ -234, -234, -234, -234, -234, 292, -234, 474, -234, -234,
+ 414, 11, -234, -234, -234, 386, -234, -97, -234, -234,
+ -189, 166, -180, -10, -234, -234, -234, -234, -234, -234,
+ -234, 52, 10, -234, -234, -234, -234, -234, -234, 83,
+ 53, -234, -234, -75, -234, -116, 278, 282, 361, -35,
+ 393, 390, 436, -137, -234, -234, -234, -234, 352, -234,
+ 417, 354, -207, -185, 413, 140, -119, -234, -234, -234,
+ -234, -234, -120, -4, 120, -234, -234
};
- /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
- positive, shift that token. If negative, reduce the rule whose
- number is the opposite. If YYTABLE_NINF, syntax error. */
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -130
static const yytype_int16 yytable[] =
{
- 33, 45, 184, 182, 315, 185, 265, 42, 46, 27,
- 250, 182, 250, 94, 480, 210, 160, 298, 31, 250,
- 32, 487, 146, 147, 513, 232, 55, 153, 288, 289,
- 57, 58, 59, 60, 61, 51, 407, 31, 31, 32,
- 32, 125, 31, 488, 32, 39, 206, 141, 142, 141,
- 142, 189, 233, 340, 250, 481, 50, 248, 189, 34,
- 136, 182, 374, 182, 111, 514, 30, 492, 141, 142,
- 121, 278, 1, 40, 2, 37, 231, 383, 141, 142,
- 384, 385, 210, 247, 212, 234, 141, 142, 418, 10,
- 145, 375, 376, 36, 419, 112, 45, 47, 493, 35,
- 226, 3, 157, 46, 201, 162, 163, 235, 408, 359,
- 170, 173, 94, 206, 38, 290, 162, 4, 5, 377,
- 54, 124, 332, 333, 334, 6, 223, 311, 186, 56,
- 7, 482, 154, 401, 211, 341, 276, 182, 182, 214,
- 154, 515, 148, 329, 393, 422, 218, 10, 249, 219,
- 431, 8, 463, 356, 489, 318, 412, 386, 269, 416,
- 173, 272, 237, 238, 210, 268, 403, 204, 511, 406,
- 338, 107, 230, 205, 205, 9, 346, 186, 217, 116,
- 308, 10, 335, 106, 10, 369, 108, 309, 512, 372,
- 225, 182, 109, 223, 438, 206, 119, 11, 319, 302,
- 115, 211, 46, 426, 12, 193, 46, 13, 120, 110,
- 427, 252, 253, 254, 255, 256, 257, 258, 259, 260,
- 261, 157, 141, 142, 31, 303, 32, 265, 164, 165,
- 194, 320, 210, 336, 52, 339, 313, 53, 113, 173,
- 345, 321, 413, 399, 195, 196, 114, 348, 182, 282,
- 282, 279, 423, 424, 166, 167, 283, 283, 116, 141,
- 142, -127, 122, 206, 284, 284, 197, 123, 351, 428,
- 477, 128, 368, 435, 31, 46, 32, 130, 262, 182,
- 322, 228, 229, 211, 400, 285, 285, 46, 198, 437,
- 31, 323, 32, 131, 478, 324, 141, 142, 48, 129,
- 49, 141, 142, 162, 242, 243, 397, 141, 142, 223,
- 267, 229, 132, 325, 141, 142, 133, 143, 405, 350,
- 395, 299, 300, 134, 469, 137, 342, 343, 367, 300,
- 182, 140, 223, 379, 380, 223, 381, 382, 425, 229,
- 440, 300, 204, 451, 229, 452, 229, 466, 300, 467,
- 343, 211, 485, 486, 508, 486, 518, 229, 31, 62,
- 32, 63, 525, 229, 527, 229, 162, 162, 138, 150,
- 223, 507, 439, 168, 159, 64, 65, 220, 313, 183,
- 192, 202, 227, 203, 239, 10, 240, 67, 68, 449,
- 250, 519, 251, 273, 274, 69, 70, 264, 275, 524,
- 277, 292, 294, 71, 72, 287, 73, 297, 304, 465,
- 305, 221, 74, 307, 306, 344, 449, 314, 75, 337,
- 347, 76, 349, 352, 355, 460, 357, 353, 354, 358,
- 360, 361, 464, 363, 365, 77, 78, 364, 370, 371,
- 373, 153, 388, 79, 389, 391, 80, 392, 449, 394,
- 398, 410, 402, 404, 414, 429, 490, 460, 411, 432,
- 81, 31, 62, 32, 63, 417, 433, 174, 496, 442,
- 82, 83, 444, 436, 84, 85, 443, 300, 64, 65,
- 505, 453, 460, 86, 445, 162, 450, 461, 462, 87,
- 67, 68, 468, 471, 88, 222, 484, 472, 69, 70,
- 499, 501, 503, 476, 495, 162, 71, 72, 504, 73,
- 502, 510, 509, 162, 521, 74, 517, 522, 520, 523,
- 175, 75, 530, 396, 76, 529, 528, 491, 245, 301,
- 506, 158, 213, 497, 409, 526, 470, 498, 77, 78,
- 331, 330, 31, 62, 32, 63, 79, 215, 174, 80,
- 441, 216, 200, 246, 152, 270, 190, 271, 0, 64,
- 65, 454, 0, 81, 0, 0, 0, 0, 0, 0,
- 10, 67, 68, 82, 83, 0, 0, 84, 85, 69,
- 70, 0, 0, 0, 0, 0, 86, 71, 72, 0,
- 73, 0, 87, 0, 0, 0, 74, 176, 0, 0,
- 0, 175, 75, 0, 0, 76, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,
- 78, 0, 0, 31, 62, 32, 63, 79, 0, 0,
- 80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 64, 65, 66, 0, 81, 0, 0, 0, 0, 0,
- 0, 0, 67, 68, 82, 83, 0, 0, 84, 85,
- 69, 70, 0, 0, 0, 0, 0, 86, 71, 72,
- 0, 73, 0, 87, 0, 0, 0, 74, 176, 0,
- 0, 0, 0, 75, 0, 0, 76, 0, 0, 0,
+ 33, 187, 45, 270, 189, 215, 96, 42, 46, 187,
+ 255, 27, 190, 164, 320, 255, 255, 255, 157, 303,
+ 31, 283, 32, 294, 324, 31, 57, 32, 492, 485,
+ 59, 60, 61, 62, 63, 293, 129, 51, 31, 31,
+ 32, 32, 237, 150, 151, 211, 145, 146, 518, 345,
+ 493, 145, 146, 145, 146, 140, 412, 325, 497, 34,
+ 187, 30, 187, 145, 146, 253, 379, 326, 217, 238,
+ 486, 145, 146, 215, 125, 236, 120, 194, 50, 337,
+ 338, 339, 37, 252, 231, 405, 313, 230, 115, 519,
+ 498, 54, 149, 314, 55, 380, 381, 145, 146, 45,
+ 35, 206, 239, 361, 161, 46, 327, 166, 167, 96,
+ 295, 36, 10, 211, 175, 178, 364, 328, 194, 116,
+ 166, 281, 329, 228, 382, 240, 316, 158, 273, 413,
+ 10, 346, 158, 169, 170, 406, 187, 187, 216, 340,
+ 330, 398, 38, 219, 334, 351, 254, 487, 128, 427,
+ 223, 468, 39, 224, 323, 215, 274, 210, 417, 277,
+ 436, 421, 494, 408, 152, 178, 520, 242, 243, 1,
+ 343, 2, 209, 191, 411, 210, 222, 198, 235, 388,
+ 40, 516, 389, 390, 58, 31, 31, 32, 32, 191,
+ 187, 228, 377, 374, 10, 211, 443, 307, 3, 145,
+ 146, 517, 199, 145, 146, 287, 216, 46, 47, 123,
+ 482, 46, 288, 147, 4, 5, 200, 201, 171, 172,
+ 289, 124, 6, 215, 270, 287, 161, 7, 431, 52,
+ 308, 341, 288, 344, 483, 432, 56, -129, 350, 202,
+ 289, 318, 290, 404, 178, 353, 442, 187, 8, 31,
+ 418, 32, 233, 234, 108, 428, 429, 109, 145, 146,
+ 391, 203, 290, 211, 48, 423, 49, 110, 433, 111,
+ 373, 424, 112, 9, 356, 355, 284, 117, 187, 119,
+ 46, 440, 10, 247, 248, 272, 234, 114, 216, 145,
+ 146, 118, 46, 304, 305, 11, 347, 348, 372, 305,
+ 384, 385, 12, 126, 402, 13, 127, 228, 166, 386,
+ 387, 430, 234, 445, 305, 135, 410, 456, 234, 457,
+ 234, 471, 305, 120, 133, 400, 472, 348, 132, 187,
+ 228, 134, 474, 228, 490, 491, 257, 258, 259, 260,
+ 261, 262, 263, 264, 265, 266, 136, 145, 146, 513,
+ 491, 523, 234, 530, 234, 137, 216, 532, 234, 138,
+ 141, 142, 144, 31, 64, 32, 65, 154, 228, 163,
+ 444, 166, 166, 168, 512, 173, 188, 197, 207, 232,
+ 66, 67, 225, 318, 10, 208, 255, 454, 244, 245,
+ 256, 278, 69, 70, 524, 269, 279, 282, 280, 292,
+ 71, 72, 529, 267, 297, 299, 302, 470, 73, 74,
+ 310, 75, 309, 311, 454, 312, 226, 76, 349, 319,
+ 342, 352, 354, 77, 360, 362, 78, 363, 365, 357,
+ 465, 358, 359, 366, 368, 369, 375, 469, 370, 376,
+ 79, 80, 378, 157, 393, 394, 454, 399, 81, 396,
+ 397, 82, 415, 403, 409, 407, 434, 416, 437, 422,
+ 419, 495, 465, 441, 438, 447, 83, 448, 209, 449,
+ 450, 455, 305, 501, 458, 467, 84, 85, 466, 476,
+ 86, 87, 477, 473, 489, 510, 481, 465, 500, 88,
+ 166, 31, 64, 32, 65, 89, 504, 179, 506, 507,
+ 90, 227, 508, 509, 515, 527, 526, 528, 66, 67,
+ 166, 533, 535, 496, 514, 522, 250, 401, 166, 534,
+ 69, 70, 306, 162, 525, 113, 414, 511, 71, 72,
+ 218, 502, 475, 335, 503, 531, 73, 74, 336, 75,
+ 251, 220, 156, 221, 275, 76, 276, 195, 205, 446,
+ 180, 77, 459, 0, 78, 257, 258, 259, 260, 261,
+ 262, 263, 264, 265, 266, 0, 145, 146, 79, 80,
+ 0, 0, 0, 0, 0, 0, 81, 0, 0, 82,
+ 0, 31, 64, 32, 65, 0, 0, 179, 0, 0,
+ 0, 0, 0, 0, 83, 0, 0, 0, 66, 67,
+ 0, 10, 0, 0, 84, 85, 0, 0, 86, 87,
+ 69, 70, 0, 0, 0, 0, 0, 88, 71, 72,
+ 0, 0, 267, 89, 0, 0, 73, 74, 181, 75,
+ 0, 0, 0, 0, 0, 76, 0, 0, 0, 0,
+ 180, 77, 0, 0, 78, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 80,
+ 0, 0, 0, 0, 0, 0, 81, 0, 0, 82,
+ 0, 31, 64, 32, 65, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 83, 0, 0, 0, 66, 67,
+ 68, 0, 0, 0, 84, 85, 0, 0, 86, 87,
+ 69, 70, 0, 0, 0, 0, 0, 88, 71, 72,
+ 0, 0, 0, 89, 0, 0, 73, 74, 181, 75,
+ 0, 0, 0, 0, 0, 76, 0, 0, 0, 0,
+ 0, 77, 0, 0, 78, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 80,
+ 0, 0, 0, 0, 0, 0, 81, 0, 0, 82,
+ 0, 31, 64, 32, 65, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 83, 0, 0, 0, 66, 67,
+ 0, 0, 0, 0, 84, 85, 0, 0, 86, 87,
+ 69, 70, 0, 0, 0, 0, 0, 88, 71, 72,
+ 0, 0, 0, 89, 0, 0, 73, 74, 90, 75,
+ 0, 0, 0, 0, 0, 76, 0, 0, 0, 0,
+ 0, 77, 0, 0, 78, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 79, 80,
+ 0, 0, 0, 0, 0, 0, 81, 0, 0, 82,
+ 0, 0, 0, 0, 31, 64, 32, 65, 0, 0,
+ 0, 0, 0, 0, 83, 0, 0, 0, 0, 0,
+ 0, 66, 67, 0, 84, 85, 0, 0, 86, 87,
+ 0, 0, 0, 69, 70, 0, 0, 88, 128, 0,
+ 0, 71, 72, 89, 0, 0, 0, 0, 90, 73,
+ 74, 0, 75, 0, 0, 0, 0, 0, 76, 0,
+ 0, 0, 0, 0, 77, 0, 0, 78, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 77, 78, 0, 0, 31, 62, 32, 63, 79, 0,
- 0, 80, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 64, 65, 0, 0, 81, 0, 0, 0, 0,
- 0, 0, 0, 67, 68, 82, 83, 0, 0, 84,
- 85, 69, 70, 0, 0, 0, 0, 0, 86, 71,
- 72, 0, 73, 0, 87, 0, 0, 0, 74, 88,
- 0, 0, 0, 0, 75, 0, 0, 76, 0, 0,
+ 0, 79, 80, 0, 0, 0, 0, 0, 0, 81,
+ 0, 0, 82, 0, 31, 64, 32, 65, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 83, 0, 0,
+ 0, 66, 67, 0, 10, 0, 0, 84, 85, 0,
+ 0, 86, 87, 69, 70, 0, 0, 0, 0, 0,
+ 88, 71, 72, 0, 0, 0, 89, 0, 0, 73,
+ 74, 90, 75, 0, 0, 0, 0, 0, 76, 0,
+ 0, 0, 0, 180, 77, 0, 0, 78, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 77, 78, 0, 0, 0, 0, 0, 0, 79,
- 0, 0, 80, 0, 0, 0, 31, 62, 32, 63,
- 0, 0, 0, 0, 0, 0, 81, 0, 0, 0,
- 0, 0, 0, 64, 65, 0, 82, 83, 0, 0,
- 84, 85, 0, 0, 0, 67, 68, 0, 0, 86,
- 124, 0, 0, 69, 70, 87, 0, 0, 0, 0,
- 88, 71, 72, 0, 73, 0, 0, 0, 0, 0,
- 74, 0, 0, 0, 0, 0, 75, 0, 0, 76,
+ 0, 79, 80, 0, 0, 0, 0, 0, 0, 81,
+ 0, 0, 82, 0, 31, 64, 32, 65, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 83, 0, 0,
+ 0, 66, 155, 0, 0, 0, 0, 84, 85, 0,
+ 0, 86, 87, 69, 70, 0, 0, 0, 0, 0,
+ 88, 71, 72, 0, 0, 0, 89, 0, 0, 73,
+ 74, 181, 75, 0, 0, 0, 0, 0, 76, 0,
+ 0, 0, 0, 0, 77, 0, 0, 78, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 77, 78, 0, 0, 31, 62, 32,
- 63, 79, 0, 0, 80, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 64, 65, 0, 0, 81, 0,
- 0, 0, 0, 0, 0, 10, 67, 68, 82, 83,
- 0, 0, 84, 85, 69, 70, 0, 0, 0, 0,
- 0, 86, 71, 72, 0, 73, 0, 87, 0, 0,
- 0, 74, 88, 0, 0, 0, 175, 75, 0, 0,
- 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 77, 78, 0, 0, 31, 62,
- 32, 63, 79, 0, 0, 80, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 64, 151, 0, 0, 81,
- 0, 0, 0, 0, 0, 0, 0, 67, 68, 82,
- 83, 0, 0, 84, 85, 69, 70, 0, 0, 0,
- 0, 0, 86, 71, 72, 0, 73, 0, 87, 0,
- 0, 0, 74, 176, 0, 0, 0, 0, 75, 0,
- 0, 76, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 77, 78, 0, 0, 31,
- 62, 32, 63, 79, 0, 0, 80, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 64, 65, 0, 0,
- 81, 0, 0, 0, 0, 0, 0, 0, 67, 68,
- 82, 83, 0, 0, 84, 85, 69, 70, 0, 0,
- 0, 0, 0, 86, 71, 72, 0, 73, 0, 87,
- 0, 0, 0, 74, 88, 0, 0, 0, 0, 75,
- 0, 0, 76, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 77, 78, 0, 0,
- 0, 62, 0, 63, 79, 0, 0, 80, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 64, 151, 0,
- 0, 81, 0, 0, 0, 0, 0, 0, 0, 67,
- 68, 82, 83, 0, 0, 84, 85, 0, 70, 0,
- 0, 0, 0, 0, 86, 71, 72, 0, 73, 0,
- 87, 0, 0, 0, 74, 88, 0, 67, 68, 0,
- 0, 0, 0, 76, 0, 0, 70, 0, 0, 0,
- 0, 0, 0, 71, 72, 0, 73, 77, 78, 0,
- 0, 0, 74, 0, 0, 79, 0, 0, 80, 0,
- 0, 76, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 81, 0, 0, 77, 244, 0, 0, 0,
- 0, 0, 82, 79, 0, 0, 84, 85, 0, 0,
- 0, 0, 0, 0, 0, 86, 0, 0, 0, 0,
- 81, 87, 0, 0, 0, 0, 0, 0, 0, 0,
- 82, 0, 0, 0, 84, 85, 0, 0, 0, 0,
- 0, 0, 0, 86, 0, 0, 0, 0, 0, 87,
- 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
- 0, 141, 142, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 262
+ 0, 79, 80, 0, 0, 0, 0, 0, 0, 81,
+ 0, 0, 82, 0, 31, 64, 32, 65, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 83, 0, 0,
+ 0, 66, 67, 0, 0, 0, 0, 84, 85, 0,
+ 0, 86, 87, 69, 70, 0, 0, 0, 0, 0,
+ 88, 71, 72, 0, 0, 0, 89, 0, 0, 73,
+ 74, 90, 75, 0, 0, 0, 0, 0, 76, 0,
+ 0, 0, 0, 0, 77, 0, 0, 78, 0, 0,
+ 0, 69, 70, 0, 0, 0, 0, 0, 0, 0,
+ 72, 79, 80, 0, 0, 0, 0, 73, 74, 81,
+ 75, 0, 82, 0, 0, 64, 76, 65, 0, 0,
+ 0, 0, 0, 0, 0, 78, 0, 83, 0, 0,
+ 0, 66, 155, 0, 0, 0, 0, 84, 85, 79,
+ 249, 86, 87, 69, 70, 0, 0, 81, 0, 0,
+ 88, 0, 72, 0, 0, 0, 89, 0, 0, 73,
+ 74, 90, 75, 0, 0, 83, 0, 0, 76, 0,
+ 0, 0, 0, 0, 0, 84, 0, 78, 0, 86,
+ 87, 0, 0, 0, 0, 0, 0, 0, 88, 0,
+ 0, 79, 80, 0, 89, 0, 0, 0, 0, 81,
+ 0, 0, 82, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 83, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 84, 0, 0,
+ 0, 86, 87, 0, 0, 0, 0, 0, 0, 0,
+ 88, 0, 0, 0, 0, 0, 89
};
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-234)))
+
+#define yytable_value_is_error(Yytable_value) \
+ YYID (0)
+
static const yytype_int16 yycheck[] =
{
- 4, 12, 120, 116, 242, 124, 183, 11, 12, 0,
- 8, 124, 8, 41, 7, 138, 108, 221, 4, 8,
- 6, 7, 23, 24, 7, 43, 30, 27, 210, 37,
- 34, 35, 36, 37, 38, 26, 69, 4, 4, 6,
- 6, 69, 4, 29, 6, 29, 138, 21, 22, 21,
- 22, 60, 70, 10, 8, 48, 80, 176, 60, 78,
- 88, 174, 65, 176, 28, 48, 118, 74, 21, 22,
- 61, 205, 1, 57, 3, 118, 164, 35, 21, 22,
- 38, 39, 205, 175, 139, 103, 21, 22, 105, 113,
- 94, 94, 95, 71, 111, 59, 107, 0, 105, 118,
- 155, 30, 106, 107, 132, 109, 110, 125, 141, 291,
- 114, 115, 140, 205, 83, 123, 120, 46, 47, 122,
- 3, 130, 17, 18, 19, 54, 154, 240, 130, 71,
- 59, 124, 140, 337, 138, 92, 71, 250, 251, 143,
- 140, 124, 143, 141, 321, 141, 150, 113, 176, 153,
- 388, 80, 141, 287, 140, 243, 360, 115, 186, 363,
- 164, 189, 166, 167, 287, 119, 343, 141, 66, 141,
- 262, 142, 163, 140, 140, 104, 119, 130, 140, 131,
- 55, 113, 77, 114, 113, 304, 31, 62, 86, 307,
- 142, 304, 140, 221, 398, 287, 128, 126, 10, 227,
- 140, 205, 206, 55, 133, 51, 210, 136, 140, 83,
- 62, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 225, 21, 22, 4, 229, 6, 404, 44, 45,
- 76, 43, 355, 261, 136, 263, 240, 139, 5, 243,
- 268, 53, 361, 335, 90, 91, 95, 275, 361, 72,
- 72, 31, 370, 371, 44, 45, 79, 79, 131, 21,
- 22, 84, 7, 355, 87, 87, 112, 7, 279, 382,
- 32, 140, 300, 392, 4, 279, 6, 140, 77, 392,
- 92, 141, 142, 287, 9, 108,
<TRUNCATED>
[17/18] incubator-quickstep git commit: CI w/ gRPC to build the
distributed version.
Posted by zu...@apache.org.
CI w/ gRPC to build the distributed version.
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/338b8560
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/338b8560
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/338b8560
Branch: refs/heads/travis-grpc
Commit: 338b8560e7a917b38f445fa2f617061d819adf4b
Parents: f66f4bd
Author: Zuyu Zhang <zz...@pivotal.io>
Authored: Mon May 30 11:57:22 2016 -0700
Committer: Zuyu Zhang <zu...@apache.org>
Committed: Mon Jun 27 14:32:52 2016 -0700
----------------------------------------------------------------------
.travis.yml | 26 ++++++++++++++++++--------
CMakeLists.txt | 8 ++++++++
2 files changed, 26 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/338b8560/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index 54a0c8a..3c00cd7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,4 @@
-# NOTE(quickstep-team): In Travis-CI, jobs timeout if they take more than 120
+# NOTE(quickstep-team): In Travis-CI, jobs timeout if they take more than 50
# mins or if there is no log output for more than 10 mins. Hence, we use -O0 to
# speed up compilation in release build. Also, jobs can only use upto 20GB of
# disk space. Hence, we minimize the amount of debug symbol using -g0 (DEBUG
@@ -15,13 +15,13 @@ compiler:
- clang
env:
- - BUILD_TYPE=Debug VECTOR_COPY_ELISION_LEVEL=joinwithbinaryexpressions
- - BUILD_TYPE=Release VECTOR_COPY_ELISION_LEVEL=joinwithbinaryexpressions
- BUILD_TYPE=Debug VECTOR_COPY_ELISION_LEVEL=selection
- BUILD_TYPE=Release VECTOR_COPY_ELISION_LEVEL=selection
+ - BUILD_TYPE=Debug VECTOR_COPY_ELISION_LEVEL=none
+ - BUILD_TYPE=Release VECTOR_COPY_ELISION_LEVEL=none
install:
- - if [ "$CC" = "gcc" ]; then
+ - if [ "$VECTOR_COPY_ELISION_LEVEL" = "selection" ] && [ "$CC" = "gcc" ]; then
export MAKE_JOBS=1;
else
export MAKE_JOBS=2;
@@ -38,11 +38,22 @@ install:
- export DEBUG_FLAGS="-g0";
- export RELEASE_FLAGS="-O0 -DNDEBUG";
- export LINKER_FLAGS="-s"
+ # Protobuf 3 beta.
+ - wget https://github.com/google/protobuf/releases/download/v3.0.0-beta-3/protobuf-cpp-3.0.0-beta-3.tar.gz
+ - tar -xzvf protobuf-cpp-3.0.0-beta-3.tar.gz
+ - pushd protobuf-3.0.0-beta-3 && ./configure --prefix=/usr && make && sudo make install && popd
+ - rm -rf protobuf*
+ - export PROTOC=`which protoc`
+ # gRPC.
+ - git clone https://github.com/grpc/grpc.git
+ - pushd grpc && git checkout release-0_14_1 && git submodule update --init && make && sudo make install && popd
+ - rm -rf grpc
before_script:
- $CC --version
- $CXX --version
- $CLINKER --version
+ - $PROTOC --version
- (cd build &&
cmake -D CMAKE_BUILD_TYPE=$BUILD_TYPE
-D BUILD_SHARED_LIBS=On
@@ -55,14 +66,15 @@ before_script:
-D CMAKE_CXX_COMPILER=$CXX
-D CMAKE_LINKER=$CLINKER
-D USE_TCMALLOC=0
- -D VECTOR_COPY_ELISION_LEVEL=$VECTOR_COPY_ELISION_LEVEL ..)
+ -D VECTOR_COPY_ELISION_LEVEL=$VECTOR_COPY_ELISION_LEVEL
+ -D ENABLE_DISTRIBUTED=ON ..)
script:
- ./third_party/cpplint/lint_everything.py
- ./validate_cmakelists.py
- ./cyclic_dependency.py
- (cd build && make -j$MAKE_JOBS)
- - (cd build && ctest --output-on-failure -j$TEST_JOBS)
+ - (cd build && ctest -E native_net_client_message_bus_unittest --output-on-failure -j$TEST_JOBS)
after_failure:
- df -h
@@ -84,8 +96,6 @@ addons:
- g++-5
- clang-3.7
- binutils-gold
- - libprotobuf-dev
- - protobuf-compiler
- libgtest-dev
- python-networkx
- libnuma-dev
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/338b8560/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 20e1fb9..de6754a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -281,6 +281,14 @@ else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
endif()
+ # Clang reports such warning when using Protoc 3.0 beta.
+ if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang")
+ CHECK_CXX_COMPILER_FLAG("-Wno-extended-offsetof" COMPILER_HAS_WNO_EXTENDED_OFFSETOF)
+ if (COMPILER_HAS_WNO_EXTENDED_OFFSETOF)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-extended-offsetof")
+ endif()
+ endif()
+
# One of the protobuf headers includes a nested anonymous union within
# another anonymous type. Ordinarily we work around this by compiling the
# protobuf libraries themselves with "-Wno-nested-anon-types" and including
[08/18] incubator-quickstep git commit: QUICKSTEP-18: Allow
BasicColumnStoreTupleStorageSubBlock to be unsorted
Posted by zu...@apache.org.
QUICKSTEP-18: Allow BasicColumnStoreTupleStorageSubBlock to be unsorted
Review comments applied
Revert build fix for Lexer (separate PR has been opened)
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/c1476d1e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/c1476d1e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/c1476d1e
Branch: refs/heads/travis-grpc
Commit: c1476d1e7637a943b00e104cdfd9498e3c7cfe03
Parents: 00ca1e4
Author: Craig Chasseur <sp...@gmail.com>
Authored: Sun Jun 12 04:01:17 2016 -0700
Committer: Craig Chasseur <sp...@gmail.com>
Committed: Sun Jun 19 21:58:27 2016 -0700
----------------------------------------------------------------------
parser/CMakeLists.txt | 7 +-
.../BasicColumnStoreTupleStorageSubBlock.cpp | 68 +++++----
.../BasicColumnStoreTupleStorageSubBlock.hpp | 15 +-
storage/StorageBlockLayout.proto | 6 +-
...ColumnStoreTupleStorageSubBlock_unittest.cpp | 137 ++++++++++++++-----
5 files changed, 158 insertions(+), 75 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/c1476d1e/parser/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/parser/CMakeLists.txt b/parser/CMakeLists.txt
index 55c4a67..114ad14 100644
--- a/parser/CMakeLists.txt
+++ b/parser/CMakeLists.txt
@@ -384,15 +384,12 @@ set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/SqlParser_gen.cpp APPEND PROPERT
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-Wno-deprecated-register" COMPILER_HAS_WNO_DEPRECATED_REGISTER)
if (COMPILER_HAS_WNO_DEPRECATED_REGISTER)
- set_property(TARGET quickstep_parser_SqlLexer APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-deprecated-register")
+ set_target_properties(quickstep_parser_SqlLexer PROPERTIES COMPILE_FLAGS "-Wno-deprecated-register")
endif()
# GCC will make a warning for unsigned-signed comparisons which are inherent
# in the lexer. For this, we turn off the sign compare.
-CHECK_CXX_COMPILER_FLAG("-Wno-sign-compare" COMPILER_HAS_WNO_SIGN_COMPARE)
-if (COMPILER_HAS_WNO_SIGN_COMPARE)
- set_property(TARGET quickstep_parser_SqlLexer APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-sign-compare")
-endif()
+set_target_properties(quickstep_parser_SqlLexer PROPERTIES COMPILE_FLAGS "-Wno-sign-compare")
add_subdirectory(tests)
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/c1476d1e/storage/BasicColumnStoreTupleStorageSubBlock.cpp
----------------------------------------------------------------------
diff --git a/storage/BasicColumnStoreTupleStorageSubBlock.cpp b/storage/BasicColumnStoreTupleStorageSubBlock.cpp
index 0c913ff..a474437 100644
--- a/storage/BasicColumnStoreTupleStorageSubBlock.cpp
+++ b/storage/BasicColumnStoreTupleStorageSubBlock.cpp
@@ -52,6 +52,8 @@
#include "utility/PtrVector.hpp"
#include "utility/ScopedBuffer.hpp"
+#include "glog/logging.h"
+
using std::memcpy;
using std::memmove;
using std::size_t;
@@ -104,14 +106,19 @@ BasicColumnStoreTupleStorageSubBlock::BasicColumnStoreTupleStorageSubBlock(
new_block,
sub_block_memory,
sub_block_memory_size),
+ sort_specified_(description_.HasExtension(
+ BasicColumnStoreTupleStorageSubBlockDescription::sort_attribute_id)),
sorted_(true),
header_(static_cast<BasicColumnStoreHeader*>(sub_block_memory)) {
if (!DescriptionIsValid(relation_, description_)) {
FATAL_ERROR("Attempted to construct a BasicColumnStoreTupleStorageSubBlock from an invalid description.");
}
- sort_column_id_ = description_.GetExtension(BasicColumnStoreTupleStorageSubBlockDescription::sort_attribute_id);
- sort_column_type_ = &(relation_.getAttributeById(sort_column_id_)->getType());
+ if (sort_specified_) {
+ sort_column_id_ = description_.GetExtension(
+ BasicColumnStoreTupleStorageSubBlockDescription::sort_attribute_id);
+ sort_column_type_ = &(relation_.getAttributeById(sort_column_id_)->getType());
+ }
if (sub_block_memory_size < sizeof(BasicColumnStoreHeader)) {
throw BlockMemoryTooSmall("BasicColumnStoreTupleStorageSubBlock", sub_block_memory_size_);
@@ -183,26 +190,27 @@ bool BasicColumnStoreTupleStorageSubBlock::DescriptionIsValid(
if (description.sub_block_type() != TupleStorageSubBlockDescription::BASIC_COLUMN_STORE) {
return false;
}
- // Make sure a sort_attribute_id is specified.
- if (!description.HasExtension(BasicColumnStoreTupleStorageSubBlockDescription::sort_attribute_id)) {
- return false;
- }
// Make sure relation is not variable-length.
if (relation.isVariableLength()) {
return false;
}
- // Check that the specified sort attribute exists and can be ordered by LessComparison.
- attribute_id sort_attribute_id = description.GetExtension(
- BasicColumnStoreTupleStorageSubBlockDescription::sort_attribute_id);
- if (!relation.hasAttributeWithId(sort_attribute_id)) {
- return false;
- }
- const Type &sort_attribute_type = relation.getAttributeById(sort_attribute_id)->getType();
- if (!ComparisonFactory::GetComparison(ComparisonID::kLess).canCompareTypes(sort_attribute_type,
- sort_attribute_type)) {
- return false;
+ // If a sort attribute is specified, check that it exists and can be ordered
+ // by LessComparison.
+ if (description.HasExtension(
+ BasicColumnStoreTupleStorageSubBlockDescription::sort_attribute_id)) {
+ const attribute_id sort_attribute_id = description.GetExtension(
+ BasicColumnStoreTupleStorageSubBlockDescription::sort_attribute_id);
+ if (!relation.hasAttributeWithId(sort_attribute_id)) {
+ return false;
+ }
+ const Type &sort_attribute_type =
+ relation.getAttributeById(sort_attribute_id)->getType();
+ if (!ComparisonFactory::GetComparison(ComparisonID::kLess).canCompareTypes(
+ sort_attribute_type, sort_attribute_type)) {
+ return false;
+ }
}
return true;
@@ -230,9 +238,9 @@ TupleStorageSubBlock::InsertResult BasicColumnStoreTupleStorageSubBlock::insertT
}
tuple_id insert_position = header_->num_tuples;
- // If sort column is NULL, skip the search and put the new tuple at the end
- // of everything else.
- if (!tuple.getAttributeValue(sort_column_id_).isNull()) {
+ // If this column store is unsorted, or the value of the sort column is NULL,
+ // skip the search and put the new tuple at the end of everything else.
+ if (sort_specified_ && !tuple.getAttributeValue(sort_column_id_).isNull()) {
// Binary search for the appropriate insert location.
ColumnStripeIterator begin_it(column_stripes_[sort_column_id_],
relation_.getAttributeById(sort_column_id_)->getType().maximumByteLength(),
@@ -435,6 +443,9 @@ bool BasicColumnStoreTupleStorageSubBlock::canSetAttributeValuesInPlaceTyped(
const tuple_id tuple,
const std::unordered_map<attribute_id, TypedValue> &new_values) const {
DEBUG_ASSERT(hasTupleWithID(tuple));
+ if (!sort_specified_) {
+ return true;
+ }
for (std::unordered_map<attribute_id, TypedValue>::const_iterator it
= new_values.begin();
it != new_values.end();
@@ -453,7 +464,7 @@ void BasicColumnStoreTupleStorageSubBlock::setAttributeValueInPlaceTyped(
const tuple_id tuple,
const attribute_id attr,
const TypedValue &value) {
- DEBUG_ASSERT(attr != sort_column_id_);
+ DCHECK(!sort_specified_ || (attr != sort_column_id_));
const Type &attr_type = relation_.getAttributeById(attr)->getType();
void *value_position = static_cast<char*>(column_stripes_[attr])
@@ -473,10 +484,10 @@ void BasicColumnStoreTupleStorageSubBlock::setAttributeValueInPlaceTyped(
bool BasicColumnStoreTupleStorageSubBlock::deleteTuple(const tuple_id tuple) {
DEBUG_ASSERT(hasTupleWithID(tuple));
- if (!column_null_bitmaps_.elementIsNull(sort_column_id_)) {
- if (column_null_bitmaps_[sort_column_id_].getBit(tuple)) {
- --(header_->nulls_in_sort_column);
- }
+ if (sort_specified_
+ && !column_null_bitmaps_.elementIsNull(sort_column_id_)
+ && column_null_bitmaps_[sort_column_id_].getBit(tuple)) {
+ --(header_->nulls_in_sort_column);
}
if (tuple == header_->num_tuples - 1) {
@@ -563,7 +574,7 @@ bool BasicColumnStoreTupleStorageSubBlock::bulkDeleteTuples(TupleIdSequence *tup
predicate_cost_t BasicColumnStoreTupleStorageSubBlock::estimatePredicateEvaluationCost(
const ComparisonPredicate &predicate) const {
- if (predicate.isAttributeLiteralComparisonPredicate()) {
+ if (sort_specified_ && predicate.isAttributeLiteralComparisonPredicate()) {
std::pair<bool, attribute_id> comparison_attr = predicate.getAttributeFromAttributeLiteralComparison();
if (comparison_attr.second == sort_column_id_) {
return predicate_cost::kBinarySearch;
@@ -575,6 +586,11 @@ predicate_cost_t BasicColumnStoreTupleStorageSubBlock::estimatePredicateEvaluati
TupleIdSequence* BasicColumnStoreTupleStorageSubBlock::getMatchesForPredicate(
const ComparisonPredicate &predicate,
const TupleIdSequence *filter) const {
+ DCHECK(sort_specified_) <<
+ "Called BasicColumnStoreTupleStorageSubBlock::getMatchesForPredicate() "
+ "for an unsorted column store (predicate should have been evaluated "
+ "with a scan instead).";
+
TupleIdSequence *matches = SortColumnPredicateEvaluator::EvaluatePredicateForUncompressedSortColumn(
predicate,
relation_,
@@ -671,6 +687,8 @@ void BasicColumnStoreTupleStorageSubBlock::shiftNullBitmaps(
// total size of tuples contained in this sub-block. It could be done with
// less memory, although the implementation would be more complex.
bool BasicColumnStoreTupleStorageSubBlock::rebuildInternal() {
+ DCHECK(sort_specified_);
+
const tuple_id num_tuples = header_->num_tuples;
// Immediately return if 1 or 0 tuples.
if (num_tuples <= 1) {
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/c1476d1e/storage/BasicColumnStoreTupleStorageSubBlock.hpp
----------------------------------------------------------------------
diff --git a/storage/BasicColumnStoreTupleStorageSubBlock.hpp b/storage/BasicColumnStoreTupleStorageSubBlock.hpp
index 6c72c78..b36eb20 100644
--- a/storage/BasicColumnStoreTupleStorageSubBlock.hpp
+++ b/storage/BasicColumnStoreTupleStorageSubBlock.hpp
@@ -108,7 +108,9 @@ class BasicColumnStoreTupleStorageSubBlock : public TupleStorageSubBlock {
}
bool adHocInsertIsEfficient() const override {
- return false;
+ // Ad-hoc insert is only efficient if it doesn't require resorting the
+ // whole block.
+ return !sort_specified_;
}
TupleStorageSubBlockType getTupleStorageSubBlockType() const override {
@@ -170,14 +172,14 @@ class BasicColumnStoreTupleStorageSubBlock : public TupleStorageSubBlock {
const TupleIdSequence *filter) const override;
void rebuild() override {
- if (!sorted_) {
+ if (sort_specified_ && !sorted_) {
rebuildInternal();
}
}
bool isInsertOrderPreserving() const override {
- // Rebuild reorders inserts based on sort column.
- return false;
+ // Rebuild reorders inserts based on sort column if any is specified.
+ return !sort_specified_;
}
private:
@@ -211,11 +213,12 @@ class BasicColumnStoreTupleStorageSubBlock : public TupleStorageSubBlock {
const tuple_id distance);
// Sort all columns according to ascending order of values in the sort
- // column. Returns true if any reordering occured.
+ // column. Returns true if any reordering occured. This should only be called
+ // when 'sort_specified_' is true, otherwise the block is always "built".
bool rebuildInternal();
tuple_id max_tuples_;
- bool sorted_;
+ bool sort_specified_, sorted_;
attribute_id sort_column_id_;
const Type *sort_column_type_;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/c1476d1e/storage/StorageBlockLayout.proto
----------------------------------------------------------------------
diff --git a/storage/StorageBlockLayout.proto b/storage/StorageBlockLayout.proto
index 9e13fbe..cafc0e9 100644
--- a/storage/StorageBlockLayout.proto
+++ b/storage/StorageBlockLayout.proto
@@ -1,7 +1,7 @@
// Copyright 2011-2015 Quickstep Technologies LLC.
// Copyright 2015-2016 Pivotal Software, Inc.
// Copyright 2016, Quickstep Research Group, Computer Sciences Department,
-// University of Wisconsin\u2014Madison.
+// University of Wisconsin-Madison.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -38,8 +38,8 @@ message TupleStorageSubBlockDescription {
message BasicColumnStoreTupleStorageSubBlockDescription {
extend TupleStorageSubBlockDescription {
- // Extentions may not be marked required in protobuf 2.6 or higher. This
- // field is considered required when sub_block_type == BASIC_COLUMN_STORE.
+ // Indicates the attribute to sort the column store by. If unset, the
+ // column store will be unsorted.
optional int32 sort_attribute_id = 64;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/c1476d1e/storage/tests/BasicColumnStoreTupleStorageSubBlock_unittest.cpp
----------------------------------------------------------------------
diff --git a/storage/tests/BasicColumnStoreTupleStorageSubBlock_unittest.cpp b/storage/tests/BasicColumnStoreTupleStorageSubBlock_unittest.cpp
index e5476f7..df8b479 100644
--- a/storage/tests/BasicColumnStoreTupleStorageSubBlock_unittest.cpp
+++ b/storage/tests/BasicColumnStoreTupleStorageSubBlock_unittest.cpp
@@ -109,8 +109,11 @@ class BasicColumnStoreTupleStorageSubBlockTest : public ::testing::TestWithParam
tuple_store_description_.reset(new TupleStorageSubBlockDescription());
tuple_store_description_->set_sub_block_type(TupleStorageSubBlockDescription::BASIC_COLUMN_STORE);
- tuple_store_description_->SetExtension(BasicColumnStoreTupleStorageSubBlockDescription::sort_attribute_id,
- sort_column);
+ if (sort_column != kInvalidCatalogId) {
+ tuple_store_description_->SetExtension(
+ BasicColumnStoreTupleStorageSubBlockDescription::sort_attribute_id,
+ sort_column);
+ }
tuple_store_.reset(new BasicColumnStoreTupleStorageSubBlock(*relation_,
*tuple_store_description_,
@@ -197,7 +200,7 @@ class BasicColumnStoreTupleStorageSubBlockTest : public ::testing::TestWithParam
}
int computeNullsInSortColumn(const attribute_id sort_column_id) {
- if (!GetParam()) {
+ if (sort_column_id == kInvalidCatalogId || !GetParam()) {
return 0;
}
@@ -341,11 +344,15 @@ class BasicColumnStoreTupleStorageSubBlockTest : public ::testing::TestWithParam
EXPECT_EQ(computeRowCapacity() - regular_tuples_deleted - last_tuples_deleted,
static_cast<std::size_t>(tuple_store_->getMaxTupleID() + 1));
- const Type &sort_attribute_type = relation_->getAttributeById(sort_attribute_id)->getType();
- std::unique_ptr<UncheckedComparator> sort_attribute_comparator(
- ComparisonFactory::GetComparison(ComparisonID::kLessOrEqual).makeUncheckedComparatorForTypes(
- sort_attribute_type,
- sort_attribute_type));
+ std::unique_ptr<UncheckedComparator> sort_attribute_comparator;
+ if (sort_attribute_id != kInvalidCatalogId) {
+ const Type &sort_attribute_type =
+ relation_->getAttributeById(sort_attribute_id)->getType();
+ sort_attribute_comparator.reset(
+ ComparisonFactory::GetComparison(ComparisonID::kLessOrEqual)
+ .makeUncheckedComparatorForTypes(sort_attribute_type,
+ sort_attribute_type));
+ }
std::vector<bool> existence_check_vector;
existence_check_vector.resize(computeRowCapacity() - 2, false);
@@ -390,17 +397,21 @@ class BasicColumnStoreTupleStorageSubBlockTest : public ::testing::TestWithParam
}
}
- // Check ordering.
- TypedValue sort_attribute_value = tuple_store_->getAttributeValueTyped(tid, sort_attribute_id);
- if (previous_sort_attribute_value.get() != nullptr) {
- if (previous_sort_attribute_value->isNull()) {
- EXPECT_TRUE(sort_attribute_value.isNull());
- } else if (!sort_attribute_value.isNull()) {
- EXPECT_TRUE(sort_attribute_comparator->compareTypedValues(*previous_sort_attribute_value,
- sort_attribute_value));
+ // Check ordering if block is sorted.
+ if (sort_attribute_id != kInvalidCatalogId) {
+ TypedValue sort_attribute_value =
+ tuple_store_->getAttributeValueTyped(tid, sort_attribute_id);
+ if (previous_sort_attribute_value) {
+ if (previous_sort_attribute_value->isNull()) {
+ EXPECT_TRUE(sort_attribute_value.isNull());
+ } else if (!sort_attribute_value.isNull()) {
+ EXPECT_TRUE(sort_attribute_comparator->compareTypedValues(
+ *previous_sort_attribute_value,
+ sort_attribute_value));
+ }
}
+ previous_sort_attribute_value.reset(new TypedValue(sort_attribute_value));
}
- previous_sort_attribute_value.reset(new TypedValue(sort_attribute_value));
}
EXPECT_EQ(2 - last_tuples_deleted, num_last_tuples);
@@ -435,13 +446,18 @@ class BasicColumnStoreTupleStorageSubBlockTest : public ::testing::TestWithParam
delete_sequence.set(tid, true);
}
// One of the special "last" values.
- if (GetParam()) {
+ if (sort_attribute_id != kInvalidCatalogId && GetParam()) {
delete_sequence.set(row_capacity - computeNullsInSortColumn(sort_attribute_id) - 2, true);
}
EXPECT_TRUE(tuple_store_->bulkDeleteTuples(&delete_sequence));
- checkBlockValues(sort_attribute_id, delete_sequence.numTuples() + 2 - 1, 1);
+ if (sort_attribute_id == kInvalidCatalogId) {
+ // There is no special treatment of "last" values without sorting.
+ checkBlockValues(sort_attribute_id, delete_sequence.numTuples(), 2);
+ } else {
+ checkBlockValues(sort_attribute_id, delete_sequence.numTuples() + 2 - 1, 1);
+ }
}
// Create a ComparisonPredicate of the form "attribute comp literal".
@@ -702,23 +718,26 @@ class BasicColumnStoreTupleStorageSubBlockTest : public ::testing::TestWithParam
TypedValue new_wide_char_value(kChar, new_wide_char_lit, 32);
std::unordered_map<attribute_id, TypedValue> proposed_values;
- switch (sort_attribute_id) {
- case 0:
- proposed_values.emplace(0, new_int_value);
- break;
- case 1:
- proposed_values.emplace(1, new_double_value);
- break;
- case 2:
- proposed_values.emplace(2, new_narrow_char_value);
- break;
- case 3:
- proposed_values.emplace(3, new_wide_char_value);
- break;
- }
+ if (sort_attribute_id != kInvalidCatalogId) {
+ switch (sort_attribute_id) {
+ case 0:
+ proposed_values.emplace(0, new_int_value);
+ break;
+ case 1:
+ proposed_values.emplace(1, new_double_value);
+ break;
+ case 2:
+ proposed_values.emplace(2, new_narrow_char_value);
+ break;
+ case 3:
+ proposed_values.emplace(3, new_wide_char_value);
+ break;
+ }
- // Can't overwrite a sort column value in-place.
- EXPECT_FALSE(tuple_store_->canSetAttributeValuesInPlaceTyped(target_tid, proposed_values));
+ // Can't overwrite a sort column value in-place.
+ EXPECT_FALSE(tuple_store_->canSetAttributeValuesInPlaceTyped(
+ target_tid, proposed_values));
+ }
// Other column values should be OK.
proposed_values.clear();
@@ -726,7 +745,9 @@ class BasicColumnStoreTupleStorageSubBlockTest : public ::testing::TestWithParam
proposed_values.emplace(1, new_double_value);
proposed_values.emplace(2, new_narrow_char_value);
proposed_values.emplace(3, new_wide_char_value);
- proposed_values.erase(sort_attribute_id);
+ if (sort_attribute_id != kInvalidCatalogId) {
+ proposed_values.erase(sort_attribute_id);
+ }
EXPECT_TRUE(tuple_store_->canSetAttributeValuesInPlaceTyped(target_tid, proposed_values));
// Actually set values.
@@ -820,6 +841,14 @@ TEST_P(BasicColumnStoreTupleStorageSubBlockTest, DescriptionIsValidTest) {
*tuple_store_description_));
}
+ // Also check a description that doesn't specify a sort column.
+ tuple_store_description_.reset(new TupleStorageSubBlockDescription());
+ tuple_store_description_->set_sub_block_type(
+ TupleStorageSubBlockDescription::BASIC_COLUMN_STORE);
+ EXPECT_TRUE(BasicColumnStoreTupleStorageSubBlock::DescriptionIsValid(
+ *relation_,
+ *tuple_store_description_));
+
// An uninitialized description is not valid.
tuple_store_description_.reset(new TupleStorageSubBlockDescription());
EXPECT_FALSE(BasicColumnStoreTupleStorageSubBlock::DescriptionIsValid(
@@ -859,6 +888,24 @@ TEST_P(BasicColumnStoreTupleStorageSubBlockTest, BlockTooSmallTest) {
EXPECT_THROW(createBlock(0, 32), BlockMemoryTooSmall);
}
+TEST_P(BasicColumnStoreTupleStorageSubBlockTest, InsertWithNoSortColumnTest) {
+ // Non-random, batch insert.
+ createBlock(kInvalidCatalogId, kSubBlockSize);
+ fillBlockWithSampleData(false, false);
+
+ // Non-random, ad-hoc insert.
+ createBlock(kInvalidCatalogId, kSubBlockSize);
+ fillBlockWithSampleData(false, true);
+
+ // Random order, batch insert.
+ createBlock(kInvalidCatalogId, kSubBlockSize);
+ fillBlockWithSampleData(true, false);
+
+ // Random order, ad-hoc insert.
+ createBlock(kInvalidCatalogId, kSubBlockSize);
+ fillBlockWithSampleData(true, true);
+}
+
TEST_P(BasicColumnStoreTupleStorageSubBlockTest, InsertWithIntSortColumnTest) {
// Non-random, batch insert.
createBlock(0, kSubBlockSize);
@@ -931,6 +978,12 @@ TEST_P(BasicColumnStoreTupleStorageSubBlockTest, InsertWithWideCharSortColumnTes
fillBlockWithSampleData(true, true);
}
+TEST_P(BasicColumnStoreTupleStorageSubBlockTest, GetValuesWithNoSortColumnTest) {
+ createBlock(kInvalidCatalogId, kSubBlockSize);
+ fillBlockWithSampleData(true, false);
+ checkBlockValues(kInvalidCatalogId, 0, 0);
+}
+
TEST_P(BasicColumnStoreTupleStorageSubBlockTest, GetValuesWithIntSortColumnTest) {
createBlock(0, kSubBlockSize);
fillBlockWithSampleData(true, false);
@@ -955,6 +1008,10 @@ TEST_P(BasicColumnStoreTupleStorageSubBlockTest, GetValuesWithWideCharSortColumn
checkBlockValues(3, 0, 0);
}
+TEST_P(BasicColumnStoreTupleStorageSubBlockTest, DeleteWithNoSortColumnTest) {
+ runDeleteTest(kInvalidCatalogId);
+}
+
TEST_P(BasicColumnStoreTupleStorageSubBlockTest, DeleteWithIntSortColumnTest) {
runDeleteTest(0);
}
@@ -971,6 +1028,10 @@ TEST_P(BasicColumnStoreTupleStorageSubBlockTest, DeleteWithWideCharSortColumnTes
runDeleteTest(3);
}
+TEST_P(BasicColumnStoreTupleStorageSubBlockTest, GetMatchesForPredicateWithNoSortColumnTest) {
+ runCheckPredicateTest(kInvalidCatalogId);
+}
+
TEST_P(BasicColumnStoreTupleStorageSubBlockTest, GetMatchesForPredicateWithIntSortColumnTest) {
runCheckPredicateTest(0);
}
@@ -987,6 +1048,10 @@ TEST_P(BasicColumnStoreTupleStorageSubBlockTest, GetMatchesForPredicateWithWideC
runCheckPredicateTest(3);
}
+TEST_P(BasicColumnStoreTupleStorageSubBlockTest, SetAttributeValueInPlaceTypedWithNoSortColumnTest) {
+ runSetAttributeValueInPlaceTypedTest(kInvalidCatalogId);
+}
+
TEST_P(BasicColumnStoreTupleStorageSubBlockTest, SetAttributeValueInPlaceTypedWithIntSortColumnTest) {
runSetAttributeValueInPlaceTypedTest(0);
}
[12/18] incubator-quickstep git commit: Added PRIORITY clause in
parser.
Posted by zu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/parser/preprocessed/SqlLexer_gen.cpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlLexer_gen.cpp b/parser/preprocessed/SqlLexer_gen.cpp
index d02db56..b6c747c 100644
--- a/parser/preprocessed/SqlLexer_gen.cpp
+++ b/parser/preprocessed/SqlLexer_gen.cpp
@@ -8,8 +8,8 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 39
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 0
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
@@ -354,7 +354,7 @@ void quickstep_yyfree (void * ,yyscan_t yyscanner );
/* Begin user sect3 */
-#define quickstep_yywrap(yyscanner) 1
+#define quickstep_yywrap(yyscanner) (/*CONSTCOND*/1)
#define YY_SKIP_YYWRAP
typedef unsigned char YY_CHAR;
@@ -366,6 +366,9 @@ typedef int yy_state_type;
static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner);
static int yy_get_next_buffer (yyscan_t yyscanner );
+#if defined(__GNUC__) && __GNUC__ >= 3
+__attribute__((__noreturn__))
+#endif
static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
/* Done after the current pattern has been matched and before the
@@ -378,8 +381,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 160
-#define YY_END_OF_BUFFER 161
+#define YY_NUM_RULES 161
+#define YY_END_OF_BUFFER 162
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -387,75 +390,77 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[588] =
+static yyconst flex_int16_t yy_accept[593] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 161, 2, 2, 159, 159, 158, 157, 159,
- 136, 132, 135, 132, 132, 155, 128, 125, 129, 154,
- 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 133, 4, 5, 5, 3, 151,
- 151, 148, 152, 152, 146, 153, 153, 150, 1, 158,
- 126, 156, 155, 155, 155, 0, 130, 127, 131, 154,
- 154, 154, 154, 10, 154, 154, 154, 22, 154, 154,
- 154, 154, 154, 154, 154, 154, 154, 154, 154, 134,
-
- 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 60, 68, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 154, 154, 82, 83, 154, 154,
- 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 4, 5, 3, 151, 147, 152, 145,
- 145, 137, 139, 140, 141, 142, 143, 144, 145, 153,
- 149, 156, 155, 0, 155, 6, 7, 154, 9, 11,
- 154, 154, 15, 154, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 33, 154, 154, 154, 154, 154,
-
- 154, 154, 154, 44, 154, 154, 154, 154, 154, 154,
- 154, 52, 154, 154, 154, 154, 154, 154, 154, 154,
- 154, 64, 154, 70, 154, 154, 154, 154, 154, 154,
- 154, 78, 154, 81, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 154, 154, 154, 98, 154, 154,
- 103, 104, 154, 154, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 154, 154, 154, 154, 137, 139,
- 138, 154, 154, 154, 154, 154, 154, 154, 20, 23,
- 154, 154, 154, 28, 154, 154, 154, 31, 154, 154,
- 154, 154, 38, 154, 154, 42, 43, 154, 154, 154,
-
- 154, 154, 154, 154, 154, 54, 55, 154, 57, 154,
- 59, 154, 154, 154, 154, 67, 69, 71, 72, 73,
- 154, 75, 154, 154, 79, 154, 154, 86, 154, 154,
- 154, 154, 92, 154, 94, 154, 154, 154, 100, 154,
- 154, 154, 154, 154, 154, 108, 109, 111, 154, 154,
- 154, 154, 154, 154, 154, 119, 154, 154, 122, 123,
- 137, 138, 8, 154, 154, 154, 154, 154, 154, 154,
- 25, 154, 154, 154, 154, 154, 154, 154, 154, 154,
- 154, 154, 154, 154, 154, 154, 154, 48, 49, 50,
- 154, 154, 56, 154, 61, 62, 154, 154, 154, 74,
-
- 154, 77, 80, 84, 85, 154, 154, 154, 154, 93,
- 154, 154, 97, 154, 154, 154, 154, 154, 107, 154,
- 154, 154, 154, 154, 116, 154, 154, 120, 154, 154,
- 154, 154, 14, 154, 154, 154, 154, 154, 26, 154,
- 29, 154, 154, 154, 154, 154, 36, 154, 154, 154,
- 41, 154, 46, 154, 154, 154, 58, 63, 154, 154,
- 76, 154, 154, 154, 154, 154, 96, 154, 101, 102,
- 154, 154, 154, 154, 154, 114, 115, 117, 154, 121,
- 154, 154, 13, 154, 154, 154, 154, 154, 154, 21,
- 30, 154, 34, 35, 154, 154, 154, 154, 47, 154,
-
- 53, 65, 154, 154, 89, 154, 91, 154, 154, 154,
- 154, 154, 154, 154, 118, 154, 154, 154, 154, 154,
- 154, 154, 154, 32, 154, 154, 40, 154, 154, 66,
- 154, 154, 154, 154, 105, 154, 154, 154, 154, 154,
- 12, 154, 154, 154, 154, 24, 154, 37, 154, 154,
- 51, 87, 90, 154, 154, 106, 110, 154, 113, 124,
- 16, 154, 154, 154, 27, 39, 154, 88, 95, 154,
- 154, 154, 18, 19, 154, 154, 112, 154, 154, 154,
- 154, 154, 99, 154, 45, 17, 0
+ 0, 0, 162, 2, 2, 160, 160, 159, 158, 160,
+ 137, 133, 136, 133, 133, 156, 129, 126, 130, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 134, 4, 5, 5, 3, 152,
+ 152, 149, 153, 153, 147, 154, 154, 151, 1, 159,
+ 127, 157, 156, 156, 156, 0, 131, 128, 132, 155,
+ 155, 155, 155, 10, 155, 155, 155, 22, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 135,
+
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 60, 68, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 82, 83, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 4, 5, 3, 152, 148, 153, 146,
+ 146, 138, 140, 141, 142, 143, 144, 145, 146, 154,
+ 150, 157, 156, 0, 156, 6, 7, 155, 9, 11,
+ 155, 155, 15, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 33, 155, 155, 155, 155, 155,
+
+ 155, 155, 155, 44, 155, 155, 155, 155, 155, 155,
+ 155, 52, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 64, 155, 70, 155, 155, 155, 155, 155, 155,
+ 155, 78, 155, 81, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 99, 155, 155,
+ 104, 105, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 138, 140,
+ 139, 155, 155, 155, 155, 155, 155, 155, 20, 23,
+ 155, 155, 155, 28, 155, 155, 155, 31, 155, 155,
+ 155, 155, 38, 155, 155, 42, 43, 155, 155, 155,
+
+ 155, 155, 155, 155, 155, 54, 55, 155, 57, 155,
+ 59, 155, 155, 155, 155, 67, 69, 71, 72, 73,
+ 155, 75, 155, 155, 79, 155, 155, 86, 155, 155,
+ 155, 155, 155, 93, 155, 95, 155, 155, 155, 101,
+ 155, 155, 155, 155, 155, 155, 109, 110, 112, 155,
+ 155, 155, 155, 155, 155, 155, 120, 155, 155, 123,
+ 124, 138, 139, 8, 155, 155, 155, 155, 155, 155,
+ 155, 25, 155, 155, 155, 155, 155, 155, 155, 155,
+ 155, 155, 155, 155, 155, 155, 155, 155, 48, 49,
+ 50, 155, 155, 56, 155, 61, 62, 155, 155, 155,
+
+ 74, 155, 77, 80, 84, 85, 155, 155, 155, 155,
+ 155, 94, 155, 155, 98, 155, 155, 155, 155, 155,
+ 108, 155, 155, 155, 155, 155, 117, 155, 155, 121,
+ 155, 155, 155, 155, 14, 155, 155, 155, 155, 155,
+ 26, 155, 29, 155, 155, 155, 155, 155, 36, 155,
+ 155, 155, 41, 155, 46, 155, 155, 155, 58, 63,
+ 155, 155, 76, 155, 155, 155, 155, 155, 155, 97,
+ 155, 102, 103, 155, 155, 155, 155, 155, 115, 116,
+ 118, 155, 122, 155, 155, 13, 155, 155, 155, 155,
+ 155, 155, 21, 30, 155, 34, 35, 155, 155, 155,
+
+ 155, 47, 155, 53, 65, 155, 155, 89, 155, 91,
+ 155, 155, 155, 155, 155, 155, 155, 155, 119, 155,
+ 155, 155, 155, 155, 155, 155, 155, 32, 155, 155,
+ 40, 155, 155, 66, 155, 155, 92, 155, 155, 106,
+ 155, 155, 155, 155, 155, 12, 155, 155, 155, 155,
+ 24, 155, 37, 155, 155, 51, 87, 90, 155, 155,
+ 107, 111, 155, 114, 125, 16, 155, 155, 155, 27,
+ 39, 155, 88, 96, 155, 155, 155, 18, 19, 155,
+ 155, 113, 155, 155, 155, 155, 155, 100, 155, 45,
+ 17, 0
+
} ;
-static yyconst flex_int32_t yy_ec[256] =
+static yyconst YY_CHAR yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
@@ -487,7 +492,7 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static yyconst flex_int32_t yy_meta[72] =
+static yyconst YY_CHAR yy_meta[72] =
{ 0,
1, 1, 2, 1, 1, 3, 1, 4, 1, 5,
5, 6, 6, 5, 1, 1, 1, 7, 7, 7,
@@ -499,27 +504,27 @@ static yyconst flex_int32_t yy_meta[72] =
8
} ;
-static yyconst flex_int16_t yy_base[603] =
+static yyconst flex_uint16_t yy_base[608] =
{ 0,
0, 1, 46, 0, 117, 163, 2, 3, 128, 132,
- 6, 10, 211, 1307, 1307, 0, 1307, 13, 1307, 194,
- 1307, 1307, 1307, 194, 6, 130, 4, 1307, 170, 124,
+ 6, 10, 211, 1312, 1312, 0, 1312, 13, 1312, 194,
+ 1312, 1312, 1312, 194, 6, 130, 4, 1312, 170, 124,
161, 215, 170, 207, 265, 92, 167, 162, 96, 107,
223, 165, 162, 221, 274, 92, 284, 277, 315, 206,
- 128, 232, 0, 125, 1307, 152, 4, 19, 0, 0,
+ 128, 232, 0, 125, 1312, 152, 4, 19, 0, 0,
0, 143, 0, 0, 379, 0, 0, 144, 0, 22,
- 1307, 0, 292, 305, 335, 18, 1307, 1307, 1307, 0,
+ 1312, 0, 292, 305, 335, 18, 1312, 1312, 1312, 0,
174, 264, 180, 186, 209, 271, 229, 0, 277, 333,
- 335, 312, 330, 317, 323, 338, 323, 333, 340, 1307,
+ 335, 312, 330, 317, 323, 338, 323, 333, 340, 1312,
339, 355, 357, 381, 370, 373, 377, 382, 380, 384,
383, 383, 383, 431, 0, 398, 383, 390, 406, 402,
403, 404, 425, 420, 431, 442, 0, 445, 432, 448,
436, 437, 451, 448, 444, 460, 452, 439, 489, 464,
468, 469, 468, 462, 455, 477, 501, 493, 489, 494,
- 502, 494, 510, 142, 29, 0, 0, 1307, 0, 1307,
- 1307, 22, 24, 1307, 1307, 1307, 1307, 1307, 0, 0,
- 1307, 0, 520, 26, 28, 0, 0, 508, 0, 512,
+ 502, 494, 510, 142, 29, 0, 0, 1312, 0, 1312,
+ 1312, 22, 24, 1312, 1312, 1312, 1312, 1312, 0, 0,
+ 1312, 0, 520, 26, 28, 0, 0, 508, 0, 512,
495, 510, 497, 530, 518, 506, 525, 508, 512, 509,
543, 530, 533, 550, 0, 547, 558, 556, 561, 546,
@@ -527,127 +532,127 @@ static yyconst flex_int16_t yy_base[603] =
566, 576, 569, 571, 565, 579, 580, 573, 587, 597,
598, 604, 594, 0, 593, 594, 612, 613, 616, 603,
605, 0, 614, 0, 622, 623, 611, 610, 630, 631,
- 622, 616, 632, 628, 636, 639, 637, 631, 632, 644,
- 0, 649, 647, 655, 657, 667, 670, 665, 665, 664,
- 681, 669, 663, 682, 673, 682, 680, 671, 30, 125,
- 0, 674, 679, 689, 683, 693, 688, 689, 0, 702,
- 694, 694, 688, 0, 699, 706, 720, 709, 717, 712,
- 715, 725, 734, 731, 729, 0, 0, 726, 723, 743,
-
- 740, 726, 727, 734, 741, 0, 0, 735, 0, 738,
- 0, 731, 738, 739, 759, 0, 0, 0, 0, 0,
- 740, 0, 741, 755, 746, 764, 765, 0, 778, 783,
- 786, 792, 0, 791, 0, 779, 774, 779, 0, 796,
- 787, 799, 791, 784, 800, 0, 788, 0, 803, 788,
- 789, 793, 807, 810, 810, 0, 814, 806, 0, 810,
- 136, 1307, 0, 820, 830, 820, 840, 830, 839, 848,
- 0, 840, 837, 851, 852, 844, 850, 859, 849, 857,
- 854, 851, 852, 862, 863, 852, 869, 0, 0, 0,
- 850, 869, 0, 870, 0, 0, 859, 876, 860, 0,
-
- 888, 0, 0, 0, 0, 878, 885, 899, 886, 0,
- 902, 893, 0, 907, 909, 894, 906, 898, 0, 897,
- 899, 905, 915, 916, 0, 904, 923, 0, 902, 911,
- 920, 916, 0, 909, 916, 934, 928, 919, 0, 939,
- 0, 946, 936, 944, 949, 942, 0, 945, 963, 967,
- 0, 93, 0, 951, 963, 959, 0, 0, 956, 974,
- 0, 967, 957, 969, 954, 967, 0, 970, 0, 0,
- 969, 975, 986, 987, 985, 0, 0, 0, 974, 0,
- 979, 981, 0, 988, 983, 996, 1002, 1010, 1010, 0,
- 0, 1015, 0, 0, 1018, 1016, 1008, 1010, 0, 1016,
-
- 0, 0, 1019, 1017, 0, 1019, 0, 1031, 1026, 1016,
- 1023, 1026, 1027, 1036, 0, 1022, 1038, 1032, 1031, 1034,
- 1031, 1035, 1041, 0, 1038, 1053, 0, 1052, 1066, 0,
- 1063, 1071, 1076, 1070, 0, 1079, 1071, 1072, 1085, 1082,
- 0, 1084, 1087, 1081, 1089, 0, 1075, 0, 1090, 1080,
- 0, 1080, 0, 1081, 1094, 0, 0, 1092, 0, 0,
- 0, 1087, 1103, 1091, 0, 0, 1102, 0, 0, 1093,
- 1109, 1105, 0, 0, 1116, 1126, 0, 1126, 1129, 1121,
- 1136, 1125, 0, 1126, 0, 0, 1307, 1191, 1201, 1211,
- 1221, 1231, 1235, 1238, 1244, 1252, 1262, 1272, 1282, 1292,
-
- 1297, 1299
+ 626, 615, 629, 628, 639, 640, 639, 631, 634, 656,
+ 0, 654, 648, 659, 658, 670, 672, 668, 666, 665,
+ 682, 670, 664, 683, 673, 684, 681, 674, 30, 125,
+ 0, 675, 680, 692, 684, 694, 691, 690, 0, 704,
+ 696, 695, 699, 0, 704, 707, 724, 710, 720, 714,
+ 718, 726, 735, 732, 730, 0, 0, 727, 724, 744,
+
+ 741, 727, 729, 735, 742, 0, 0, 736, 0, 741,
+ 0, 732, 739, 742, 759, 0, 0, 0, 0, 0,
+ 741, 0, 743, 757, 763, 765, 769, 0, 779, 786,
+ 788, 795, 779, 0, 793, 0, 781, 776, 781, 0,
+ 798, 789, 801, 793, 787, 803, 0, 790, 0, 805,
+ 792, 793, 795, 811, 814, 813, 0, 818, 809, 0,
+ 822, 136, 1312, 0, 836, 836, 825, 845, 835, 843,
+ 852, 0, 842, 839, 853, 854, 846, 852, 861, 851,
+ 860, 857, 853, 854, 866, 867, 854, 873, 0, 0,
+ 0, 854, 872, 0, 874, 0, 0, 862, 888, 876,
+
+ 0, 894, 0, 0, 0, 0, 883, 890, 903, 891,
+ 903, 0, 908, 898, 0, 910, 912, 897, 909, 901,
+ 0, 900, 902, 909, 919, 920, 0, 907, 928, 0,
+ 907, 916, 925, 921, 0, 915, 921, 939, 942, 936,
+ 0, 956, 0, 956, 942, 952, 955, 950, 0, 951,
+ 968, 970, 0, 93, 0, 954, 966, 962, 0, 0,
+ 959, 977, 0, 970, 961, 973, 958, 964, 973, 0,
+ 976, 0, 0, 975, 983, 992, 994, 993, 0, 0,
+ 0, 980, 0, 995, 1000, 0, 1006, 1004, 1007, 1011,
+ 1020, 1019, 0, 0, 1024, 0, 0, 1025, 1022, 1012,
+
+ 1014, 0, 1020, 0, 0, 1023, 1021, 0, 1023, 0,
+ 1014, 1037, 1032, 1022, 1031, 1033, 1034, 1045, 0, 1031,
+ 1046, 1041, 1040, 1051, 1052, 1055, 1063, 0, 1060, 1067,
+ 0, 1063, 1079, 0, 1073, 1081, 0, 1084, 1077, 0,
+ 1084, 1076, 1077, 1090, 1087, 0, 1090, 1093, 1087, 1095,
+ 0, 1083, 0, 1097, 1087, 0, 1089, 0, 1090, 1102,
+ 0, 0, 1101, 0, 0, 0, 1096, 1120, 1112, 0,
+ 0, 1122, 0, 0, 1115, 1131, 1119, 0, 0, 1127,
+ 1139, 0, 1136, 1139, 1129, 1143, 1130, 0, 1131, 0,
+ 0, 1312, 1196, 1206, 1216, 1226, 1236, 1240, 1243, 1249,
+
+ 1257, 1267, 1277, 1287, 1297, 1302, 1304
} ;
-static yyconst flex_int16_t yy_def[603] =
+static yyconst flex_int16_t yy_def[608] =
{ 0,
- 588, 588, 587, 3, 589, 589, 590, 590, 591, 591,
- 592, 592, 587, 587, 587, 593, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 587, 587, 587, 587, 595, 596,
- 596, 587, 597, 597, 598, 599, 599, 587, 593, 587,
- 587, 600, 587, 587, 587, 587, 587, 587, 587, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 587,
-
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 587, 587, 595, 596, 587, 597, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 601, 599,
- 587, 600, 587, 587, 587, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
-
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 587, 587,
- 602, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
-
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 587, 587, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
-
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
-
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
- 594, 594, 594, 594, 594, 594, 0, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
-
- 587, 587
+ 593, 593, 592, 3, 594, 594, 595, 595, 596, 596,
+ 597, 597, 592, 592, 592, 598, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 592, 592, 592, 592, 600, 601,
+ 601, 592, 602, 602, 603, 604, 604, 592, 598, 592,
+ 592, 605, 592, 592, 592, 592, 592, 592, 592, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 592,
+
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 592, 592, 600, 601, 592, 602, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 606, 604,
+ 592, 605, 592, 592, 592, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 592, 592,
+ 607, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 592, 592, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 0, 592, 592, 592, 592, 592, 592, 592, 592,
+
+ 592, 592, 592, 592, 592, 592, 592
} ;
-static yyconst flex_int16_t yy_nxt[1379] =
+static yyconst flex_uint16_t yy_nxt[1384] =
{ 0,
- 587, 587, 15, 15, 61, 61, 155, 155, 67, 62,
- 62, 68, 67, 587, 70, 68, 70, 73, 73, 77,
- 78, 155, 155, 70, 587, 70, 174, 174, 587, 175,
+ 592, 592, 15, 15, 61, 61, 155, 155, 67, 62,
+ 62, 68, 67, 592, 70, 68, 70, 73, 73, 77,
+ 78, 155, 155, 70, 592, 70, 174, 174, 592, 175,
175, 155, 155, 269, 270, 270, 270, 175, 175, 175,
- 175, 361, 270, 587, 16, 16, 17, 18, 19, 18,
+ 175, 362, 270, 592, 16, 16, 17, 18, 19, 18,
20, 21, 22, 23, 22, 24, 25, 26, 26, 17,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
@@ -657,7 +662,7 @@ static yyconst flex_int16_t yy_nxt[1379] =
38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 17, 56, 57,
58, 17, 17, 17, 17, 17, 111, 116, 117, 134,
- 64, 17, 17, 17, 64, 62, 270, 270, 498, 62,
+ 64, 17, 17, 17, 64, 62, 270, 270, 501, 62,
74, 75, 75, 154, 81, 150, 153, 270, 270, 171,
158, 76, 82, 154, 83, 111, 116, 117, 134, 84,
17, 17, 17, 17, 56, 57, 58, 17, 17, 17,
@@ -666,35 +671,35 @@ static yyconst flex_int16_t yy_nxt[1379] =
122, 96, 114, 124, 176, 97, 123, 115, 113, 125,
179, 98, 88, 72, 99, 180, 17, 17, 17, 71,
- 587, 85, 587, 112, 100, 86, 95, 587, 87, 122,
+ 592, 85, 592, 112, 100, 86, 95, 592, 87, 122,
96, 114, 124, 176, 97, 123, 115, 113, 125, 179,
98, 88, 89, 99, 180, 101, 147, 102, 148, 90,
118, 149, 103, 126, 119, 181, 91, 104, 120, 92,
- 93, 127, 94, 587, 121, 128, 151, 152, 129, 130,
- 184, 89, 587, 587, 101, 147, 102, 148, 90, 118,
+ 93, 127, 94, 592, 121, 128, 151, 152, 129, 130,
+ 184, 89, 592, 592, 101, 147, 102, 148, 90, 118,
149, 103, 126, 119, 181, 91, 104, 120, 92, 93,
127, 94, 105, 121, 128, 151, 152, 129, 130, 184,
- 106, 131, 177, 107, 182, 132, 108, 587, 139, 109,
+ 106, 131, 177, 107, 182, 132, 108, 592, 139, 109,
178, 135, 110, 73, 73, 136, 140, 183, 133, 137,
- 587, 105, 185, 76, 141, 138, 173, 173, 587, 106,
+ 592, 105, 185, 76, 141, 138, 173, 173, 592, 106,
131, 177, 107, 182, 132, 108, 76, 139, 109, 178,
135, 110, 142, 191, 136, 140, 183, 133, 137, 143,
144, 185, 76, 141, 138, 74, 75, 75, 192, 145,
- 186, 193, 146, 587, 187, 76, 76, 196, 200, 194,
+ 186, 193, 146, 592, 187, 76, 76, 196, 200, 194,
197, 142, 191, 188, 195, 189, 198, 190, 143, 144,
- 201, 202, 587, 199, 203, 204, 205, 192, 145, 186,
- 193, 146, 161, 187, 587, 76, 196, 200, 194, 197,
+ 201, 202, 592, 199, 203, 204, 205, 192, 145, 186,
+ 193, 146, 161, 187, 592, 76, 196, 200, 194, 197,
162, 163, 188, 195, 189, 198, 190, 164, 208, 201,
202, 165, 199, 203, 204, 205, 206, 209, 210, 166,
211, 213, 214, 167, 215, 168, 212, 207, 216, 169,
- 218, 217, 587, 223, 224, 225, 164, 208, 226, 227,
- 165, 228, 587, 229, 230, 206, 209, 210, 166, 211,
+ 218, 217, 592, 223, 224, 225, 164, 208, 226, 227,
+ 165, 228, 592, 229, 230, 206, 209, 210, 166, 211,
213, 214, 167, 215, 168, 212, 207, 216, 169, 218,
217, 219, 223, 224, 225, 231, 232, 226, 227, 233,
228, 220, 229, 230, 234, 235, 221, 222, 236, 237,
- 238, 239, 240, 242, 243, 247, 241, 244, 248, 587,
+ 238, 239, 240, 242, 243, 247, 241, 244, 248, 592,
219, 252, 245, 246, 231, 232, 253, 254, 233, 255,
220, 256, 257, 234, 235, 221, 222, 236, 237, 238,
@@ -714,33 +719,33 @@ static yyconst flex_int16_t yy_nxt[1379] =
301, 302, 303, 304, 317, 315, 305, 306, 307, 318,
319, 308, 309, 320, 310, 316, 311, 312, 321, 322,
323, 324, 325, 326, 327, 328, 329, 313, 314, 330,
- 331, 332, 333, 317, 315, 334, 335, 336, 318, 319,
- 337, 338, 320, 341, 316, 342, 339, 321, 322, 323,
- 324, 325, 326, 327, 328, 329, 340, 343, 330, 331,
- 332, 333, 344, 345, 334, 335, 336, 346, 347, 337,
- 338, 348, 341, 349, 342, 339, 350, 351, 352, 353,
+ 331, 334, 335, 317, 315, 332, 336, 333, 318, 319,
+ 337, 338, 320, 339, 316, 342, 340, 321, 322, 323,
+ 324, 325, 326, 327, 328, 329, 341, 343, 330, 331,
+ 334, 335, 344, 345, 332, 336, 333, 346, 347, 337,
+ 338, 348, 339, 349, 342, 340, 350, 351, 352, 353,
- 354, 355, 358, 356, 359, 360, 343, 357, 363, 364,
+ 354, 355, 356, 357, 359, 360, 343, 358, 361, 364,
365, 344, 345, 366, 367, 368, 346, 347, 369, 370,
348, 371, 349, 372, 373, 350, 351, 352, 353, 354,
- 355, 358, 356, 359, 360, 374, 357, 363, 364, 365,
+ 355, 356, 357, 359, 360, 374, 358, 361, 364, 365,
375, 376, 366, 367, 368, 377, 378, 369, 370, 379,
371, 380, 372, 373, 381, 382, 383, 384, 385, 386,
387, 388, 389, 390, 374, 391, 392, 393, 394, 375,
- 376, 395, 396, 397, 377, 378, 400, 401, 379, 402,
- 380, 403, 398, 381, 382, 383, 384, 385, 386, 387,
- 388, 389, 390, 399, 391, 392, 393, 394, 404, 405,
+ 376, 395, 396, 397, 377, 378, 398, 401, 379, 402,
+ 380, 403, 399, 381, 382, 383, 384, 385, 386, 387,
+ 388, 389, 390, 400, 391, 392, 393, 394, 404, 405,
- 395, 396, 397, 406, 407, 400, 401, 408, 402, 409,
- 403, 398, 410, 411, 412, 413, 414, 415, 416, 417,
- 418, 419, 399, 420, 421, 422, 423, 404, 405, 424,
+ 395, 396, 397, 406, 407, 398, 401, 408, 402, 409,
+ 403, 399, 410, 411, 412, 413, 414, 415, 416, 417,
+ 418, 419, 400, 420, 421, 422, 423, 404, 405, 424,
425, 426, 406, 407, 427, 428, 408, 429, 409, 430,
431, 410, 411, 412, 413, 414, 415, 416, 417, 418,
419, 432, 420, 421, 422, 423, 433, 434, 424, 425,
- 426, 437, 435, 427, 428, 436, 429, 438, 430, 431,
- 439, 440, 441, 442, 443, 444, 445, 446, 447, 448,
+ 426, 435, 436, 427, 428, 439, 429, 437, 430, 431,
+ 438, 440, 441, 442, 443, 444, 445, 446, 447, 448,
432, 449, 450, 451, 452, 433, 434, 453, 454, 455,
- 437, 435, 456, 457, 436, 458, 438, 459, 460, 439,
+ 435, 436, 456, 457, 439, 458, 437, 459, 460, 438,
440, 441, 442, 443, 444, 445, 446, 447, 448, 461,
449, 450, 451, 452, 462, 463, 453, 454, 455, 464,
@@ -750,11 +755,11 @@ static yyconst flex_int16_t yy_nxt[1379] =
485, 486, 466, 487, 467, 488, 489, 468, 469, 470,
471, 472, 473, 474, 475, 476, 477, 490, 478, 479,
480, 481, 491, 492, 482, 483, 484, 493, 494, 485,
- 486, 495, 487, 496, 488, 489, 497, 499, 500, 501,
+ 486, 495, 487, 496, 488, 489, 497, 498, 499, 500,
502, 503, 504, 505, 506, 507, 490, 508, 509, 510,
511, 491, 492, 512, 513, 514, 493, 494, 515, 516,
- 495, 517, 496, 518, 519, 497, 499, 500, 501, 502,
+ 495, 517, 496, 518, 519, 497, 498, 499, 500, 502,
503, 504, 505, 506, 507, 520, 508, 509, 510, 511,
521, 522, 512, 513, 514, 523, 524, 515, 516, 525,
517, 526, 518, 519, 527, 528, 529, 530, 531, 532,
@@ -770,33 +775,34 @@ static yyconst flex_int16_t yy_nxt[1379] =
577, 556, 557, 558, 559, 560, 561, 562, 563, 564,
565, 578, 566, 567, 568, 569, 579, 580, 570, 571,
572, 581, 582, 573, 574, 583, 575, 584, 576, 577,
- 585, 586, 587, 587, 587, 587, 587, 587, 587, 587,
- 578, 587, 587, 587, 587, 579, 580, 587, 587, 587,
- 581, 582, 587, 587, 583, 587, 584, 587, 587, 585,
- 586, 14, 14, 14, 14, 14, 14, 14, 14, 14,
-
- 14, 59, 59, 59, 59, 59, 59, 59, 59, 59,
- 59, 60, 60, 60, 60, 60, 60, 60, 60, 60,
- 60, 63, 63, 63, 63, 63, 63, 63, 63, 63,
- 63, 66, 66, 66, 66, 66, 66, 66, 66, 66,
- 66, 69, 69, 80, 80, 80, 587, 80, 156, 156,
- 156, 156, 157, 157, 157, 587, 157, 157, 157, 157,
- 157, 157, 159, 159, 159, 587, 159, 159, 159, 159,
- 587, 159, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 170, 170, 587, 170, 170, 170, 170, 170,
- 170, 170, 172, 587, 172, 172, 172, 172, 172, 172,
-
- 172, 172, 271, 271, 362, 362, 13, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587
+ 585, 586, 587, 588, 589, 590, 591, 592, 592, 592,
+ 578, 592, 592, 592, 592, 579, 580, 592, 592, 592,
+ 581, 582, 592, 592, 583, 592, 584, 592, 592, 585,
+ 586, 587, 588, 589, 590, 591, 14, 14, 14, 14,
+
+ 14, 14, 14, 14, 14, 14, 59, 59, 59, 59,
+ 59, 59, 59, 59, 59, 59, 60, 60, 60, 60,
+ 60, 60, 60, 60, 60, 60, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 69, 69, 80, 80,
+ 80, 592, 80, 156, 156, 156, 156, 157, 157, 157,
+ 592, 157, 157, 157, 157, 157, 157, 159, 159, 159,
+ 592, 159, 159, 159, 159, 592, 159, 160, 160, 160,
+ 160, 160, 160, 160, 160, 160, 160, 170, 170, 592,
+ 170, 170, 170, 170, 170, 170, 170, 172, 592, 172,
+
+ 172, 172, 172, 172, 172, 172, 172, 271, 271, 363,
+ 363, 13, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592
} ;
-static yyconst flex_int16_t yy_chk[1379] =
+static yyconst flex_int16_t yy_chk[1384] =
{ 0,
0, 0, 1, 2, 7, 8, 57, 57, 11, 7,
8, 11, 12, 0, 18, 12, 18, 25, 25, 27,
@@ -812,8 +818,8 @@ static yyconst flex_int16_t yy_chk[1379] =
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 5, 5, 5,
5, 5, 5, 5, 5, 5, 36, 39, 40, 46,
- 9, 5, 5, 5, 10, 9, 270, 270, 452, 10,
- 26, 26, 26, 154, 30, 51, 54, 361, 361, 68,
+ 9, 5, 5, 5, 10, 9, 270, 270, 454, 10,
+ 26, 26, 26, 154, 30, 51, 54, 362, 362, 68,
62, 26, 30, 56, 30, 36, 39, 40, 46, 30,
5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
6, 6, 9, 30, 51, 54, 10, 6, 6, 6,
@@ -869,90 +875,91 @@ static yyconst flex_int16_t yy_chk[1379] =
208, 209, 210, 211, 223, 222, 212, 213, 214, 225,
226, 215, 216, 227, 217, 222, 218, 219, 228, 229,
230, 231, 233, 235, 236, 237, 238, 220, 221, 239,
- 240, 241, 242, 223, 222, 243, 244, 245, 225, 226,
- 246, 247, 227, 249, 222, 250, 248, 228, 229, 230,
- 231, 233, 235, 236, 237, 238, 248, 252, 239, 240,
- 241, 242, 253, 254, 243, 244, 245, 255, 256, 246,
- 247, 257, 249, 258, 250, 248, 259, 260, 261, 262,
-
- 263, 264, 266, 265, 267, 268, 252, 265, 272, 273,
- 274, 253, 254, 275, 276, 277, 255, 256, 278, 280,
- 257, 281, 258, 282, 283, 259, 260, 261, 262, 263,
- 264, 266, 265, 267, 268, 285, 265, 272, 273, 274,
- 286, 287, 275, 276, 277, 288, 289, 278, 280, 290,
- 281, 291, 282, 283, 292, 293, 294, 295, 298, 299,
- 300, 301, 302, 303, 285, 304, 305, 308, 310, 286,
- 287, 312, 313, 314, 288, 289, 321, 323, 290, 324,
- 291, 325, 315, 292, 293, 294, 295, 298, 299, 300,
- 301, 302, 303, 315, 304, 305, 308, 310, 326, 327,
-
- 312, 313, 314, 329, 330, 321, 323, 331, 324, 332,
- 325, 315, 334, 336, 337, 338, 340, 341, 342, 343,
- 344, 345, 315, 347, 349, 350, 351, 326, 327, 352,
- 353, 354, 329, 330, 355, 357, 331, 358, 332, 360,
- 364, 334, 336, 337, 338, 340, 341, 342, 343, 344,
- 345, 365, 347, 349, 350, 351, 366, 367, 352, 353,
- 354, 369, 368, 355, 357, 368, 358, 370, 360, 364,
- 372, 373, 374, 375, 376, 377, 378, 379, 380, 381,
- 365, 382, 383, 384, 385, 366, 367, 386, 387, 391,
- 369, 368, 392, 394, 368, 397, 370, 398, 399, 372,
-
- 373, 374, 375, 376, 377, 378, 379, 380, 381, 401,
- 382, 383, 384, 385, 406, 407, 386, 387, 391, 408,
- 409, 392, 394, 411, 397, 412, 398, 399, 414, 415,
- 416, 417, 418, 420, 421, 422, 423, 424, 401, 426,
- 427, 429, 430, 406, 407, 431, 432, 434, 408, 409,
- 435, 436, 411, 437, 412, 438, 440, 414, 415, 416,
- 417, 418, 420, 421, 422, 423, 424, 442, 426, 427,
- 429, 430, 443, 444, 431, 432, 434, 445, 446, 435,
- 436, 448, 437, 449, 438, 440, 450, 454, 455, 456,
- 459, 460, 462, 463, 464, 465, 442, 466, 468, 471,
-
- 472, 443, 444, 473, 474, 475, 445, 446, 479, 481,
- 448, 482, 449, 484, 485, 450, 454, 455, 456, 459,
- 460, 462, 463, 464, 465, 486, 466, 468, 471, 472,
- 487, 488, 473, 474, 475, 489, 492, 479, 481, 495,
- 482, 496, 484, 485, 497, 498, 500, 503, 504, 506,
- 508, 509, 510, 511, 486, 512, 513, 514, 516, 487,
- 488, 517, 518, 519, 489, 492, 520, 521, 495, 522,
- 496, 523, 525, 497, 498, 500, 503, 504, 506, 508,
- 509, 510, 511, 526, 512, 513, 514, 516, 528, 529,
- 517, 518, 519, 531, 532, 520, 521, 533, 522, 534,
-
- 523, 525, 536, 537, 538, 539, 540, 542, 543, 544,
- 545, 547, 526, 549, 550, 552, 554, 528, 529, 555,
- 558, 562, 531, 532, 563, 564, 533, 567, 534, 570,
- 571, 536, 537, 538, 539, 540, 542, 543, 544, 545,
- 547, 572, 549, 550, 552, 554, 575, 576, 555, 558,
- 562, 578, 579, 563, 564, 580, 567, 581, 570, 571,
- 582, 584, 0, 0, 0, 0, 0, 0, 0, 0,
- 572, 0, 0, 0, 0, 575, 576, 0, 0, 0,
- 578, 579, 0, 0, 580, 0, 581, 0, 0, 582,
- 584, 588, 588, 588, 588, 588, 588, 588, 588, 588,
-
- 588, 589, 589, 589, 589, 589, 589, 589, 589, 589,
- 589, 590, 590, 590, 590, 590, 590, 590, 590, 590,
- 590, 591, 591, 591, 591, 591, 591, 591, 591, 591,
- 591, 592, 592, 592, 592, 592, 592, 592, 592, 592,
- 592, 593, 593, 594, 594, 594, 0, 594, 595, 595,
- 595, 595, 596, 596, 596, 0, 596, 596, 596, 596,
- 596, 596, 597, 597, 597, 0, 597, 597, 597, 597,
- 0, 597, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 599, 599, 0, 599, 599, 599, 599, 599,
- 599, 599, 600, 0, 600, 600, 600, 600, 600, 600,
-
- 600, 600, 601, 601, 602, 602, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
- 587, 587, 587, 587, 587, 587, 587, 587
+ 240, 242, 243, 223, 222, 241, 244, 241, 225, 226,
+ 245, 246, 227, 247, 222, 249, 248, 228, 229, 230,
+ 231, 233, 235, 236, 237, 238, 248, 250, 239, 240,
+ 242, 243, 252, 253, 241, 244, 241, 254, 255, 245,
+ 246, 256, 247, 257, 249, 248, 258, 259, 260, 261,
+
+ 262, 263, 264, 265, 266, 267, 250, 265, 268, 272,
+ 273, 252, 253, 274, 275, 276, 254, 255, 277, 278,
+ 256, 280, 257, 281, 282, 258, 259, 260, 261, 262,
+ 263, 264, 265, 266, 267, 283, 265, 268, 272, 273,
+ 285, 286, 274, 275, 276, 287, 288, 277, 278, 289,
+ 280, 290, 281, 282, 291, 292, 293, 294, 295, 298,
+ 299, 300, 301, 302, 283, 303, 304, 305, 308, 285,
+ 286, 310, 312, 313, 287, 288, 314, 321, 289, 323,
+ 290, 324, 315, 291, 292, 293, 294, 295, 298, 299,
+ 300, 301, 302, 315, 303, 304, 305, 308, 325, 326,
+
+ 310, 312, 313, 327, 329, 314, 321, 330, 323, 331,
+ 324, 315, 332, 333, 335, 337, 338, 339, 341, 342,
+ 343, 344, 315, 345, 346, 348, 350, 325, 326, 351,
+ 352, 353, 327, 329, 354, 355, 330, 356, 331, 358,
+ 359, 332, 333, 335, 337, 338, 339, 341, 342, 343,
+ 344, 361, 345, 346, 348, 350, 365, 366, 351, 352,
+ 353, 367, 368, 354, 355, 370, 356, 369, 358, 359,
+ 369, 371, 373, 374, 375, 376, 377, 378, 379, 380,
+ 361, 381, 382, 383, 384, 365, 366, 385, 386, 387,
+ 367, 368, 388, 392, 370, 393, 369, 395, 398, 369,
+
+ 371, 373, 374, 375, 376, 377, 378, 379, 380, 399,
+ 381, 382, 383, 384, 400, 402, 385, 386, 387, 407,
+ 408, 388, 392, 409, 393, 410, 395, 398, 411, 413,
+ 414, 416, 417, 418, 419, 420, 422, 423, 399, 424,
+ 425, 426, 428, 400, 402, 429, 431, 432, 407, 408,
+ 433, 434, 409, 436, 410, 437, 438, 411, 413, 414,
+ 416, 417, 418, 419, 420, 422, 423, 439, 424, 425,
+ 426, 428, 440, 442, 429, 431, 432, 444, 445, 433,
+ 434, 446, 436, 447, 437, 438, 448, 450, 451, 452,
+ 456, 457, 458, 461, 462, 464, 439, 465, 466, 467,
+
+ 468, 440, 442, 469, 471, 474, 444, 445, 475, 476,
+ 446, 477, 447, 478, 482, 448, 450, 451, 452, 456,
+ 457, 458, 461, 462, 464, 484, 465, 466, 467, 468,
+ 485, 487, 469, 471, 474, 488, 489, 475, 476, 490,
+ 477, 491, 478, 482, 492, 495, 498, 499, 500, 501,
+ 503, 506, 507, 509, 484, 511, 512, 513, 514, 485,
+ 487, 515, 516, 517, 488, 489, 518, 520, 490, 521,
+ 491, 522, 523, 492, 495, 498, 499, 500, 501, 503,
+ 506, 507, 509, 524, 511, 512, 513, 514, 525, 526,
+ 515, 516, 517, 527, 529, 518, 520, 530, 521, 532,
+
+ 522, 523, 533, 535, 536, 538, 539, 541, 542, 543,
+ 544, 545, 524, 547, 548, 549, 550, 525, 526, 552,
+ 554, 555, 527, 529, 557, 559, 530, 560, 532, 563,
+ 567, 533, 535, 536, 538, 539, 541, 542, 543, 544,
+ 545, 568, 547, 548, 549, 550, 569, 572, 552, 554,
+ 555, 575, 576, 557, 559, 577, 560, 580, 563, 567,
+ 581, 583, 584, 585, 586, 587, 589, 0, 0, 0,
+ 568, 0, 0, 0, 0, 569, 572, 0, 0, 0,
+ 575, 576, 0, 0, 577, 0, 580, 0, 0, 581,
+ 583, 584, 585, 586, 587, 589, 593, 593, 593, 593,
+
+ 593, 593, 593, 593, 593, 593, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 596, 596, 596, 596,
+ 596, 596, 596, 596, 596, 596, 597, 597, 597, 597,
+ 597, 597, 597, 597, 597, 597, 598, 598, 599, 599,
+ 599, 0, 599, 600, 600, 600, 600, 601, 601, 601,
+ 0, 601, 601, 601, 601, 601, 601, 602, 602, 602,
+ 0, 602, 602, 602, 602, 0, 602, 603, 603, 603,
+ 603, 603, 603, 603, 603, 603, 603, 604, 604, 0,
+ 604, 604, 604, 604, 604, 604, 604, 605, 0, 605,
+
+ 605, 605, 605, 605, 605, 605, 605, 606, 606, 607,
+ 607, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 592, 592
} ;
/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[161] =
+static yyconst flex_int32_t yy_rule_can_match_eol[162] =
{ 0,
0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -961,8 +968,8 @@ static yyconst flex_int32_t yy_rule_can_match_eol[161] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0,
- 0, };
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0,
+ 0, 0, };
/* The intent behind this definition is that it'll catch
* any uses of REJECT which flex missed.
@@ -1028,6 +1035,7 @@ class ParseOrderBy;
class ParseOrderByItem;
class ParsePartitionClause;
class ParsePredicate;
+class ParsePriority;
class ParseSample;
class ParseScalarLiteral;
class ParseSearchedWhenClause;
@@ -1081,7 +1089,7 @@ class UnaryOperation;
-#line 1085 "SqlLexer_gen.cpp"
+#line 1093 "SqlLexer_gen.cpp"
#define INITIAL 0
#define CONDITION_SQL 1
@@ -1167,11 +1175,11 @@ void quickstep_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
FILE *quickstep_yyget_in (yyscan_t yyscanner );
-void quickstep_yyset_in (FILE * in_str ,yyscan_t yyscanner );
+void quickstep_yyset_in (FILE * _in_str ,yyscan_t yyscanner );
FILE *quickstep_yyget_out (yyscan_t yyscanner );
-void quickstep_yyset_out (FILE * out_str ,yyscan_t yyscanner );
+void quickstep_yyset_out (FILE * _out_str ,yyscan_t yyscanner );
yy_size_t quickstep_yyget_leng (yyscan_t yyscanner );
@@ -1179,11 +1187,11 @@ char *quickstep_yyget_text (yyscan_t yyscanner );
int quickstep_yyget_lineno (yyscan_t yyscanner );
-void quickstep_yyset_lineno (int line_number ,yyscan_t yyscanner );
+void quickstep_yyset_lineno (int _line_number ,yyscan_t yyscanner );
int quickstep_yyget_column (yyscan_t yyscanner );
-void quickstep_yyset_column (int column_no ,yyscan_t yyscanner );
+void quickstep_yyset_column (int _column_no ,yyscan_t yyscanner );
YYSTYPE * quickstep_yyget_lval (yyscan_t yyscanner );
@@ -1205,6 +1213,10 @@ extern int quickstep_yywrap (yyscan_t yyscanner );
#endif
#endif
+#ifndef YY_NO_UNPUT
+
+#endif
+
#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
#endif
@@ -1319,7 +1331,7 @@ extern int quickstep_yylex \
/* Code executed at the end of each rule. */
#ifndef YY_BREAK
-#define YY_BREAK break;
+#define YY_BREAK /*LINTED*/break;
#endif
#define YY_RULE_SETUP \
@@ -1329,9 +1341,9 @@ extern int quickstep_yylex \
*/
YY_DECL
{
- register yy_state_type yy_current_state;
- register char *yy_cp, *yy_bp;
- register int yy_act;
+ yy_state_type yy_current_state;
+ char *yy_cp, *yy_bp;
+ int yy_act;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yylval = yylval_param;
@@ -1365,12 +1377,12 @@ YY_DECL
}
{
-#line 130 "../SqlLexer.lpp"
+#line 131 "../SqlLexer.lpp"
-#line 1372 "SqlLexer_gen.cpp"
+#line 1384 "SqlLexer_gen.cpp"
- while ( 1 ) /* loops until end-of-file is reached */
+ while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
yy_cp = yyg->yy_c_buf_p;
@@ -1386,7 +1398,7 @@ YY_DECL
yy_match:
do
{
- register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+ YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
if ( yy_accept[yy_current_state] )
{
yyg->yy_last_accepting_state = yy_current_state;
@@ -1395,13 +1407,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 588 )
+ if ( yy_current_state >= 593 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
- while ( yy_current_state != 587 );
+ while ( yy_current_state != 592 );
yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state;
@@ -1435,7 +1447,7 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 133 "../SqlLexer.lpp"
+#line 134 "../SqlLexer.lpp"
{
/* A forward slash character represents a system command. */
BEGIN(CONDITION_COMMAND);
@@ -1447,7 +1459,7 @@ YY_RULE_SETUP
case 2:
/* rule 2 can match eol */
YY_RULE_SETUP
-#line 141 "../SqlLexer.lpp"
+#line 142 "../SqlLexer.lpp"
{
/* This is a SQL command. Place the char back and process normally. */
yyless(0);
@@ -1459,7 +1471,7 @@ YY_RULE_SETUP
case 3:
YY_RULE_SETUP
-#line 150 "../SqlLexer.lpp"
+#line 151 "../SqlLexer.lpp"
{
/* This is a command argument. */
yylval->string_value_ = new quickstep::ParseString(
@@ -1469,7 +1481,7 @@ YY_RULE_SETUP
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 157 "../SqlLexer.lpp"
+#line 158 "../SqlLexer.lpp"
{
/* Ignore whitespace. */
}
@@ -1477,7 +1489,7 @@ YY_RULE_SETUP
case 5:
/* rule 5 can match eol */
YY_RULE_SETUP
-#line 161 "../SqlLexer.lpp"
+#line 162 "../SqlLexer.lpp"
{
/* Newline reverts the lexer to the initial state. */
yycolumn = 0;
@@ -1489,667 +1501,672 @@ YY_RULE_SETUP
case 6:
YY_RULE_SETUP
-#line 170 "../SqlLexer.lpp"
+#line 171 "../SqlLexer.lpp"
return TOKEN_ADD;
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 171 "../SqlLexer.lpp"
+#line 172 "../SqlLexer.lpp"
return TOKEN_ALL;
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 172 "../SqlLexer.lpp"
+#line 173 "../SqlLexer.lpp"
return TOKEN_ALTER;
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 173 "../SqlLexer.lpp"
+#line 174 "../SqlLexer.lpp"
return TOKEN_AND;
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 174 "../SqlLexer.lpp"
+#line 175 "../SqlLexer.lpp"
return TOKEN_AS;
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 175 "../SqlLexer.lpp"
+#line 176 "../SqlLexer.lpp"
return TOKEN_ASC;
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 176 "../SqlLexer.lpp"
+#line 177 "../SqlLexer.lpp"
return TOKEN_ASC;
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 177 "../SqlLexer.lpp"
+#line 178 "../SqlLexer.lpp"
return TOKEN_BETWEEN;
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 178 "../SqlLexer.lpp"
+#line 179 "../SqlLexer.lpp"
return TOKEN_BIGINT;
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 179 "../SqlLexer.lpp"
+#line 180 "../SqlLexer.lpp"
return TOKEN_BIT;
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 180 "../SqlLexer.lpp"
+#line 181 "../SqlLexer.lpp"
return TOKEN_BITWEAVING;
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 181 "../SqlLexer.lpp"
+#line 182 "../SqlLexer.lpp"
return TOKEN_BLOCKPROPERTIES;
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 182 "../SqlLexer.lpp"
+#line 183 "../SqlLexer.lpp"
return TOKEN_BLOCKSAMPLE;
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 183 "../SqlLexer.lpp"
+#line 184 "../SqlLexer.lpp"
return TOKEN_BLOOM_FILTER;
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 184 "../SqlLexer.lpp"
+#line 185 "../SqlLexer.lpp"
return TOKEN_CASE;
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 185 "../SqlLexer.lpp"
+#line 186 "../SqlLexer.lpp"
return TOKEN_CSB_TREE;
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 186 "../SqlLexer.lpp"
+#line 187 "../SqlLexer.lpp"
return TOKEN_BY;
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 187 "../SqlLexer.lpp"
+#line 188 "../SqlLexer.lpp"
return TOKEN_CHARACTER;
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 188 "../SqlLexer.lpp"
+#line 189 "../SqlLexer.lpp"
return TOKEN_CHARACTER;
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 189 "../SqlLexer.lpp"
+#line 190 "../SqlLexer.lpp"
return TOKEN_CHECK;
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 190 "../SqlLexer.lpp"
+#line 191 "../SqlLexer.lpp"
return TOKEN_COLUMN;
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 191 "../SqlLexer.lpp"
+#line 192 "../SqlLexer.lpp"
return TOKEN_CONSTRAINT;
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 192 "../SqlLexer.lpp"
+#line 193 "../SqlLexer.lpp"
return TOKEN_COPY;
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 193 "../SqlLexer.lpp"
+#line 194 "../SqlLexer.lpp"
return TOKEN_CREATE;
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 194 "../SqlLexer.lpp"
+#line 195 "../SqlLexer.lpp"
return TOKEN_CURRENT;
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 195 "../SqlLexer.lpp"
+#line 196 "../SqlLexer.lpp"
return TOKEN_DATE;
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 196 "../SqlLexer.lpp"
+#line 197 "../SqlLexer.lpp"
return TOKEN_DATETIME;
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 197 "../SqlLexer.lpp"
+#line 198 "../SqlLexer.lpp"
return TOKEN_DAY;
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 198 "../SqlLexer.lpp"
+#line 199 "../SqlLexer.lpp"
return TOKEN_DECIMAL;
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 199 "../SqlLexer.lpp"
+#line 200 "../SqlLexer.lpp"
return TOKEN_DEFAULT;
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 200 "../SqlLexer.lpp"
+#line 201 "../SqlLexer.lpp"
return TOKEN_DELETE;
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 201 "../SqlLexer.lpp"
+#line 202 "../SqlLexer.lpp"
return TOKEN_DELIMITER;
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 202 "../SqlLexer.lpp"
+#line 203 "../SqlLexer.lpp"
return TOKEN_DESC;
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 203 "../SqlLexer.lpp"
+#line 204 "../SqlLexer.lpp"
return TOKEN_DESC;
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 204 "../SqlLexer.lpp"
+#line 205 "../SqlLexer.lpp"
return TOKEN_DISTINCT;
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 205 "../SqlLexer.lpp"
+#line 206 "../SqlLexer.lpp"
return TOKEN_DOUBLE;
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 206 "../SqlLexer.lpp"
+#line 207 "../SqlLexer.lpp"
return TOKEN_DROP;
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 207 "../SqlLexer.lpp"
+#line 208 "../SqlLexer.lpp"
return TOKEN_ELSE;
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 208 "../SqlLexer.lpp"
+#line 209 "../SqlLexer.lpp"
return TOKEN_END;
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 209 "../SqlLexer.lpp"
+#line 210 "../SqlLexer.lpp"
return TOKEN_ESCAPE_STRINGS;
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 210 "../SqlLexer.lpp"
+#line 211 "../SqlLexer.lpp"
return TOKEN_EXISTS;
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 211 "../SqlLexer.lpp"
+#line 212 "../SqlLexer.lpp"
return TOKEN_EXTRACT;
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 212 "../SqlLexer.lpp"
+#line 213 "../SqlLexer.lpp"
return TOKEN_FALSE;
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 213 "../SqlLexer.lpp"
+#line 214 "../SqlLexer.lpp"
return TOKEN_FIRST;
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 214 "../SqlLexer.lpp"
+#line 215 "../SqlLexer.lpp"
return TOKEN_FLOAT;
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 215 "../SqlLexer.lpp"
+#line 216 "../SqlLexer.lpp"
return TOKEN_FOLLOWING;
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 216 "../SqlLexer.lpp"
+#line 217 "../SqlLexer.lpp"
return TOKEN_FOR;
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 217 "../SqlLexer.lpp"
+#line 218 "../SqlLexer.lpp"
return TOKEN_FOREIGN;
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 218 "../SqlLexer.lpp"
+#line 219 "../SqlLexer.lpp"
return TOKEN_FROM;
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 219 "../SqlLexer.lpp"
+#line 220 "../SqlLexer.lpp"
return TOKEN_FULL;
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 220 "../SqlLexer.lpp"
+#line 221 "../SqlLexer.lpp"
return TOKEN_GROUP;
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 221 "../SqlLexer.lpp"
+#line 222 "../SqlLexer.lpp"
return TOKEN_HASH;
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 222 "../SqlLexer.lpp"
+#line 223 "../SqlLexer.lpp"
return TOKEN_HAVING;
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 223 "../SqlLexer.lpp"
+#line 224 "../SqlLexer.lpp"
return TOKEN_HOUR;
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 224 "../SqlLexer.lpp"
+#line 225 "../SqlLexer.lpp"
return TOKEN_IN;
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 225 "../SqlLexer.lpp"
+#line 226 "../SqlLexer.lpp"
return TOKEN_INDEX;
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 226 "../SqlLexer.lpp"
+#line 227 "../SqlLexer.lpp"
return TOKEN_INNER;
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 227 "../SqlLexer.lpp"
+#line 228 "../SqlLexer.lpp"
return TOKEN_INSERT;
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 228 "../SqlLexer.lpp"
+#line 229 "../SqlLexer.lpp"
return TOKEN_INTEGER;
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 229 "../SqlLexer.lpp"
+#line 230 "../SqlLexer.lpp"
return TOKEN_INTEGER;
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 230 "../SqlLexer.lpp"
+#line 231 "../SqlLexer.lpp"
return TOKEN_INTERVAL;
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 231 "../SqlLexer.lpp"
+#line 232 "../SqlLexer.lpp"
return TOKEN_INTO;
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 232 "../SqlLexer.lpp"
+#line 233 "../SqlLexer.lpp"
return TOKEN_IS;
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 233 "../SqlLexer.lpp"
+#line 234 "../SqlLexer.lpp"
return TOKEN_JOIN;
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 234 "../SqlLexer.lpp"
+#line 235 "../SqlLexer.lpp"
return TOKEN_KEY;
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 235 "../SqlLexer.lpp"
+#line 236 "../SqlLexer.lpp"
return TOKEN_LAST;
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 236 "../SqlLexer.lpp"
+#line 237 "../SqlLexer.lpp"
return TOKEN_LEFT;
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 237 "../SqlLexer.lpp"
+#line 238 "../SqlLexer.lpp"
return TOKEN_LIKE;
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 238 "../SqlLexer.lpp"
+#line 239 "../SqlLexer.lpp"
return TOKEN_LIMIT;
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 239 "../SqlLexer.lpp"
+#line 240 "../SqlLexer.lpp"
return TOKEN_LONG;
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 240 "../SqlLexer.lpp"
+#line 241 "../SqlLexer.lpp"
return TOKEN_MINUTE;
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 241 "../SqlLexer.lpp"
+#line 242 "../SqlLexer.lpp"
return TOKEN_MONTH;
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 242 "../SqlLexer.lpp"
+#line 243 "../SqlLexer.lpp"
return TOKEN_NOT;
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 243 "../SqlLexer.lpp"
+#line 244 "../SqlLexer.lpp"
return TOKEN_NULL;
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 244 "../SqlLexer.lpp"
+#line 245 "../SqlLexer.lpp"
return TOKEN_NULLS;
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 245 "../SqlLexer.lpp"
+#line 246 "../SqlLexer.lpp"
return TOKEN_OFF;
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 246 "../SqlLexer.lpp"
+#line 247 "../SqlLexer.lpp"
return TOKEN_ON;
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 247 "../SqlLexer.lpp"
+#line 248 "../SqlLexer.lpp"
return TOKEN_OR;
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 248 "../SqlLexer.lpp"
+#line 249 "../SqlLexer.lpp"
return TOKEN_ORDER;
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 249 "../SqlLexer.lpp"
+#line 250 "../SqlLexer.lpp"
return TOKEN_OUTER;
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 250 "../SqlLexer.lpp"
+#line 251 "../SqlLexer.lpp"
return TOKEN_OVER;
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 251 "../SqlLexer.lpp"
+#line 252 "../SqlLexer.lpp"
return TOKEN_PARTITION;
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 252 "../SqlLexer.lpp"
+#line 253 "../SqlLexer.lpp"
return TOKEN_PARTITIONS;
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 253 "../SqlLexer.lpp"
+#line 254 "../SqlLexer.lpp"
return TOKEN_PERCENT;
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 254 "../SqlLexer.lpp"
+#line 255 "../SqlLexer.lpp"
return TOKEN_PRECEDING;
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 255 "../SqlLexer.lpp"
+#line 256 "../SqlLexer.lpp"
return TOKEN_PRIMARY;
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 256 "../SqlLexer.lpp"
-return TOKEN_QUIT;
+#line 257 "../SqlLexer.lpp"
+return TOKEN_PRIORITY;
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 257 "../SqlLexer.lpp"
-return TOKEN_RANGE;
+#line 258 "../SqlLexer.lpp"
+return TOKEN_QUIT;
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 258 "../SqlLexer.lpp"
-return TOKEN_REAL;
+#line 259 "../SqlLexer.lpp"
+return TOKEN_RANGE;
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 259 "../SqlLexer.lpp"
-return TOKEN_REFERENCES;
+#line 260 "../SqlLexer.lpp"
+return TOKEN_REAL;
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 260 "../SqlLexer.lpp"
-return TOKEN_REGEXP;
+#line 261 "../SqlLexer.lpp"
+return TOKEN_REFERENCES;
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 261 "../SqlLexer.lpp"
-return TOKEN_RIGHT;
+#line 262 "../SqlLexer.lpp"
+return TOKEN_REGEXP;
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 262 "../SqlLexer.lpp"
-return TOKEN_ROW;
+#line 263 "../SqlLexer.lpp"
+return TOKEN_RIGHT;
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 263 "../SqlLexer.lpp"
-return TOKEN_ROW_DELIMITER;
+#line 264 "../SqlLexer.lpp"
+return TOKEN_ROW;
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 264 "../SqlLexer.lpp"
-return TOKEN_ROWS;
+#line 265 "../SqlLexer.lpp"
+return TOKEN_ROW_DELIMITER;
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 265 "../SqlLexer.lpp"
-return TOKEN_SECOND;
+#line 266 "../SqlLexer.lpp"
+return TOKEN_ROWS;
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 266 "../SqlLexer.lpp"
-return TOKEN_SELECT;
+#line 267 "../SqlLexer.lpp"
+return TOKEN_SECOND;
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 267 "../SqlLexer.lpp"
-return TOKEN_SET;
+#line 268 "../SqlLexer.lpp"
+return TOKEN_SELECT;
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 268 "../SqlLexer.lpp"
-return TOKEN_SMA;
+#line 269 "../SqlLexer.lpp"
+return TOKEN_SET;
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 269 "../SqlLexer.lpp"
-return TOKEN_SMALLINT;
+#line 270 "../SqlLexer.lpp"
+return TOKEN_SMA;
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 270 "../SqlLexer.lpp"
-return TOKEN_SUBSTRING;
+#line 271 "../SqlLexer.lpp"
+return TOKEN_SMALLINT;
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 271 "../SqlLexer.lpp"
-return TOKEN_TABLE;
+#line 272 "../SqlLexer.lpp"
+return TOKEN_SUBSTRING;
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 272 "../SqlLexer.lpp"
-return TOKEN_THEN;
+#line 273 "../SqlLexer.lpp"
+return TOKEN_TABLE;
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 273 "../SqlLexer.lpp"
-return TOKEN_TIME;
+#line 274 "../SqlLexer.lpp"
+return TOKEN_THEN;
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 274 "../SqlLexer.lpp"
-return TOKEN_TIMESTAMP;
+#line 275 "../SqlLexer.lpp"
+return TOKEN_TIME;
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 275 "../SqlLexer.lpp"
-return TOKEN_TRUE;
+#line 276 "../SqlLexer.lpp"
+return TOKEN_TIMESTAMP;
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 276 "../SqlLexer.lpp"
-return TOKEN_TUPLESAMPLE;
+#line 277 "../SqlLexer.lpp"
+return TOKEN_TRUE;
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 277 "../SqlLexer.lpp"
-return TOKEN_UNBOUNDED;
+#line 278 "../SqlLexer.lpp"
+return TOKEN_TUPLESAMPLE;
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 278 "../SqlLexer.lpp"
-return TOKEN_UNIQUE;
+#line 279 "../SqlLexer.lpp"
+return TOKEN_UNBOUNDED;
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 279 "../SqlLexer.lpp"
-return TOKEN_UPDATE;
+#line 280 "../SqlLexer.lpp"
+return TOKEN_UNIQUE;
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 280 "../SqlLexer.lpp"
-return TOKEN_USING;
+#line 281 "../SqlLexer.lpp"
+return TOKEN_UPDATE;
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 281 "../SqlLexer.lpp"
-return TOKEN_VALUES;
+#line 282 "../SqlLexer.lpp"
+return TOKEN_USING;
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 282 "../SqlLexer.lpp"
-return TOKEN_VARCHAR;
+#line 283 "../SqlLexer.lpp"
+return TOKEN_VALUES;
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 283 "../SqlLexer.lpp"
-return TOKEN_WHEN;
+#line 284 "../SqlLexer.lpp"
+return TOKEN_VARCHAR;
YY_BREAK
case 120:
YY_RULE_SETUP
-#line 284 "../SqlLexer.lpp"
-return TOKEN_WHERE;
+#line 285 "../SqlLexer.lpp"
+return TOKEN_WHEN;
YY_BREAK
case 121:
YY_RULE_SETUP
-#line 285 "../SqlLexer.lpp"
-return TOKEN_WINDOW;
+#line 286 "../SqlLexer.lpp"
+return TOKEN_WHERE;
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 286 "../SqlLexer.lpp"
-return TOKEN_WITH;
+#line 287 "../SqlLexer.lpp"
+return TOKEN_WINDOW;
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 287 "../SqlLexer.lpp"
-return TOKEN_YEAR;
+#line 288 "../SqlLexer.lpp"
+return TOKEN_WITH;
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 288 "../SqlLexer.lpp"
-return TOKEN_YEARMONTH;
+#line 289 "../SqlLexer.lpp"
+return TOKEN_YEAR;
YY_BREAK
case 125:
YY_RULE_SETUP
#line 290 "../SqlLexer.lpp"
-return TOKEN_EQ;
+return TOKEN_YEARMONTH;
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 291 "../SqlLexer.lpp"
-return TOKEN_NEQ;
+#line 292 "../SqlLexer.lpp"
+return TOKEN_EQ;
YY_BREAK
case 127:
YY_RULE_SETUP
-#line 292 "../SqlLexer.lpp"
+#line 293 "../SqlLexer.lpp"
return TOKEN_NEQ;
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 293 "../SqlLexer.lpp"
-return TOKEN_LT;
+#line 294 "../SqlLexer.lpp"
+return TOKEN_NEQ;
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 294 "../SqlLexer.lpp"
-return TOKEN_GT;
+#line 295 "../SqlLexer.lpp"
+return TOKEN_LT;
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 295 "../SqlLexer.lpp"
-return TOKEN_LEQ;
+#line 296 "../SqlLexer.lpp"
+return TOKEN_GT;
YY_BREAK
case 131:
YY_RULE_SETUP
-#line 296 "../SqlLexer.lpp"
-return TOKEN_GEQ;
+#line 297 "../SqlLexer.lpp"
+return TOKEN_LEQ;
YY_BREAK
case 132:
YY_RULE_SETUP
#line 298 "../SqlLexer.lpp"
-return yytext[0];
+return TOKEN_GEQ;
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 299 "../SqlLexer.lpp"
+#line 300 "../SqlLexer.lpp"
+return yytext[0];
+ YY_BREAK
+case 134:
+YY_RULE_SETUP
+#line 301 "../SqlLexer.lpp"
return yytext[0];
YY_BREAK
/**
* Quoted strings. Prefacing a string with an 'e' or 'E' causes escape
* sequences to be processed (as in PostgreSQL).
**/
-case 134:
+case 135:
YY_RULE_SETUP
-#line 305 "../SqlLexer.lpp"
+#line 307 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_SINGLE_QUOTED_ESCAPED);
}
YY_BREAK
-case 135:
+case 136:
YY_RULE_SETUP
-#line 310 "../SqlLexer.lpp"
+#line 312 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_SINGLE_QUOTED);
}
YY_BREAK
-case 136:
+case 137:
YY_RULE_SETUP
-#line 315 "../SqlLexer.lpp"
+#line 317 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_DOUBLE_QUOTED);
@@ -2161,7 +2178,7 @@ YY_RULE_SETUP
case YY_STATE_EOF(CONDITION_STRING_SINGLE_QUOTED):
case YY_STATE_EOF(CONDITION_STRING_SINGLE_QUOTED_ESCAPED):
case YY_STATE_EOF(CONDITION_STRING_DOUBLE_QUOTED):
-#line 324 "../SqlLexer.lpp"
+#line 326 "../SqlLexer.lpp"
{
delete yylval->string_value_;
BEGIN(INITIAL);
@@ -2172,9 +2189,9 @@ case YY_STATE_EOF(CONDITION_STRING_DOUBLE_QUOTED):
/* Process escape sequences. */
-case 137:
+case 138:
YY_RULE_SETUP
-#line 334 "../SqlLexer.lpp"
+#line 336 "../SqlLexer.lpp"
{
/* Octal code */
unsigned int code;
@@ -2188,9 +2205,9 @@ YY_RULE_SETUP
yylval->string_value_->push_back(code);
}
YY_BREAK
-case 138:
+case 139:
YY_RULE_SETUP
-#line 346 "../SqlLexer.lpp"
+#line 348 "../SqlLexer.lpp"
{
/* Hexadecimal code */
unsigned int code;
@@ -2198,9 +2215,9 @@ YY_RULE_SETUP
yylval->string_value_->push_back(code);
}
YY_BREAK
-case 139:
+case 140:
YY_RULE_SETUP
-#line 352 "../SqlLexer.lpp"
+#line 354 "../SqlLexer.lpp"
{
/* A numeric escape sequence that isn't correctly specified. */
delete yylval->string_value_;
@@ -2209,58 +2226,58 @@ YY_RULE_SETUP
return TOKEN_LEX_ERROR;
}
YY_BREAK
-case 140:
+case 141:
YY_RULE_SETUP
-#line 359 "../SqlLexer.lpp"
+#line 361 "../SqlLexer.lpp"
{
/* Backspace */
yylval->string_value_->push_back('\b');
}
YY_BREAK
-case 141:
+case 142:
YY_RULE_SETUP
-#line 363 "../SqlLexer.lpp"
+#line 365 "../SqlLexer.lpp"
{
/* Form-feed */
yylval->string_value_->push_back('\f');
}
YY_BREAK
-case 142:
+case 143:
YY_RULE_SETUP
-#line 367 "../SqlLexer.lpp"
+#line 369 "../SqlLexer.lpp"
{
/* Newline */
yylval->string_value_->push_back('\n');
}
YY_BREAK
-case 143:
+case 144:
YY_RULE_SETUP
-#line 371 "../SqlLexer.lpp"
+#line 373 "../SqlLexer.lpp"
{
/* Carriage-return */
yylval->string_value_->push_back('\r');
}
YY_BREAK
-case 144:
+case 145:
YY_RULE_SETUP
-#line 375 "../SqlLexer.lpp"
+#line 377 "../SqlLexer.lpp"
{
/* Horizontal Tab */
yylval->string_value_->push_back('\t');
}
YY_BREAK
-case 145:
-/* rule 145 can match eol */
+case 146:
+/* rule 146 can match eol */
YY_RULE_SETUP
-#line 379 "../SqlLexer.lpp"
+#line 381 "../SqlLexer.lpp"
{
/* Any other character (including actual newline or carriage return) */
yylval->string_value_->push_back(yytext[1]);
}
YY_BREAK
-case 146:
+case 147:
YY_RULE_SETUP
-#line 383 "../SqlLexer.lpp"
+#line 385 "../SqlLexer.lpp"
{
/* This should only be encountered right before an EOF. */
delete yylval->string_value_;
@@ -2271,17 +2288,17 @@ YY_RULE_SETUP
YY_BREAK
-case 147:
+case 148:
YY_RULE_SETUP
-#line 393 "../SqlLexer.lpp"
+#line 395 "../SqlLexer.lpp"
{
/* Two quotes in a row become a single quote (this is specified by the SQL standard). */
yylval->string_value_->push_back('\'');
}
YY_BREAK
-case 148:
+case 149:
YY_RULE_SETUP
-#line 397 "../SqlLexer.lpp"
+#line 399 "../SqlLexer.lpp"
{
/* End string */
BEGIN(CONDITION_SQL);
@@ -2290,17 +2307,17 @@ YY_RULE_SETUP
YY_BREAK
-case 149:
+case 150:
YY_RULE_SETUP
-#line 405 "../SqlLexer.lpp"
+#line 407 "../SqlLexer.lpp"
{
/* Two quotes in a row become a single quote (this is specified by the SQL standard). */
yylval->string_value_->push_back('"');
}
YY_BREAK
-case 150:
+case 151:
YY_RULE_SETUP
-#line 409 "../SqlLexer.lpp"
+#line 411 "../SqlLexer.lpp"
{
/* End string */
BEGIN(CONDITION_SQL);
@@ -2308,94 +2325,94 @@ YY_RULE_SETUP
}
YY_BREAK
-case 151:
-/* rule 151 can match eol */
+case 152:
+/* rule 152 can match eol */
YY_RULE_SETUP
-#line 416 "../SqlLexer.lpp"
+#line 418 "../SqlLexer.lpp"
{
/* Scan up to a quote. */
yylval->string_value_->append(yytext, yyleng);
}
YY_BREAK
-case 152:
-/* rule 152 can match eol */
+case 153:
+/* rule 153 can match eol */
YY_RULE_SETUP
-#line 421 "../SqlLexer.lpp"
+#line 423 "../SqlLexer.lpp"
{
/* Scan up to a quote or escape sequence. */
yylval->string_value_->append(yytext, yyleng);
}
YY_BREAK
-case 153:
-/* rule 153 can match eol */
+case 154:
+/* rule 154 can match eol */
YY_RULE_SETUP
-#line 426 "../SqlLexer.lpp"
+#line 428 "../SqlLexer.lpp"
{
/* Scan up to a quote. */
yylval->string_value_->append(yytext, yyleng);
}
YY_BREAK
-case 154:
+case 155:
YY_RULE_SETUP
-#line 432 "../SqlLexer.lpp"
+#line 434 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(
yylloc->first_line, yylloc->first_column, std::string(yytext, yyleng));
return TOKEN_NAME;
}
YY_BREAK
-case 155:
+case 156:
YY_RULE_SETUP
-#line 438 "../SqlLexer.lpp"
+#line 440 "../SqlLexer.lpp"
{
yylval->numeric_literal_value_ = new quickstep::NumericParseLiteralValue(
yylloc->first_line, yylloc->first_column, yytext);
return TOKEN_UNSIGNED_NUMVAL;
}
YY_BREAK
-case 156:
-YY_RULE_SETUP
-#line 444 "../SqlLexer.lpp"
-/* comment */
- YY_BREAK
case 157:
-/* rule 157 can match eol */
YY_RULE_SETUP
#line 446 "../SqlLexer.lpp"
-{ yycolumn = 0; }
+/* comment */
YY_BREAK
case 158:
+/* rule 158 can match eol */
YY_RULE_SETUP
#line 448 "../SqlLexer.lpp"
+{ yycolumn = 0; }
+ YY_BREAK
+case 159:
+YY_RULE_SETUP
+#line 450 "../SqlLexer.lpp"
; /* ignore white space */
YY_BREAK
/* CONDITION_SQL */
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(CONDITION_COMMAND):
case YY_STATE_EOF(CONDITION_SQL):
-#line 452 "../SqlLexer.lpp"
+#line 454 "../SqlLexer.lpp"
{
/* All conditions except for mutli-state string extracting conditions. */
BEGIN(INITIAL);
return TOKEN_EOF;
}
YY_BREAK
-case 159:
+case 160:
YY_RULE_SETUP
-#line 458 "../SqlLexer.lpp"
+#line 460 "../SqlLexer.lpp"
{
BEGIN(INITIAL);
quickstep_yyerror(NULL, yyscanner, NULL, "illegal character");
return TOKEN_LEX_ERROR;
}
YY_BREAK
-case 160:
+case 161:
YY_RULE_SETUP
-#line 464 "../SqlLexer.lpp"
+#line 466 "../SqlLexer.lpp"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 2399 "SqlLexer_gen.cpp"
+#line 2416 "SqlLexer_gen.cpp"
case YY_END_OF_BUFFER:
{
@@ -2538,9 +2555,9 @@ YY_FATAL_ERROR( "flex scanner jammed" );
static int yy_get_next_buffer (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
- register char *source = yyg->yytext_ptr;
- register int number_to_move, i;
+ char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ char *source = yyg->yytext_ptr;
+ yy_size_t number_to_move, i;
int ret_val;
if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
@@ -2569,7 +2586,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
/* Try to read more data. */
/* First move last chars to start of buffer. */
- number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+ number_to_move = (yy_size_t) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
@@ -2672,15 +2689,15 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
{
- register yy_state_type yy_current_state;
- register char *yy_cp;
+ yy_state_type yy_current_state;
+ char *yy_cp;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yy_current_state = yyg->yy_start;
for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
{
- register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
if ( yy_accept[yy_current_state] )
{
yyg->yy_last_accepting_state = yy_current_state;
@@ -2689,7 +2706,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 588 )
+ if ( yy_current_state >= 593 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2705,11 +2722,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
*/
static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner)
{
- register int yy_is_jam;
+ int yy_is_jam;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
- register char *yy_cp = yyg->yy_c_buf_p;
+ char *yy_cp = yyg->yy_c_buf_p;
- register YY_CHAR yy_c = 1;
+ YY_CHAR yy_c = 1;
if ( yy_accept[yy_current_state] )
{
yyg->yy_last_accepting_state = yy_current_state;
@@ -2718,16 +2735,20 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 588 )
+ if ( yy_current_state >= 593 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 587);
+ yy_is_jam = (yy_current_state == 592);
(void)yyg;
return yy_is_jam ? 0 : yy_current_state;
}
+#ifndef YY_NO_UNPUT
+
+#endif
+
#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput (yyscan_t yyscanner)
@@ -2888,7 +2909,7 @@ static void quickstep_yy_load_buffer_state (yyscan_t yyscanner)
if ( ! b )
YY_FATAL_ERROR( "out of dynamic memory in quickstep_yy_create_buffer()" );
- b->yy_buf_size = size;
+ b->yy_buf_size = (yy_size_t)size;
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
@@ -3049,7 +3070,7 @@ static void quickstep_yyensure_buffer_stack (yyscan_t yyscanner)
* scanner will even need a stack. We use 2 instead of 1 to avoid an
* immediate realloc on the next call.
*/
- num_to_alloc = 1;
+ num_to_alloc = 1; // After all that talk, this was set to 1 anyways...
yyg->yy_buffer_stack = (struct yy_buffer_state**)quickstep_yyalloc
(num_to_alloc * sizeof(struct yy_buffer_state*)
, yyscanner);
@@ -3066,7 +3087,7 @@ static void quickstep_yyensure_buffer_stack (yyscan_t yyscanner)
if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
/* Increase the buffer to prepare for a possible push. */
- int grow_size = 8 /* arbitrary grow size */;
+ yy_size_t grow_size = 8 /* arbitrary grow size */;
num_to_alloc = yyg->yy_buffer_stack_max + grow_size;
yyg->yy_buffer_stack = (struct yy_buffer_state**)quickstep_yyrealloc
@@ -3174,7 +3195,9 @@ YY_BUFFER_STATE quickstep_yy_scan_bytes (yyconst char * yybytes, yy_size_t _yy
static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
{
- (void) fprintf( stderr, "%s\n", msg );
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ (void)yyg;
+ (void) fprintf( stderr, "%s\n", msg );
exit( YY_EXIT_FAILURE );
}
@@ -3280,10 +3303,10 @@ void quickstep_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
}
/** Set the current line number.
- * @param line_number
+ * @param _line_number line number
* @param yyscanner The scanner object.
*/
-void quickstep_yyset_lineno (int line_number , yyscan_t yyscanner)
+void quickstep_yyset_lineno (int _line_number , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
@@ -3291,14 +3314,14 @@ void quickstep_yyset_lineno (int line_number , yyscan_t yyscanner)
if (! YY_CURRENT_BUFFER )
YY_FATAL_ERROR( "quickstep_yyset_lineno called with no buffer" );
- yylineno = line_number;
+ yylineno = _line_number;
}
/** Set the current column.
- * @param line_number
+ * @param _column_no column number
* @param yyscanner The scanner object.
*/
-void quickstep_yyset_column (int column_no , yyscan_t yyscanner)
+void quickstep_yyset_column (int _column_no , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
@@ -3306,25 +3329,25 @@ void quickstep_yyset_column (int column_no , yyscan_t yyscanner)
if (! YY_CURRENT_BUFFER )
YY_FATAL_ERROR( "quickstep_yyset_column called with no buffer" );
- yycolumn = column_no;
+ yycolumn = _column_no;
}
/** Set the input stream. This does not discard the current
* input buffer.
- * @param in_str A readable stream.
+ * @param _in_str A readable stream.
* @param yyscanner The scanner object.
* @see quickstep_yy_switch_to_buffer
*/
-void quickstep_yyset_in (FILE * in_str , yyscan_t yyscanner)
+void quickstep_yyset_in (FILE * _in_str , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- yyin = in_str ;
+ yyin = _in_str ;
}
-void quickstep_yyset_out (FILE * out_str , yyscan_t yyscanner)
+void quickstep_yyset_out (FILE * _out_str , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- yyout = out_str ;
+ yyout = _out_str ;
}
int quickstep_yyget_debug (yyscan_t yyscanner)
@@ -3333,10 +3356,10 @@ int quickstep_yyget_debug (yyscan_t yyscanner)
return yy_flex_debug;
}
-void quickstep_yyset_debug (int bdebug , yyscan_t yyscanner)
+void quickstep_yyset_debug (int _bdebug , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- yy_flex_debug = bdebug ;
+ yy_flex_debug = _bdebug ;
}
/* Accessor methods for yylval and yylloc */
@@ -3499,7 +3522,10 @@ int quickstep_yylex_destroy (yyscan_t yyscanner)
#ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
{
- register int i;
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ (void)yyg;
+
+ int i;
for ( i = 0; i < n; ++i )
s1[i] = s2[i];
}
@@ -3508,7 +3534,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yysca
#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
{
- register int n;
+ int n;
for ( n = 0; s[n]; ++n )
;
@@ -3518,11 +3544,16 @@ static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
void *quickstep_yyalloc (yy_size_t size , yyscan_t yyscanner)
{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ (void)yyg;
return (void *) malloc( size );
}
void *quickstep_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ (void)yyg;
+
/* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter
@@ -3535,12 +3566,14 @@ void *quickstep_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
void quickstep_yyfree (void * ptr , yyscan_t yyscanner)
{
+ struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
+ (void)yyg;
free( (char *) ptr ); /* see quickstep_yyrealloc() for (char *) cast */
}
#define YYTABLES_NAME "yytables"
-#line 463 "../SqlLexer.lpp"
+#line 466 "../SqlLexer.lpp"
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/parser/preprocessed/SqlLexer_gen.hpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlLexer_gen.hpp b/parser/preprocessed/SqlLexer_gen.hpp
index f6cd8ad..0dd70e4 100644
--- a/parser/preprocessed/SqlLexer_gen.hpp
+++ b/parser/preprocessed/SqlLexer_gen.hpp
@@ -12,8 +12,8 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 39
+#define YY_FLEX_MINOR_VERSION 6
+#define YY_FLEX_SUBMINOR_VERSION 0
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
@@ -222,7 +222,7 @@ void quickstep_yyfree (void * ,yyscan_t yyscanner );
/* Begin user sect3 */
-#define quickstep_yywrap(yyscanner) 1
+#define quickstep_yywrap(yyscanner) (/*CONSTCOND*/1)
#define YY_SKIP_YYWRAP
#define yytext_ptr yytext_r
@@ -268,11 +268,11 @@ void quickstep_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
FILE *quickstep_yyget_in (yyscan_t yyscanner );
-void quickstep_yyset_in (FILE * in_str ,yyscan_t yyscanner );
+void quickstep_yyset_in (FILE * _in_str ,yyscan_t yyscanner );
FILE *quickstep_yyget_out (yyscan_t yyscanner );
-void quickstep_yyset_out (FILE * out_str ,yyscan_t yyscanner );
+void quickstep_yyset_out (FILE * _out_str ,yyscan_t yyscanner );
yy_size_t quickstep_yyget_leng (yyscan_t yyscanner );
@@ -280,11 +280,11 @@ char *quickstep_yyget_text (yyscan_t yyscanner );
int quickstep_yyget_lineno (yyscan_t yyscanner );
-void quickstep_yyset_lineno (int line_number ,yyscan_t yyscanner );
+void quickstep_yyset_lineno (int _line_number ,yyscan_t yyscanner );
int quickstep_yyget_column (yyscan_t yyscanner );
-void quickstep_yyset_column (int column_no ,yyscan_t yyscanner );
+void quickstep_yyset_column (int _column_no ,yyscan_t yyscanner );
YYSTYPE * quickstep_yyget_lval (yyscan_t yyscanner );
@@ -360,7 +360,7 @@ extern int quickstep_yylex \
#undef YY_DECL
#endif
-#line 463 "../SqlLexer.lpp"
+#line 466 "../SqlLexer.lpp"
#line 367 "SqlLexer_gen.hpp"
[07/18] incubator-quickstep git commit: QUICKSTEP-20: Added parser
support for SQL window aggregation function
Posted by zu...@apache.org.
QUICKSTEP-20: Added parser support for SQL window aggregation function
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/00ca1e4b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/00ca1e4b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/00ca1e4b
Branch: refs/heads/travis-grpc
Commit: 00ca1e4b3a9c9838dcb9509058b8a40b0f573617
Parents: 8e825f1
Author: shixuan <sh...@wisc.edu>
Authored: Tue Jun 14 23:07:32 2016 +0000
Committer: shixuan <sh...@wisc.edu>
Committed: Fri Jun 17 20:34:24 2016 +0000
----------------------------------------------------------------------
parser/CMakeLists.txt | 11 +
parser/ParseBasicExpressions.cpp | 10 +
parser/ParseBasicExpressions.hpp | 45 +
parser/ParseSelect.hpp | 27 +-
parser/ParseWindow.hpp | 201 ++
parser/SqlLexer.lpp | 10 +
parser/SqlParser.ypp | 128 +-
parser/preprocessed/SqlLexer_gen.cpp | 1671 ++++++-------
parser/preprocessed/SqlLexer_gen.hpp | 16 +-
parser/preprocessed/SqlParser_gen.cpp | 3367 ++++++++++++++------------
parser/preprocessed/SqlParser_gen.hpp | 182 +-
parser/tests/Select.test | 120 +
query_optimizer/resolver/CMakeLists.txt | 1 +
query_optimizer/resolver/Resolver.cpp | 7 +
14 files changed, 3368 insertions(+), 2428 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/parser/CMakeLists.txt b/parser/CMakeLists.txt
index 2488d30..55c4a67 100644
--- a/parser/CMakeLists.txt
+++ b/parser/CMakeLists.txt
@@ -113,6 +113,7 @@ add_library(quickstep_parser_ParseSubqueryExpression ParseSubqueryExpression.cpp
add_library(quickstep_parser_ParseSubqueryTableReference ParseSubqueryTableReference.cpp ParseSubqueryTableReference.hpp)
add_library(quickstep_parser_ParseTableReference ParseTableReference.cpp ParseTableReference.hpp)
add_library(quickstep_parser_ParseTreeNode ../empty_src.cpp ParseTreeNode.hpp)
+add_library(quickstep_parser_ParseWindow ../empty_src.cpp ParseWindow.hpp)
add_library(quickstep_parser_ParserUtil ParserUtil.cpp ParserUtil.hpp)
add_library(quickstep_parser_SqlParserWrapper SqlParserWrapper.cpp SqlParserWrapper.hpp)
add_library(quickstep_parser_SqlParser ${BISON_SqlParser_OUTPUTS})
@@ -135,6 +136,7 @@ target_link_libraries(quickstep_parser_ParseBasicExpressions
quickstep_parser_ParseLiteralValue
quickstep_parser_ParseString
quickstep_parser_ParseTreeNode
+ quickstep_parser_ParseWindow
quickstep_types_operations_binaryoperations_BinaryOperation
quickstep_types_operations_unaryoperations_UnaryOperation
quickstep_utility_Macros
@@ -241,6 +243,7 @@ target_link_libraries(quickstep_parser_ParseSelect
quickstep_parser_ParseSelectionClause
quickstep_parser_ParseTableReference
quickstep_parser_ParseTreeNode
+ quickstep_parser_ParseWindow
quickstep_utility_Macros
quickstep_utility_PtrList)
target_link_libraries(quickstep_parser_ParseSelectionClause
@@ -300,6 +303,12 @@ target_link_libraries(quickstep_parser_ParseTreeNode
quickstep_utility_TreeStringSerializable)
target_link_libraries(quickstep_parser_ParserUtil
quickstep_utility_SqlError)
+target_link_libraries(quickstep_parser_ParseWindow
+ quickstep_parser_ParseExpression
+ quickstep_parser_ParseOrderBy
+ quickstep_parser_ParseString
+ quickstep_parser_ParseTreeNode
+ quickstep_utility_PtrList)
target_link_libraries(quickstep_parser_SqlLexer
quickstep_parser_ParseJoinedTableReference
quickstep_parser_ParseLiteralValue
@@ -337,6 +346,7 @@ target_link_libraries(quickstep_parser_SqlParser
quickstep_parser_ParseSubqueryExpression
quickstep_parser_ParseSubqueryTableReference
quickstep_parser_ParseTableReference
+ quickstep_parser_ParseWindow
quickstep_parser_ParserUtil
quickstep_storage_StorageBlockInfo
quickstep_types_Type
@@ -419,6 +429,7 @@ target_link_libraries(quickstep_parser
quickstep_parser_ParseSubqueryTableReference
quickstep_parser_ParseTableReference
quickstep_parser_ParseTreeNode
+ quickstep_parser_ParseWindow
quickstep_parser_SqlLexer
quickstep_parser_SqlParser
quickstep_parser_SqlParserWrapper)
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/ParseBasicExpressions.cpp
----------------------------------------------------------------------
diff --git a/parser/ParseBasicExpressions.cpp b/parser/ParseBasicExpressions.cpp
index a9d84ea..bbb6801 100644
--- a/parser/ParseBasicExpressions.cpp
+++ b/parser/ParseBasicExpressions.cpp
@@ -162,6 +162,16 @@ void ParseFunctionCall::getFieldStringItems(
non_container_child_field_names->push_back("");
non_container_child_fields->push_back(&argument);
}
+
+ if (window_name_ != nullptr) {
+ inline_field_names->push_back("window_name");
+ inline_field_values->push_back(window_name_->value());
+ }
+
+ if (window_ != nullptr) {
+ non_container_child_field_names->push_back("window");
+ non_container_child_fields->push_back(window_.get());
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/ParseBasicExpressions.hpp
----------------------------------------------------------------------
diff --git a/parser/ParseBasicExpressions.hpp b/parser/ParseBasicExpressions.hpp
index dea25d7..64ac119 100644
--- a/parser/ParseBasicExpressions.hpp
+++ b/parser/ParseBasicExpressions.hpp
@@ -30,6 +30,7 @@
#include "parser/ParseLiteralValue.hpp"
#include "parser/ParseString.hpp"
#include "parser/ParseTreeNode.hpp"
+#include "parser/ParseWindow.hpp"
#include "utility/Macros.hpp"
#include "utility/PtrList.hpp"
@@ -429,6 +430,46 @@ class ParseFunctionCall : public ParseExpression {
return star_.get();
}
+ /**
+ * @return The window name.
+ **/
+ const ParseString* window_name() const {
+ return window_name_.get();
+ }
+
+ /**
+ * @return The window.
+ **/
+ const ParseWindow* window() const {
+ return window_.get();
+ }
+
+ /**
+ * @brief Check if this function is a window aggregation function
+ *
+ * @return True if this function is a window aggregation function; false
+ * otherwise.
+ **/
+ bool isWindow() const {
+ return window_name_ != nullptr || window_ != nullptr;
+ }
+
+ /**
+ * @brief Set the window name.
+ * @param window_name The window name.
+ **/
+ void setWindowName(ParseString *window_name) {
+ window_name_.reset(window_name);
+ }
+
+ /**
+ * @brief Set the window.
+ * @param window The window.
+ **/
+ void setWindow(ParseWindow *window) {
+ window_.reset(window);
+ }
+
std::string generateName() const override;
protected:
@@ -446,6 +487,10 @@ class ParseFunctionCall : public ParseExpression {
// Either <arguments_> or <star_> is NULL.
std::unique_ptr<PtrList<ParseExpression>> arguments_;
std::unique_ptr<ParseStar> star_;
+ // A window aggregation function should have either <window_name_> or <window_> but not both.
+ // <window_name_> and <window_> will both be NULL if it is not a window function.
+ std::unique_ptr<ParseString> window_name_;
+ std::unique_ptr<ParseWindow> window_;
DISALLOW_COPY_AND_ASSIGN(ParseFunctionCall);
};
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/ParseSelect.hpp
----------------------------------------------------------------------
diff --git a/parser/ParseSelect.hpp b/parser/ParseSelect.hpp
index 81e9ab8..930a215 100644
--- a/parser/ParseSelect.hpp
+++ b/parser/ParseSelect.hpp
@@ -1,6 +1,8 @@
/**
* Copyright 2011-2015 Quickstep Technologies LLC.
* Copyright 2015 Pivotal Software, Inc.
+ * Copyright 2016, Quickstep Research Group, Computer Sciences Department,
+ * University of Wisconsin\u2014Madison.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,6 +32,7 @@
#include "parser/ParseSelectionClause.hpp"
#include "parser/ParseTableReference.hpp"
#include "parser/ParseTreeNode.hpp"
+#include "parser/ParseWindow.hpp"
#include "utility/Macros.hpp"
#include "utility/PtrList.hpp"
@@ -68,7 +71,8 @@ class ParseSelect : public ParseTreeNode {
ParseGroupBy *group_by,
ParseHaving *having,
ParseOrderBy *order_by,
- ParseLimit *limit)
+ ParseLimit *limit,
+ PtrList<ParseWindow> *window_list)
: ParseTreeNode(line_number, column_number),
selection_(selection),
from_list_(from_list),
@@ -76,7 +80,8 @@ class ParseSelect : public ParseTreeNode {
group_by_(group_by),
having_(having),
order_by_(order_by),
- limit_(limit) {
+ limit_(limit),
+ window_list_(window_list) {
}
~ParseSelect() override {
@@ -152,6 +157,13 @@ class ParseSelect : public ParseTreeNode {
*/
const ParseLimit* limit() const { return limit_.get(); }
+ /**
+ * @brief Gets the parsed WINDOW.
+ *
+ * @return The parsed WINDOW.
+ */
+ const PtrList<ParseWindow>* window_list() const { return window_list_.get(); }
+
protected:
void getFieldStringItems(
std::vector<std::string> *inline_field_names,
@@ -171,7 +183,7 @@ class ParseSelect : public ParseTreeNode {
if (from_list_ != nullptr) {
container_child_field_names->push_back("from_clause");
container_child_fields->emplace_back();
- for (const ParseTableReference& from_item : *from_list_) {
+ for (const ParseTableReference &from_item : *from_list_) {
container_child_fields->back().push_back(&from_item);
}
}
@@ -195,6 +207,14 @@ class ParseSelect : public ParseTreeNode {
non_container_child_field_names->push_back("limit");
non_container_child_fields->push_back(limit_.get());
}
+
+ if (window_list_ != nullptr) {
+ container_child_field_names->push_back("window_list");
+ container_child_fields->emplace_back();
+ for (const ParseWindow &window : *window_list_) {
+ container_child_fields->back().push_back(&window);
+ }
+ }
}
private:
@@ -205,6 +225,7 @@ class ParseSelect : public ParseTreeNode {
std::unique_ptr<ParseHaving> having_;
std::unique_ptr<ParseOrderBy> order_by_;
std::unique_ptr<ParseLimit> limit_;
+ std::unique_ptr<PtrList<ParseWindow>> window_list_;
DISALLOW_COPY_AND_ASSIGN(ParseSelect);
};
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/ParseWindow.hpp
----------------------------------------------------------------------
diff --git a/parser/ParseWindow.hpp b/parser/ParseWindow.hpp
new file mode 100644
index 0000000..7b41683
--- /dev/null
+++ b/parser/ParseWindow.hpp
@@ -0,0 +1,201 @@
+/**
+ * Copyright 2016, Quickstep Research Group, Computer Sciences Department,
+ * University of Wisconsin\u2014Madison.
+ *
+ * Licensed 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.
+ **/
+
+#ifndef QUICKSTEP_PARSER_PARSE_WINDOW_HPP_
+#define QUICKSTEP_PARSER_PARSE_WINDOW_HPP_
+
+#include <cstdint>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "parser/ParseExpression.hpp"
+#include "parser/ParseOrderBy.hpp"
+#include "parser/ParseString.hpp"
+#include "parser/ParseTreeNode.hpp"
+#include "utility/PtrList.hpp"
+
+namespace quickstep {
+
+/**
+ * @brief The information of the how the framing in the window is defined
+ **/
+struct ParseFrameInfo : ParseTreeNode {
+ /**
+ * @brief Constructor.
+ * @param row True if the frame mode is ROW, false if it is RANGE.
+ * @param num_pre The number of rows/value of range that is preceding
+ * the current row in the frame.
+ * @param num_follow The number of rows/value of range that is following
+ * the current row in the frame.
+ **/
+ ParseFrameInfo(const int line_number,
+ const int column_number,
+ const bool is_row_in,
+ const std::int64_t num_preceding_in,
+ const std::int64_t num_following_in)
+ : ParseTreeNode(line_number, column_number),
+ is_row(is_row_in),
+ num_preceding(num_preceding_in),
+ num_following(num_following_in) {
+ }
+
+ std::string getName() const override { return "FrameInfo"; }
+
+ const bool is_row;
+ const std::int64_t num_preceding;
+ const std::int64_t num_following;
+
+ protected:
+ void getFieldStringItems(
+ std::vector<std::string> *inline_field_names,
+ std::vector<std::string> *inline_field_values,
+ std::vector<std::string> *non_container_child_field_names,
+ std::vector<const ParseTreeNode *> *non_container_child_fields,
+ std::vector<std::string> *container_child_field_names,
+ std::vector<std::vector<const ParseTreeNode *>> *container_child_fields)
+ const override {
+ inline_field_names->push_back("frame_mode");
+ inline_field_values->push_back(is_row ? "row" : "range");
+
+ inline_field_names->push_back("num_preceding");
+ inline_field_values->push_back(std::to_string(num_preceding));
+
+ inline_field_names->push_back("num_following");
+ inline_field_values->push_back(std::to_string(num_following));
+ }
+};
+
+/**
+ * @brief The parsed representation of a WINDOW definition.
+ **/
+class ParseWindow : public ParseTreeNode {
+ public:
+ /**
+ * @brief Constructor.
+ * @param line_number The line number of the first token of this WINDOW clause
+ * in the SQL statement.
+ * @param column_number The column number of the first token of this WINDOW
+ * clause in the SQL statement.
+ * @param partition_by_expressions Optional grouping expressions that might be
+ * specified in the SQL statement. Similar to
+ * GROUP BY with regular aggregates.
+ * @param order_by_expressions Optional ordering expressions that might be
+ * specified in the SQL statement.
+ * @param frame_info The information about framing.
+ **/
+ ParseWindow(const int line_number,
+ const int column_number,
+ PtrList<ParseExpression> *partition_by_expressions,
+ PtrList<ParseOrderByItem> *order_by_expressions,
+ ParseFrameInfo *frame_info)
+ : ParseTreeNode(line_number, column_number),
+ partition_by_expressions_(partition_by_expressions),
+ order_by_expressions_(order_by_expressions),
+ frame_info_(frame_info) {
+ }
+
+ /**
+ * @brief Destructor.
+ **/
+ ~ParseWindow() override {}
+
+ std::string getName() const override {
+ return "window";
+ }
+
+ /**
+ * @brief Grouping expressions.
+ **/
+ const PtrList<ParseExpression>* partition_by_expressions() const {
+ return partition_by_expressions_.get();
+ }
+
+ /**
+ * @brief Ordering expressions.
+ **/
+ const PtrList<ParseOrderByItem>* order_by_expressions() const {
+ return order_by_expressions_.get();
+ }
+
+ /**
+ * @brief Frame information.
+ **/
+ const ParseFrameInfo* frame_info() const {
+ return frame_info_.get();
+ }
+
+ /**
+ * @return The window name.
+ */
+ const ParseString* name() const {
+ return name_.get();
+ }
+
+ /**
+ * @brief Set the name of the window.
+ * @param name The name of the window.
+ **/
+ void setName(ParseString *name) {
+ name_.reset(name);
+ }
+
+ protected:
+ void getFieldStringItems(
+ std::vector<std::string> *inline_field_names,
+ std::vector<std::string> *inline_field_values,
+ std::vector<std::string> *non_container_child_field_names,
+ std::vector<const ParseTreeNode *> *non_container_child_fields,
+ std::vector<std::string> *container_child_field_names,
+ std::vector<std::vector<const ParseTreeNode *>> *container_child_fields) const override {
+ if (name_ != nullptr) {
+ inline_field_names->push_back("window_name");
+ inline_field_values->push_back(name_->value());
+ }
+
+ container_child_field_names->push_back("partition_by");
+ container_child_fields->emplace_back();
+ if (partition_by_expressions_ != nullptr) {
+ for (const auto &e : *partition_by_expressions_) {
+ container_child_fields->back().emplace_back(&e);
+ }
+ }
+
+ container_child_field_names->push_back("order_by");
+ container_child_fields->emplace_back();
+ if (order_by_expressions_ != nullptr) {
+ for (const auto &e : *order_by_expressions_) {
+ container_child_fields->back().emplace_back(&e);
+ }
+ }
+
+ if (frame_info_ != nullptr) {
+ non_container_child_field_names->push_back("frame_info");
+ non_container_child_fields->push_back(frame_info_.get());
+ }
+ }
+
+ private:
+ std::unique_ptr<PtrList<ParseExpression>> partition_by_expressions_;
+ std::unique_ptr<PtrList<ParseOrderByItem>> order_by_expressions_;
+ std::unique_ptr<ParseFrameInfo> frame_info_;
+ std::unique_ptr<ParseString> name_;
+};
+
+} // namespace quickstep
+
+#endif // QUICKSTEP_PARSER_PARSE_WINDOW_HPP_
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/SqlLexer.lpp
----------------------------------------------------------------------
diff --git a/parser/SqlLexer.lpp b/parser/SqlLexer.lpp
index ac1c708..ee34400 100644
--- a/parser/SqlLexer.lpp
+++ b/parser/SqlLexer.lpp
@@ -48,6 +48,7 @@ class ParseCommand;
struct ParseCopyFromParams;
class ParseDataType;
class ParseExpression;
+struct ParseFrameInfo;
class ParseFunctionCall;
class ParseGroupBy;
class ParseHaving;
@@ -86,6 +87,7 @@ class ParseSubqueryExpression;
class ParseSubqueryTableReference;
class ParseTableReference;
class ParseTableReferenceSignature;
+class ParseWindow;
class Type;
class UnaryOperation;
@@ -189,6 +191,7 @@ unsigned_numeric_literal {exact_numeric_literal}|{approximate_numeric_literal}
"constraint" return TOKEN_CONSTRAINT;
"copy" return TOKEN_COPY;
"create" return TOKEN_CREATE;
+ "current" return TOKEN_CURRENT;
"date" return TOKEN_DATE;
"datetime" return TOKEN_DATETIME;
"day" return TOKEN_DAY;
@@ -209,6 +212,7 @@ unsigned_numeric_literal {exact_numeric_literal}|{approximate_numeric_literal}
"false" return TOKEN_FALSE;
"first" return TOKEN_FIRST;
"float" return TOKEN_FLOAT;
+ "following" return TOKEN_FOLLOWING;
"for" return TOKEN_FOR;
"foreign" return TOKEN_FOREIGN;
"from" return TOKEN_FROM;
@@ -243,9 +247,11 @@ unsigned_numeric_literal {exact_numeric_literal}|{approximate_numeric_literal}
"or" return TOKEN_OR;
"order" return TOKEN_ORDER;
"outer" return TOKEN_OUTER;
+ "over" return TOKEN_OVER;
"partition" return TOKEN_PARTITION;
"partitions" return TOKEN_PARTITIONS;
"percent" return TOKEN_PERCENT;
+ "preceding" return TOKEN_PRECEDING;
"primary" return TOKEN_PRIMARY;
"quit" return TOKEN_QUIT;
"range" return TOKEN_RANGE;
@@ -253,7 +259,9 @@ unsigned_numeric_literal {exact_numeric_literal}|{approximate_numeric_literal}
"references" return TOKEN_REFERENCES;
"regexp" return TOKEN_REGEXP;
"right" return TOKEN_RIGHT;
+ "row" return TOKEN_ROW;
"row_delimiter" return TOKEN_ROW_DELIMITER;
+ "rows" return TOKEN_ROWS;
"second" return TOKEN_SECOND;
"select" return TOKEN_SELECT;
"set" return TOKEN_SET;
@@ -266,6 +274,7 @@ unsigned_numeric_literal {exact_numeric_literal}|{approximate_numeric_literal}
"timestamp" return TOKEN_TIMESTAMP;
"true" return TOKEN_TRUE;
"tuplesample" return TOKEN_TUPLESAMPLE;
+ "unbounded" return TOKEN_UNBOUNDED;
"unique" return TOKEN_UNIQUE;
"update" return TOKEN_UPDATE;
"using" return TOKEN_USING;
@@ -273,6 +282,7 @@ unsigned_numeric_literal {exact_numeric_literal}|{approximate_numeric_literal}
"varchar" return TOKEN_VARCHAR;
"when" return TOKEN_WHEN;
"where" return TOKEN_WHERE;
+ "window" return TOKEN_WINDOW;
"with" return TOKEN_WITH;
"year" return TOKEN_YEAR;
"yearmonth" return TOKEN_YEARMONTH;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/SqlParser.ypp
----------------------------------------------------------------------
diff --git a/parser/SqlParser.ypp b/parser/SqlParser.ypp
index b07c48e..81fa3ae 100644
--- a/parser/SqlParser.ypp
+++ b/parser/SqlParser.ypp
@@ -95,6 +95,7 @@ typedef struct YYLTYPE {
#include "parser/ParseSubqueryExpression.hpp"
#include "parser/ParseSubqueryTableReference.hpp"
#include "parser/ParseTableReference.hpp"
+#include "parser/ParseWindow.hpp"
#include "storage/StorageBlockInfo.hpp"
#include "types/Type.hpp"
#include "types/TypeFactory.hpp"
@@ -200,6 +201,12 @@ typedef void* yyscan_t;
quickstep::ParseSample *opt_sample_clause_;
+ quickstep::PtrList<quickstep::ParseWindow> *opt_window_clause_;
+ quickstep::ParseWindow *window_definition_;
+ quickstep::PtrList<quickstep::ParseExpression> *window_partition_by_list_;
+ quickstep::PtrList<quickstep::ParseOrderByItem> *window_order_by_list_;
+ quickstep::ParseFrameInfo *window_frame_info_;
+
quickstep::PtrList<quickstep::ParseOrderByItem> *order_commalist_;
quickstep::ParseOrderByItem *order_item_;
@@ -254,6 +261,7 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%token TOKEN_CONSTRAINT;
%token TOKEN_COPY;
%token TOKEN_CREATE;
+%token TOKEN_CURRENT;
%token TOKEN_DATE;
%token TOKEN_DATETIME;
%token TOKEN_DAY;
@@ -273,6 +281,7 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%token TOKEN_FALSE;
%token TOKEN_FIRST;
%token TOKEN_FLOAT;
+%token TOKEN_FOLLOWING;
%token TOKEN_FOR;
%token TOKEN_FOREIGN;
%token TOKEN_FROM;
@@ -304,9 +313,11 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%token TOKEN_OR;
%token TOKEN_ORDER;
%token TOKEN_OUTER;
+%token TOKEN_OVER;
%token TOKEN_PARTITION;
%token TOKEN_PARTITIONS;
%token TOKEN_PERCENT;
+%token TOKEN_PRECEDING;
%token TOKEN_PRIMARY;
%token TOKEN_QUIT;
%token TOKEN_RANGE;
@@ -314,7 +325,9 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%token TOKEN_REFERENCES;
%token TOKEN_REGEXP;
%token TOKEN_RIGHT;
+%token TOKEN_ROW;
%token TOKEN_ROW_DELIMITER;
+%token TOKEN_ROWS;
%token TOKEN_SECOND;
%token TOKEN_SELECT;
%token TOKEN_SET;
@@ -327,6 +340,7 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%token TOKEN_TIMESTAMP;
%token TOKEN_TRUE;
%token TOKEN_TUPLESAMPLE;
+%token TOKEN_UNBOUNDED;
%token TOKEN_UNIQUE;
%token TOKEN_UPDATE;
%token TOKEN_USING;
@@ -334,6 +348,7 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%token TOKEN_VARCHAR;
%token TOKEN_WHEN;
%token TOKEN_WHERE;
+%token TOKEN_WINDOW;
%token TOKEN_WITH;
%token TOKEN_YEAR;
%token TOKEN_YEARMONTH;
@@ -348,10 +363,15 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%type <boolean_value_>
boolean_value
+ frame_mode
%type <literal_value_>
literal_value
+%type <numeric_literal_value_>
+ frame_preceding
+ frame_following
+
%type <literal_value_list_>
literal_value_commalist
@@ -546,6 +566,23 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%type <opt_sample_clause_>
opt_sample_clause
+%type <opt_window_clause_>
+ opt_window_clause
+ window_declaration_list
+
+%type <window_definition_>
+ window_declaration
+ window_definition
+
+%type <window_partition_by_list_>
+ opt_window_partition
+
+%type <window_order_by_list_>
+ opt_window_order
+
+%type <window_frame_info_>
+ opt_window_frame
+
%type <with_list_>
with_clause
with_list
@@ -1136,8 +1173,8 @@ with_list_element:
select_query:
TOKEN_SELECT opt_all_distinct selection from_clause opt_where_clause opt_group_by_clause opt_having_clause
- opt_order_by_clause opt_limit_clause {
- $$ = new quickstep::ParseSelect(@1.first_line, @1.first_column, $3, $4, $5, $6, $7, $8, $9);
+ opt_order_by_clause opt_limit_clause opt_window_clause {
+ $$ = new quickstep::ParseSelect(@1.first_line, @1.first_column, $3, $4, $5, $6, $7, $8, $9, $10);
};
opt_all_distinct:
@@ -1332,6 +1369,85 @@ opt_limit_clause:
}
}
+opt_window_clause:
+ {
+ $$ = nullptr;
+ }
+ | window_declaration_list {
+ $$ = $1;
+ }
+
+window_declaration_list:
+ window_declaration {
+ $$ = new quickstep::PtrList<quickstep::ParseWindow>();
+ $$->push_back($1);
+ }
+ | window_declaration_list window_declaration {
+ $$ = $1;
+ $$->push_back($2);
+ }
+
+window_declaration:
+ TOKEN_WINDOW any_name TOKEN_AS '(' window_definition ')' {
+ $$ = $5;
+ $$->setName($2);
+ }
+
+window_definition:
+ opt_window_partition opt_window_order opt_window_frame {
+ $$ = new quickstep::ParseWindow(@1.first_line, @1.first_column, $1, $2, $3);
+ };
+
+opt_window_partition:
+ {
+ $$ = nullptr;
+ }
+ | TOKEN_PARTITION TOKEN_BY expression_list {
+ $$ = $3;
+ };
+
+opt_window_order:
+ {
+ $$ = nullptr;
+ }
+ | TOKEN_ORDER TOKEN_BY order_commalist {
+ $$ = $3;
+ };
+
+opt_window_frame:
+ {
+ $$ = nullptr;
+ }
+ | frame_mode TOKEN_BETWEEN frame_preceding TOKEN_AND frame_following {
+ $$ = new quickstep::ParseFrameInfo(@1.first_line, @1.first_column, $1, $3->long_value(), $5->long_value());
+ };
+
+frame_mode:
+ TOKEN_ROWS {
+ $$ = true;
+ }
+ | TOKEN_RANGE {
+ $$ = false;
+ };
+
+frame_preceding:
+ TOKEN_UNSIGNED_NUMVAL TOKEN_PRECEDING
+ | TOKEN_UNBOUNDED TOKEN_PRECEDING {
+ $$ = new quickstep::NumericParseLiteralValue(@1.first_line, @1.first_column, "-1");
+ }
+ | TOKEN_CURRENT TOKEN_ROW {
+ $$ = new quickstep::NumericParseLiteralValue(@1.first_line, @1.first_column, "0");
+ };
+
+frame_following:
+ TOKEN_UNSIGNED_NUMVAL TOKEN_FOLLOWING
+ | TOKEN_UNBOUNDED TOKEN_FOLLOWING {
+ $$ = new quickstep::NumericParseLiteralValue(@1.first_line, @1.first_column, "-1");
+ }
+ | TOKEN_CURRENT TOKEN_ROW {
+ $$ = new quickstep::NumericParseLiteralValue(@1.first_line, @1.first_column, "0");
+ };
+
order_commalist:
order_item {
$$ = new quickstep::PtrList<quickstep::ParseOrderByItem>();
@@ -1505,6 +1621,14 @@ expression_base:
| function_call {
$$ = $1;
}
+ | function_call TOKEN_OVER any_name {
+ $1->setWindowName($3);
+ $$ = $1;
+ }
+ | function_call TOKEN_OVER '(' window_definition ')' {
+ $1->setWindow($4);
+ $$ = $1;
+ }
| extract_function {
$$ = $1;
}
[10/18] incubator-quickstep git commit: Added PRIORITY clause in
parser.
Posted by zu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/parser/preprocessed/SqlParser_gen.hpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlParser_gen.hpp b/parser/preprocessed/SqlParser_gen.hpp
index fea31d6..0f66d1d 100644
--- a/parser/preprocessed/SqlParser_gen.hpp
+++ b/parser/preprocessed/SqlParser_gen.hpp
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 3.0.4. */
+/* A Bison parser, made by GNU Bison 2.7. */
/* Bison interface for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
-
+
+ Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
@@ -26,13 +26,13 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
#ifndef YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED
# define YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED
-/* Debug traces. */
+/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
@@ -40,150 +40,152 @@
extern int quickstep_yydebug;
#endif
-/* Token type. */
+/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
- enum yytokentype
- {
- TOKEN_COMMAND = 258,
- TOKEN_NAME = 259,
- TOKEN_STRING_SINGLE_QUOTED = 260,
- TOKEN_STRING_DOUBLE_QUOTED = 261,
- TOKEN_UNSIGNED_NUMVAL = 262,
- TOKEN_OR = 263,
- TOKEN_AND = 264,
- TOKEN_NOT = 265,
- TOKEN_EQ = 266,
- TOKEN_LT = 267,
- TOKEN_LEQ = 268,
- TOKEN_GT = 269,
- TOKEN_GEQ = 270,
- TOKEN_NEQ = 271,
- TOKEN_LIKE = 272,
- TOKEN_REGEXP = 273,
- TOKEN_BETWEEN = 274,
- TOKEN_IS = 275,
- UNARY_PLUS = 276,
- UNARY_MINUS = 277,
- TOKEN_ADD = 278,
- TOKEN_ALL = 279,
- TOKEN_ALTER = 280,
- TOKEN_AS = 281,
- TOKEN_ASC = 282,
- TOKEN_BIGINT = 283,
- TOKEN_BIT = 284,
- TOKEN_BITWEAVING = 285,
- TOKEN_BLOCKPROPERTIES = 286,
- TOKEN_BLOCKSAMPLE = 287,
- TOKEN_BLOOM_FILTER = 288,
- TOKEN_CSB_TREE = 289,
- TOKEN_BY = 290,
- TOKEN_CASE = 291,
- TOKEN_CHARACTER = 292,
- TOKEN_CHECK = 293,
- TOKEN_COLUMN = 294,
- TOKEN_CONSTRAINT = 295,
- TOKEN_COPY = 296,
- TOKEN_CREATE = 297,
- TOKEN_CURRENT = 298,
- TOKEN_DATE = 299,
- TOKEN_DATETIME = 300,
- TOKEN_DAY = 301,
- TOKEN_DECIMAL = 302,
- TOKEN_DEFAULT = 303,
- TOKEN_DELETE = 304,
- TOKEN_DELIMITER = 305,
- TOKEN_DESC = 306,
- TOKEN_DISTINCT = 307,
- TOKEN_DOUBLE = 308,
- TOKEN_DROP = 309,
- TOKEN_ELSE = 310,
- TOKEN_END = 311,
- TOKEN_ESCAPE_STRINGS = 312,
- TOKEN_EXISTS = 313,
- TOKEN_EXTRACT = 314,
- TOKEN_FALSE = 315,
- TOKEN_FIRST = 316,
- TOKEN_FLOAT = 317,
- TOKEN_FOLLOWING = 318,
- TOKEN_FOR = 319,
- TOKEN_FOREIGN = 320,
- TOKEN_FROM = 321,
- TOKEN_FULL = 322,
- TOKEN_GROUP = 323,
- TOKEN_HASH = 324,
- TOKEN_HAVING = 325,
- TOKEN_HOUR = 326,
- TOKEN_IN = 327,
- TOKEN_INDEX = 328,
- TOKEN_INNER = 329,
- TOKEN_INSERT = 330,
- TOKEN_INTEGER = 331,
- TOKEN_INTERVAL = 332,
- TOKEN_INTO = 333,
- TOKEN_JOIN = 334,
- TOKEN_KEY = 335,
- TOKEN_LAST = 336,
- TOKEN_LEFT = 337,
- TOKEN_LIMIT = 338,
- TOKEN_LONG = 339,
- TOKEN_MINUTE = 340,
- TOKEN_MONTH = 341,
- TOKEN_NULL = 342,
- TOKEN_NULLS = 343,
- TOKEN_OFF = 344,
- TOKEN_ON = 345,
- TOKEN_ORDER = 346,
- TOKEN_OUTER = 347,
- TOKEN_OVER = 348,
- TOKEN_PARTITION = 349,
- TOKEN_PARTITIONS = 350,
- TOKEN_PERCENT = 351,
- TOKEN_PRECEDING = 352,
- TOKEN_PRIMARY = 353,
- TOKEN_QUIT = 354,
- TOKEN_RANGE = 355,
- TOKEN_REAL = 356,
- TOKEN_REFERENCES = 357,
- TOKEN_RIGHT = 358,
- TOKEN_ROW = 359,
- TOKEN_ROW_DELIMITER = 360,
- TOKEN_ROWS = 361,
- TOKEN_SECOND = 362,
- TOKEN_SELECT = 363,
- TOKEN_SET = 364,
- TOKEN_SMA = 365,
- TOKEN_SMALLINT = 366,
- TOKEN_SUBSTRING = 367,
- TOKEN_TABLE = 368,
- TOKEN_THEN = 369,
- TOKEN_TIME = 370,
- TOKEN_TIMESTAMP = 371,
- TOKEN_TRUE = 372,
- TOKEN_TUPLESAMPLE = 373,
- TOKEN_UNBOUNDED = 374,
- TOKEN_UNIQUE = 375,
- TOKEN_UPDATE = 376,
- TOKEN_USING = 377,
- TOKEN_VALUES = 378,
- TOKEN_VARCHAR = 379,
- TOKEN_WHEN = 380,
- TOKEN_WHERE = 381,
- TOKEN_WINDOW = 382,
- TOKEN_WITH = 383,
- TOKEN_YEAR = 384,
- TOKEN_YEARMONTH = 385,
- TOKEN_EOF = 386,
- TOKEN_LEX_ERROR = 387
- };
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ TOKEN_COMMAND = 258,
+ TOKEN_NAME = 259,
+ TOKEN_STRING_SINGLE_QUOTED = 260,
+ TOKEN_STRING_DOUBLE_QUOTED = 261,
+ TOKEN_UNSIGNED_NUMVAL = 262,
+ TOKEN_OR = 263,
+ TOKEN_AND = 264,
+ TOKEN_NOT = 265,
+ TOKEN_EQ = 266,
+ TOKEN_NEQ = 267,
+ TOKEN_GEQ = 268,
+ TOKEN_GT = 269,
+ TOKEN_LEQ = 270,
+ TOKEN_LT = 271,
+ TOKEN_REGEXP = 272,
+ TOKEN_LIKE = 273,
+ TOKEN_BETWEEN = 274,
+ TOKEN_IS = 275,
+ UNARY_MINUS = 276,
+ UNARY_PLUS = 277,
+ TOKEN_ADD = 278,
+ TOKEN_ALL = 279,
+ TOKEN_ALTER = 280,
+ TOKEN_AS = 281,
+ TOKEN_ASC = 282,
+ TOKEN_BIGINT = 283,
+ TOKEN_BIT = 284,
+ TOKEN_BITWEAVING = 285,
+ TOKEN_BLOCKPROPERTIES = 286,
+ TOKEN_BLOCKSAMPLE = 287,
+ TOKEN_BLOOM_FILTER = 288,
+ TOKEN_CSB_TREE = 289,
+ TOKEN_BY = 290,
+ TOKEN_CASE = 291,
+ TOKEN_CHARACTER = 292,
+ TOKEN_CHECK = 293,
+ TOKEN_COLUMN = 294,
+ TOKEN_CONSTRAINT = 295,
+ TOKEN_COPY = 296,
+ TOKEN_CREATE = 297,
+ TOKEN_CURRENT = 298,
+ TOKEN_DATE = 299,
+ TOKEN_DATETIME = 300,
+ TOKEN_DAY = 301,
+ TOKEN_DECIMAL = 302,
+ TOKEN_DEFAULT = 303,
+ TOKEN_DELETE = 304,
+ TOKEN_DELIMITER = 305,
+ TOKEN_DESC = 306,
+ TOKEN_DISTINCT = 307,
+ TOKEN_DOUBLE = 308,
+ TOKEN_DROP = 309,
+ TOKEN_ELSE = 310,
+ TOKEN_END = 311,
+ TOKEN_ESCAPE_STRINGS = 312,
+ TOKEN_EXISTS = 313,
+ TOKEN_EXTRACT = 314,
+ TOKEN_FALSE = 315,
+ TOKEN_FIRST = 316,
+ TOKEN_FLOAT = 317,
+ TOKEN_FOLLOWING = 318,
+ TOKEN_FOR = 319,
+ TOKEN_FOREIGN = 320,
+ TOKEN_FROM = 321,
+ TOKEN_FULL = 322,
+ TOKEN_GROUP = 323,
+ TOKEN_HASH = 324,
+ TOKEN_HAVING = 325,
+ TOKEN_HOUR = 326,
+ TOKEN_IN = 327,
+ TOKEN_INDEX = 328,
+ TOKEN_INNER = 329,
+ TOKEN_INSERT = 330,
+ TOKEN_INTEGER = 331,
+ TOKEN_INTERVAL = 332,
+ TOKEN_INTO = 333,
+ TOKEN_JOIN = 334,
+ TOKEN_KEY = 335,
+ TOKEN_LAST = 336,
+ TOKEN_LEFT = 337,
+ TOKEN_LIMIT = 338,
+ TOKEN_LONG = 339,
+ TOKEN_MINUTE = 340,
+ TOKEN_MONTH = 341,
+ TOKEN_NULL = 342,
+ TOKEN_NULLS = 343,
+ TOKEN_OFF = 344,
+ TOKEN_ON = 345,
+ TOKEN_ORDER = 346,
+ TOKEN_OUTER = 347,
+ TOKEN_OVER = 348,
+ TOKEN_PARTITION = 349,
+ TOKEN_PARTITIONS = 350,
+ TOKEN_PERCENT = 351,
+ TOKEN_PRECEDING = 352,
+ TOKEN_PRIMARY = 353,
+ TOKEN_PRIORITY = 354,
+ TOKEN_QUIT = 355,
+ TOKEN_RANGE = 356,
+ TOKEN_REAL = 357,
+ TOKEN_REFERENCES = 358,
+ TOKEN_RIGHT = 359,
+ TOKEN_ROW = 360,
+ TOKEN_ROW_DELIMITER = 361,
+ TOKEN_ROWS = 362,
+ TOKEN_SECOND = 363,
+ TOKEN_SELECT = 364,
+ TOKEN_SET = 365,
+ TOKEN_SMA = 366,
+ TOKEN_SMALLINT = 367,
+ TOKEN_SUBSTRING = 368,
+ TOKEN_TABLE = 369,
+ TOKEN_THEN = 370,
+ TOKEN_TIME = 371,
+ TOKEN_TIMESTAMP = 372,
+ TOKEN_TRUE = 373,
+ TOKEN_TUPLESAMPLE = 374,
+ TOKEN_UNBOUNDED = 375,
+ TOKEN_UNIQUE = 376,
+ TOKEN_UPDATE = 377,
+ TOKEN_USING = 378,
+ TOKEN_VALUES = 379,
+ TOKEN_VARCHAR = 380,
+ TOKEN_WHEN = 381,
+ TOKEN_WHERE = 382,
+ TOKEN_WINDOW = 383,
+ TOKEN_WITH = 384,
+ TOKEN_YEAR = 385,
+ TOKEN_YEARMONTH = 386,
+ TOKEN_EOF = 387,
+ TOKEN_LEX_ERROR = 388
+ };
#endif
-/* Value type. */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-union YYSTYPE
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
{
-#line 119 "../SqlParser.ypp" /* yacc.c:1909 */
+/* Line 2058 of yacc.c */
+#line 120 "../SqlParser.ypp"
quickstep::ParseString *string_value_;
@@ -281,30 +283,43 @@ union YYSTYPE
quickstep::PtrVector<quickstep::ParseSubqueryTableReference> *with_list_;
quickstep::ParseSubqueryTableReference *with_list_element_;
-#line 285 "SqlParser_gen.hpp" /* yacc.c:1909 */
-};
+ quickstep::ParsePriority *opt_priority_clause_;
+
-typedef union YYSTYPE YYSTYPE;
+/* Line 2058 of yacc.c */
+#line 291 "SqlParser_gen.hpp"
+} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
-/* Location type. */
#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
-typedef struct YYLTYPE YYLTYPE;
-struct YYLTYPE
+typedef struct YYLTYPE
{
int first_line;
int first_column;
int last_line;
int last_column;
-};
+} YYLTYPE;
+# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
# define YYLTYPE_IS_DECLARED 1
# define YYLTYPE_IS_TRIVIAL 1
#endif
-
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int quickstep_yyparse (void *YYPARSE_PARAM);
+#else
+int quickstep_yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
int quickstep_yyparse (yyscan_t yyscanner, quickstep::ParseStatement **parsedStatement);
+#else
+int quickstep_yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
#endif /* !YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED */
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/parser/tests/Select.test
----------------------------------------------------------------------
diff --git a/parser/tests/Select.test b/parser/tests/Select.test
index 79da7ee..464c48f 100644
--- a/parser/tests/Select.test
+++ b/parser/tests/Select.test
@@ -480,6 +480,49 @@ SELECT 1 FROM test LIMIT abc
^
==
+# Priority
+SELECT 1 FROM test WITH PRIORITY 1
+--
+SelectStatement
++-select_query=Select
+| +-select_clause=SelectList
+| | +-SelectListItem
+| | +-Literal
+| | +-NumericLiteral[numeric_string=1,float_like=false]
+| +-from_clause=
+| +-TableReference[table=test]
++-priority=PRIORITY
+ +-NumericLiteral[numeric_string=1,float_like=false]
+==
+
+SELECT 1 FROM test WITH PRIORITY 1.1
+--
+ERROR: PRIORITY value must be an integer (1 : 34)
+SELECT 1 FROM test WITH PRIORITY 1.1
+ ^
+==
+
+SELECT 1 FROM test WITH PRIORITY 0
+--
+ERROR: PRIORITY value must be positive (1 : 34)
+SELECT 1 FROM test WITH PRIORITY 0
+ ^
+==
+
+SELECT 1 FROM test WITH PRIORITY -1
+--
+ERROR: syntax error (1 : 34)
+SELECT 1 FROM test WITH PRIORITY -1
+ ^
+==
+
+SELECT 1 FROM test WITH PRIORITY abc
+--
+ERROR: syntax error (1 : 34)
+SELECT 1 FROM test WITH PRIORITY abc
+ ^
+==
+
#
# Subqueries
#
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/query_optimizer/QueryHandle.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/QueryHandle.hpp b/query_optimizer/QueryHandle.hpp
index a17d3e8..5f3649a 100644
--- a/query_optimizer/QueryHandle.hpp
+++ b/query_optimizer/QueryHandle.hpp
@@ -18,6 +18,7 @@
#define QUICKSTEP_QUERY_OPTIMIZER_QUERY_HANDLE_HPP_
#include <cstddef>
+#include <cstdint>
#include <memory>
#include <utility>
@@ -44,8 +45,10 @@ class QueryHandle {
*
* @param query_id The given query id.
*/
- explicit QueryHandle(const std::size_t query_id)
+ explicit QueryHandle(const std::size_t query_id,
+ const std::uint64_t query_priority = 1)
: query_id_(query_id),
+ query_priority_(query_priority),
query_plan_(new QueryPlan()),
query_result_relation_(nullptr) {}
@@ -61,6 +64,13 @@ class QueryHandle {
}
/**
+ * @brief Get the query priority.
+ **/
+ const std::uint64_t query_priority() const {
+ return query_priority_;
+ }
+
+ /**
* @return The mutable query plan.
*/
QueryPlan* getQueryPlanMutable() {
@@ -111,6 +121,7 @@ class QueryHandle {
private:
const std::size_t query_id_;
+ const std::uint64_t query_priority_;
std::unique_ptr<QueryPlan> query_plan_;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/d6428914/query_optimizer/QueryProcessor.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/QueryProcessor.cpp b/query_optimizer/QueryProcessor.cpp
index b6fa3e0..6381d3a 100644
--- a/query_optimizer/QueryProcessor.cpp
+++ b/query_optimizer/QueryProcessor.cpp
@@ -17,6 +17,7 @@
#include "query_optimizer/QueryProcessor.hpp"
+#include <cstdint>
#include <cstdlib>
#include <fstream>
#include <memory>
@@ -37,7 +38,8 @@ using std::ofstream;
namespace quickstep {
QueryHandle* QueryProcessor::generateQueryHandle(const ParseStatement &statement) {
- std::unique_ptr<QueryHandle> query_handle(new QueryHandle(query_id_));
+ std::unique_ptr<QueryHandle> query_handle(
+ new QueryHandle(query_id_, statement.getPriority()));
optimizer::Optimizer optimizer(query_id_, getDefaultDatabase(), storage_manager_.get());
optimizer.generateQueryHandle(statement, query_handle.get());
[06/18] incubator-quickstep git commit: QUICKSTEP-20: Added parser
support for SQL window aggregation function
Posted by zu...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/00ca1e4b/parser/preprocessed/SqlLexer_gen.cpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlLexer_gen.cpp b/parser/preprocessed/SqlLexer_gen.cpp
index db20491..d02db56 100644
--- a/parser/preprocessed/SqlLexer_gen.cpp
+++ b/parser/preprocessed/SqlLexer_gen.cpp
@@ -8,8 +8,8 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 0
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 39
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
@@ -354,7 +354,7 @@ void quickstep_yyfree (void * ,yyscan_t yyscanner );
/* Begin user sect3 */
-#define quickstep_yywrap(yyscanner) (/*CONSTCOND*/1)
+#define quickstep_yywrap(yyscanner) 1
#define YY_SKIP_YYWRAP
typedef unsigned char YY_CHAR;
@@ -366,9 +366,6 @@ typedef int yy_state_type;
static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner);
static int yy_get_next_buffer (yyscan_t yyscanner );
-#if defined(__GNUC__) && __GNUC__ >= 3
-__attribute__((__noreturn__))
-#endif
static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
/* Done after the current pattern has been matched and before the
@@ -381,8 +378,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 152
-#define YY_END_OF_BUFFER 153
+#define YY_NUM_RULES 160
+#define YY_END_OF_BUFFER 161
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -390,72 +387,75 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[553] =
+static yyconst flex_int16_t yy_accept[588] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 153, 2, 2, 151, 151, 150, 149, 151,
- 128, 124, 127, 124, 124, 147, 120, 117, 121, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 125, 4, 5, 5, 3, 143,
- 143, 140, 144, 144, 138, 145, 145, 142, 1, 150,
- 118, 148, 147, 147, 147, 0, 122, 119, 123, 146,
- 146, 146, 146, 10, 146, 146, 146, 22, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 126, 146,
-
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 58, 66, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 80, 81, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 4, 5, 3, 143, 139, 144, 137, 137, 129,
- 131, 132, 133, 134, 135, 136, 137, 145, 141, 148,
- 147, 0, 147, 6, 7, 146, 9, 11, 146, 146,
- 15, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 32, 146, 146, 146, 146, 146, 146, 146, 146,
-
- 43, 146, 146, 146, 146, 146, 146, 50, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 62, 146, 68,
- 146, 146, 146, 146, 146, 146, 146, 76, 146, 79,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 146, 146, 97, 98, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 129, 131, 130, 146, 146, 146, 146, 146, 146, 146,
- 20, 23, 146, 146, 146, 28, 146, 146, 30, 146,
- 146, 146, 146, 37, 146, 146, 41, 42, 146, 146,
- 146, 146, 146, 146, 146, 52, 53, 146, 55, 146,
-
- 57, 146, 146, 146, 146, 65, 67, 69, 70, 71,
- 146, 73, 146, 146, 77, 146, 146, 146, 146, 146,
- 88, 146, 90, 146, 146, 146, 146, 146, 146, 146,
- 146, 146, 102, 103, 105, 146, 146, 146, 146, 146,
- 146, 112, 146, 114, 115, 129, 130, 8, 146, 146,
- 146, 146, 146, 146, 146, 25, 146, 146, 146, 146,
- 146, 146, 146, 146, 146, 146, 146, 146, 146, 146,
- 146, 47, 48, 49, 146, 54, 146, 59, 60, 146,
- 146, 146, 72, 146, 75, 78, 82, 83, 146, 146,
- 146, 89, 146, 146, 93, 146, 146, 146, 146, 146,
-
- 101, 146, 146, 146, 146, 109, 146, 146, 113, 146,
- 146, 146, 14, 146, 146, 146, 146, 146, 26, 146,
- 29, 146, 146, 146, 146, 35, 146, 146, 146, 40,
- 146, 45, 146, 146, 56, 61, 146, 146, 74, 146,
- 146, 146, 146, 92, 146, 95, 96, 146, 146, 146,
- 146, 107, 108, 110, 146, 146, 146, 13, 146, 146,
- 146, 146, 146, 146, 21, 146, 33, 34, 146, 146,
- 146, 146, 46, 51, 63, 146, 146, 86, 87, 146,
- 146, 146, 146, 146, 146, 111, 146, 146, 146, 146,
- 146, 146, 146, 146, 31, 146, 146, 39, 146, 64,
-
- 146, 146, 146, 99, 146, 146, 146, 146, 12, 146,
- 146, 146, 146, 24, 146, 36, 146, 146, 84, 146,
- 146, 100, 104, 146, 116, 16, 146, 146, 146, 27,
- 38, 146, 85, 91, 146, 146, 146, 18, 19, 146,
- 146, 106, 146, 146, 146, 146, 146, 94, 146, 44,
- 17, 0
+ 0, 0, 161, 2, 2, 159, 159, 158, 157, 159,
+ 136, 132, 135, 132, 132, 155, 128, 125, 129, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 133, 4, 5, 5, 3, 151,
+ 151, 148, 152, 152, 146, 153, 153, 150, 1, 158,
+ 126, 156, 155, 155, 155, 0, 130, 127, 131, 154,
+ 154, 154, 154, 10, 154, 154, 154, 22, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 134,
+
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 60, 68, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 82, 83, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 4, 5, 3, 151, 147, 152, 145,
+ 145, 137, 139, 140, 141, 142, 143, 144, 145, 153,
+ 149, 156, 155, 0, 155, 6, 7, 154, 9, 11,
+ 154, 154, 15, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 33, 154, 154, 154, 154, 154,
+
+ 154, 154, 154, 44, 154, 154, 154, 154, 154, 154,
+ 154, 52, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 64, 154, 70, 154, 154, 154, 154, 154, 154,
+ 154, 78, 154, 81, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 98, 154, 154,
+ 103, 104, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 154, 137, 139,
+ 138, 154, 154, 154, 154, 154, 154, 154, 20, 23,
+ 154, 154, 154, 28, 154, 154, 154, 31, 154, 154,
+ 154, 154, 38, 154, 154, 42, 43, 154, 154, 154,
+
+ 154, 154, 154, 154, 154, 54, 55, 154, 57, 154,
+ 59, 154, 154, 154, 154, 67, 69, 71, 72, 73,
+ 154, 75, 154, 154, 79, 154, 154, 86, 154, 154,
+ 154, 154, 92, 154, 94, 154, 154, 154, 100, 154,
+ 154, 154, 154, 154, 154, 108, 109, 111, 154, 154,
+ 154, 154, 154, 154, 154, 119, 154, 154, 122, 123,
+ 137, 138, 8, 154, 154, 154, 154, 154, 154, 154,
+ 25, 154, 154, 154, 154, 154, 154, 154, 154, 154,
+ 154, 154, 154, 154, 154, 154, 154, 48, 49, 50,
+ 154, 154, 56, 154, 61, 62, 154, 154, 154, 74,
+
+ 154, 77, 80, 84, 85, 154, 154, 154, 154, 93,
+ 154, 154, 97, 154, 154, 154, 154, 154, 107, 154,
+ 154, 154, 154, 154, 116, 154, 154, 120, 154, 154,
+ 154, 154, 14, 154, 154, 154, 154, 154, 26, 154,
+ 29, 154, 154, 154, 154, 154, 36, 154, 154, 154,
+ 41, 154, 46, 154, 154, 154, 58, 63, 154, 154,
+ 76, 154, 154, 154, 154, 154, 96, 154, 101, 102,
+ 154, 154, 154, 154, 154, 114, 115, 117, 154, 121,
+ 154, 154, 13, 154, 154, 154, 154, 154, 154, 21,
+ 30, 154, 34, 35, 154, 154, 154, 154, 47, 154,
+
+ 53, 65, 154, 154, 89, 154, 91, 154, 154, 154,
+ 154, 154, 154, 154, 118, 154, 154, 154, 154, 154,
+ 154, 154, 154, 32, 154, 154, 40, 154, 154, 66,
+ 154, 154, 154, 154, 105, 154, 154, 154, 154, 154,
+ 12, 154, 154, 154, 154, 24, 154, 37, 154, 154,
+ 51, 87, 90, 154, 154, 106, 110, 154, 113, 124,
+ 16, 154, 154, 154, 27, 39, 154, 88, 95, 154,
+ 154, 154, 18, 19, 154, 154, 112, 154, 154, 154,
+ 154, 154, 99, 154, 45, 17, 0
} ;
-static yyconst YY_CHAR yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 1, 4, 1, 1, 1, 1, 1, 1, 1,
@@ -487,7 +487,7 @@ static yyconst YY_CHAR yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static yyconst YY_CHAR yy_meta[72] =
+static yyconst flex_int32_t yy_meta[72] =
{ 0,
1, 1, 2, 1, 1, 3, 1, 4, 1, 5,
5, 6, 6, 5, 1, 1, 1, 7, 7, 7,
@@ -499,145 +499,155 @@ static yyconst YY_CHAR yy_meta[72] =
8
} ;
-static yyconst flex_uint16_t yy_base[568] =
+static yyconst flex_int16_t yy_base[603] =
{ 0,
0, 1, 46, 0, 117, 163, 2, 3, 128, 132,
- 6, 10, 257, 1219, 1219, 0, 1219, 13, 1219, 233,
- 1219, 1219, 1219, 208, 6, 130, 4, 1219, 195, 124,
- 161, 170, 178, 207, 260, 92, 167, 161, 96, 107,
- 219, 214, 212, 224, 236, 92, 279, 272, 278, 281,
- 128, 168, 0, 125, 1219, 184, 4, 19, 0, 0,
- 0, 146, 0, 0, 343, 0, 0, 145, 0, 22,
- 1219, 0, 307, 337, 341, 18, 1219, 1219, 1219, 0,
- 170, 224, 177, 181, 215, 269, 224, 0, 263, 326,
- 336, 286, 290, 333, 382, 321, 322, 329, 1219, 328,
-
- 347, 351, 346, 350, 346, 353, 352, 374, 386, 385,
- 383, 382, 402, 0, 395, 382, 389, 403, 399, 397,
- 399, 401, 399, 408, 418, 0, 421, 406, 410, 425,
- 437, 438, 438, 455, 451, 436, 457, 462, 462, 463,
- 461, 454, 447, 454, 462, 469, 465, 466, 474, 460,
- 481, 148, 29, 0, 0, 1219, 0, 1219, 1219, 22,
- 24, 1219, 1219, 1219, 1219, 1219, 0, 0, 1219, 0,
- 509, 26, 28, 0, 0, 478, 0, 481, 478, 501,
- 493, 514, 513, 501, 517, 500, 503, 498, 523, 505,
- 521, 0, 518, 527, 526, 529, 513, 532, 520, 532,
-
- 0, 537, 521, 523, 523, 525, 558, 563, 559, 562,
- 554, 568, 568, 560, 574, 575, 576, 577, 569, 0,
- 564, 565, 581, 578, 582, 569, 571, 0, 581, 0,
- 589, 590, 576, 595, 586, 580, 595, 605, 621, 625,
- 624, 98, 618, 629, 0, 623, 617, 625, 624, 634,
- 635, 629, 625, 642, 630, 624, 644, 634, 641, 632,
- 30, 125, 0, 633, 639, 649, 642, 652, 647, 647,
- 0, 674, 673, 675, 670, 0, 671, 674, 673, 681,
- 674, 676, 684, 693, 690, 688, 0, 0, 685, 682,
- 702, 700, 686, 687, 699, 0, 0, 693, 0, 696,
-
- 0, 687, 694, 696, 726, 0, 0, 0, 0, 0,
- 696, 0, 698, 734, 727, 730, 731, 741, 746, 751,
- 0, 748, 0, 736, 731, 736, 753, 744, 756, 748,
- 741, 758, 0, 745, 0, 760, 745, 747, 761, 764,
- 762, 0, 767, 0, 761, 136, 1219, 0, 772, 786,
- 780, 801, 788, 800, 805, 0, 795, 792, 806, 807,
- 804, 813, 803, 811, 808, 804, 805, 816, 817, 804,
- 821, 0, 0, 0, 818, 0, 819, 0, 0, 807,
- 823, 808, 0, 827, 0, 0, 0, 0, 814, 835,
- 840, 0, 855, 846, 0, 859, 861, 846, 858, 850,
-
- 0, 849, 851, 866, 867, 0, 854, 873, 0, 860,
- 867, 863, 0, 857, 862, 880, 873, 863, 0, 883,
- 0, 880, 873, 876, 870, 0, 872, 903, 913, 0,
- 93, 0, 898, 906, 0, 0, 904, 922, 0, 915,
- 905, 901, 913, 0, 916, 0, 0, 915, 921, 930,
- 931, 0, 0, 0, 915, 920, 921, 0, 928, 923,
- 926, 928, 936, 933, 0, 938, 0, 0, 939, 937,
- 928, 931, 0, 0, 0, 953, 959, 0, 0, 973,
- 969, 960, 967, 969, 970, 0, 964, 978, 972, 971,
- 972, 969, 972, 977, 0, 974, 979, 0, 975, 0,
-
- 982, 992, 985, 0, 992, 984, 985, 994, 0, 997,
- 1001, 996, 1018, 0, 1012, 0, 1027, 1018, 1019, 1020,
- 1031, 0, 0, 1029, 0, 0, 1024, 1038, 1026, 0,
- 0, 1036, 0, 0, 1026, 1042, 1028, 0, 0, 1035,
- 1045, 0, 1042, 1046, 1036, 1050, 1037, 0, 1038, 0,
- 0, 1219, 1103, 1113, 1123, 1133, 1143, 1147, 1150, 1156,
- 1164, 1174, 1184, 1194, 1204, 1209, 1211
+ 6, 10, 211, 1307, 1307, 0, 1307, 13, 1307, 194,
+ 1307, 1307, 1307, 194, 6, 130, 4, 1307, 170, 124,
+ 161, 215, 170, 207, 265, 92, 167, 162, 96, 107,
+ 223, 165, 162, 221, 274, 92, 284, 277, 315, 206,
+ 128, 232, 0, 125, 1307, 152, 4, 19, 0, 0,
+ 0, 143, 0, 0, 379, 0, 0, 144, 0, 22,
+ 1307, 0, 292, 305, 335, 18, 1307, 1307, 1307, 0,
+ 174, 264, 180, 186, 209, 271, 229, 0, 277, 333,
+ 335, 312, 330, 317, 323, 338, 323, 333, 340, 1307,
+
+ 339, 355, 357, 381, 370, 373, 377, 382, 380, 384,
+ 383, 383, 383, 431, 0, 398, 383, 390, 406, 402,
+ 403, 404, 425, 420, 431, 442, 0, 445, 432, 448,
+ 436, 437, 451, 448, 444, 460, 452, 439, 489, 464,
+ 468, 469, 468, 462, 455, 477, 501, 493, 489, 494,
+ 502, 494, 510, 142, 29, 0, 0, 1307, 0, 1307,
+ 1307, 22, 24, 1307, 1307, 1307, 1307, 1307, 0, 0,
+ 1307, 0, 520, 26, 28, 0, 0, 508, 0, 512,
+ 495, 510, 497, 530, 518, 506, 525, 508, 512, 509,
+ 543, 530, 533, 550, 0, 547, 558, 556, 561, 546,
+
+ 565, 552, 564, 0, 569, 552, 554, 556, 557, 576,
+ 566, 576, 569, 571, 565, 579, 580, 573, 587, 597,
+ 598, 604, 594, 0, 593, 594, 612, 613, 616, 603,
+ 605, 0, 614, 0, 622, 623, 611, 610, 630, 631,
+ 622, 616, 632, 628, 636, 639, 637, 631, 632, 644,
+ 0, 649, 647, 655, 657, 667, 670, 665, 665, 664,
+ 681, 669, 663, 682, 673, 682, 680, 671, 30, 125,
+ 0, 674, 679, 689, 683, 693, 688, 689, 0, 702,
+ 694, 694, 688, 0, 699, 706, 720, 709, 717, 712,
+ 715, 725, 734, 731, 729, 0, 0, 726, 723, 743,
+
+ 740, 726, 727, 734, 741, 0, 0, 735, 0, 738,
+ 0, 731, 738, 739, 759, 0, 0, 0, 0, 0,
+ 740, 0, 741, 755, 746, 764, 765, 0, 778, 783,
+ 786, 792, 0, 791, 0, 779, 774, 779, 0, 796,
+ 787, 799, 791, 784, 800, 0, 788, 0, 803, 788,
+ 789, 793, 807, 810, 810, 0, 814, 806, 0, 810,
+ 136, 1307, 0, 820, 830, 820, 840, 830, 839, 848,
+ 0, 840, 837, 851, 852, 844, 850, 859, 849, 857,
+ 854, 851, 852, 862, 863, 852, 869, 0, 0, 0,
+ 850, 869, 0, 870, 0, 0, 859, 876, 860, 0,
+
+ 888, 0, 0, 0, 0, 878, 885, 899, 886, 0,
+ 902, 893, 0, 907, 909, 894, 906, 898, 0, 897,
+ 899, 905, 915, 916, 0, 904, 923, 0, 902, 911,
+ 920, 916, 0, 909, 916, 934, 928, 919, 0, 939,
+ 0, 946, 936, 944, 949, 942, 0, 945, 963, 967,
+ 0, 93, 0, 951, 963, 959, 0, 0, 956, 974,
+ 0, 967, 957, 969, 954, 967, 0, 970, 0, 0,
+ 969, 975, 986, 987, 985, 0, 0, 0, 974, 0,
+ 979, 981, 0, 988, 983, 996, 1002, 1010, 1010, 0,
+ 0, 1015, 0, 0, 1018, 1016, 1008, 1010, 0, 1016,
+
+ 0, 0, 1019, 1017, 0, 1019, 0, 1031, 1026, 1016,
+ 1023, 1026, 1027, 1036, 0, 1022, 1038, 1032, 1031, 1034,
+ 1031, 1035, 1041, 0, 1038, 1053, 0, 1052, 1066, 0,
+ 1063, 1071, 1076, 1070, 0, 1079, 1071, 1072, 1085, 1082,
+ 0, 1084, 1087, 1081, 1089, 0, 1075, 0, 1090, 1080,
+ 0, 1080, 0, 1081, 1094, 0, 0, 1092, 0, 0,
+ 0, 1087, 1103, 1091, 0, 0, 1102, 0, 0, 1093,
+ 1109, 1105, 0, 0, 1116, 1126, 0, 1126, 1129, 1121,
+ 1136, 1125, 0, 1126, 0, 0, 1307, 1191, 1201, 1211,
+ 1221, 1231, 1235, 1238, 1244, 1252, 1262, 1272, 1282, 1292,
+
+ 1297, 1299
} ;
-static yyconst flex_int16_t yy_def[568] =
+static yyconst flex_int16_t yy_def[603] =
{ 0,
- 553, 553, 552, 3, 554, 554, 555, 555, 556, 556,
- 557, 557, 552, 552, 552, 558, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 552, 552, 552, 552, 560, 561,
- 561, 552, 562, 562, 563, 564, 564, 552, 558, 552,
- 552, 565, 552, 552, 552, 552, 552, 552, 552, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 552, 559,
-
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 552, 552, 560, 561, 552, 562, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 566, 564, 552, 565,
- 552, 552, 552, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
-
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 552, 552, 567, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
-
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 552, 552, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
-
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
-
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 559, 559, 559, 559, 559, 559, 559, 559, 559,
- 559, 0, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552
+ 588, 588, 587, 3, 589, 589, 590, 590, 591, 591,
+ 592, 592, 587, 587, 587, 593, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 587, 587, 587, 587, 595, 596,
+ 596, 587, 597, 597, 598, 599, 599, 587, 593, 587,
+ 587, 600, 587, 587, 587, 587, 587, 587, 587, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 587,
+
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 587, 587, 595, 596, 587, 597, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 601, 599,
+ 587, 600, 587, 587, 587, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 587, 587,
+ 602, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 587, 587, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 594, 594, 594, 594,
+ 594, 594, 594, 594, 594, 594, 0, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+
+ 587, 587
} ;
-static yyconst flex_uint16_t yy_nxt[1291] =
+static yyconst flex_int16_t yy_nxt[1379] =
{ 0,
- 552, 552, 15, 15, 61, 61, 153, 153, 67, 62,
- 62, 68, 67, 552, 70, 68, 70, 73, 73, 77,
- 78, 153, 153, 70, 552, 70, 172, 172, 552, 173,
- 173, 153, 153, 261, 262, 262, 262, 173, 173, 173,
- 173, 346, 262, 552, 16, 16, 17, 18, 19, 18,
+ 587, 587, 15, 15, 61, 61, 155, 155, 67, 62,
+ 62, 68, 67, 587, 70, 68, 70, 73, 73, 77,
+ 78, 155, 155, 70, 587, 70, 174, 174, 587, 175,
+ 175, 155, 155, 269, 270, 270, 270, 175, 175, 175,
+ 175, 361, 270, 587, 16, 16, 17, 18, 19, 18,
20, 21, 22, 23, 22, 24, 25, 26, 26, 17,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
@@ -646,143 +656,153 @@ static yyconst flex_uint16_t yy_nxt[1291] =
38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 17, 56, 57,
- 58, 17, 17, 17, 17, 17, 110, 115, 116, 132,
- 64, 17, 17, 17, 64, 62, 262, 262, 472, 62,
- 74, 75, 75, 327, 81, 148, 151, 262, 262, 152,
- 169, 76, 82, 156, 83, 110, 115, 116, 132, 84,
+ 58, 17, 17, 17, 17, 17, 111, 116, 117, 134,
+ 64, 17, 17, 17, 64, 62, 270, 270, 498, 62,
+ 74, 75, 75, 154, 81, 150, 153, 270, 270, 171,
+ 158, 76, 82, 154, 83, 111, 116, 117, 134, 84,
17, 17, 17, 17, 56, 57, 58, 17, 17, 17,
- 17, 17, 65, 81, 148, 151, 65, 17, 17, 17,
- 76, 82, 85, 83, 111, 152, 86, 89, 84, 87,
- 174, 113, 149, 150, 90, 94, 114, 177, 112, 95,
-
- 178, 91, 88, 96, 92, 93, 17, 17, 17, 97,
- 79, 85, 98, 111, 99, 86, 89, 72, 87, 174,
- 113, 149, 150, 90, 94, 114, 177, 112, 95, 178,
- 91, 88, 96, 92, 93, 100, 117, 101, 97, 121,
- 118, 98, 102, 123, 119, 122, 125, 103, 71, 124,
- 120, 179, 175, 129, 126, 182, 552, 130, 127, 552,
- 176, 128, 552, 552, 100, 117, 101, 552, 121, 118,
- 131, 102, 123, 119, 122, 125, 103, 104, 124, 120,
- 179, 175, 129, 126, 182, 105, 130, 127, 106, 176,
- 128, 107, 180, 137, 108, 140, 133, 109, 183, 131,
-
- 134, 138, 141, 142, 135, 181, 104, 189, 190, 139,
- 136, 145, 143, 146, 105, 144, 147, 106, 73, 73,
- 107, 180, 137, 108, 140, 133, 109, 183, 76, 134,
- 138, 141, 142, 135, 181, 552, 189, 190, 139, 136,
- 145, 143, 146, 184, 144, 147, 159, 185, 171, 171,
- 552, 74, 75, 75, 160, 161, 197, 76, 76, 198,
- 199, 162, 76, 200, 186, 163, 187, 201, 188, 191,
- 202, 203, 184, 164, 192, 552, 185, 165, 205, 166,
- 206, 552, 204, 167, 207, 197, 208, 76, 198, 199,
- 162, 76, 200, 186, 163, 187, 201, 188, 191, 202,
-
- 203, 193, 164, 192, 194, 209, 165, 205, 166, 206,
- 195, 204, 167, 207, 210, 208, 211, 196, 212, 214,
- 219, 213, 215, 220, 221, 222, 223, 225, 224, 226,
- 193, 227, 216, 194, 209, 228, 229, 217, 218, 195,
- 230, 231, 232, 210, 233, 211, 196, 212, 214, 219,
- 213, 215, 220, 221, 222, 223, 225, 224, 226, 234,
- 227, 216, 235, 236, 228, 229, 217, 218, 237, 230,
- 231, 232, 238, 233, 241, 242, 243, 239, 240, 246,
- 247, 248, 249, 250, 251, 244, 252, 253, 234, 254,
- 255, 235, 236, 245, 256, 258, 259, 237, 260, 264,
-
- 257, 238, 265, 241, 242, 243, 239, 240, 246, 247,
- 248, 249, 250, 251, 244, 252, 253, 266, 254, 255,
- 171, 171, 245, 256, 258, 259, 267, 260, 264, 257,
- 76, 265, 268, 269, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, 281, 270, 266, 282, 284, 285,
- 286, 283, 287, 288, 289, 267, 290, 291, 292, 76,
- 293, 268, 269, 271, 272, 273, 274, 275, 276, 277,
- 278, 279, 280, 281, 270, 294, 282, 284, 285, 286,
- 283, 287, 288, 289, 295, 290, 291, 292, 296, 293,
- 297, 298, 299, 300, 301, 302, 303, 304, 305, 307,
-
- 308, 309, 310, 311, 294, 312, 313, 314, 306, 315,
- 316, 317, 318, 295, 319, 320, 321, 296, 322, 297,
- 298, 299, 300, 301, 302, 303, 304, 305, 307, 308,
- 309, 310, 311, 323, 312, 313, 314, 306, 315, 316,
- 317, 318, 324, 319, 320, 321, 325, 322, 326, 328,
- 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
- 339, 340, 323, 341, 342, 344, 345, 348, 343, 349,
- 350, 324, 351, 352, 353, 325, 354, 326, 328, 329,
- 330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
- 340, 355, 341, 342, 344, 345, 348, 343, 349, 350,
-
- 356, 351, 352, 353, 357, 354, 358, 359, 360, 361,
- 362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
- 355, 372, 373, 374, 375, 376, 377, 378, 379, 356,
- 380, 552, 383, 357, 384, 358, 359, 360, 361, 362,
- 363, 364, 365, 366, 367, 368, 369, 370, 371, 381,
- 372, 373, 374, 375, 376, 377, 378, 379, 385, 380,
- 382, 383, 386, 384, 387, 388, 389, 390, 391, 392,
- 393, 394, 395, 396, 397, 398, 399, 400, 381, 401,
- 402, 403, 404, 405, 406, 407, 408, 385, 409, 382,
- 410, 386, 411, 387, 388, 389, 390, 391, 392, 393,
-
- 394, 395, 396, 397, 398, 399, 400, 412, 401, 402,
- 403, 404, 405, 406, 407, 408, 413, 409, 414, 410,
- 415, 411, 417, 416, 418, 419, 420, 421, 422, 423,
- 424, 425, 426, 427, 428, 429, 412, 430, 431, 432,
- 433, 434, 435, 436, 437, 413, 438, 414, 439, 415,
- 440, 417, 416, 418, 419, 420, 421, 422, 423, 424,
- 425, 426, 427, 428, 429, 441, 430, 431, 432, 433,
- 434, 435, 436, 437, 442, 438, 443, 439, 444, 440,
- 445, 446, 447, 448, 449, 450, 451, 452, 453, 454,
- 455, 456, 457, 458, 441, 459, 460, 461, 462, 463,
-
- 464, 465, 466, 442, 467, 443, 468, 444, 469, 445,
- 446, 447, 448, 449, 450, 451, 452, 453, 454, 455,
- 456, 457, 458, 470, 459, 460, 461, 462, 463, 464,
- 465, 466, 471, 467, 473, 468, 474, 469, 475, 476,
- 477, 478, 479, 480, 481, 482, 483, 484, 485, 486,
- 487, 488, 470, 489, 490, 491, 492, 493, 494, 495,
- 496, 471, 497, 473, 498, 474, 499, 475, 476, 477,
- 478, 479, 480, 481, 482, 483, 484, 485, 486, 487,
- 488, 500, 489, 490, 491, 492, 493, 494, 495, 496,
- 501, 497, 502, 498, 503, 499, 504, 505, 506, 507,
-
- 508, 509, 510, 511, 512, 513, 514, 515, 516, 517,
- 500, 518, 519, 520, 521, 522, 523, 524, 525, 501,
- 526, 502, 527, 503, 528, 504, 505, 506, 507, 508,
- 509, 510, 511, 512, 513, 514, 515, 516, 517, 529,
- 518, 519, 520, 521, 522, 523, 524, 525, 530, 526,
- 531, 527, 532, 528, 533, 534, 535, 536, 537, 538,
- 539, 540, 541, 542, 543, 544, 545, 546, 529, 547,
- 548, 549, 550, 551, 552, 552, 552, 530, 552, 531,
- 552, 532, 552, 533, 534, 535, 536, 537, 538, 539,
- 540, 541, 542, 543, 544, 545, 546, 552, 547, 548,
-
- 549, 550, 551, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 59, 59, 59, 59, 59, 59, 59,
- 59, 59, 59, 60, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 63, 63, 63, 63, 63, 63, 63,
- 63, 63, 63, 66, 66, 66, 66, 66, 66, 66,
- 66, 66, 66, 69, 69, 80, 80, 80, 552, 80,
- 154, 154, 154, 154, 155, 155, 155, 552, 155, 155,
- 155, 155, 155, 155, 157, 157, 157, 552, 157, 157,
- 157, 157, 552, 157, 158, 158, 158, 158, 158, 158,
- 158, 158, 158, 158, 168, 168, 552, 168, 168, 168,
-
- 168, 168, 168, 168, 170, 552, 170, 170, 170, 170,
- 170, 170, 170, 170, 263, 263, 347, 347, 13, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552
+ 17, 17, 65, 81, 150, 153, 65, 17, 17, 17,
+ 76, 82, 85, 83, 112, 79, 86, 95, 84, 87,
+ 122, 96, 114, 124, 176, 97, 123, 115, 113, 125,
+
+ 179, 98, 88, 72, 99, 180, 17, 17, 17, 71,
+ 587, 85, 587, 112, 100, 86, 95, 587, 87, 122,
+ 96, 114, 124, 176, 97, 123, 115, 113, 125, 179,
+ 98, 88, 89, 99, 180, 101, 147, 102, 148, 90,
+ 118, 149, 103, 126, 119, 181, 91, 104, 120, 92,
+ 93, 127, 94, 587, 121, 128, 151, 152, 129, 130,
+ 184, 89, 587, 587, 101, 147, 102, 148, 90, 118,
+ 149, 103, 126, 119, 181, 91, 104, 120, 92, 93,
+ 127, 94, 105, 121, 128, 151, 152, 129, 130, 184,
+ 106, 131, 177, 107, 182, 132, 108, 587, 139, 109,
+
+ 178, 135, 110, 73, 73, 136, 140, 183, 133, 137,
+ 587, 105, 185, 76, 141, 138, 173, 173, 587, 106,
+ 131, 177, 107, 182, 132, 108, 76, 139, 109, 178,
+ 135, 110, 142, 191, 136, 140, 183, 133, 137, 143,
+ 144, 185, 76, 141, 138, 74, 75, 75, 192, 145,
+ 186, 193, 146, 587, 187, 76, 76, 196, 200, 194,
+ 197, 142, 191, 188, 195, 189, 198, 190, 143, 144,
+ 201, 202, 587, 199, 203, 204, 205, 192, 145, 186,
+ 193, 146, 161, 187, 587, 76, 196, 200, 194, 197,
+ 162, 163, 188, 195, 189, 198, 190, 164, 208, 201,
+
+ 202, 165, 199, 203, 204, 205, 206, 209, 210, 166,
+ 211, 213, 214, 167, 215, 168, 212, 207, 216, 169,
+ 218, 217, 587, 223, 224, 225, 164, 208, 226, 227,
+ 165, 228, 587, 229, 230, 206, 209, 210, 166, 211,
+ 213, 214, 167, 215, 168, 212, 207, 216, 169, 218,
+ 217, 219, 223, 224, 225, 231, 232, 226, 227, 233,
+ 228, 220, 229, 230, 234, 235, 221, 222, 236, 237,
+ 238, 239, 240, 242, 243, 247, 241, 244, 248, 587,
+ 219, 252, 245, 246, 231, 232, 253, 254, 233, 255,
+ 220, 256, 257, 234, 235, 221, 222, 236, 237, 238,
+
+ 239, 240, 242, 243, 247, 241, 244, 248, 249, 258,
+ 252, 245, 246, 261, 262, 253, 254, 250, 255, 259,
+ 256, 257, 263, 265, 266, 251, 260, 268, 264, 272,
+ 267, 173, 173, 273, 274, 275, 276, 249, 258, 279,
+ 280, 76, 261, 262, 281, 282, 250, 283, 259, 277,
+ 284, 263, 265, 266, 251, 260, 268, 264, 272, 267,
+ 285, 278, 273, 274, 275, 276, 286, 287, 279, 280,
+ 76, 288, 289, 281, 282, 290, 283, 291, 277, 284,
+ 293, 292, 294, 295, 296, 297, 298, 299, 300, 285,
+ 278, 301, 302, 303, 304, 286, 287, 305, 306, 307,
+
+ 288, 289, 308, 309, 290, 310, 291, 311, 312, 293,
+ 292, 294, 295, 296, 297, 298, 299, 300, 313, 314,
+ 301, 302, 303, 304, 317, 315, 305, 306, 307, 318,
+ 319, 308, 309, 320, 310, 316, 311, 312, 321, 322,
+ 323, 324, 325, 326, 327, 328, 329, 313, 314, 330,
+ 331, 332, 333, 317, 315, 334, 335, 336, 318, 319,
+ 337, 338, 320, 341, 316, 342, 339, 321, 322, 323,
+ 324, 325, 326, 327, 328, 329, 340, 343, 330, 331,
+ 332, 333, 344, 345, 334, 335, 336, 346, 347, 337,
+ 338, 348, 341, 349, 342, 339, 350, 351, 352, 353,
+
+ 354, 355, 358, 356, 359, 360, 343, 357, 363, 364,
+ 365, 344, 345, 366, 367, 368, 346, 347, 369, 370,
+ 348, 371, 349, 372, 373, 350, 351, 352, 353, 354,
+ 355, 358, 356, 359, 360, 374, 357, 363, 364, 365,
+ 375, 376, 366, 367, 368, 377, 378, 369, 370, 379,
+ 371, 380, 372, 373, 381, 382, 383, 384, 385, 386,
+ 387, 388, 389, 390, 374, 391, 392, 393, 394, 375,
+ 376, 395, 396, 397, 377, 378, 400, 401, 379, 402,
+ 380, 403, 398, 381, 382, 383, 384, 385, 386, 387,
+ 388, 389, 390, 399, 391, 392, 393, 394, 404, 405,
+
+ 395, 396, 397, 406, 407, 400, 401, 408, 402, 409,
+ 403, 398, 410, 411, 412, 413, 414, 415, 416, 417,
+ 418, 419, 399, 420, 421, 422, 423, 404, 405, 424,
+ 425, 426, 406, 407, 427, 428, 408, 429, 409, 430,
+ 431, 410, 411, 412, 413, 414, 415, 416, 417, 418,
+ 419, 432, 420, 421, 422, 423, 433, 434, 424, 425,
+ 426, 437, 435, 427, 428, 436, 429, 438, 430, 431,
+ 439, 440, 441, 442, 443, 444, 445, 446, 447, 448,
+ 432, 449, 450, 451, 452, 433, 434, 453, 454, 455,
+ 437, 435, 456, 457, 436, 458, 438, 459, 460, 439,
+
+ 440, 441, 442, 443, 444, 445, 446, 447, 448, 461,
+ 449, 450, 451, 452, 462, 463, 453, 454, 455, 464,
+ 465, 456, 457, 466, 458, 467, 459, 460, 468, 469,
+ 470, 471, 472, 473, 474, 475, 476, 477, 461, 478,
+ 479, 480, 481, 462, 463, 482, 483, 484, 464, 465,
+ 485, 486, 466, 487, 467, 488, 489, 468, 469, 470,
+ 471, 472, 473, 474, 475, 476, 477, 490, 478, 479,
+ 480, 481, 491, 492, 482, 483, 484, 493, 494, 485,
+ 486, 495, 487, 496, 488, 489, 497, 499, 500, 501,
+ 502, 503, 504, 505, 506, 507, 490, 508, 509, 510,
+
+ 511, 491, 492, 512, 513, 514, 493, 494, 515, 516,
+ 495, 517, 496, 518, 519, 497, 499, 500, 501, 502,
+ 503, 504, 505, 506, 507, 520, 508, 509, 510, 511,
+ 521, 522, 512, 513, 514, 523, 524, 515, 516, 525,
+ 517, 526, 518, 519, 527, 528, 529, 530, 531, 532,
+ 533, 534, 535, 536, 520, 537, 538, 539, 540, 521,
+ 522, 541, 542, 543, 523, 524, 544, 545, 525, 546,
+ 526, 547, 548, 527, 528, 529, 530, 531, 532, 533,
+ 534, 535, 536, 549, 537, 538, 539, 540, 550, 551,
+ 541, 542, 543, 552, 553, 544, 545, 554, 546, 555,
+
+ 547, 548, 556, 557, 558, 559, 560, 561, 562, 563,
+ 564, 565, 549, 566, 567, 568, 569, 550, 551, 570,
+ 571, 572, 552, 553, 573, 574, 554, 575, 555, 576,
+ 577, 556, 557, 558, 559, 560, 561, 562, 563, 564,
+ 565, 578, 566, 567, 568, 569, 579, 580, 570, 571,
+ 572, 581, 582, 573, 574, 583, 575, 584, 576, 577,
+ 585, 586, 587, 587, 587, 587, 587, 587, 587, 587,
+ 578, 587, 587, 587, 587, 579, 580, 587, 587, 587,
+ 581, 582, 587, 587, 583, 587, 584, 587, 587, 585,
+ 586, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+
+ 14, 59, 59, 59, 59, 59, 59, 59, 59, 59,
+ 59, 60, 60, 60, 60, 60, 60, 60, 60, 60,
+ 60, 63, 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 69, 69, 80, 80, 80, 587, 80, 156, 156,
+ 156, 156, 157, 157, 157, 587, 157, 157, 157, 157,
+ 157, 157, 159, 159, 159, 587, 159, 159, 159, 159,
+ 587, 159, 160, 160, 160, 160, 160, 160, 160, 160,
+ 160, 160, 170, 170, 587, 170, 170, 170, 170, 170,
+ 170, 170, 172, 587, 172, 172, 172, 172, 172, 172,
+
+ 172, 172, 271, 271, 362, 362, 13, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587
} ;
-static yyconst flex_int16_t yy_chk[1291] =
+static yyconst flex_int16_t yy_chk[1379] =
{ 0,
0, 0, 1, 2, 7, 8, 57, 57, 11, 7,
8, 11, 12, 0, 18, 12, 18, 25, 25, 27,
27, 58, 58, 70, 0, 70, 76, 76, 0, 76,
- 76, 153, 153, 160, 160, 161, 161, 172, 172, 173,
- 173, 261, 261, 0, 1, 2, 3, 3, 3, 3,
+ 76, 155, 155, 162, 162, 163, 163, 174, 174, 175,
+ 175, 269, 269, 0, 1, 2, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
@@ -792,137 +812,147 @@ static yyconst flex_int16_t yy_chk[1291] =
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 5, 5, 5,
5, 5, 5, 5, 5, 5, 36, 39, 40, 46,
- 9, 5, 5, 5, 10, 9, 262, 262, 431, 10,
- 26, 26, 26, 242, 30, 51, 54, 346, 346, 152,
- 68, 26, 30, 62, 30, 36, 39, 40, 46, 30,
+ 9, 5, 5, 5, 10, 9, 270, 270, 452, 10,
+ 26, 26, 26, 154, 30, 51, 54, 361, 361, 68,
+ 62, 26, 30, 56, 30, 36, 39, 40, 46, 30,
5, 5, 5, 6, 6, 6, 6, 6, 6, 6,
6, 6, 9, 30, 51, 54, 10, 6, 6, 6,
- 26, 30, 31, 30, 37, 56, 31, 32, 30, 31,
- 81, 38, 52, 52, 32, 33, 38, 83, 37, 33,
-
- 84, 32, 31, 33, 32, 32, 6, 6, 6, 33,
- 29, 31, 33, 37, 34, 31, 32, 24, 31, 81,
- 38, 52, 52, 32, 33, 38, 83, 37, 33, 84,
- 32, 31, 33, 32, 32, 34, 41, 34, 33, 42,
- 41, 33, 34, 43, 41, 42, 44, 34, 20, 43,
- 41, 85, 82, 45, 44, 87, 13, 45, 44, 0,
- 82, 44, 0, 0, 34, 41, 34, 0, 42, 41,
- 45, 34, 43, 41, 42, 44, 34, 35, 43, 41,
- 85, 82, 45, 44, 87, 35, 45, 44, 35, 82,
- 44, 35, 86, 48, 35, 49, 47, 35, 89, 45,
-
- 47, 48, 49, 49, 47, 86, 35, 92, 93, 48,
- 47, 50, 49, 50, 35, 49, 50, 35, 73, 73,
- 35, 86, 48, 35, 49, 47, 35, 89, 73, 47,
- 48, 49, 49, 47, 86, 0, 92, 93, 48, 47,
- 50, 49, 50, 90, 49, 50, 65, 90, 74, 74,
- 0, 75, 75, 75, 65, 65, 96, 73, 74, 97,
- 98, 65, 75, 100, 91, 65, 91, 101, 91, 94,
- 102, 103, 90, 65, 94, 0, 90, 65, 104, 65,
- 105, 0, 103, 65, 106, 96, 107, 74, 97, 98,
- 65, 75, 100, 91, 65, 91, 101, 91, 94, 102,
-
- 103, 95, 65, 94, 95, 108, 65, 104, 65, 105,
- 95, 103, 65, 106, 109, 107, 110, 95, 111, 112,
- 115, 111, 113, 116, 117, 118, 119, 120, 119, 121,
- 95, 122, 113, 95, 108, 123, 124, 113, 113, 95,
- 125, 127, 128, 109, 129, 110, 95, 111, 112, 115,
- 111, 113, 116, 117, 118, 119, 120, 119, 121, 130,
- 122, 113, 131, 132, 123, 124, 113, 113, 133, 125,
- 127, 128, 134, 129, 135, 136, 137, 134, 134, 138,
- 139, 140, 141, 142, 143, 137, 144, 145, 130, 146,
- 147, 131, 132, 137, 148, 149, 150, 133, 151, 176,
-
- 148, 134, 178, 135, 136, 137, 134, 134, 138, 139,
- 140, 141, 142, 143, 137, 144, 145, 179, 146, 147,
- 171, 171, 137, 148, 149, 150, 180, 151, 176, 148,
- 171, 178, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 193, 194, 182, 179, 195, 196, 197,
- 198, 195, 199, 200, 202, 180, 203, 204, 205, 171,
- 206, 181, 182, 183, 184, 185, 186, 187, 188, 189,
- 190, 191, 193, 194, 182, 207, 195, 196, 197, 198,
- 195, 199, 200, 202, 208, 203, 204, 205, 209, 206,
- 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
-
- 221, 222, 223, 224, 207, 225, 226, 227, 218, 229,
- 231, 232, 233, 208, 234, 235, 236, 209, 237, 210,
- 211, 212, 213, 214, 215, 216, 217, 218, 219, 221,
- 222, 223, 224, 238, 225, 226, 227, 218, 229, 231,
- 232, 233, 239, 234, 235, 236, 240, 237, 241, 243,
- 244, 246, 247, 248, 249, 250, 251, 252, 253, 254,
- 255, 256, 238, 257, 258, 259, 260, 264, 258, 265,
- 266, 239, 267, 268, 269, 240, 270, 241, 243, 244,
- 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
- 256, 272, 257, 258, 259, 260, 264, 258, 265, 266,
-
- 273, 267, 268, 269, 274, 270, 275, 277, 278, 279,
- 280, 281, 282, 283, 284, 285, 286, 289, 290, 291,
- 272, 292, 293, 294, 295, 298, 300, 302, 303, 273,
- 304, 0, 311, 274, 313, 275, 277, 278, 279, 280,
- 281, 282, 283, 284, 285, 286, 289, 290, 291, 305,
- 292, 293, 294, 295, 298, 300, 302, 303, 314, 304,
- 305, 311, 315, 313, 316, 317, 318, 319, 320, 322,
- 324, 325, 326, 327, 328, 329, 330, 331, 305, 332,
- 334, 336, 337, 338, 339, 340, 341, 314, 343, 305,
- 345, 315, 349, 316, 317, 318, 319, 320, 322, 324,
-
- 325, 326, 327, 328, 329, 330, 331, 350, 332, 334,
- 336, 337, 338, 339, 340, 341, 351, 343, 352, 345,
- 353, 349, 354, 353, 355, 357, 358, 359, 360, 361,
- 362, 363, 364, 365, 366, 367, 350, 368, 369, 370,
- 371, 375, 377, 380, 381, 351, 382, 352, 384, 353,
- 389, 354, 353, 355, 357, 358, 359, 360, 361, 362,
- 363, 364, 365, 366, 367, 390, 368, 369, 370, 371,
- 375, 377, 380, 381, 391, 382, 393, 384, 394, 389,
- 396, 397, 398, 399, 400, 402, 403, 404, 405, 407,
- 408, 410, 411, 412, 390, 414, 415, 416, 417, 418,
-
- 420, 422, 423, 391, 424, 393, 425, 394, 427, 396,
- 397, 398, 399, 400, 402, 403, 404, 405, 407, 408,
- 410, 411, 412, 428, 414, 415, 416, 417, 418, 420,
- 422, 423, 429, 424, 433, 425, 434, 427, 437, 438,
- 440, 441, 442, 443, 445, 448, 449, 450, 451, 455,
- 456, 457, 428, 459, 460, 461, 462, 463, 464, 466,
- 469, 429, 470, 433, 471, 434, 472, 437, 438, 440,
- 441, 442, 443, 445, 448, 449, 450, 451, 455, 456,
- 457, 476, 459, 460, 461, 462, 463, 464, 466, 469,
- 477, 470, 480, 471, 481, 472, 482, 483, 484, 485,
-
- 487, 488, 489, 490, 491, 492, 493, 494, 496, 497,
- 476, 499, 501, 502, 503, 505, 506, 507, 508, 477,
- 510, 480, 511, 481, 512, 482, 483, 484, 485, 487,
- 488, 489, 490, 491, 492, 493, 494, 496, 497, 513,
- 499, 501, 502, 503, 505, 506, 507, 508, 515, 510,
- 517, 511, 518, 512, 519, 520, 521, 524, 527, 528,
- 529, 532, 535, 536, 537, 540, 541, 543, 513, 544,
- 545, 546, 547, 549, 0, 0, 0, 515, 0, 517,
- 0, 518, 0, 519, 520, 521, 524, 527, 528, 529,
- 532, 535, 536, 537, 540, 541, 543, 0, 544, 545,
-
- 546, 547, 549, 553, 553, 553, 553, 553, 553, 553,
- 553, 553, 553, 554, 554, 554, 554, 554, 554, 554,
- 554, 554, 554, 555, 555, 555, 555, 555, 555, 555,
- 555, 555, 555, 556, 556, 556, 556, 556, 556, 556,
- 556, 556, 556, 557, 557, 557, 557, 557, 557, 557,
- 557, 557, 557, 558, 558, 559, 559, 559, 0, 559,
- 560, 560, 560, 560, 561, 561, 561, 0, 561, 561,
- 561, 561, 561, 561, 562, 562, 562, 0, 562, 562,
- 562, 562, 0, 562, 563, 563, 563, 563, 563, 563,
- 563, 563, 563, 563, 564, 564, 0, 564, 564, 564,
-
- 564, 564, 564, 564, 565, 0, 565, 565, 565, 565,
- 565, 565, 565, 565, 566, 566, 567, 567, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552,
- 552, 552, 552, 552, 552, 552, 552, 552, 552, 552
+ 26, 30, 31, 30, 37, 29, 31, 33, 30, 31,
+ 42, 33, 38, 43, 81, 33, 42, 38, 37, 43,
+
+ 83, 33, 31, 24, 33, 84, 6, 6, 6, 20,
+ 13, 31, 0, 37, 34, 31, 33, 0, 31, 42,
+ 33, 38, 43, 81, 33, 42, 38, 37, 43, 83,
+ 33, 31, 32, 33, 84, 34, 50, 34, 50, 32,
+ 41, 50, 34, 44, 41, 85, 32, 34, 41, 32,
+ 32, 44, 32, 0, 41, 44, 52, 52, 44, 44,
+ 87, 32, 0, 0, 34, 50, 34, 50, 32, 41,
+ 50, 34, 44, 41, 85, 32, 34, 41, 32, 32,
+ 44, 32, 35, 41, 44, 52, 52, 44, 44, 87,
+ 35, 45, 82, 35, 86, 45, 35, 0, 48, 35,
+
+ 82, 47, 35, 73, 73, 47, 48, 86, 45, 47,
+ 0, 35, 89, 73, 48, 47, 74, 74, 0, 35,
+ 45, 82, 35, 86, 45, 35, 74, 48, 35, 82,
+ 47, 35, 49, 92, 47, 48, 86, 45, 47, 49,
+ 49, 89, 73, 48, 47, 75, 75, 75, 93, 49,
+ 90, 94, 49, 0, 90, 74, 75, 96, 97, 95,
+ 96, 49, 92, 91, 95, 91, 96, 91, 49, 49,
+ 98, 99, 0, 96, 101, 102, 103, 93, 49, 90,
+ 94, 49, 65, 90, 0, 75, 96, 97, 95, 96,
+ 65, 65, 91, 95, 91, 96, 91, 65, 105, 98,
+
+ 99, 65, 96, 101, 102, 103, 104, 106, 107, 65,
+ 108, 109, 110, 65, 111, 65, 108, 104, 112, 65,
+ 113, 112, 0, 116, 117, 118, 65, 105, 119, 120,
+ 65, 120, 0, 121, 122, 104, 106, 107, 65, 108,
+ 109, 110, 65, 111, 65, 108, 104, 112, 65, 113,
+ 112, 114, 116, 117, 118, 123, 124, 119, 120, 125,
+ 120, 114, 121, 122, 126, 128, 114, 114, 129, 130,
+ 131, 132, 133, 134, 135, 137, 133, 136, 138, 0,
+ 114, 140, 136, 136, 123, 124, 141, 142, 125, 143,
+ 114, 144, 145, 126, 128, 114, 114, 129, 130, 131,
+
+ 132, 133, 134, 135, 137, 133, 136, 138, 139, 146,
+ 140, 136, 136, 148, 149, 141, 142, 139, 143, 147,
+ 144, 145, 150, 151, 152, 139, 147, 153, 150, 178,
+ 152, 173, 173, 180, 181, 182, 183, 139, 146, 185,
+ 186, 173, 148, 149, 187, 188, 139, 189, 147, 184,
+ 190, 150, 151, 152, 139, 147, 153, 150, 178, 152,
+ 191, 184, 180, 181, 182, 183, 192, 193, 185, 186,
+ 173, 194, 196, 187, 188, 197, 189, 198, 184, 190,
+ 199, 198, 200, 201, 202, 203, 205, 206, 207, 191,
+ 184, 208, 209, 210, 211, 192, 193, 212, 213, 214,
+
+ 194, 196, 215, 216, 197, 217, 198, 218, 219, 199,
+ 198, 200, 201, 202, 203, 205, 206, 207, 220, 221,
+ 208, 209, 210, 211, 223, 222, 212, 213, 214, 225,
+ 226, 215, 216, 227, 217, 222, 218, 219, 228, 229,
+ 230, 231, 233, 235, 236, 237, 238, 220, 221, 239,
+ 240, 241, 242, 223, 222, 243, 244, 245, 225, 226,
+ 246, 247, 227, 249, 222, 250, 248, 228, 229, 230,
+ 231, 233, 235, 236, 237, 238, 248, 252, 239, 240,
+ 241, 242, 253, 254, 243, 244, 245, 255, 256, 246,
+ 247, 257, 249, 258, 250, 248, 259, 260, 261, 262,
+
+ 263, 264, 266, 265, 267, 268, 252, 265, 272, 273,
+ 274, 253, 254, 275, 276, 277, 255, 256, 278, 280,
+ 257, 281, 258, 282, 283, 259, 260, 261, 262, 263,
+ 264, 266, 265, 267, 268, 285, 265, 272, 273, 274,
+ 286, 287, 275, 276, 277, 288, 289, 278, 280, 290,
+ 281, 291, 282, 283, 292, 293, 294, 295, 298, 299,
+ 300, 301, 302, 303, 285, 304, 305, 308, 310, 286,
+ 287, 312, 313, 314, 288, 289, 321, 323, 290, 324,
+ 291, 325, 315, 292, 293, 294, 295, 298, 299, 300,
+ 301, 302, 303, 315, 304, 305, 308, 310, 326, 327,
+
+ 312, 313, 314, 329, 330, 321, 323, 331, 324, 332,
+ 325, 315, 334, 336, 337, 338, 340, 341, 342, 343,
+ 344, 345, 315, 347, 349, 350, 351, 326, 327, 352,
+ 353, 354, 329, 330, 355, 357, 331, 358, 332, 360,
+ 364, 334, 336, 337, 338, 340, 341, 342, 343, 344,
+ 345, 365, 347, 349, 350, 351, 366, 367, 352, 353,
+ 354, 369, 368, 355, 357, 368, 358, 370, 360, 364,
+ 372, 373, 374, 375, 376, 377, 378, 379, 380, 381,
+ 365, 382, 383, 384, 385, 366, 367, 386, 387, 391,
+ 369, 368, 392, 394, 368, 397, 370, 398, 399, 372,
+
+ 373, 374, 375, 376, 377, 378, 379, 380, 381, 401,
+ 382, 383, 384, 385, 406, 407, 386, 387, 391, 408,
+ 409, 392, 394, 411, 397, 412, 398, 399, 414, 415,
+ 416, 417, 418, 420, 421, 422, 423, 424, 401, 426,
+ 427, 429, 430, 406, 407, 431, 432, 434, 408, 409,
+ 435, 436, 411, 437, 412, 438, 440, 414, 415, 416,
+ 417, 418, 420, 421, 422, 423, 424, 442, 426, 427,
+ 429, 430, 443, 444, 431, 432, 434, 445, 446, 435,
+ 436, 448, 437, 449, 438, 440, 450, 454, 455, 456,
+ 459, 460, 462, 463, 464, 465, 442, 466, 468, 471,
+
+ 472, 443, 444, 473, 474, 475, 445, 446, 479, 481,
+ 448, 482, 449, 484, 485, 450, 454, 455, 456, 459,
+ 460, 462, 463, 464, 465, 486, 466, 468, 471, 472,
+ 487, 488, 473, 474, 475, 489, 492, 479, 481, 495,
+ 482, 496, 484, 485, 497, 498, 500, 503, 504, 506,
+ 508, 509, 510, 511, 486, 512, 513, 514, 516, 487,
+ 488, 517, 518, 519, 489, 492, 520, 521, 495, 522,
+ 496, 523, 525, 497, 498, 500, 503, 504, 506, 508,
+ 509, 510, 511, 526, 512, 513, 514, 516, 528, 529,
+ 517, 518, 519, 531, 532, 520, 521, 533, 522, 534,
+
+ 523, 525, 536, 537, 538, 539, 540, 542, 543, 544,
+ 545, 547, 526, 549, 550, 552, 554, 528, 529, 555,
+ 558, 562, 531, 532, 563, 564, 533, 567, 534, 570,
+ 571, 536, 537, 538, 539, 540, 542, 543, 544, 545,
+ 547, 572, 549, 550, 552, 554, 575, 576, 555, 558,
+ 562, 578, 579, 563, 564, 580, 567, 581, 570, 571,
+ 582, 584, 0, 0, 0, 0, 0, 0, 0, 0,
+ 572, 0, 0, 0, 0, 575, 576, 0, 0, 0,
+ 578, 579, 0, 0, 580, 0, 581, 0, 0, 582,
+ 584, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+
+ 588, 589, 589, 589, 589, 589, 589, 589, 589, 589,
+ 589, 590, 590, 590, 590, 590, 590, 590, 590, 590,
+ 590, 591, 591, 591, 591, 591, 591, 591, 591, 591,
+ 591, 592, 592, 592, 592, 592, 592, 592, 592, 592,
+ 592, 593, 593, 594, 594, 594, 0, 594, 595, 595,
+ 595, 595, 596, 596, 596, 0, 596, 596, 596, 596,
+ 596, 596, 597, 597, 597, 0, 597, 597, 597, 597,
+ 0, 597, 598, 598, 598, 598, 598, 598, 598, 598,
+ 598, 598, 599, 599, 0, 599, 599, 599, 599, 599,
+ 599, 599, 600, 0, 600, 600, 600, 600, 600, 600,
+
+ 600, 600, 601, 601, 602, 602, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587, 587, 587,
+ 587, 587, 587, 587, 587, 587, 587, 587
} ;
/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[153] =
+static yyconst flex_int32_t yy_rule_can_match_eol[161] =
{ 0,
0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -930,8 +960,9 @@ static yyconst flex_int32_t yy_rule_can_match_eol[153] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, };
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0,
+ 0, };
/* The intent behind this definition is that it'll catch
* any uses of REJECT which flex missed.
@@ -984,6 +1015,7 @@ class ParseCommand;
struct ParseCopyFromParams;
class ParseDataType;
class ParseExpression;
+struct ParseFrameInfo;
class ParseFunctionCall;
class ParseGroupBy;
class ParseHaving;
@@ -1022,6 +1054,7 @@ class ParseSubqueryExpression;
class ParseSubqueryTableReference;
class ParseTableReference;
class ParseTableReferenceSignature;
+class ParseWindow;
class Type;
class UnaryOperation;
@@ -1048,7 +1081,7 @@ class UnaryOperation;
-#line 1052 "SqlLexer_gen.cpp"
+#line 1085 "SqlLexer_gen.cpp"
#define INITIAL 0
#define CONDITION_SQL 1
@@ -1134,11 +1167,11 @@ void quickstep_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
FILE *quickstep_yyget_in (yyscan_t yyscanner );
-void quickstep_yyset_in (FILE * _in_str ,yyscan_t yyscanner );
+void quickstep_yyset_in (FILE * in_str ,yyscan_t yyscanner );
FILE *quickstep_yyget_out (yyscan_t yyscanner );
-void quickstep_yyset_out (FILE * _out_str ,yyscan_t yyscanner );
+void quickstep_yyset_out (FILE * out_str ,yyscan_t yyscanner );
yy_size_t quickstep_yyget_leng (yyscan_t yyscanner );
@@ -1146,11 +1179,11 @@ char *quickstep_yyget_text (yyscan_t yyscanner );
int quickstep_yyget_lineno (yyscan_t yyscanner );
-void quickstep_yyset_lineno (int _line_number ,yyscan_t yyscanner );
+void quickstep_yyset_lineno (int line_number ,yyscan_t yyscanner );
int quickstep_yyget_column (yyscan_t yyscanner );
-void quickstep_yyset_column (int _column_no ,yyscan_t yyscanner );
+void quickstep_yyset_column (int column_no ,yyscan_t yyscanner );
YYSTYPE * quickstep_yyget_lval (yyscan_t yyscanner );
@@ -1172,10 +1205,6 @@ extern int quickstep_yywrap (yyscan_t yyscanner );
#endif
#endif
-#ifndef YY_NO_UNPUT
-
-#endif
-
#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
#endif
@@ -1290,7 +1319,7 @@ extern int quickstep_yylex \
/* Code executed at the end of each rule. */
#ifndef YY_BREAK
-#define YY_BREAK /*LINTED*/break;
+#define YY_BREAK break;
#endif
#define YY_RULE_SETUP \
@@ -1300,9 +1329,9 @@ extern int quickstep_yylex \
*/
YY_DECL
{
- yy_state_type yy_current_state;
- char *yy_cp, *yy_bp;
- int yy_act;
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yylval = yylval_param;
@@ -1336,12 +1365,12 @@ YY_DECL
}
{
-#line 128 "../SqlLexer.lpp"
+#line 130 "../SqlLexer.lpp"
-#line 1343 "SqlLexer_gen.cpp"
+#line 1372 "SqlLexer_gen.cpp"
- while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
+ while ( 1 ) /* loops until end-of-file is reached */
{
yy_cp = yyg->yy_c_buf_p;
@@ -1357,7 +1386,7 @@ YY_DECL
yy_match:
do
{
- YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+ register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
if ( yy_accept[yy_current_state] )
{
yyg->yy_last_accepting_state = yy_current_state;
@@ -1366,13 +1395,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 553 )
+ if ( yy_current_state >= 588 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
- while ( yy_current_state != 552 );
+ while ( yy_current_state != 587 );
yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state;
@@ -1406,7 +1435,7 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 131 "../SqlLexer.lpp"
+#line 133 "../SqlLexer.lpp"
{
/* A forward slash character represents a system command. */
BEGIN(CONDITION_COMMAND);
@@ -1418,7 +1447,7 @@ YY_RULE_SETUP
case 2:
/* rule 2 can match eol */
YY_RULE_SETUP
-#line 139 "../SqlLexer.lpp"
+#line 141 "../SqlLexer.lpp"
{
/* This is a SQL command. Place the char back and process normally. */
yyless(0);
@@ -1430,7 +1459,7 @@ YY_RULE_SETUP
case 3:
YY_RULE_SETUP
-#line 148 "../SqlLexer.lpp"
+#line 150 "../SqlLexer.lpp"
{
/* This is a command argument. */
yylval->string_value_ = new quickstep::ParseString(
@@ -1440,7 +1469,7 @@ YY_RULE_SETUP
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 155 "../SqlLexer.lpp"
+#line 157 "../SqlLexer.lpp"
{
/* Ignore whitespace. */
}
@@ -1448,7 +1477,7 @@ YY_RULE_SETUP
case 5:
/* rule 5 can match eol */
YY_RULE_SETUP
-#line 159 "../SqlLexer.lpp"
+#line 161 "../SqlLexer.lpp"
{
/* Newline reverts the lexer to the initial state. */
yycolumn = 0;
@@ -1460,627 +1489,667 @@ YY_RULE_SETUP
case 6:
YY_RULE_SETUP
-#line 168 "../SqlLexer.lpp"
+#line 170 "../SqlLexer.lpp"
return TOKEN_ADD;
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 169 "../SqlLexer.lpp"
+#line 171 "../SqlLexer.lpp"
return TOKEN_ALL;
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 170 "../SqlLexer.lpp"
+#line 172 "../SqlLexer.lpp"
return TOKEN_ALTER;
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 171 "../SqlLexer.lpp"
+#line 173 "../SqlLexer.lpp"
return TOKEN_AND;
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 172 "../SqlLexer.lpp"
+#line 174 "../SqlLexer.lpp"
return TOKEN_AS;
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 173 "../SqlLexer.lpp"
+#line 175 "../SqlLexer.lpp"
return TOKEN_ASC;
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 174 "../SqlLexer.lpp"
+#line 176 "../SqlLexer.lpp"
return TOKEN_ASC;
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 175 "../SqlLexer.lpp"
+#line 177 "../SqlLexer.lpp"
return TOKEN_BETWEEN;
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 176 "../SqlLexer.lpp"
+#line 178 "../SqlLexer.lpp"
return TOKEN_BIGINT;
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 177 "../SqlLexer.lpp"
+#line 179 "../SqlLexer.lpp"
return TOKEN_BIT;
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 178 "../SqlLexer.lpp"
+#line 180 "../SqlLexer.lpp"
return TOKEN_BITWEAVING;
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 179 "../SqlLexer.lpp"
+#line 181 "../SqlLexer.lpp"
return TOKEN_BLOCKPROPERTIES;
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 180 "../SqlLexer.lpp"
+#line 182 "../SqlLexer.lpp"
return TOKEN_BLOCKSAMPLE;
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 181 "../SqlLexer.lpp"
+#line 183 "../SqlLexer.lpp"
return TOKEN_BLOOM_FILTER;
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 182 "../SqlLexer.lpp"
+#line 184 "../SqlLexer.lpp"
return TOKEN_CASE;
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 183 "../SqlLexer.lpp"
+#line 185 "../SqlLexer.lpp"
return TOKEN_CSB_TREE;
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 184 "../SqlLexer.lpp"
+#line 186 "../SqlLexer.lpp"
return TOKEN_BY;
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 185 "../SqlLexer.lpp"
+#line 187 "../SqlLexer.lpp"
return TOKEN_CHARACTER;
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 186 "../SqlLexer.lpp"
+#line 188 "../SqlLexer.lpp"
return TOKEN_CHARACTER;
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 187 "../SqlLexer.lpp"
+#line 189 "../SqlLexer.lpp"
return TOKEN_CHECK;
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 188 "../SqlLexer.lpp"
+#line 190 "../SqlLexer.lpp"
return TOKEN_COLUMN;
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 189 "../SqlLexer.lpp"
+#line 191 "../SqlLexer.lpp"
return TOKEN_CONSTRAINT;
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 190 "../SqlLexer.lpp"
+#line 192 "../SqlLexer.lpp"
return TOKEN_COPY;
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 191 "../SqlLexer.lpp"
+#line 193 "../SqlLexer.lpp"
return TOKEN_CREATE;
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 192 "../SqlLexer.lpp"
-return TOKEN_DATE;
+#line 194 "../SqlLexer.lpp"
+return TOKEN_CURRENT;
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 193 "../SqlLexer.lpp"
-return TOKEN_DATETIME;
+#line 195 "../SqlLexer.lpp"
+return TOKEN_DATE;
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 194 "../SqlLexer.lpp"
-return TOKEN_DAY;
+#line 196 "../SqlLexer.lpp"
+return TOKEN_DATETIME;
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 195 "../SqlLexer.lpp"
-return TOKEN_DECIMAL;
+#line 197 "../SqlLexer.lpp"
+return TOKEN_DAY;
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 196 "../SqlLexer.lpp"
-return TOKEN_DEFAULT;
+#line 198 "../SqlLexer.lpp"
+return TOKEN_DECIMAL;
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 197 "../SqlLexer.lpp"
-return TOKEN_DELETE;
+#line 199 "../SqlLexer.lpp"
+return TOKEN_DEFAULT;
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 198 "../SqlLexer.lpp"
-return TOKEN_DELIMITER;
+#line 200 "../SqlLexer.lpp"
+return TOKEN_DELETE;
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 199 "../SqlLexer.lpp"
-return TOKEN_DESC;
+#line 201 "../SqlLexer.lpp"
+return TOKEN_DELIMITER;
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 200 "../SqlLexer.lpp"
+#line 202 "../SqlLexer.lpp"
return TOKEN_DESC;
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 201 "../SqlLexer.lpp"
-return TOKEN_DISTINCT;
+#line 203 "../SqlLexer.lpp"
+return TOKEN_DESC;
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 202 "../SqlLexer.lpp"
-return TOKEN_DOUBLE;
+#line 204 "../SqlLexer.lpp"
+return TOKEN_DISTINCT;
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 203 "../SqlLexer.lpp"
-return TOKEN_DROP;
+#line 205 "../SqlLexer.lpp"
+return TOKEN_DOUBLE;
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 204 "../SqlLexer.lpp"
-return TOKEN_ELSE;
+#line 206 "../SqlLexer.lpp"
+return TOKEN_DROP;
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 205 "../SqlLexer.lpp"
-return TOKEN_END;
+#line 207 "../SqlLexer.lpp"
+return TOKEN_ELSE;
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 206 "../SqlLexer.lpp"
-return TOKEN_ESCAPE_STRINGS;
+#line 208 "../SqlLexer.lpp"
+return TOKEN_END;
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 207 "../SqlLexer.lpp"
-return TOKEN_EXISTS;
+#line 209 "../SqlLexer.lpp"
+return TOKEN_ESCAPE_STRINGS;
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 208 "../SqlLexer.lpp"
-return TOKEN_EXTRACT;
+#line 210 "../SqlLexer.lpp"
+return TOKEN_EXISTS;
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 209 "../SqlLexer.lpp"
-return TOKEN_FALSE;
+#line 211 "../SqlLexer.lpp"
+return TOKEN_EXTRACT;
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 210 "../SqlLexer.lpp"
-return TOKEN_FIRST;
+#line 212 "../SqlLexer.lpp"
+return TOKEN_FALSE;
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 211 "../SqlLexer.lpp"
-return TOKEN_FLOAT;
+#line 213 "../SqlLexer.lpp"
+return TOKEN_FIRST;
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 212 "../SqlLexer.lpp"
-return TOKEN_FOR;
+#line 214 "../SqlLexer.lpp"
+return TOKEN_FLOAT;
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 213 "../SqlLexer.lpp"
-return TOKEN_FOREIGN;
+#line 215 "../SqlLexer.lpp"
+return TOKEN_FOLLOWING;
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 214 "../SqlLexer.lpp"
-return TOKEN_FROM;
+#line 216 "../SqlLexer.lpp"
+return TOKEN_FOR;
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 215 "../SqlLexer.lpp"
-return TOKEN_FULL;
+#line 217 "../SqlLexer.lpp"
+return TOKEN_FOREIGN;
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 216 "../SqlLexer.lpp"
-return TOKEN_GROUP;
+#line 218 "../SqlLexer.lpp"
+return TOKEN_FROM;
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 217 "../SqlLexer.lpp"
-return TOKEN_HASH;
+#line 219 "../SqlLexer.lpp"
+return TOKEN_FULL;
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 218 "../SqlLexer.lpp"
-return TOKEN_HAVING;
+#line 220 "../SqlLexer.lpp"
+return TOKEN_GROUP;
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 219 "../SqlLexer.lpp"
-return TOKEN_HOUR;
+#line 221 "../SqlLexer.lpp"
+return TOKEN_HASH;
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 220 "../SqlLexer.lpp"
-return TOKEN_IN;
+#line 222 "../SqlLexer.lpp"
+return TOKEN_HAVING;
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 221 "../SqlLexer.lpp"
-return TOKEN_INDEX;
+#line 223 "../SqlLexer.lpp"
+return TOKEN_HOUR;
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 222 "../SqlLexer.lpp"
-return TOKEN_INNER;
+#line 224 "../SqlLexer.lpp"
+return TOKEN_IN;
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 223 "../SqlLexer.lpp"
-return TOKEN_INSERT;
+#line 225 "../SqlLexer.lpp"
+return TOKEN_INDEX;
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 224 "../SqlLexer.lpp"
-return TOKEN_INTEGER;
+#line 226 "../SqlLexer.lpp"
+return TOKEN_INNER;
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 225 "../SqlLexer.lpp"
-return TOKEN_INTEGER;
+#line 227 "../SqlLexer.lpp"
+return TOKEN_INSERT;
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 226 "../SqlLexer.lpp"
-return TOKEN_INTERVAL;
+#line 228 "../SqlLexer.lpp"
+return TOKEN_INTEGER;
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 227 "../SqlLexer.lpp"
-return TOKEN_INTO;
+#line 229 "../SqlLexer.lpp"
+return TOKEN_INTEGER;
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 228 "../SqlLexer.lpp"
-return TOKEN_IS;
+#line 230 "../SqlLexer.lpp"
+return TOKEN_INTERVAL;
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 229 "../SqlLexer.lpp"
-return TOKEN_JOIN;
+#line 231 "../SqlLexer.lpp"
+return TOKEN_INTO;
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 230 "../SqlLexer.lpp"
-return TOKEN_KEY;
+#line 232 "../SqlLexer.lpp"
+return TOKEN_IS;
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 231 "../SqlLexer.lpp"
-return TOKEN_LAST;
+#line 233 "../SqlLexer.lpp"
+return TOKEN_JOIN;
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 232 "../SqlLexer.lpp"
-return TOKEN_LEFT;
+#line 234 "../SqlLexer.lpp"
+return TOKEN_KEY;
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 233 "../SqlLexer.lpp"
-return TOKEN_LIKE;
+#line 235 "../SqlLexer.lpp"
+return TOKEN_LAST;
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 234 "../SqlLexer.lpp"
-return TOKEN_LIMIT;
+#line 236 "../SqlLexer.lpp"
+return TOKEN_LEFT;
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 235 "../SqlLexer.lpp"
-return TOKEN_LONG;
+#line 237 "../SqlLexer.lpp"
+return TOKEN_LIKE;
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 236 "../SqlLexer.lpp"
-return TOKEN_MINUTE;
+#line 238 "../SqlLexer.lpp"
+return TOKEN_LIMIT;
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 237 "../SqlLexer.lpp"
-return TOKEN_MONTH;
+#line 239 "../SqlLexer.lpp"
+return TOKEN_LONG;
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 238 "../SqlLexer.lpp"
-return TOKEN_NOT;
+#line 240 "../SqlLexer.lpp"
+return TOKEN_MINUTE;
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 239 "../SqlLexer.lpp"
-return TOKEN_NULL;
+#line 241 "../SqlLexer.lpp"
+return TOKEN_MONTH;
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 240 "../SqlLexer.lpp"
-return TOKEN_NULLS;
+#line 242 "../SqlLexer.lpp"
+return TOKEN_NOT;
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 241 "../SqlLexer.lpp"
-return TOKEN_OFF;
+#line 243 "../SqlLexer.lpp"
+return TOKEN_NULL;
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 242 "../SqlLexer.lpp"
-return TOKEN_ON;
+#line 244 "../SqlLexer.lpp"
+return TOKEN_NULLS;
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 243 "../SqlLexer.lpp"
-return TOKEN_OR;
+#line 245 "../SqlLexer.lpp"
+return TOKEN_OFF;
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 244 "../SqlLexer.lpp"
+#line 246 "../SqlLexer.lpp"
+return TOKEN_ON;
+ YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 247 "../SqlLexer.lpp"
+return TOKEN_OR;
+ YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 248 "../SqlLexer.lpp"
return TOKEN_ORDER;
YY_BREAK
-case 83:
+case 85:
YY_RULE_SETUP
-#line 245 "../SqlLexer.lpp"
+#line 249 "../SqlLexer.lpp"
return TOKEN_OUTER;
YY_BREAK
-case 84:
+case 86:
YY_RULE_SETUP
-#line 246 "../SqlLexer.lpp"
+#line 250 "../SqlLexer.lpp"
+return TOKEN_OVER;
+ YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 251 "../SqlLexer.lpp"
return TOKEN_PARTITION;
YY_BREAK
-case 85:
+case 88:
YY_RULE_SETUP
-#line 247 "../SqlLexer.lpp"
+#line 252 "../SqlLexer.lpp"
return TOKEN_PARTITIONS;
YY_BREAK
-case 86:
+case 89:
YY_RULE_SETUP
-#line 248 "../SqlLexer.lpp"
+#line 253 "../SqlLexer.lpp"
return TOKEN_PERCENT;
YY_BREAK
-case 87:
+case 90:
YY_RULE_SETUP
-#line 249 "../SqlLexer.lpp"
+#line 254 "../SqlLexer.lpp"
+return TOKEN_PRECEDING;
+ YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 255 "../SqlLexer.lpp"
return TOKEN_PRIMARY;
YY_BREAK
-case 88:
+case 92:
YY_RULE_SETUP
-#line 250 "../SqlLexer.lpp"
+#line 256 "../SqlLexer.lpp"
return TOKEN_QUIT;
YY_BREAK
-case 89:
+case 93:
YY_RULE_SETUP
-#line 251 "../SqlLexer.lpp"
+#line 257 "../SqlLexer.lpp"
return TOKEN_RANGE;
YY_BREAK
-case 90:
+case 94:
YY_RULE_SETUP
-#line 252 "../SqlLexer.lpp"
+#line 258 "../SqlLexer.lpp"
return TOKEN_REAL;
YY_BREAK
-case 91:
+case 95:
YY_RULE_SETUP
-#line 253 "../SqlLexer.lpp"
+#line 259 "../SqlLexer.lpp"
return TOKEN_REFERENCES;
YY_BREAK
-case 92:
+case 96:
YY_RULE_SETUP
-#line 254 "../SqlLexer.lpp"
+#line 260 "../SqlLexer.lpp"
return TOKEN_REGEXP;
YY_BREAK
-case 93:
+case 97:
YY_RULE_SETUP
-#line 255 "../SqlLexer.lpp"
+#line 261 "../SqlLexer.lpp"
return TOKEN_RIGHT;
YY_BREAK
-case 94:
+case 98:
YY_RULE_SETUP
-#line 256 "../SqlLexer.lpp"
+#line 262 "../SqlLexer.lpp"
+return TOKEN_ROW;
+ YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 263 "../SqlLexer.lpp"
return TOKEN_ROW_DELIMITER;
YY_BREAK
-case 95:
+case 100:
YY_RULE_SETUP
-#line 257 "../SqlLexer.lpp"
+#line 264 "../SqlLexer.lpp"
+return TOKEN_ROWS;
+ YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 265 "../SqlLexer.lpp"
return TOKEN_SECOND;
YY_BREAK
-case 96:
+case 102:
YY_RULE_SETUP
-#line 258 "../SqlLexer.lpp"
+#line 266 "../SqlLexer.lpp"
return TOKEN_SELECT;
YY_BREAK
-case 97:
+case 103:
YY_RULE_SETUP
-#line 259 "../SqlLexer.lpp"
+#line 267 "../SqlLexer.lpp"
return TOKEN_SET;
YY_BREAK
-case 98:
+case 104:
YY_RULE_SETUP
-#line 260 "../SqlLexer.lpp"
+#line 268 "../SqlLexer.lpp"
return TOKEN_SMA;
YY_BREAK
-case 99:
+case 105:
YY_RULE_SETUP
-#line 261 "../SqlLexer.lpp"
+#line 269 "../SqlLexer.lpp"
return TOKEN_SMALLINT;
YY_BREAK
-case 100:
+case 106:
YY_RULE_SETUP
-#line 262 "../SqlLexer.lpp"
+#line 270 "../SqlLexer.lpp"
return TOKEN_SUBSTRING;
YY_BREAK
-case 101:
+case 107:
YY_RULE_SETUP
-#line 263 "../SqlLexer.lpp"
+#line 271 "../SqlLexer.lpp"
return TOKEN_TABLE;
YY_BREAK
-case 102:
+case 108:
YY_RULE_SETUP
-#line 264 "../SqlLexer.lpp"
+#line 272 "../SqlLexer.lpp"
return TOKEN_THEN;
YY_BREAK
-case 103:
+case 109:
YY_RULE_SETUP
-#line 265 "../SqlLexer.lpp"
+#line 273 "../SqlLexer.lpp"
return TOKEN_TIME;
YY_BREAK
-case 104:
+case 110:
YY_RULE_SETUP
-#line 266 "../SqlLexer.lpp"
+#line 274 "../SqlLexer.lpp"
return TOKEN_TIMESTAMP;
YY_BREAK
-case 105:
+case 111:
YY_RULE_SETUP
-#line 267 "../SqlLexer.lpp"
+#line 275 "../SqlLexer.lpp"
return TOKEN_TRUE;
YY_BREAK
-case 106:
+case 112:
YY_RULE_SETUP
-#line 268 "../SqlLexer.lpp"
+#line 276 "../SqlLexer.lpp"
return TOKEN_TUPLESAMPLE;
YY_BREAK
-case 107:
+case 113:
YY_RULE_SETUP
-#line 269 "../SqlLexer.lpp"
+#line 277 "../SqlLexer.lpp"
+return TOKEN_UNBOUNDED;
+ YY_BREAK
+case 114:
+YY_RULE_SETUP
+#line 278 "../SqlLexer.lpp"
return TOKEN_UNIQUE;
YY_BREAK
-case 108:
+case 115:
YY_RULE_SETUP
-#line 270 "../SqlLexer.lpp"
+#line 279 "../SqlLexer.lpp"
return TOKEN_UPDATE;
YY_BREAK
-case 109:
+case 116:
YY_RULE_SETUP
-#line 271 "../SqlLexer.lpp"
+#line 280 "../SqlLexer.lpp"
return TOKEN_USING;
YY_BREAK
-case 110:
+case 117:
YY_RULE_SETUP
-#line 272 "../SqlLexer.lpp"
+#line 281 "../SqlLexer.lpp"
return TOKEN_VALUES;
YY_BREAK
-case 111:
+case 118:
YY_RULE_SETUP
-#line 273 "../SqlLexer.lpp"
+#line 282 "../SqlLexer.lpp"
return TOKEN_VARCHAR;
YY_BREAK
-case 112:
+case 119:
YY_RULE_SETUP
-#line 274 "../SqlLexer.lpp"
+#line 283 "../SqlLexer.lpp"
return TOKEN_WHEN;
YY_BREAK
-case 113:
+case 120:
YY_RULE_SETUP
-#line 275 "../SqlLexer.lpp"
+#line 284 "../SqlLexer.lpp"
return TOKEN_WHERE;
YY_BREAK
-case 114:
+case 121:
YY_RULE_SETUP
-#line 276 "../SqlLexer.lpp"
+#line 285 "../SqlLexer.lpp"
+return TOKEN_WINDOW;
+ YY_BREAK
+case 122:
+YY_RULE_SETUP
+#line 286 "../SqlLexer.lpp"
return TOKEN_WITH;
YY_BREAK
-case 115:
+case 123:
YY_RULE_SETUP
-#line 277 "../SqlLexer.lpp"
+#line 287 "../SqlLexer.lpp"
return TOKEN_YEAR;
YY_BREAK
-case 116:
+case 124:
YY_RULE_SETUP
-#line 278 "../SqlLexer.lpp"
+#line 288 "../SqlLexer.lpp"
return TOKEN_YEARMONTH;
YY_BREAK
-case 117:
+case 125:
YY_RULE_SETUP
-#line 280 "../SqlLexer.lpp"
+#line 290 "../SqlLexer.lpp"
return TOKEN_EQ;
YY_BREAK
-case 118:
+case 126:
YY_RULE_SETUP
-#line 281 "../SqlLexer.lpp"
+#line 291 "../SqlLexer.lpp"
return TOKEN_NEQ;
YY_BREAK
-case 119:
+case 127:
YY_RULE_SETUP
-#line 282 "../SqlLexer.lpp"
+#line 292 "../SqlLexer.lpp"
return TOKEN_NEQ;
YY_BREAK
-case 120:
+case 128:
YY_RULE_SETUP
-#line 283 "../SqlLexer.lpp"
+#line 293 "../SqlLexer.lpp"
return TOKEN_LT;
YY_BREAK
-case 121:
+case 129:
YY_RULE_SETUP
-#line 284 "../SqlLexer.lpp"
+#line 294 "../SqlLexer.lpp"
return TOKEN_GT;
YY_BREAK
-case 122:
+case 130:
YY_RULE_SETUP
-#line 285 "../SqlLexer.lpp"
+#line 295 "../SqlLexer.lpp"
return TOKEN_LEQ;
YY_BREAK
-case 123:
+case 131:
YY_RULE_SETUP
-#line 286 "../SqlLexer.lpp"
+#line 296 "../SqlLexer.lpp"
return TOKEN_GEQ;
YY_BREAK
-case 124:
+case 132:
YY_RULE_SETUP
-#line 288 "../SqlLexer.lpp"
+#line 298 "../SqlLexer.lpp"
return yytext[0];
YY_BREAK
-case 125:
+case 133:
YY_RULE_SETUP
-#line 289 "../SqlLexer.lpp"
+#line 299 "../SqlLexer.lpp"
return yytext[0];
YY_BREAK
/**
* Quoted strings. Prefacing a string with an 'e' or 'E' causes escape
* sequences to be processed (as in PostgreSQL).
**/
-case 126:
+case 134:
YY_RULE_SETUP
-#line 295 "../SqlLexer.lpp"
+#line 305 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_SINGLE_QUOTED_ESCAPED);
}
YY_BREAK
-case 127:
+case 135:
YY_RULE_SETUP
-#line 300 "../SqlLexer.lpp"
+#line 310 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_SINGLE_QUOTED);
}
YY_BREAK
-case 128:
+case 136:
YY_RULE_SETUP
-#line 305 "../SqlLexer.lpp"
+#line 315 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_DOUBLE_QUOTED);
@@ -2092,7 +2161,7 @@ YY_RULE_SETUP
case YY_STATE_EOF(CONDITION_STRING_SINGLE_QUOTED):
case YY_STATE_EOF(CONDITION_STRING_SINGLE_QUOTED_ESCAPED):
case YY_STATE_EOF(CONDITION_STRING_DOUBLE_QUOTED):
-#line 314 "../SqlLexer.lpp"
+#line 324 "../SqlLexer.lpp"
{
delete yylval->string_value_;
BEGIN(INITIAL);
@@ -2103,9 +2172,9 @@ case YY_STATE_EOF(CONDITION_STRING_DOUBLE_QUOTED):
/* Process escape sequences. */
-case 129:
+case 137:
YY_RULE_SETUP
-#line 324 "../SqlLexer.lpp"
+#line 334 "../SqlLexer.lpp"
{
/* Octal code */
unsigned int code;
@@ -2119,9 +2188,9 @@ YY_RULE_SETUP
yylval->string_value_->push_back(code);
}
YY_BREAK
-case 130:
+case 138:
YY_RULE_SETUP
-#line 336 "../SqlLexer.lpp"
+#line 346 "../SqlLexer.lpp"
{
/* Hexadecimal code */
unsigned int code;
@@ -2129,9 +2198,9 @@ YY_RULE_SETUP
yylval->string_value_->push_back(code);
}
YY_BREAK
-case 131:
+case 139:
YY_RULE_SETUP
-#line 342 "../SqlLexer.lpp"
+#line 352 "../SqlLexer.lpp"
{
/* A numeric escape sequence that isn't correctly specified. */
delete yylval->string_value_;
@@ -2140,58 +2209,58 @@ YY_RULE_SETUP
return TOKEN_LEX_ERROR;
}
YY_BREAK
-case 132:
+case 140:
YY_RULE_SETUP
-#line 349 "../SqlLexer.lpp"
+#line 359 "../SqlLexer.lpp"
{
/* Backspace */
yylval->string_value_->push_back('\b');
}
YY_BREAK
-case 133:
+case 141:
YY_RULE_SETUP
-#line 353 "../SqlLexer.lpp"
+#line 363 "../SqlLexer.lpp"
{
/* Form-feed */
yylval->string_value_->push_back('\f');
}
YY_BREAK
-case 134:
+case 142:
YY_RULE_SETUP
-#line 357 "../SqlLexer.lpp"
+#line 367 "../SqlLexer.lpp"
{
/* Newline */
yylval->string_value_->push_back('\n');
}
YY_BREAK
-case 135:
+case 143:
YY_RULE_SETUP
-#line 361 "../SqlLexer.lpp"
+#line 371 "../SqlLexer.lpp"
{
/* Carriage-return */
yylval->string_value_->push_back('\r');
}
YY_BREAK
-case 136:
+case 144:
YY_RULE_SETUP
-#line 365 "../SqlLexer.lpp"
+#line 375 "../SqlLexer.lpp"
{
/* Horizontal Tab */
yylval->string_value_->push_back('\t');
}
YY_BREAK
-case 137:
-/* rule 137 can match eol */
+case 145:
+/* rule 145 can match eol */
YY_RULE_SETUP
-#line 369 "../SqlLexer.lpp"
+#line 379 "../SqlLexer.lpp"
{
/* Any other character (including actual newline or carriage return) */
yylval->string_value_->push_back(yytext[1]);
}
YY_BREAK
-case 138:
+case 146:
YY_RULE_SETUP
-#line 373 "../SqlLexer.lpp"
+#line 383 "../SqlLexer.lpp"
{
/* This should only be encountered right before an EOF. */
delete yylval->string_value_;
@@ -2202,17 +2271,17 @@ YY_RULE_SETUP
YY_BREAK
-case 139:
+case 147:
YY_RULE_SETUP
-#line 383 "../SqlLexer.lpp"
+#line 393 "../SqlLexer.lpp"
{
/* Two quotes in a row become a single quote (this is specified by the SQL standard). */
yylval->string_value_->push_back('\'');
}
YY_BREAK
-case 140:
+case 148:
YY_RULE_SETUP
-#line 387 "../SqlLexer.lpp"
+#line 397 "../SqlLexer.lpp"
{
/* End string */
BEGIN(CONDITION_SQL);
@@ -2221,17 +2290,17 @@ YY_RULE_SETUP
YY_BREAK
-case 141:
+case 149:
YY_RULE_SETUP
-#line 395 "../SqlLexer.lpp"
+#line 405 "../SqlLexer.lpp"
{
/* Two quotes in a row become a single quote (this is specified by the SQL standard). */
yylval->string_value_->push_back('"');
}
YY_BREAK
-case 142:
+case 150:
YY_RULE_SETUP
-#line 399 "../SqlLexer.lpp"
+#line 409 "../SqlLexer.lpp"
{
/* End string */
BEGIN(CONDITION_SQL);
@@ -2239,94 +2308,94 @@ YY_RULE_SETUP
}
YY_BREAK
-case 143:
-/* rule 143 can match eol */
+case 151:
+/* rule 151 can match eol */
YY_RULE_SETUP
-#line 406 "../SqlLexer.lpp"
+#line 416 "../SqlLexer.lpp"
{
/* Scan up to a quote. */
yylval->string_value_->append(yytext, yyleng);
}
YY_BREAK
-case 144:
-/* rule 144 can match eol */
+case 152:
+/* rule 152 can match eol */
YY_RULE_SETUP
-#line 411 "../SqlLexer.lpp"
+#line 421 "../SqlLexer.lpp"
{
/* Scan up to a quote or escape sequence. */
yylval->string_value_->append(yytext, yyleng);
}
YY_BREAK
-case 145:
-/* rule 145 can match eol */
+case 153:
+/* rule 153 can match eol */
YY_RULE_SETUP
-#line 416 "../SqlLexer.lpp"
+#line 426 "../SqlLexer.lpp"
{
/* Scan up to a quote. */
yylval->string_value_->append(yytext, yyleng);
}
YY_BREAK
-case 146:
+case 154:
YY_RULE_SETUP
-#line 422 "../SqlLexer.lpp"
+#line 432 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(
yylloc->first_line, yylloc->first_column, std::string(yytext, yyleng));
return TOKEN_NAME;
}
YY_BREAK
-case 147:
+case 155:
YY_RULE_SETUP
-#line 428 "../SqlLexer.lpp"
+#line 438 "../SqlLexer.lpp"
{
yylval->numeric_literal_value_ = new quickstep::NumericParseLiteralValue(
yylloc->first_line, yylloc->first_column, yytext);
return TOKEN_UNSIGNED_NUMVAL;
}
YY_BREAK
-case 148:
+case 156:
YY_RULE_SETUP
-#line 434 "../SqlLexer.lpp"
+#line 444 "../SqlLexer.lpp"
/* comment */
YY_BREAK
-case 149:
-/* rule 149 can match eol */
+case 157:
+/* rule 157 can match eol */
YY_RULE_SETUP
-#line 436 "../SqlLexer.lpp"
+#line 446 "../SqlLexer.lpp"
{ yycolumn = 0; }
YY_BREAK
-case 150:
+case 158:
YY_RULE_SETUP
-#line 438 "../SqlLexer.lpp"
+#line 448 "../SqlLexer.lpp"
; /* ignore white space */
YY_BREAK
/* CONDITION_SQL */
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(CONDITION_COMMAND):
case YY_STATE_EOF(CONDITION_SQL):
-#line 442 "../SqlLexer.lpp"
+#line 452 "../SqlLexer.lpp"
{
/* All conditions except for mutli-state string extracting conditions. */
BEGIN(INITIAL);
return TOKEN_EOF;
}
YY_BREAK
-case 151:
+case 159:
YY_RULE_SETUP
-#line 448 "../SqlLexer.lpp"
+#line 458 "../SqlLexer.lpp"
{
BEGIN(INITIAL);
quickstep_yyerror(NULL, yyscanner, NULL, "illegal character");
return TOKEN_LEX_ERROR;
}
YY_BREAK
-case 152:
+case 160:
YY_RULE_SETUP
-#line 454 "../SqlLexer.lpp"
+#line 464 "../SqlLexer.lpp"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 2330 "SqlLexer_gen.cpp"
+#line 2399 "SqlLexer_gen.cpp"
case YY_END_OF_BUFFER:
{
@@ -2469,9 +2538,9 @@ YY_FATAL_ERROR( "flex scanner jammed" );
static int yy_get_next_buffer (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
- char *source = yyg->yytext_ptr;
- yy_size_t number_to_move, i;
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = yyg->yytext_ptr;
+ register int number_to_move, i;
int ret_val;
if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
@@ -2500,7 +2569,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
/* Try to read more data. */
/* First move last chars to start of buffer. */
- number_to_move = (yy_size_t) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+ number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
@@ -2603,15 +2672,15 @@ static int yy_get_next_buffer (yyscan_t
<TRUNCATED>
[16/18] incubator-quickstep git commit: Added the move semantic in
optimizer::logical::Sort
Posted by zu...@apache.org.
Added the move semantic in optimizer::logical::Sort
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/f66f4bd1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/f66f4bd1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/f66f4bd1
Branch: refs/heads/travis-grpc
Commit: f66f4bd19cf1a34c3ee2e6acb91f75b92c037927
Parents: c0c13f6
Author: shixuan-fan <sh...@apache.org>
Authored: Mon Jun 27 15:50:56 2016 +0000
Committer: Zuyu Zhang <zu...@apache.org>
Committed: Mon Jun 27 14:14:48 2016 -0700
----------------------------------------------------------------------
query_optimizer/logical/Sort.hpp | 26 ++++++++++++++++++++++++++
query_optimizer/resolver/Resolver.cpp | 18 +++++++++---------
2 files changed, 35 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/f66f4bd1/query_optimizer/logical/Sort.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/logical/Sort.hpp b/query_optimizer/logical/Sort.hpp
index c20ce0f..2233151 100644
--- a/query_optimizer/logical/Sort.hpp
+++ b/query_optimizer/logical/Sort.hpp
@@ -113,6 +113,19 @@ class Sort : public Logical {
limit));
}
+ static SortPtr Create(
+ const LogicalPtr &input,
+ std::vector<expressions::AttributeReferencePtr> &&sort_attributes,
+ std::vector<bool> &&sort_ascending,
+ std::vector<bool> &&nulls_first_flags,
+ const int limit) {
+ return SortPtr(new Sort(input,
+ std::move(sort_attributes),
+ std::move(sort_ascending),
+ std::move(nulls_first_flags),
+ limit));
+ }
+
protected:
void getFieldStringItems(
std::vector<std::string> *inline_field_names,
@@ -137,6 +150,19 @@ class Sort : public Logical {
addChild(input_);
}
+ Sort(const LogicalPtr &input,
+ std::vector<expressions::AttributeReferencePtr> &&sort_attributes,
+ std::vector<bool> &&sort_ascending,
+ std::vector<bool> &&nulls_first_flags,
+ const int limit)
+ : input_(input),
+ sort_attributes_(std::move(sort_attributes)),
+ sort_ascending_(std::move(sort_ascending)),
+ nulls_first_flags_(std::move(nulls_first_flags)),
+ limit_(limit) {
+ addChild(input_);
+ }
+
LogicalPtr input_;
std::vector<expressions::AttributeReferencePtr> sort_attributes_;
// Has 1:1 matching with <sort_expressions_>.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/f66f4bd1/query_optimizer/resolver/Resolver.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/resolver/Resolver.cpp b/query_optimizer/resolver/Resolver.cpp
index f880ce7..1eb6d86 100644
--- a/query_optimizer/resolver/Resolver.cpp
+++ b/query_optimizer/resolver/Resolver.cpp
@@ -1270,16 +1270,16 @@ L::LogicalPtr Resolver::resolveSelect(
if (select_query.limit() != nullptr) {
logical_plan =
L::Sort::Create(logical_plan,
- order_by_attributes,
- order_by_directions,
- nulls_first,
+ std::move(order_by_attributes),
+ std::move(order_by_directions),
+ std::move(nulls_first),
select_query.limit()->limit_expression()->long_value());
} else {
logical_plan =
L::Sort::Create(logical_plan,
- order_by_attributes,
- order_by_directions,
- nulls_first,
+ std::move(order_by_attributes),
+ std::move(order_by_directions),
+ std::move(nulls_first),
-1 /* limit */);
}
} else if (select_query.limit() != nullptr) {
@@ -1880,9 +1880,9 @@ L::LogicalPtr Resolver::resolveSortInWindow(
L::LogicalPtr sorted_logical_plan =
L::Sort::Create(logical_plan,
- sort_attributes,
- sort_directions,
- sort_nulls_first,
+ std::move(sort_attributes),
+ std::move(sort_directions),
+ std::move(sort_nulls_first),
-1 /* limit */);
return sorted_logical_plan;