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/04/19 18:44:27 UTC
[14/24] incubator-quickstep git commit: Adds support for IN predicate
(#167)
Adds support for IN predicate (#167)
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/0fd8c039
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/0fd8c039
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/0fd8c039
Branch: refs/heads/master
Commit: 0fd8c039ac45269dca65caa5970e41040310762b
Parents: ff20277
Author: Jianqiao Zhu <ji...@cs.wisc.edu>
Authored: Fri Apr 15 14:20:47 2016 -0500
Committer: Zuyu ZHANG <zu...@users.noreply.github.com>
Committed: Fri Apr 15 14:20:47 2016 -0500
----------------------------------------------------------------------
parser/CMakeLists.txt | 10 +
parser/ParsePredicate.cpp | 19 +
parser/ParsePredicate.hpp | 66 +-
parser/ParsePredicateInTableQuery.hpp | 110 +
parser/SqlLexer.lpp | 1 +
parser/SqlParser.ypp | 24 +-
parser/preprocessed/SqlLexer_gen.cpp | 375 +--
parser/preprocessed/SqlLexer_gen.hpp | 2 +-
parser/preprocessed/SqlParser_gen.cpp | 2700 +++++++++---------
parser/preprocessed/SqlParser_gen.hpp | 111 +-
parser/tests/Select.test | 130 +
parser/tests/TPCH.test | 403 ++-
query_optimizer/expressions/CMakeLists.txt | 29 +
query_optimizer/expressions/ExpressionType.hpp | 2 +
query_optimizer/expressions/InTableQuery.cpp | 53 +
query_optimizer/expressions/InTableQuery.hpp | 143 +
query_optimizer/expressions/InValueList.cpp | 72 +
query_optimizer/expressions/InValueList.hpp | 157 +
query_optimizer/expressions/PatternMatcher.hpp | 6 +
query_optimizer/resolver/CMakeLists.txt | 5 +
query_optimizer/resolver/Resolver.cpp | 84 +-
query_optimizer/resolver/Resolver.hpp | 5 +-
query_optimizer/rules/CMakeLists.txt | 2 +
query_optimizer/rules/UnnestSubqueries.cpp | 59 +
query_optimizer/rules/UnnestSubqueries.hpp | 15 +
.../tests/execution_generator/Select.test | 56 +
.../tests/logical_generator/Select.test | 176 ++
.../tests/physical_generator/Select.test | 311 ++
query_optimizer/tests/resolver/Select.test | 194 ++
29 files changed, 3727 insertions(+), 1593 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0fd8c039/parser/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/parser/CMakeLists.txt b/parser/CMakeLists.txt
index 8206caf..8f4bae9 100644
--- a/parser/CMakeLists.txt
+++ b/parser/CMakeLists.txt
@@ -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—Madison.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -99,6 +101,7 @@ add_library(quickstep_parser_ParseOrderBy ParseOrderBy.cpp ParseOrderBy.hpp)
add_library(quickstep_parser_ParsePartitionClause ../empty_src.cpp ParsePartitionClause.hpp)
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_ParseSample ParseSample.cpp ParseSample.hpp)
add_library(quickstep_parser_ParseSelect ../empty_src.cpp ParseSelect.hpp)
add_library(quickstep_parser_ParseSelectionClause ParseSelectionClause.cpp ParseSelectionClause.hpp)
@@ -213,6 +216,11 @@ target_link_libraries(quickstep_parser_ParsePredicateExists
quickstep_parser_ParsePredicate
quickstep_parser_ParseSubqueryExpression
quickstep_utility_Macros)
+target_link_libraries(quickstep_parser_ParsePredicateInTableQuery
+ quickstep_parser_ParseExpression
+ quickstep_parser_ParsePredicate
+ quickstep_parser_ParseSubqueryExpression
+ quickstep_utility_Macros)
target_link_libraries(quickstep_parser_ParseSample
quickstep_parser_ParseLiteralValue
quickstep_parser_ParseTreeNode
@@ -311,6 +319,7 @@ target_link_libraries(quickstep_parser_SqlParser
quickstep_parser_ParsePartitionClause
quickstep_parser_ParsePredicate
quickstep_parser_ParsePredicateExists
+ quickstep_parser_ParsePredicateInTableQuery
quickstep_parser_ParseSample
quickstep_parser_ParseSelect
quickstep_parser_ParseSelectionClause
@@ -384,6 +393,7 @@ target_link_libraries(quickstep_parser
quickstep_parser_ParsePartitionClause
quickstep_parser_ParsePredicate
quickstep_parser_ParsePredicateExists
+ quickstep_parser_ParsePredicateInTableQuery
quickstep_parser_ParserUtil
quickstep_parser_ParseSample
quickstep_parser_ParseSelect
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0fd8c039/parser/ParsePredicate.cpp
----------------------------------------------------------------------
diff --git a/parser/ParsePredicate.cpp b/parser/ParsePredicate.cpp
index d7db285..ad786b5 100644
--- a/parser/ParsePredicate.cpp
+++ b/parser/ParsePredicate.cpp
@@ -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—Madison.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -84,4 +86,21 @@ void ParsePredicateWithList::getFieldStringItems(
}
}
+void ParsePredicateInValueList::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 {
+ non_container_child_field_names->push_back("test_expression");
+ non_container_child_fields->push_back(test_expression_.get());
+
+ container_child_field_names->push_back("value_list");
+ container_child_fields->emplace_back();
+ for (const ParseExpression &value : *value_list_) {
+ container_child_fields->back().emplace_back(&value);
+ }
+}
+
} // namespace quickstep
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0fd8c039/parser/ParsePredicate.hpp
----------------------------------------------------------------------
diff --git a/parser/ParsePredicate.hpp b/parser/ParsePredicate.hpp
index 2f8d08b..2d65142 100644
--- a/parser/ParsePredicate.hpp
+++ b/parser/ParsePredicate.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—Madison.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -49,7 +51,9 @@ class ParsePredicate : public ParseTreeNode {
kNegation,
kConjunction,
kDisjunction,
- kExists
+ kExists,
+ kInTableQuery,
+ kInValueList
};
/**
@@ -382,6 +386,66 @@ class ParsePredicateDisjunction : public ParsePredicateWithList {
DISALLOW_COPY_AND_ASSIGN(ParsePredicateDisjunction);
};
+
+/**
+ * @brief Parsed representation of IN with a value list.
+ */
+class ParsePredicateInValueList : public ParsePredicate {
+ public:
+ /**
+ * @brief Constructor.
+ *
+ * @param line_number The line number of the token "IN" in the statement.
+ * @param column_number The column number of the token "IN" in the statement.
+ * @param test_expression The expression to be compared with a value list.
+ * @param value_list The list of values to match with test_expression.
+ */
+ ParsePredicateInValueList(const int line_number,
+ const int column_number,
+ ParseExpression *test_expression,
+ PtrList<ParseExpression> *value_list)
+ : ParsePredicate(line_number, column_number),
+ test_expression_(test_expression),
+ value_list_(value_list) {}
+
+ ParsePredicateType getParsePredicateType() const override {
+ return kInValueList;
+ }
+
+ std::string getName() const override {
+ return "InValueList";
+ }
+
+ /**
+ * @return The expression to be compared with a value list.
+ */
+ const ParseExpression* test_expression() const {
+ return test_expression_.get();
+ }
+
+ /**
+ * @return The list of values to match with test_expression.
+ */
+ const PtrList<ParseExpression>* value_list() const {
+ return value_list_.get();
+ }
+
+ 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;
+
+ private:
+ std::unique_ptr<ParseExpression> test_expression_;
+ std::unique_ptr<PtrList<ParseExpression>> value_list_;
+
+ DISALLOW_COPY_AND_ASSIGN(ParsePredicateInValueList);
+};
+
/** @} */
} // namespace quickstep
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0fd8c039/parser/ParsePredicateInTableQuery.hpp
----------------------------------------------------------------------
diff --git a/parser/ParsePredicateInTableQuery.hpp b/parser/ParsePredicateInTableQuery.hpp
new file mode 100644
index 0000000..423ec3a
--- /dev/null
+++ b/parser/ParsePredicateInTableQuery.hpp
@@ -0,0 +1,110 @@
+/**
+ * Copyright 2016, Quickstep Research Group, Computer Sciences Department,
+ * 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.
+ * 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_PREDICATE_IN_TABLE_QUERY_HPP_
+#define QUICKSTEP_PARSER_PARSE_PREDICATE_IN_TABLE_QUERY_HPP_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "parser/ParseExpression.hpp"
+#include "parser/ParsePredicate.hpp"
+#include "parser/ParseSubqueryExpression.hpp"
+#include "utility/Macros.hpp"
+
+namespace quickstep {
+
+class ParseTreeNode;
+
+/** \addtogroup Parser
+ * @{
+ */
+
+/**
+ * @brief Parsed representation of IN with a table subquery expression.
+ *
+ * @note Putting the class here instead of in ParsePredicate.hpp is to avoid
+ * circular dependencies with ParseSelect.
+ */
+class ParsePredicateInTableQuery : public ParsePredicate {
+ public:
+ /**
+ * @brief Constructor.
+ *
+ * @param line_number The line number of the token "IN" in the statement.
+ * @param column_number The column number of the token "IN" in the statement.
+ * @param test_expression The expression to test with a subquery expression.
+ * @param table_query The table subquery expression to search for test_expression.
+ */
+ ParsePredicateInTableQuery(const int line_number,
+ const int column_number,
+ ParseExpression *test_expression,
+ ParseSubqueryExpression *table_query)
+ : ParsePredicate(line_number, column_number),
+ test_expression_(test_expression),
+ table_query_(table_query) {}
+
+ ParsePredicateType getParsePredicateType() const override {
+ return kInTableQuery;
+ }
+
+ std::string getName() const override {
+ return "InTableQuery";
+ }
+
+ /**
+ * @return The expression to test with a subquery expression.
+ */
+ const ParseExpression* test_expression() const {
+ return test_expression_.get();
+ }
+
+ /**
+ * @return The table subquery expression to search for test_expression.
+ */
+ const ParseSubqueryExpression* table_query() const {
+ return table_query_.get();
+ }
+
+ 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("test_expression");
+ non_container_child_fields->push_back(test_expression_.get());
+
+ non_container_child_field_names->push_back("table_query");
+ non_container_child_fields->push_back(table_query_.get());
+ }
+
+ private:
+ std::unique_ptr<ParseExpression> test_expression_;
+ std::unique_ptr<ParseSubqueryExpression> table_query_;
+
+ DISALLOW_COPY_AND_ASSIGN(ParsePredicateInTableQuery);
+};
+
+/** @} */
+
+} // namespace quickstep
+
+#endif // QUICKSTEP_PARSER_PARSE_PREDICATE_IN_TABLE_QUERY_HPP_
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0fd8c039/parser/SqlLexer.lpp
----------------------------------------------------------------------
diff --git a/parser/SqlLexer.lpp b/parser/SqlLexer.lpp
index 0c9e646..4ee50ec 100644
--- a/parser/SqlLexer.lpp
+++ b/parser/SqlLexer.lpp
@@ -212,6 +212,7 @@ unsigned_numeric_literal {exact_numeric_literal}|{approximate_numeric_literal}
"group" return TOKEN_GROUP;
"hash" return TOKEN_HASH;
"having" return TOKEN_HAVING;
+ "in" return TOKEN_IN;
"index" return TOKEN_INDEX;
"inner" return TOKEN_INNER;
"insert" return TOKEN_INSERT;
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0fd8c039/parser/SqlParser.ypp
----------------------------------------------------------------------
diff --git a/parser/SqlParser.ypp b/parser/SqlParser.ypp
index c6ff7db..70db649 100644
--- a/parser/SqlParser.ypp
+++ b/parser/SqlParser.ypp
@@ -83,6 +83,7 @@ typedef struct YYLTYPE {
#include "parser/ParsePartitionClause.hpp"
#include "parser/ParsePredicate.hpp"
#include "parser/ParsePredicateExists.hpp"
+#include "parser/ParsePredicateInTableQuery.hpp"
#include "parser/ParserUtil.hpp"
#include "parser/ParseSample.hpp"
#include "parser/ParseSelect.hpp"
@@ -273,6 +274,7 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%token TOKEN_GROUP;
%token TOKEN_HASH;
%token TOKEN_HAVING;
+%token TOKEN_IN;
%token TOKEN_INDEX;
%token TOKEN_INNER;
%token TOKEN_INSERT;
@@ -1458,9 +1460,25 @@ predicate_expression_base:
$$ = $2;
}
| TOKEN_EXISTS subquery_expression {
- $$ = new quickstep::ParsePredicateExists(@1.first_line,
- @1.first_column,
- $2);
+ $$ = new quickstep::ParsePredicateExists(@1.first_line, @1.first_column, $2);
+ }
+ | add_expression TOKEN_IN subquery_expression {
+ $$ = new quickstep::ParsePredicateInTableQuery(@2.first_line, @2.first_column, $1, $3);
+ }
+ | add_expression TOKEN_IN '(' expression_list ')' {
+ $$ = new quickstep::ParsePredicateInValueList(@2.first_line, @2.first_column, $1, $4);
+ }
+ | add_expression TOKEN_NOT TOKEN_IN subquery_expression {
+ $$ = new quickstep::ParsePredicateNegation(
+ @2.first_line,
+ @2.first_column,
+ new quickstep::ParsePredicateInTableQuery(@3.first_line, @3.first_column, $1, $4));
+ }
+ | add_expression TOKEN_NOT TOKEN_IN '(' expression_list ')' {
+ $$ = new quickstep::ParsePredicateNegation(
+ @2.first_line,
+ @2.first_column,
+ new quickstep::ParsePredicateInValueList(@3.first_line, @3.first_column, $1, $5));
};
/* Scalars */
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0fd8c039/parser/preprocessed/SqlLexer_gen.cpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlLexer_gen.cpp b/parser/preprocessed/SqlLexer_gen.cpp
index 878ac58..4175e20 100644
--- a/parser/preprocessed/SqlLexer_gen.cpp
+++ b/parser/preprocessed/SqlLexer_gen.cpp
@@ -381,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 142
-#define YY_END_OF_BUFFER 143
+#define YY_NUM_RULES 143
+#define YY_END_OF_BUFFER 144
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -393,62 +393,62 @@ struct yy_trans_info
static yyconst flex_int16_t yy_accept[520] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 143, 2, 2, 141, 141, 140, 139, 141,
- 118, 114, 117, 114, 114, 137, 110, 107, 111, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 115, 4, 5, 5, 3, 133, 133,
- 130, 134, 134, 128, 135, 135, 132, 1, 140, 108,
- 138, 137, 137, 137, 0, 112, 109, 113, 136, 136,
- 136, 136, 10, 136, 136, 136, 21, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 116, 136, 136,
-
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 61, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 73, 74, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 4, 5, 3, 133,
- 129, 134, 127, 127, 119, 121, 122, 123, 124, 125,
- 126, 127, 135, 131, 138, 137, 0, 137, 6, 7,
- 136, 9, 11, 136, 136, 15, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 41, 136, 136, 136, 136, 136,
-
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 57, 136, 63, 136, 136, 136, 136, 136, 69, 136,
- 72, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 136, 89, 90, 136, 136, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 119,
- 121, 120, 136, 136, 136, 136, 136, 136, 19, 22,
- 136, 136, 136, 27, 136, 136, 29, 136, 136, 136,
- 136, 35, 136, 136, 39, 40, 136, 136, 136, 136,
- 136, 136, 136, 49, 50, 136, 52, 136, 136, 136,
- 136, 136, 60, 62, 64, 65, 66, 136, 68, 70,
-
- 136, 136, 136, 136, 136, 81, 136, 83, 136, 136,
- 136, 136, 136, 136, 136, 93, 94, 96, 136, 136,
- 136, 136, 136, 136, 103, 136, 105, 136, 119, 120,
- 8, 136, 136, 136, 136, 136, 136, 24, 136, 136,
- 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
- 136, 136, 136, 45, 46, 47, 136, 51, 136, 54,
- 55, 136, 136, 136, 67, 71, 75, 76, 136, 136,
- 136, 82, 136, 136, 86, 136, 136, 136, 92, 136,
- 136, 136, 136, 100, 136, 136, 104, 136, 136, 136,
- 14, 136, 136, 136, 136, 25, 136, 28, 136, 136,
-
- 136, 136, 33, 136, 136, 136, 38, 136, 43, 136,
- 136, 53, 56, 136, 136, 136, 136, 136, 136, 85,
- 136, 88, 136, 136, 136, 98, 99, 101, 136, 136,
- 136, 13, 136, 136, 136, 136, 136, 20, 136, 31,
- 32, 136, 136, 136, 136, 44, 48, 58, 136, 136,
- 79, 80, 136, 136, 136, 136, 136, 102, 136, 136,
- 136, 136, 136, 136, 136, 30, 136, 136, 37, 136,
- 59, 136, 136, 136, 91, 136, 136, 136, 12, 136,
- 136, 136, 23, 136, 34, 136, 136, 77, 136, 136,
- 95, 136, 106, 136, 136, 136, 26, 36, 136, 78,
-
- 84, 136, 136, 136, 17, 18, 136, 136, 97, 136,
- 136, 136, 136, 136, 87, 136, 42, 16, 0
+ 0, 0, 144, 2, 2, 142, 142, 141, 140, 142,
+ 119, 115, 118, 115, 115, 138, 111, 108, 112, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 116, 4, 5, 5, 3, 134, 134,
+ 131, 135, 135, 129, 136, 136, 133, 1, 141, 109,
+ 139, 138, 138, 138, 0, 113, 110, 114, 137, 137,
+ 137, 137, 10, 137, 137, 137, 21, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 117, 137, 137,
+
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 54, 62, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 74, 75, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 4, 5, 3, 134,
+ 130, 135, 128, 128, 120, 122, 123, 124, 125, 126,
+ 127, 128, 136, 132, 139, 138, 0, 138, 6, 7,
+ 137, 9, 11, 137, 137, 15, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 41, 137, 137, 137, 137, 137,
+
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 58, 137, 64, 137, 137, 137, 137, 137, 70, 137,
+ 73, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 137, 90, 91, 137, 137, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 120,
+ 122, 121, 137, 137, 137, 137, 137, 137, 19, 22,
+ 137, 137, 137, 27, 137, 137, 29, 137, 137, 137,
+ 137, 35, 137, 137, 39, 40, 137, 137, 137, 137,
+ 137, 137, 137, 49, 50, 137, 52, 137, 137, 137,
+ 137, 137, 61, 63, 65, 66, 67, 137, 69, 71,
+
+ 137, 137, 137, 137, 137, 82, 137, 84, 137, 137,
+ 137, 137, 137, 137, 137, 94, 95, 97, 137, 137,
+ 137, 137, 137, 137, 104, 137, 106, 137, 120, 121,
+ 8, 137, 137, 137, 137, 137, 137, 24, 137, 137,
+ 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
+ 137, 137, 137, 45, 46, 47, 137, 51, 137, 55,
+ 56, 137, 137, 137, 68, 72, 76, 77, 137, 137,
+ 137, 83, 137, 137, 87, 137, 137, 137, 93, 137,
+ 137, 137, 137, 101, 137, 137, 105, 137, 137, 137,
+ 14, 137, 137, 137, 137, 25, 137, 28, 137, 137,
+
+ 137, 137, 33, 137, 137, 137, 38, 137, 43, 137,
+ 137, 53, 57, 137, 137, 137, 137, 137, 137, 86,
+ 137, 89, 137, 137, 137, 99, 100, 102, 137, 137,
+ 137, 13, 137, 137, 137, 137, 137, 20, 137, 31,
+ 32, 137, 137, 137, 137, 44, 48, 59, 137, 137,
+ 80, 81, 137, 137, 137, 137, 137, 103, 137, 137,
+ 137, 137, 137, 137, 137, 30, 137, 137, 37, 137,
+ 60, 137, 137, 137, 92, 137, 137, 137, 12, 137,
+ 137, 137, 23, 137, 34, 137, 137, 78, 137, 137,
+ 96, 137, 107, 137, 137, 137, 26, 36, 137, 79,
+
+ 85, 137, 137, 137, 17, 18, 137, 137, 98, 137,
+ 137, 137, 137, 137, 88, 137, 42, 16, 0
} ;
static yyconst YY_CHAR yy_ec[256] =
@@ -900,7 +900,7 @@ static yyconst flex_int16_t yy_chk[1229] =
} ;
/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[143] =
+static yyconst flex_int32_t yy_rule_can_match_eol[144] =
{ 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,
@@ -908,8 +908,8 @@ static yyconst flex_int32_t yy_rule_can_match_eol[143] =
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, 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.
@@ -1678,22 +1678,22 @@ return TOKEN_HAVING;
case 54:
YY_RULE_SETUP
#line 215 "../SqlLexer.lpp"
-return TOKEN_INDEX;
+return TOKEN_IN;
YY_BREAK
case 55:
YY_RULE_SETUP
#line 216 "../SqlLexer.lpp"
-return TOKEN_INNER;
+return TOKEN_INDEX;
YY_BREAK
case 56:
YY_RULE_SETUP
#line 217 "../SqlLexer.lpp"
-return TOKEN_INSERT;
+return TOKEN_INNER;
YY_BREAK
case 57:
YY_RULE_SETUP
#line 218 "../SqlLexer.lpp"
-return TOKEN_INTEGER;
+return TOKEN_INSERT;
YY_BREAK
case 58:
YY_RULE_SETUP
@@ -1703,252 +1703,252 @@ return TOKEN_INTEGER;
case 59:
YY_RULE_SETUP
#line 220 "../SqlLexer.lpp"
-return TOKEN_INTERVAL;
+return TOKEN_INTEGER;
YY_BREAK
case 60:
YY_RULE_SETUP
#line 221 "../SqlLexer.lpp"
-return TOKEN_INTO;
+return TOKEN_INTERVAL;
YY_BREAK
case 61:
YY_RULE_SETUP
#line 222 "../SqlLexer.lpp"
-return TOKEN_IS;
+return TOKEN_INTO;
YY_BREAK
case 62:
YY_RULE_SETUP
#line 223 "../SqlLexer.lpp"
-return TOKEN_JOIN;
+return TOKEN_IS;
YY_BREAK
case 63:
YY_RULE_SETUP
#line 224 "../SqlLexer.lpp"
-return TOKEN_KEY;
+return TOKEN_JOIN;
YY_BREAK
case 64:
YY_RULE_SETUP
#line 225 "../SqlLexer.lpp"
-return TOKEN_LAST;
+return TOKEN_KEY;
YY_BREAK
case 65:
YY_RULE_SETUP
#line 226 "../SqlLexer.lpp"
-return TOKEN_LEFT;
+return TOKEN_LAST;
YY_BREAK
case 66:
YY_RULE_SETUP
#line 227 "../SqlLexer.lpp"
-return TOKEN_LIKE;
+return TOKEN_LEFT;
YY_BREAK
case 67:
YY_RULE_SETUP
#line 228 "../SqlLexer.lpp"
-return TOKEN_LIMIT;
+return TOKEN_LIKE;
YY_BREAK
case 68:
YY_RULE_SETUP
#line 229 "../SqlLexer.lpp"
-return TOKEN_LONG;
+return TOKEN_LIMIT;
YY_BREAK
case 69:
YY_RULE_SETUP
#line 230 "../SqlLexer.lpp"
-return TOKEN_NOT;
+return TOKEN_LONG;
YY_BREAK
case 70:
YY_RULE_SETUP
#line 231 "../SqlLexer.lpp"
-return TOKEN_NULL;
+return TOKEN_NOT;
YY_BREAK
case 71:
YY_RULE_SETUP
#line 232 "../SqlLexer.lpp"
-return TOKEN_NULLS;
+return TOKEN_NULL;
YY_BREAK
case 72:
YY_RULE_SETUP
#line 233 "../SqlLexer.lpp"
-return TOKEN_OFF;
+return TOKEN_NULLS;
YY_BREAK
case 73:
YY_RULE_SETUP
#line 234 "../SqlLexer.lpp"
-return TOKEN_ON;
+return TOKEN_OFF;
YY_BREAK
case 74:
YY_RULE_SETUP
#line 235 "../SqlLexer.lpp"
-return TOKEN_OR;
+return TOKEN_ON;
YY_BREAK
case 75:
YY_RULE_SETUP
#line 236 "../SqlLexer.lpp"
-return TOKEN_ORDER;
+return TOKEN_OR;
YY_BREAK
case 76:
YY_RULE_SETUP
#line 237 "../SqlLexer.lpp"
-return TOKEN_OUTER;
+return TOKEN_ORDER;
YY_BREAK
case 77:
YY_RULE_SETUP
#line 238 "../SqlLexer.lpp"
-return TOKEN_PARTITION;
+return TOKEN_OUTER;
YY_BREAK
case 78:
YY_RULE_SETUP
#line 239 "../SqlLexer.lpp"
-return TOKEN_PARTITIONS;
+return TOKEN_PARTITION;
YY_BREAK
case 79:
YY_RULE_SETUP
#line 240 "../SqlLexer.lpp"
-return TOKEN_PERCENT;
+return TOKEN_PARTITIONS;
YY_BREAK
case 80:
YY_RULE_SETUP
#line 241 "../SqlLexer.lpp"
-return TOKEN_PRIMARY;
+return TOKEN_PERCENT;
YY_BREAK
case 81:
YY_RULE_SETUP
#line 242 "../SqlLexer.lpp"
-return TOKEN_QUIT;
+return TOKEN_PRIMARY;
YY_BREAK
case 82:
YY_RULE_SETUP
#line 243 "../SqlLexer.lpp"
-return TOKEN_RANGE;
+return TOKEN_QUIT;
YY_BREAK
case 83:
YY_RULE_SETUP
#line 244 "../SqlLexer.lpp"
-return TOKEN_REAL;
+return TOKEN_RANGE;
YY_BREAK
case 84:
YY_RULE_SETUP
#line 245 "../SqlLexer.lpp"
-return TOKEN_REFERENCES;
+return TOKEN_REAL;
YY_BREAK
case 85:
YY_RULE_SETUP
#line 246 "../SqlLexer.lpp"
-return TOKEN_REGEXP;
+return TOKEN_REFERENCES;
YY_BREAK
case 86:
YY_RULE_SETUP
#line 247 "../SqlLexer.lpp"
-return TOKEN_RIGHT;
+return TOKEN_REGEXP;
YY_BREAK
case 87:
YY_RULE_SETUP
#line 248 "../SqlLexer.lpp"
-return TOKEN_ROW_DELIMITER;
+return TOKEN_RIGHT;
YY_BREAK
case 88:
YY_RULE_SETUP
#line 249 "../SqlLexer.lpp"
-return TOKEN_SELECT;
+return TOKEN_ROW_DELIMITER;
YY_BREAK
case 89:
YY_RULE_SETUP
#line 250 "../SqlLexer.lpp"
-return TOKEN_SET;
+return TOKEN_SELECT;
YY_BREAK
case 90:
YY_RULE_SETUP
#line 251 "../SqlLexer.lpp"
-return TOKEN_SMA;
+return TOKEN_SET;
YY_BREAK
case 91:
YY_RULE_SETUP
#line 252 "../SqlLexer.lpp"
-return TOKEN_SMALLINT;
+return TOKEN_SMA;
YY_BREAK
case 92:
YY_RULE_SETUP
#line 253 "../SqlLexer.lpp"
-return TOKEN_TABLE;
+return TOKEN_SMALLINT;
YY_BREAK
case 93:
YY_RULE_SETUP
#line 254 "../SqlLexer.lpp"
-return TOKEN_THEN;
+return TOKEN_TABLE;
YY_BREAK
case 94:
YY_RULE_SETUP
#line 255 "../SqlLexer.lpp"
-return TOKEN_TIME;
+return TOKEN_THEN;
YY_BREAK
case 95:
YY_RULE_SETUP
#line 256 "../SqlLexer.lpp"
-return TOKEN_TIMESTAMP;
+return TOKEN_TIME;
YY_BREAK
case 96:
YY_RULE_SETUP
#line 257 "../SqlLexer.lpp"
-return TOKEN_TRUE;
+return TOKEN_TIMESTAMP;
YY_BREAK
case 97:
YY_RULE_SETUP
#line 258 "../SqlLexer.lpp"
-return TOKEN_TUPLESAMPLE;
+return TOKEN_TRUE;
YY_BREAK
case 98:
YY_RULE_SETUP
#line 259 "../SqlLexer.lpp"
-return TOKEN_UNIQUE;
+return TOKEN_TUPLESAMPLE;
YY_BREAK
case 99:
YY_RULE_SETUP
#line 260 "../SqlLexer.lpp"
-return TOKEN_UPDATE;
+return TOKEN_UNIQUE;
YY_BREAK
case 100:
YY_RULE_SETUP
#line 261 "../SqlLexer.lpp"
-return TOKEN_USING;
+return TOKEN_UPDATE;
YY_BREAK
case 101:
YY_RULE_SETUP
#line 262 "../SqlLexer.lpp"
-return TOKEN_VALUES;
+return TOKEN_USING;
YY_BREAK
case 102:
YY_RULE_SETUP
#line 263 "../SqlLexer.lpp"
-return TOKEN_VARCHAR;
+return TOKEN_VALUES;
YY_BREAK
case 103:
YY_RULE_SETUP
#line 264 "../SqlLexer.lpp"
-return TOKEN_WHEN;
+return TOKEN_VARCHAR;
YY_BREAK
case 104:
YY_RULE_SETUP
#line 265 "../SqlLexer.lpp"
-return TOKEN_WHERE;
+return TOKEN_WHEN;
YY_BREAK
case 105:
YY_RULE_SETUP
#line 266 "../SqlLexer.lpp"
-return TOKEN_WITH;
+return TOKEN_WHERE;
YY_BREAK
case 106:
YY_RULE_SETUP
#line 267 "../SqlLexer.lpp"
-return TOKEN_YEARMONTH;
+return TOKEN_WITH;
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 269 "../SqlLexer.lpp"
-return TOKEN_EQ;
+#line 268 "../SqlLexer.lpp"
+return TOKEN_YEARMONTH;
YY_BREAK
case 108:
YY_RULE_SETUP
#line 270 "../SqlLexer.lpp"
-return TOKEN_NEQ;
+return TOKEN_EQ;
YY_BREAK
case 109:
YY_RULE_SETUP
@@ -1958,56 +1958,61 @@ return TOKEN_NEQ;
case 110:
YY_RULE_SETUP
#line 272 "../SqlLexer.lpp"
-return TOKEN_LT;
+return TOKEN_NEQ;
YY_BREAK
case 111:
YY_RULE_SETUP
#line 273 "../SqlLexer.lpp"
-return TOKEN_GT;
+return TOKEN_LT;
YY_BREAK
case 112:
YY_RULE_SETUP
#line 274 "../SqlLexer.lpp"
-return TOKEN_LEQ;
+return TOKEN_GT;
YY_BREAK
case 113:
YY_RULE_SETUP
#line 275 "../SqlLexer.lpp"
-return TOKEN_GEQ;
+return TOKEN_LEQ;
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 277 "../SqlLexer.lpp"
-return yytext[0];
+#line 276 "../SqlLexer.lpp"
+return TOKEN_GEQ;
YY_BREAK
case 115:
YY_RULE_SETUP
#line 278 "../SqlLexer.lpp"
return yytext[0];
YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 279 "../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 116:
+case 117:
YY_RULE_SETUP
-#line 284 "../SqlLexer.lpp"
+#line 285 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_SINGLE_QUOTED_ESCAPED);
}
YY_BREAK
-case 117:
+case 118:
YY_RULE_SETUP
-#line 289 "../SqlLexer.lpp"
+#line 290 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_SINGLE_QUOTED);
}
YY_BREAK
-case 118:
+case 119:
YY_RULE_SETUP
-#line 294 "../SqlLexer.lpp"
+#line 295 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_DOUBLE_QUOTED);
@@ -2019,7 +2024,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 303 "../SqlLexer.lpp"
+#line 304 "../SqlLexer.lpp"
{
delete yylval->string_value_;
BEGIN(INITIAL);
@@ -2030,9 +2035,9 @@ case YY_STATE_EOF(CONDITION_STRING_DOUBLE_QUOTED):
/* Process escape sequences. */
-case 119:
+case 120:
YY_RULE_SETUP
-#line 313 "../SqlLexer.lpp"
+#line 314 "../SqlLexer.lpp"
{
/* Octal code */
unsigned int code;
@@ -2046,9 +2051,9 @@ YY_RULE_SETUP
yylval->string_value_->push_back(code);
}
YY_BREAK
-case 120:
+case 121:
YY_RULE_SETUP
-#line 325 "../SqlLexer.lpp"
+#line 326 "../SqlLexer.lpp"
{
/* Hexadecimal code */
unsigned int code;
@@ -2056,9 +2061,9 @@ YY_RULE_SETUP
yylval->string_value_->push_back(code);
}
YY_BREAK
-case 121:
+case 122:
YY_RULE_SETUP
-#line 331 "../SqlLexer.lpp"
+#line 332 "../SqlLexer.lpp"
{
/* A numeric escape sequence that isn't correctly specified. */
delete yylval->string_value_;
@@ -2067,58 +2072,58 @@ YY_RULE_SETUP
return TOKEN_LEX_ERROR;
}
YY_BREAK
-case 122:
+case 123:
YY_RULE_SETUP
-#line 338 "../SqlLexer.lpp"
+#line 339 "../SqlLexer.lpp"
{
/* Backspace */
yylval->string_value_->push_back('\b');
}
YY_BREAK
-case 123:
+case 124:
YY_RULE_SETUP
-#line 342 "../SqlLexer.lpp"
+#line 343 "../SqlLexer.lpp"
{
/* Form-feed */
yylval->string_value_->push_back('\f');
}
YY_BREAK
-case 124:
+case 125:
YY_RULE_SETUP
-#line 346 "../SqlLexer.lpp"
+#line 347 "../SqlLexer.lpp"
{
/* Newline */
yylval->string_value_->push_back('\n');
}
YY_BREAK
-case 125:
+case 126:
YY_RULE_SETUP
-#line 350 "../SqlLexer.lpp"
+#line 351 "../SqlLexer.lpp"
{
/* Carriage-return */
yylval->string_value_->push_back('\r');
}
YY_BREAK
-case 126:
+case 127:
YY_RULE_SETUP
-#line 354 "../SqlLexer.lpp"
+#line 355 "../SqlLexer.lpp"
{
/* Horizontal Tab */
yylval->string_value_->push_back('\t');
}
YY_BREAK
-case 127:
-/* rule 127 can match eol */
+case 128:
+/* rule 128 can match eol */
YY_RULE_SETUP
-#line 358 "../SqlLexer.lpp"
+#line 359 "../SqlLexer.lpp"
{
/* Any other character (including actual newline or carriage return) */
yylval->string_value_->push_back(yytext[1]);
}
YY_BREAK
-case 128:
+case 129:
YY_RULE_SETUP
-#line 362 "../SqlLexer.lpp"
+#line 363 "../SqlLexer.lpp"
{
/* This should only be encountered right before an EOF. */
delete yylval->string_value_;
@@ -2129,17 +2134,17 @@ YY_RULE_SETUP
YY_BREAK
-case 129:
+case 130:
YY_RULE_SETUP
-#line 372 "../SqlLexer.lpp"
+#line 373 "../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 130:
+case 131:
YY_RULE_SETUP
-#line 376 "../SqlLexer.lpp"
+#line 377 "../SqlLexer.lpp"
{
/* End string */
BEGIN(CONDITION_SQL);
@@ -2148,17 +2153,17 @@ YY_RULE_SETUP
YY_BREAK
-case 131:
+case 132:
YY_RULE_SETUP
-#line 384 "../SqlLexer.lpp"
+#line 385 "../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 132:
+case 133:
YY_RULE_SETUP
-#line 388 "../SqlLexer.lpp"
+#line 389 "../SqlLexer.lpp"
{
/* End string */
BEGIN(CONDITION_SQL);
@@ -2166,94 +2171,94 @@ YY_RULE_SETUP
}
YY_BREAK
-case 133:
-/* rule 133 can match eol */
+case 134:
+/* rule 134 can match eol */
YY_RULE_SETUP
-#line 395 "../SqlLexer.lpp"
+#line 396 "../SqlLexer.lpp"
{
/* Scan up to a quote. */
yylval->string_value_->append(yytext, yyleng);
}
YY_BREAK
-case 134:
-/* rule 134 can match eol */
+case 135:
+/* rule 135 can match eol */
YY_RULE_SETUP
-#line 400 "../SqlLexer.lpp"
+#line 401 "../SqlLexer.lpp"
{
/* Scan up to a quote or escape sequence. */
yylval->string_value_->append(yytext, yyleng);
}
YY_BREAK
-case 135:
-/* rule 135 can match eol */
+case 136:
+/* rule 136 can match eol */
YY_RULE_SETUP
-#line 405 "../SqlLexer.lpp"
+#line 406 "../SqlLexer.lpp"
{
/* Scan up to a quote. */
yylval->string_value_->append(yytext, yyleng);
}
YY_BREAK
-case 136:
+case 137:
YY_RULE_SETUP
-#line 411 "../SqlLexer.lpp"
+#line 412 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(
yylloc->first_line, yylloc->first_column, std::string(yytext, yyleng));
return TOKEN_NAME;
}
YY_BREAK
-case 137:
+case 138:
YY_RULE_SETUP
-#line 417 "../SqlLexer.lpp"
+#line 418 "../SqlLexer.lpp"
{
yylval->numeric_literal_value_ = new quickstep::NumericParseLiteralValue(
yylloc->first_line, yylloc->first_column, yytext);
return TOKEN_UNSIGNED_NUMVAL;
}
YY_BREAK
-case 138:
+case 139:
YY_RULE_SETUP
-#line 423 "../SqlLexer.lpp"
+#line 424 "../SqlLexer.lpp"
/* comment */
YY_BREAK
-case 139:
-/* rule 139 can match eol */
+case 140:
+/* rule 140 can match eol */
YY_RULE_SETUP
-#line 425 "../SqlLexer.lpp"
+#line 426 "../SqlLexer.lpp"
{ yycolumn = 0; }
YY_BREAK
-case 140:
+case 141:
YY_RULE_SETUP
-#line 427 "../SqlLexer.lpp"
+#line 428 "../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 431 "../SqlLexer.lpp"
+#line 432 "../SqlLexer.lpp"
{
/* All conditions except for mutli-state string extracting conditions. */
BEGIN(INITIAL);
return TOKEN_EOF;
}
YY_BREAK
-case 141:
+case 142:
YY_RULE_SETUP
-#line 437 "../SqlLexer.lpp"
+#line 438 "../SqlLexer.lpp"
{
BEGIN(INITIAL);
quickstep_yyerror(NULL, yyscanner, NULL, "illegal character");
return TOKEN_LEX_ERROR;
}
YY_BREAK
-case 142:
+case 143:
YY_RULE_SETUP
-#line 443 "../SqlLexer.lpp"
+#line 444 "../SqlLexer.lpp"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 2257 "SqlLexer_gen.cpp"
+#line 2262 "SqlLexer_gen.cpp"
case YY_END_OF_BUFFER:
{
@@ -3414,7 +3419,7 @@ void quickstep_yyfree (void * ptr , yyscan_t yyscanner)
#define YYTABLES_NAME "yytables"
-#line 443 "../SqlLexer.lpp"
+#line 444 "../SqlLexer.lpp"
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/0fd8c039/parser/preprocessed/SqlLexer_gen.hpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlLexer_gen.hpp b/parser/preprocessed/SqlLexer_gen.hpp
index 287c93b..39d4cc0 100644
--- a/parser/preprocessed/SqlLexer_gen.hpp
+++ b/parser/preprocessed/SqlLexer_gen.hpp
@@ -360,7 +360,7 @@ extern int quickstep_yylex \
#undef YY_DECL
#endif
-#line 443 "../SqlLexer.lpp"
+#line 444 "../SqlLexer.lpp"
#line 367 "SqlLexer_gen.hpp"