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:34 UTC
[21/24] incubator-quickstep git commit: Added JOIN ... ON ...
operator and tests. (#171)
Added JOIN ... ON ... operator and tests. (#171)
Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/e87cabf4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/e87cabf4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/e87cabf4
Branch: refs/heads/master
Commit: e87cabf4995de58ff2677a2c4bc1118a1048667c
Parents: cbd169e
Author: Jianqiao Zhu <ji...@cs.wisc.edu>
Authored: Sat Apr 16 23:32:34 2016 -0500
Committer: Jignesh Patel <pa...@users.noreply.github.com>
Committed: Sat Apr 16 23:32:34 2016 -0500
----------------------------------------------------------------------
parser/CMakeLists.txt | 9 +
parser/ParseJoinedTableReference.cpp | 71 +
parser/ParseJoinedTableReference.hpp | 128 +
parser/ParseTableReference.hpp | 3 +-
parser/SqlLexer.lpp | 1 +
parser/SqlParser.ypp | 125 +-
parser/SqlParserWrapper.cpp | 1 +
parser/preprocessed/SqlLexer_gen.cpp | 303 +-
parser/preprocessed/SqlLexer_gen.hpp | 2 +-
parser/preprocessed/SqlParser_gen.cpp | 2619 +++++++++---------
parser/preprocessed/SqlParser_gen.hpp | 14 +-
parser/tests/CMakeLists.txt | 4 +
parser/tests/Join.test | 160 ++
parser/tests/TPCH.test | 43 +-
query_optimizer/resolver/CMakeLists.txt | 1 +
query_optimizer/resolver/NameResolver.cpp | 17 +
query_optimizer/resolver/NameResolver.hpp | 9 +
query_optimizer/resolver/Resolver.cpp | 34 +
query_optimizer/resolver/Resolver.hpp | 14 +
.../tests/OptimizerTextTestRunner.hpp | 1 +
query_optimizer/tests/TestDatabaseLoader.cpp | 30 +
query_optimizer/tests/TestDatabaseLoader.hpp | 8 +
.../tests/execution_generator/CMakeLists.txt | 6 +
.../tests/execution_generator/Join.test | 132 +
.../tests/logical_generator/CMakeLists.txt | 14 +-
.../tests/logical_generator/Join.test | 217 ++
.../tests/physical_generator/CMakeLists.txt | 4 +
.../tests/physical_generator/Join.test | 237 ++
query_optimizer/tests/resolver/CMakeLists.txt | 4 +
query_optimizer/tests/resolver/Join.test | 172 ++
30 files changed, 2802 insertions(+), 1581 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/e87cabf4/parser/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/parser/CMakeLists.txt b/parser/CMakeLists.txt
index 8f4bae9..d35f3be 100644
--- a/parser/CMakeLists.txt
+++ b/parser/CMakeLists.txt
@@ -94,6 +94,7 @@ add_library(quickstep_parser_ParseGeneratorTableReference ParseGeneratorTableRef
add_library(quickstep_parser_ParseGroupBy ParseGroupBy.cpp ParseGroupBy.hpp)
add_library(quickstep_parser_ParseHaving ParseHaving.cpp ParseHaving.hpp)
add_library(quickstep_parser_ParseIndexProperties ParseIndexProperties.cpp ParseIndexProperties.hpp)
+add_library(quickstep_parser_ParseJoinedTableReference ParseJoinedTableReference.cpp ParseJoinedTableReference.hpp)
add_library(quickstep_parser_ParseKeyValue ../empty_src.cpp ParseKeyValue.hpp)
add_library(quickstep_parser_ParseLimit ParseLimit.cpp ParseLimit.hpp)
add_library(quickstep_parser_ParseLiteralValue ParseLiteralValue.cpp ParseLiteralValue.hpp)
@@ -177,6 +178,10 @@ target_link_libraries(quickstep_parser_ParseIndexProperties
quickstep_utility_Macros
quickstep_utility_PtrList
quickstep_utility_StringUtil)
+target_link_libraries(quickstep_parser_ParseJoinedTableReference
+ quickstep_parser_ParsePredicate
+ quickstep_parser_ParseTableReference
+ quickstep_utility_Macros)
target_link_libraries(quickstep_parser_ParseLimit
quickstep_parser_ParseLiteralValue
quickstep_parser_ParseTreeNode
@@ -295,6 +300,7 @@ target_link_libraries(quickstep_parser_ParseTreeNode
target_link_libraries(quickstep_parser_ParserUtil
quickstep_utility_SqlError)
target_link_libraries(quickstep_parser_SqlLexer
+ quickstep_parser_ParseJoinedTableReference
quickstep_parser_ParseLiteralValue
quickstep_parser_ParserUtil
quickstep_parser_ParseString
@@ -312,6 +318,7 @@ target_link_libraries(quickstep_parser_SqlParser
quickstep_parser_ParseGeneratorTableReference
quickstep_parser_ParseGroupBy
quickstep_parser_ParseHaving
+ quickstep_parser_ParseJoinedTableReference
quickstep_parser_ParseKeyValue
quickstep_parser_ParseLimit
quickstep_parser_ParseLiteralValue
@@ -347,6 +354,7 @@ target_link_libraries(quickstep_parser_SqlParser
quickstep_utility_PtrVector)
target_link_libraries(quickstep_parser_SqlParserWrapper
glog
+ quickstep_parser_ParseJoinedTableReference
quickstep_parser_ParseStatement
quickstep_parser_SqlLexer
quickstep_parser_SqlParser
@@ -387,6 +395,7 @@ target_link_libraries(quickstep_parser
quickstep_parser_ParseGroupBy
quickstep_parser_ParseHaving
quickstep_parser_ParseIndexProperties
+ quickstep_parser_ParseJoinedTableReference
quickstep_parser_ParseLimit
quickstep_parser_ParseLiteralValue
quickstep_parser_ParseOrderBy
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/e87cabf4/parser/ParseJoinedTableReference.cpp
----------------------------------------------------------------------
diff --git a/parser/ParseJoinedTableReference.cpp b/parser/ParseJoinedTableReference.cpp
new file mode 100644
index 0000000..c1bc956
--- /dev/null
+++ b/parser/ParseJoinedTableReference.cpp
@@ -0,0 +1,71 @@
+/**
+ * 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.
+ **/
+
+#include "parser/ParseJoinedTableReference.hpp"
+
+#include <string>
+#include <type_traits>
+#include <vector>
+
+#include "glog/logging.h"
+
+namespace quickstep {
+
+void ParseJoinedTableReference::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 {
+ ParseTableReference::getFieldStringItems(inline_field_names,
+ inline_field_values,
+ non_container_child_field_names,
+ non_container_child_fields,
+ container_child_field_names,
+ container_child_fields);
+
+ inline_field_names->push_back("join_type");
+ switch (join_type_) {
+ case JoinType::kInnerJoin:
+ inline_field_values->push_back("InnerJoin");
+ break;
+ case JoinType::kLeftOuterJoin:
+ inline_field_values->push_back("LeftOuterJoin");
+ break;
+ case JoinType::kRightOuterJoin:
+ inline_field_values->push_back("RightOuterJoin");
+ break;
+ case JoinType::kFullOuterJoin:
+ inline_field_values->push_back("FullOuterJoin");
+ break;
+ default:
+ LOG(FATAL) << "Invalid JoinType: "
+ << static_cast<typename std::underlying_type<JoinType>::type>(join_type_);
+ }
+
+ non_container_child_field_names->push_back("left_table");
+ non_container_child_fields->push_back(left_table_.get());
+
+ non_container_child_field_names->push_back("right_table");
+ non_container_child_fields->push_back(right_table_.get());
+
+ non_container_child_field_names->push_back("join_predicate");
+ non_container_child_fields->push_back(join_predicate_.get());
+}
+
+} // namespace quickstep
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/e87cabf4/parser/ParseJoinedTableReference.hpp
----------------------------------------------------------------------
diff --git a/parser/ParseJoinedTableReference.hpp b/parser/ParseJoinedTableReference.hpp
new file mode 100644
index 0000000..182f472
--- /dev/null
+++ b/parser/ParseJoinedTableReference.hpp
@@ -0,0 +1,128 @@
+/**
+ * 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_JOINED_TABLE_REFERENCE_HPP_
+#define QUICKSTEP_PARSER_PARSE_JOINED_TABLE_REFERENCE_HPP_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "parser/ParsePredicate.hpp"
+#include "parser/ParseTableReference.hpp"
+#include "utility/Macros.hpp"
+
+namespace quickstep {
+
+class ParseTreeNode;
+
+/** \addtogroup Parser
+ * @{
+ */
+
+/**
+ * @brief Parsed representation of a joined table.
+ */
+class ParseJoinedTableReference : public ParseTableReference {
+ public:
+ enum class JoinType {
+ kInnerJoin = 0,
+ kLeftOuterJoin,
+ kRightOuterJoin,
+ kFullOuterJoin
+ };
+
+ /**
+ * @brief Constructor.
+ *
+ * @param line_number The line number of the token "JOIN" in the SQL statement.
+ * @param column_number The column number of the token "JOIN" in the SQL statement.
+ * @param join_type The join type.
+ * @param left_table The left-hand side table.
+ * @param right_table The right-hand side table.
+ * @param join_predicate The join predicate.
+ */
+ ParseJoinedTableReference(const int line_number,
+ const int column_number,
+ const JoinType join_type,
+ ParseTableReference *left_table,
+ ParseTableReference *right_table,
+ ParsePredicate *join_predicate)
+ : ParseTableReference(line_number, column_number),
+ join_type_(join_type),
+ left_table_(left_table),
+ right_table_(right_table),
+ join_predicate_(join_predicate) {
+ }
+
+ TableReferenceType getTableReferenceType() const override {
+ return kJoinedTableReference;
+ }
+
+ std::string getName() const override { return "JoinedTable"; }
+
+ /**
+ * @return The join type.
+ */
+ JoinType join_type() const {
+ return join_type_;
+ }
+
+ /**
+ * @return The left-side table.
+ */
+ const ParseTableReference* left_table() const {
+ return left_table_.get();
+ }
+
+ /**
+ * @return The right-side table.
+ */
+ const ParseTableReference* right_table() const {
+ return right_table_.get();
+ }
+
+ /**
+ * @return The join predicate.
+ */
+ const ParsePredicate* join_predicate() const {
+ return join_predicate_.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:
+ const JoinType join_type_;
+ std::unique_ptr<ParseTableReference> left_table_;
+ std::unique_ptr<ParseTableReference> right_table_;
+ std::unique_ptr<ParsePredicate> join_predicate_;
+
+ DISALLOW_COPY_AND_ASSIGN(ParseJoinedTableReference);
+};
+
+/** @} */
+
+} // namespace quickstep
+
+#endif /* QUICKSTEP_PARSER_PARSE_JOINED_TABLE_REFERENCE_HPP_ */
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/e87cabf4/parser/ParseTableReference.hpp
----------------------------------------------------------------------
diff --git a/parser/ParseTableReference.hpp b/parser/ParseTableReference.hpp
index ff68dd8..c3500b0 100644
--- a/parser/ParseTableReference.hpp
+++ b/parser/ParseTableReference.hpp
@@ -96,8 +96,9 @@ class ParseTableReferenceSignature : public ParseTreeNode {
class ParseTableReference : public ParseTreeNode {
public:
enum TableReferenceType {
- kSimpleTableReference,
kGeneratorTableReference,
+ kJoinedTableReference,
+ kSimpleTableReference,
kSubqueryTableReference
};
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/e87cabf4/parser/SqlLexer.lpp
----------------------------------------------------------------------
diff --git a/parser/SqlLexer.lpp b/parser/SqlLexer.lpp
index 5c2e221..3043322 100644
--- a/parser/SqlLexer.lpp
+++ b/parser/SqlLexer.lpp
@@ -30,6 +30,7 @@
#include <string>
#include <vector>
+#include "parser/ParseJoinedTableReference.hpp"
#include "parser/ParseLiteralValue.hpp"
#include "utility/PtrList.hpp"
#include "utility/PtrVector.hpp"
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/e87cabf4/parser/SqlParser.ypp
----------------------------------------------------------------------
diff --git a/parser/SqlParser.ypp b/parser/SqlParser.ypp
index 0cf4590..bb19d8b 100644
--- a/parser/SqlParser.ypp
+++ b/parser/SqlParser.ypp
@@ -76,6 +76,7 @@ typedef struct YYLTYPE {
#include "parser/ParseGeneratorTableReference.hpp"
#include "parser/ParseGroupBy.hpp"
#include "parser/ParseHaving.hpp"
+#include "parser/ParseJoinedTableReference.hpp"
#include "parser/ParseKeyValue.hpp"
#include "parser/ParseLimit.hpp"
#include "parser/ParseLiteralValue.hpp"
@@ -149,6 +150,8 @@ typedef void* yyscan_t;
quickstep::PtrList<quickstep::ParseTableReference> *table_reference_list_;
quickstep::ParseTableReferenceSignature *table_reference_signature_;
+ quickstep::ParseJoinedTableReference::JoinType join_type_;
+
quickstep::ParseDataType *data_type_;
quickstep::ParseAttributeDefinition *attribute_definition_;
quickstep::ParseColumnConstraint *column_constraint_;
@@ -393,15 +396,19 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%type <table_reference_>
table_reference
+ joined_table_reference
%type <table_reference_list_>
- table_reference_commalist
+ joined_table_reference_commalist
from_clause
%type <table_reference_signature_>
table_reference_signature
table_reference_signature_primary
+%type <join_type_>
+ join_type
+
%type <data_type_>
data_type
@@ -544,9 +551,6 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
/*
%type <int_val>
- join // unimplemented
- join_chain // unimplemented
- opt_join_chain // unimplemented
opt_all_distinct // unimplemented
table_constraint_def // unimplemented
table_constraint_def_commalist // unimplemented
@@ -557,6 +561,7 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
%destructor { } <comparison_>
%destructor { } <unary_operation_>
%destructor { } <binary_operation_>
+%destructor { } <join_type_>
%destructor {
if ($$ != nullptr) {
@@ -1168,93 +1173,58 @@ selection_item:
};
from_clause:
- TOKEN_FROM table_reference_commalist opt_join_chain {
+ TOKEN_FROM joined_table_reference_commalist {
$$ = $2;
};
-opt_join_chain:
- {
- /* $$ = nullptr; */
- }
- | join_chain {
- NotSupported(&@1, yyscanner, "alternate JOIN syntax (specify in WHERE clause instead)");
- YYERROR;
+subquery_expression:
+ '(' select_query ')' {
+ $$ = new quickstep::ParseSubqueryExpression(@1.first_line, @1.first_column, $2);
};
-join_chain:
- join_chain join {
- NotSupported(&@1, yyscanner, "alternate JOIN syntax (specify in WHERE clause instead)");
- YYERROR;
+opt_sample_clause:
+ {
+ $$ = NULL;
}
- | join {
- NotSupported(&@1, yyscanner, "alternate JOIN syntax (specify in WHERE clause instead)");
- YYERROR;
+ | TOKEN_BLOCKSAMPLE TOKEN_UNSIGNED_NUMVAL TOKEN_PERCENT {
+ $$ = new quickstep::ParseSample(@1.first_line, @1.first_column, true, $2);
+ }
+ | TOKEN_TUPLESAMPLE TOKEN_UNSIGNED_NUMVAL TOKEN_PERCENT {
+ $$ = new quickstep::ParseSample(@1.first_line, @1.first_column, false, $2);
};
-join:
- TOKEN_INNER TOKEN_JOIN name_commalist TOKEN_ON or_expression {
- delete $3;
- delete $5;
- NotSupported(&@1, yyscanner, "alternate JOIN syntax (specify in WHERE clause instead)");
- YYERROR;
+join_type:
+ {
+ $$ = quickstep::ParseJoinedTableReference::JoinType::kInnerJoin;
}
- | TOKEN_JOIN name_commalist TOKEN_ON or_expression {
- delete $2;
- delete $4;
- NotSupported(&@1, yyscanner, "alternate JOIN syntax (specify in WHERE clause instead)");
- YYERROR;
+ | TOKEN_INNER {
+ $$ = quickstep::ParseJoinedTableReference::JoinType::kInnerJoin;
}
- | TOKEN_LEFT TOKEN_OUTER TOKEN_JOIN name_commalist TOKEN_ON or_expression {
- delete $4;
- delete $6;
- NotSupported(&@1, yyscanner, "OUTER JOIN");
- YYERROR;
+ | TOKEN_LEFT {
+ $$ = quickstep::ParseJoinedTableReference::JoinType::kLeftOuterJoin;
}
- | TOKEN_LEFT TOKEN_JOIN name_commalist TOKEN_ON or_expression {
- delete $3;
- delete $5;
- NotSupported(&@1, yyscanner, "OUTER JOIN");
- YYERROR;
+ | TOKEN_LEFT TOKEN_OUTER {
+ $$ = quickstep::ParseJoinedTableReference::JoinType::kLeftOuterJoin;
}
- | TOKEN_RIGHT TOKEN_OUTER TOKEN_JOIN name_commalist TOKEN_ON or_expression {
- delete $4;
- delete $6;
- NotSupported(&@1, yyscanner, "OUTER JOIN");
- YYERROR;
+ | TOKEN_RIGHT {
+ $$ = quickstep::ParseJoinedTableReference::JoinType::kRightOuterJoin;
}
- | TOKEN_RIGHT TOKEN_JOIN name_commalist TOKEN_ON or_expression {
- delete $3;
- delete $5;
- NotSupported(&@1, yyscanner, "OUTER JOIN");
- YYERROR;
+ | TOKEN_RIGHT TOKEN_OUTER {
+ $$ = quickstep::ParseJoinedTableReference::JoinType::kRightOuterJoin;
}
- | TOKEN_FULL TOKEN_OUTER TOKEN_JOIN name_commalist TOKEN_ON or_expression {
- delete $4;
- delete $6;
- NotSupported(&@1, yyscanner, "OUTER JOIN");
- YYERROR;
+ | TOKEN_FULL {
+ $$ = quickstep::ParseJoinedTableReference::JoinType::kFullOuterJoin;
}
- | TOKEN_FULL TOKEN_JOIN name_commalist TOKEN_ON or_expression {
- delete $3;
- delete $5;
- NotSupported(&@1, yyscanner, "OUTER JOIN");
- YYERROR;
- };
-
-subquery_expression:
- '(' select_query ')' {
- $$ = new quickstep::ParseSubqueryExpression(@1.first_line, @1.first_column, $2);
+ | TOKEN_FULL TOKEN_OUTER {
+ $$ = quickstep::ParseJoinedTableReference::JoinType::kFullOuterJoin;
};
-opt_sample_clause:
- {
- $$ = NULL;
+joined_table_reference:
+ joined_table_reference join_type TOKEN_JOIN table_reference TOKEN_ON or_expression {
+ $$ = new quickstep::ParseJoinedTableReference(@3.first_line, @3.first_column, $2, $1, $4, $6);
}
- | TOKEN_BLOCKSAMPLE TOKEN_UNSIGNED_NUMVAL TOKEN_PERCENT {
- $$ = new quickstep::ParseSample(@1.first_line, @1.first_column, true, $2);
- }
- | TOKEN_TUPLESAMPLE TOKEN_UNSIGNED_NUMVAL TOKEN_PERCENT {
- $$ = new quickstep::ParseSample(@1.first_line, @1.first_column, false, $2);
+ | table_reference {
+ $$ = $1;
};
table_reference:
@@ -1275,6 +1245,9 @@ table_reference:
}
| function_call {
$$ = new quickstep::ParseGeneratorTableReference(@1.first_line, @1.first_column, $1);
+ }
+ | '(' joined_table_reference ')' {
+ $$ = $2;
};
table_reference_signature:
@@ -1293,12 +1266,12 @@ table_reference_signature_primary:
$$ = new ::quickstep::ParseTableReferenceSignature(@1.first_line, @1.first_column, $1, $3);
};
-table_reference_commalist:
- table_reference {
+joined_table_reference_commalist:
+ joined_table_reference {
$$ = new quickstep::PtrList<quickstep::ParseTableReference>();
$$->push_back($1);
}
- | table_reference_commalist ',' table_reference {
+ | joined_table_reference_commalist ',' joined_table_reference {
$$ = $1;
$$->push_back($3);
};
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/e87cabf4/parser/SqlParserWrapper.cpp
----------------------------------------------------------------------
diff --git a/parser/SqlParserWrapper.cpp b/parser/SqlParserWrapper.cpp
index c6e6bcc..bc9d87e 100644
--- a/parser/SqlParserWrapper.cpp
+++ b/parser/SqlParserWrapper.cpp
@@ -19,6 +19,7 @@
#include <string>
+#include "parser/ParseJoinedTableReference.hpp"
#include "parser/ParseStatement.hpp"
#include "utility/Macros.hpp"
#include "utility/SqlError.hpp"
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/e87cabf4/parser/preprocessed/SqlLexer_gen.cpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlLexer_gen.cpp b/parser/preprocessed/SqlLexer_gen.cpp
index d00d51f..553a7d9 100644
--- a/parser/preprocessed/SqlLexer_gen.cpp
+++ b/parser/preprocessed/SqlLexer_gen.cpp
@@ -951,6 +951,7 @@ static yyconst flex_int32_t yy_rule_can_match_eol[145] =
#include <string>
#include <vector>
+#include "parser/ParseJoinedTableReference.hpp"
#include "parser/ParseLiteralValue.hpp"
#include "utility/PtrList.hpp"
#include "utility/PtrVector.hpp"
@@ -1032,7 +1033,7 @@ class UnaryOperation;
-#line 1036 "SqlLexer_gen.cpp"
+#line 1037 "SqlLexer_gen.cpp"
#define INITIAL 0
#define CONDITION_SQL 1
@@ -1320,10 +1321,10 @@ YY_DECL
}
{
-#line 127 "../SqlLexer.lpp"
+#line 128 "../SqlLexer.lpp"
-#line 1327 "SqlLexer_gen.cpp"
+#line 1328 "SqlLexer_gen.cpp"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -1390,7 +1391,7 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 130 "../SqlLexer.lpp"
+#line 131 "../SqlLexer.lpp"
{
/* A forward slash character represents a system command. */
BEGIN(CONDITION_COMMAND);
@@ -1402,7 +1403,7 @@ YY_RULE_SETUP
case 2:
/* rule 2 can match eol */
YY_RULE_SETUP
-#line 138 "../SqlLexer.lpp"
+#line 139 "../SqlLexer.lpp"
{
/* This is a SQL command. Place the char back and process normally. */
yyless(0);
@@ -1414,7 +1415,7 @@ YY_RULE_SETUP
case 3:
YY_RULE_SETUP
-#line 147 "../SqlLexer.lpp"
+#line 148 "../SqlLexer.lpp"
{
/* This is a command argument. */
yylval->string_value_ = new quickstep::ParseString(
@@ -1424,7 +1425,7 @@ YY_RULE_SETUP
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 154 "../SqlLexer.lpp"
+#line 155 "../SqlLexer.lpp"
{
/* Ignore whitespace. */
}
@@ -1432,7 +1433,7 @@ YY_RULE_SETUP
case 5:
/* rule 5 can match eol */
YY_RULE_SETUP
-#line 158 "../SqlLexer.lpp"
+#line 159 "../SqlLexer.lpp"
{
/* Newline reverts the lexer to the initial state. */
yycolumn = 0;
@@ -1444,562 +1445,562 @@ YY_RULE_SETUP
case 6:
YY_RULE_SETUP
-#line 167 "../SqlLexer.lpp"
+#line 168 "../SqlLexer.lpp"
return TOKEN_ADD;
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 168 "../SqlLexer.lpp"
+#line 169 "../SqlLexer.lpp"
return TOKEN_ALL;
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 169 "../SqlLexer.lpp"
+#line 170 "../SqlLexer.lpp"
return TOKEN_ALTER;
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 170 "../SqlLexer.lpp"
+#line 171 "../SqlLexer.lpp"
return TOKEN_AND;
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 171 "../SqlLexer.lpp"
+#line 172 "../SqlLexer.lpp"
return TOKEN_AS;
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 172 "../SqlLexer.lpp"
+#line 173 "../SqlLexer.lpp"
return TOKEN_ASC;
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 173 "../SqlLexer.lpp"
+#line 174 "../SqlLexer.lpp"
return TOKEN_ASC;
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 174 "../SqlLexer.lpp"
+#line 175 "../SqlLexer.lpp"
return TOKEN_BETWEEN;
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 175 "../SqlLexer.lpp"
+#line 176 "../SqlLexer.lpp"
return TOKEN_BIGINT;
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 176 "../SqlLexer.lpp"
+#line 177 "../SqlLexer.lpp"
return TOKEN_BIT;
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 177 "../SqlLexer.lpp"
+#line 178 "../SqlLexer.lpp"
return TOKEN_BITWEAVING;
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 178 "../SqlLexer.lpp"
+#line 179 "../SqlLexer.lpp"
return TOKEN_BLOCKPROPERTIES;
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 179 "../SqlLexer.lpp"
+#line 180 "../SqlLexer.lpp"
return TOKEN_BLOCKSAMPLE;
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 180 "../SqlLexer.lpp"
+#line 181 "../SqlLexer.lpp"
return TOKEN_BLOOM_FILTER;
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 181 "../SqlLexer.lpp"
+#line 182 "../SqlLexer.lpp"
return TOKEN_CASE;
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 182 "../SqlLexer.lpp"
+#line 183 "../SqlLexer.lpp"
return TOKEN_CSB_TREE;
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 183 "../SqlLexer.lpp"
+#line 184 "../SqlLexer.lpp"
return TOKEN_BY;
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 184 "../SqlLexer.lpp"
+#line 185 "../SqlLexer.lpp"
return TOKEN_CHARACTER;
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 185 "../SqlLexer.lpp"
+#line 186 "../SqlLexer.lpp"
return TOKEN_CHARACTER;
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 186 "../SqlLexer.lpp"
+#line 187 "../SqlLexer.lpp"
return TOKEN_CHECK;
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 187 "../SqlLexer.lpp"
+#line 188 "../SqlLexer.lpp"
return TOKEN_COLUMN;
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 188 "../SqlLexer.lpp"
+#line 189 "../SqlLexer.lpp"
return TOKEN_CONSTRAINT;
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 189 "../SqlLexer.lpp"
+#line 190 "../SqlLexer.lpp"
return TOKEN_COPY;
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 190 "../SqlLexer.lpp"
+#line 191 "../SqlLexer.lpp"
return TOKEN_CREATE;
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 191 "../SqlLexer.lpp"
+#line 192 "../SqlLexer.lpp"
return TOKEN_DATE;
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 192 "../SqlLexer.lpp"
+#line 193 "../SqlLexer.lpp"
return TOKEN_DATETIME;
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 193 "../SqlLexer.lpp"
+#line 194 "../SqlLexer.lpp"
return TOKEN_DECIMAL;
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 194 "../SqlLexer.lpp"
+#line 195 "../SqlLexer.lpp"
return TOKEN_DEFAULT;
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 195 "../SqlLexer.lpp"
+#line 196 "../SqlLexer.lpp"
return TOKEN_DELETE;
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 196 "../SqlLexer.lpp"
+#line 197 "../SqlLexer.lpp"
return TOKEN_DELIMITER;
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 197 "../SqlLexer.lpp"
+#line 198 "../SqlLexer.lpp"
return TOKEN_DESC;
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 198 "../SqlLexer.lpp"
+#line 199 "../SqlLexer.lpp"
return TOKEN_DESC;
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 199 "../SqlLexer.lpp"
+#line 200 "../SqlLexer.lpp"
return TOKEN_DISTINCT;
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 200 "../SqlLexer.lpp"
+#line 201 "../SqlLexer.lpp"
return TOKEN_DOUBLE;
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 201 "../SqlLexer.lpp"
+#line 202 "../SqlLexer.lpp"
return TOKEN_DROP;
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 202 "../SqlLexer.lpp"
+#line 203 "../SqlLexer.lpp"
return TOKEN_ELSE;
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 203 "../SqlLexer.lpp"
+#line 204 "../SqlLexer.lpp"
return TOKEN_END;
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 204 "../SqlLexer.lpp"
+#line 205 "../SqlLexer.lpp"
return TOKEN_ESCAPE_STRINGS;
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 205 "../SqlLexer.lpp"
+#line 206 "../SqlLexer.lpp"
return TOKEN_EXISTS;
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 206 "../SqlLexer.lpp"
+#line 207 "../SqlLexer.lpp"
return TOKEN_EXTRACT;
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 207 "../SqlLexer.lpp"
+#line 208 "../SqlLexer.lpp"
return TOKEN_FALSE;
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 208 "../SqlLexer.lpp"
+#line 209 "../SqlLexer.lpp"
return TOKEN_FIRST;
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 209 "../SqlLexer.lpp"
+#line 210 "../SqlLexer.lpp"
return TOKEN_FLOAT;
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 210 "../SqlLexer.lpp"
+#line 211 "../SqlLexer.lpp"
return TOKEN_FOREIGN;
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 211 "../SqlLexer.lpp"
+#line 212 "../SqlLexer.lpp"
return TOKEN_FROM;
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 212 "../SqlLexer.lpp"
+#line 213 "../SqlLexer.lpp"
return TOKEN_FULL;
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 213 "../SqlLexer.lpp"
+#line 214 "../SqlLexer.lpp"
return TOKEN_GROUP;
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 214 "../SqlLexer.lpp"
+#line 215 "../SqlLexer.lpp"
return TOKEN_HASH;
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 215 "../SqlLexer.lpp"
+#line 216 "../SqlLexer.lpp"
return TOKEN_HAVING;
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 216 "../SqlLexer.lpp"
+#line 217 "../SqlLexer.lpp"
return TOKEN_IN;
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 217 "../SqlLexer.lpp"
+#line 218 "../SqlLexer.lpp"
return TOKEN_INDEX;
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 218 "../SqlLexer.lpp"
+#line 219 "../SqlLexer.lpp"
return TOKEN_INNER;
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 219 "../SqlLexer.lpp"
+#line 220 "../SqlLexer.lpp"
return TOKEN_INSERT;
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 220 "../SqlLexer.lpp"
+#line 221 "../SqlLexer.lpp"
return TOKEN_INTEGER;
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 221 "../SqlLexer.lpp"
+#line 222 "../SqlLexer.lpp"
return TOKEN_INTEGER;
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 222 "../SqlLexer.lpp"
+#line 223 "../SqlLexer.lpp"
return TOKEN_INTERVAL;
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 223 "../SqlLexer.lpp"
+#line 224 "../SqlLexer.lpp"
return TOKEN_INTO;
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 224 "../SqlLexer.lpp"
+#line 225 "../SqlLexer.lpp"
return TOKEN_IS;
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 225 "../SqlLexer.lpp"
+#line 226 "../SqlLexer.lpp"
return TOKEN_JOIN;
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 226 "../SqlLexer.lpp"
+#line 227 "../SqlLexer.lpp"
return TOKEN_KEY;
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 227 "../SqlLexer.lpp"
+#line 228 "../SqlLexer.lpp"
return TOKEN_LAST;
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 228 "../SqlLexer.lpp"
+#line 229 "../SqlLexer.lpp"
return TOKEN_LEFT;
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 229 "../SqlLexer.lpp"
+#line 230 "../SqlLexer.lpp"
return TOKEN_LIKE;
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 230 "../SqlLexer.lpp"
+#line 231 "../SqlLexer.lpp"
return TOKEN_LIMIT;
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 231 "../SqlLexer.lpp"
+#line 232 "../SqlLexer.lpp"
return TOKEN_LONG;
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 232 "../SqlLexer.lpp"
+#line 233 "../SqlLexer.lpp"
return TOKEN_NOT;
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 233 "../SqlLexer.lpp"
+#line 234 "../SqlLexer.lpp"
return TOKEN_NULL;
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 234 "../SqlLexer.lpp"
+#line 235 "../SqlLexer.lpp"
return TOKEN_NULLS;
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 235 "../SqlLexer.lpp"
+#line 236 "../SqlLexer.lpp"
return TOKEN_OFF;
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 236 "../SqlLexer.lpp"
+#line 237 "../SqlLexer.lpp"
return TOKEN_ON;
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 237 "../SqlLexer.lpp"
+#line 238 "../SqlLexer.lpp"
return TOKEN_OR;
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 238 "../SqlLexer.lpp"
+#line 239 "../SqlLexer.lpp"
return TOKEN_ORDER;
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 239 "../SqlLexer.lpp"
+#line 240 "../SqlLexer.lpp"
return TOKEN_OUTER;
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 240 "../SqlLexer.lpp"
+#line 241 "../SqlLexer.lpp"
return TOKEN_PARTITION;
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 241 "../SqlLexer.lpp"
+#line 242 "../SqlLexer.lpp"
return TOKEN_PARTITIONS;
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 242 "../SqlLexer.lpp"
+#line 243 "../SqlLexer.lpp"
return TOKEN_PERCENT;
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 243 "../SqlLexer.lpp"
+#line 244 "../SqlLexer.lpp"
return TOKEN_PRIMARY;
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 244 "../SqlLexer.lpp"
+#line 245 "../SqlLexer.lpp"
return TOKEN_QUIT;
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 245 "../SqlLexer.lpp"
+#line 246 "../SqlLexer.lpp"
return TOKEN_RANGE;
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 246 "../SqlLexer.lpp"
+#line 247 "../SqlLexer.lpp"
return TOKEN_REAL;
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 247 "../SqlLexer.lpp"
+#line 248 "../SqlLexer.lpp"
return TOKEN_REFERENCES;
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 248 "../SqlLexer.lpp"
+#line 249 "../SqlLexer.lpp"
return TOKEN_REGEXP;
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 249 "../SqlLexer.lpp"
+#line 250 "../SqlLexer.lpp"
return TOKEN_RIGHT;
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 250 "../SqlLexer.lpp"
+#line 251 "../SqlLexer.lpp"
return TOKEN_ROW_DELIMITER;
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 251 "../SqlLexer.lpp"
+#line 252 "../SqlLexer.lpp"
return TOKEN_SELECT;
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 252 "../SqlLexer.lpp"
+#line 253 "../SqlLexer.lpp"
return TOKEN_SET;
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 253 "../SqlLexer.lpp"
+#line 254 "../SqlLexer.lpp"
return TOKEN_SMA;
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 254 "../SqlLexer.lpp"
+#line 255 "../SqlLexer.lpp"
return TOKEN_SMALLINT;
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 255 "../SqlLexer.lpp"
+#line 256 "../SqlLexer.lpp"
return TOKEN_TABLE;
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 256 "../SqlLexer.lpp"
+#line 257 "../SqlLexer.lpp"
return TOKEN_THEN;
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 257 "../SqlLexer.lpp"
+#line 258 "../SqlLexer.lpp"
return TOKEN_TIME;
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 258 "../SqlLexer.lpp"
+#line 259 "../SqlLexer.lpp"
return TOKEN_TIMESTAMP;
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 259 "../SqlLexer.lpp"
+#line 260 "../SqlLexer.lpp"
return TOKEN_TRUE;
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 260 "../SqlLexer.lpp"
+#line 261 "../SqlLexer.lpp"
return TOKEN_TUPLESAMPLE;
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 261 "../SqlLexer.lpp"
+#line 262 "../SqlLexer.lpp"
return TOKEN_UNIQUE;
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 262 "../SqlLexer.lpp"
+#line 263 "../SqlLexer.lpp"
return TOKEN_UPDATE;
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 263 "../SqlLexer.lpp"
+#line 264 "../SqlLexer.lpp"
return TOKEN_USING;
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 264 "../SqlLexer.lpp"
+#line 265 "../SqlLexer.lpp"
return TOKEN_VALUES;
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 265 "../SqlLexer.lpp"
+#line 266 "../SqlLexer.lpp"
return TOKEN_VARCHAR;
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 266 "../SqlLexer.lpp"
+#line 267 "../SqlLexer.lpp"
return TOKEN_WHEN;
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 267 "../SqlLexer.lpp"
+#line 268 "../SqlLexer.lpp"
return TOKEN_WHERE;
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 268 "../SqlLexer.lpp"
+#line 269 "../SqlLexer.lpp"
return TOKEN_WITH;
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 269 "../SqlLexer.lpp"
+#line 270 "../SqlLexer.lpp"
return TOKEN_YEARMONTH;
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 271 "../SqlLexer.lpp"
+#line 272 "../SqlLexer.lpp"
return TOKEN_EQ;
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 272 "../SqlLexer.lpp"
+#line 273 "../SqlLexer.lpp"
return TOKEN_NEQ;
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 273 "../SqlLexer.lpp"
+#line 274 "../SqlLexer.lpp"
return TOKEN_NEQ;
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 274 "../SqlLexer.lpp"
+#line 275 "../SqlLexer.lpp"
return TOKEN_LT;
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 275 "../SqlLexer.lpp"
+#line 276 "../SqlLexer.lpp"
return TOKEN_GT;
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 276 "../SqlLexer.lpp"
+#line 277 "../SqlLexer.lpp"
return TOKEN_LEQ;
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 277 "../SqlLexer.lpp"
+#line 278 "../SqlLexer.lpp"
return TOKEN_GEQ;
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 279 "../SqlLexer.lpp"
+#line 280 "../SqlLexer.lpp"
return yytext[0];
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 280 "../SqlLexer.lpp"
+#line 281 "../SqlLexer.lpp"
return yytext[0];
YY_BREAK
/**
@@ -2008,7 +2009,7 @@ return yytext[0];
**/
case 118:
YY_RULE_SETUP
-#line 286 "../SqlLexer.lpp"
+#line 287 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_SINGLE_QUOTED_ESCAPED);
@@ -2016,7 +2017,7 @@ YY_RULE_SETUP
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 291 "../SqlLexer.lpp"
+#line 292 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_SINGLE_QUOTED);
@@ -2024,7 +2025,7 @@ YY_RULE_SETUP
YY_BREAK
case 120:
YY_RULE_SETUP
-#line 296 "../SqlLexer.lpp"
+#line 297 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_DOUBLE_QUOTED);
@@ -2036,7 +2037,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 305 "../SqlLexer.lpp"
+#line 306 "../SqlLexer.lpp"
{
delete yylval->string_value_;
BEGIN(INITIAL);
@@ -2049,7 +2050,7 @@ case YY_STATE_EOF(CONDITION_STRING_DOUBLE_QUOTED):
case 121:
YY_RULE_SETUP
-#line 315 "../SqlLexer.lpp"
+#line 316 "../SqlLexer.lpp"
{
/* Octal code */
unsigned int code;
@@ -2065,7 +2066,7 @@ YY_RULE_SETUP
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 327 "../SqlLexer.lpp"
+#line 328 "../SqlLexer.lpp"
{
/* Hexadecimal code */
unsigned int code;
@@ -2075,7 +2076,7 @@ YY_RULE_SETUP
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 333 "../SqlLexer.lpp"
+#line 334 "../SqlLexer.lpp"
{
/* A numeric escape sequence that isn't correctly specified. */
delete yylval->string_value_;
@@ -2086,7 +2087,7 @@ YY_RULE_SETUP
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 340 "../SqlLexer.lpp"
+#line 341 "../SqlLexer.lpp"
{
/* Backspace */
yylval->string_value_->push_back('\b');
@@ -2094,7 +2095,7 @@ YY_RULE_SETUP
YY_BREAK
case 125:
YY_RULE_SETUP
-#line 344 "../SqlLexer.lpp"
+#line 345 "../SqlLexer.lpp"
{
/* Form-feed */
yylval->string_value_->push_back('\f');
@@ -2102,7 +2103,7 @@ YY_RULE_SETUP
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 348 "../SqlLexer.lpp"
+#line 349 "../SqlLexer.lpp"
{
/* Newline */
yylval->string_value_->push_back('\n');
@@ -2110,7 +2111,7 @@ YY_RULE_SETUP
YY_BREAK
case 127:
YY_RULE_SETUP
-#line 352 "../SqlLexer.lpp"
+#line 353 "../SqlLexer.lpp"
{
/* Carriage-return */
yylval->string_value_->push_back('\r');
@@ -2118,7 +2119,7 @@ YY_RULE_SETUP
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 356 "../SqlLexer.lpp"
+#line 357 "../SqlLexer.lpp"
{
/* Horizontal Tab */
yylval->string_value_->push_back('\t');
@@ -2127,7 +2128,7 @@ YY_RULE_SETUP
case 129:
/* rule 129 can match eol */
YY_RULE_SETUP
-#line 360 "../SqlLexer.lpp"
+#line 361 "../SqlLexer.lpp"
{
/* Any other character (including actual newline or carriage return) */
yylval->string_value_->push_back(yytext[1]);
@@ -2135,7 +2136,7 @@ YY_RULE_SETUP
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 364 "../SqlLexer.lpp"
+#line 365 "../SqlLexer.lpp"
{
/* This should only be encountered right before an EOF. */
delete yylval->string_value_;
@@ -2148,7 +2149,7 @@ YY_RULE_SETUP
case 131:
YY_RULE_SETUP
-#line 374 "../SqlLexer.lpp"
+#line 375 "../SqlLexer.lpp"
{
/* Two quotes in a row become a single quote (this is specified by the SQL standard). */
yylval->string_value_->push_back('\'');
@@ -2156,7 +2157,7 @@ YY_RULE_SETUP
YY_BREAK
case 132:
YY_RULE_SETUP
-#line 378 "../SqlLexer.lpp"
+#line 379 "../SqlLexer.lpp"
{
/* End string */
BEGIN(CONDITION_SQL);
@@ -2167,7 +2168,7 @@ YY_RULE_SETUP
case 133:
YY_RULE_SETUP
-#line 386 "../SqlLexer.lpp"
+#line 387 "../SqlLexer.lpp"
{
/* Two quotes in a row become a single quote (this is specified by the SQL standard). */
yylval->string_value_->push_back('"');
@@ -2175,7 +2176,7 @@ YY_RULE_SETUP
YY_BREAK
case 134:
YY_RULE_SETUP
-#line 390 "../SqlLexer.lpp"
+#line 391 "../SqlLexer.lpp"
{
/* End string */
BEGIN(CONDITION_SQL);
@@ -2186,7 +2187,7 @@ YY_RULE_SETUP
case 135:
/* rule 135 can match eol */
YY_RULE_SETUP
-#line 397 "../SqlLexer.lpp"
+#line 398 "../SqlLexer.lpp"
{
/* Scan up to a quote. */
yylval->string_value_->append(yytext, yyleng);
@@ -2195,7 +2196,7 @@ YY_RULE_SETUP
case 136:
/* rule 136 can match eol */
YY_RULE_SETUP
-#line 402 "../SqlLexer.lpp"
+#line 403 "../SqlLexer.lpp"
{
/* Scan up to a quote or escape sequence. */
yylval->string_value_->append(yytext, yyleng);
@@ -2204,7 +2205,7 @@ YY_RULE_SETUP
case 137:
/* rule 137 can match eol */
YY_RULE_SETUP
-#line 407 "../SqlLexer.lpp"
+#line 408 "../SqlLexer.lpp"
{
/* Scan up to a quote. */
yylval->string_value_->append(yytext, yyleng);
@@ -2213,7 +2214,7 @@ YY_RULE_SETUP
case 138:
YY_RULE_SETUP
-#line 413 "../SqlLexer.lpp"
+#line 414 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(
yylloc->first_line, yylloc->first_column, std::string(yytext, yyleng));
@@ -2222,7 +2223,7 @@ YY_RULE_SETUP
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 419 "../SqlLexer.lpp"
+#line 420 "../SqlLexer.lpp"
{
yylval->numeric_literal_value_ = new quickstep::NumericParseLiteralValue(
yylloc->first_line, yylloc->first_column, yytext);
@@ -2231,25 +2232,25 @@ YY_RULE_SETUP
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 425 "../SqlLexer.lpp"
+#line 426 "../SqlLexer.lpp"
/* comment */
YY_BREAK
case 141:
/* rule 141 can match eol */
YY_RULE_SETUP
-#line 427 "../SqlLexer.lpp"
+#line 428 "../SqlLexer.lpp"
{ yycolumn = 0; }
YY_BREAK
case 142:
YY_RULE_SETUP
-#line 429 "../SqlLexer.lpp"
+#line 430 "../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 433 "../SqlLexer.lpp"
+#line 434 "../SqlLexer.lpp"
{
/* All conditions except for mutli-state string extracting conditions. */
BEGIN(INITIAL);
@@ -2258,7 +2259,7 @@ case YY_STATE_EOF(CONDITION_SQL):
YY_BREAK
case 143:
YY_RULE_SETUP
-#line 439 "../SqlLexer.lpp"
+#line 440 "../SqlLexer.lpp"
{
BEGIN(INITIAL);
quickstep_yyerror(NULL, yyscanner, NULL, "illegal character");
@@ -2267,10 +2268,10 @@ YY_RULE_SETUP
YY_BREAK
case 144:
YY_RULE_SETUP
-#line 445 "../SqlLexer.lpp"
+#line 446 "../SqlLexer.lpp"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 2274 "SqlLexer_gen.cpp"
+#line 2275 "SqlLexer_gen.cpp"
case YY_END_OF_BUFFER:
{
@@ -3431,7 +3432,7 @@ void quickstep_yyfree (void * ptr , yyscan_t yyscanner)
#define YYTABLES_NAME "yytables"
-#line 445 "../SqlLexer.lpp"
+#line 446 "../SqlLexer.lpp"
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/e87cabf4/parser/preprocessed/SqlLexer_gen.hpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlLexer_gen.hpp b/parser/preprocessed/SqlLexer_gen.hpp
index de44998..b30d697 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 445 "../SqlLexer.lpp"
+#line 446 "../SqlLexer.lpp"
#line 367 "SqlLexer_gen.hpp"