Add "COPY TO" operator for exporting data from Quickstep.
diff --git a/parser/ParseKeyValue.hpp b/parser/ParseKeyValue.hpp
index 9d6d511..6134379 100644
--- a/parser/ParseKeyValue.hpp
+++ b/parser/ParseKeyValue.hpp
@@ -37,14 +37,15 @@
*/
class ParseKeyValue : public ParseTreeNode {
public:
- enum class KeyValueType {
+ enum KeyValueType {
+ kStringBool = 0,
+ kStringInteger,
kStringString,
- kStringStringList,
- kStringInteger
+ kStringStringList
};
/**
- * @brief Single value constructor.
+ * @brief Constructor.
*
* @param line_number Line number of the first token of this node in the SQL statement.
* @param column_number Column number of the first token of this node in the SQL statement.
@@ -87,7 +88,7 @@
class ParseKeyStringValue : public ParseKeyValue {
public:
/**
- * @brief Single value constructor.
+ * @brief Constructor.
*
* @param line_number Line number of the first token of this node in the SQL statement.
* @param column_number Column number of the first token of this node in the SQL statement.
@@ -102,7 +103,7 @@
value_(value) { }
KeyValueType getKeyValueType() const override {
- return ParseKeyValue::KeyValueType::kStringString;
+ return kStringString;
}
/**
@@ -143,7 +144,7 @@
class ParseKeyStringList : public ParseKeyValue {
public:
/**
- * @brief Single value constructor.
+ * @brief Constructor.
*
* @param line_number Line number of the first token of this node in the SQL statement.
* @param column_number Column number of the first token of this node in the SQL statement.
@@ -155,10 +156,10 @@
ParseString *key,
PtrList<ParseString> *value)
: ParseKeyValue(line_number, column_number, key),
- value_(value) { }
+ value_(value) {}
KeyValueType getKeyValueType() const override {
- return ParseKeyValue::KeyValueType::kStringStringList;
+ return kStringStringList;
}
/**
@@ -197,12 +198,12 @@
};
/**
- * @brief The parsed representation of a key-value pair.
+ * @brief The parsed representation of a key-value pair. Value is of int type.
**/
class ParseKeyIntegerValue : public ParseKeyValue {
public:
/**
- * @brief Single value constructor.
+ * @brief Constructor.
*
* @param line_number Line number of the first token of this node in the SQL statement.
* @param column_number Column number of the first token of this node in the SQL statement.
@@ -214,10 +215,10 @@
ParseString *key,
NumericParseLiteralValue *value)
: ParseKeyValue(line_number, column_number, key),
- value_(value) { }
+ value_(value) {}
KeyValueType getKeyValueType() const override {
- return ParseKeyValue::KeyValueType::kStringInteger;
+ return kStringInteger;
}
/**
@@ -252,6 +253,62 @@
DISALLOW_COPY_AND_ASSIGN(ParseKeyIntegerValue);
};
+/**
+ * @brief The parsed representation of a key-value pair. Value is of bool type.
+ **/
+class ParseKeyBoolValue : public ParseKeyValue {
+ public:
+ /**
+ * @brief Constructor.
+ *
+ * @param line_number Line number of the first token of this node in the SQL statement.
+ * @param column_number Column number of the first token of this node in the SQL statement.
+ * @param key A parse string representing the key.
+ * @param value A single bool literal value.
+ **/
+ ParseKeyBoolValue(const int line_number,
+ const int column_number,
+ ParseString *key,
+ const bool value)
+ : ParseKeyValue(line_number, column_number, key),
+ value_(value) {}
+
+ KeyValueType getKeyValueType() const override {
+ return kStringBool;
+ }
+
+ /**
+ * @return The bool value.
+ */
+ bool value() const {
+ return value_;
+ }
+
+ std::string getName() const override {
+ return "KeyBoolValue";
+ }
+
+ 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("key");
+ inline_field_values->push_back(key_->value());
+
+ inline_field_names->push_back("value");
+ inline_field_values->push_back(value_ ? "true" : "false");
+ }
+
+ private:
+ const bool value_;
+
+ DISALLOW_COPY_AND_ASSIGN(ParseKeyBoolValue);
+};
+
} // namespace quickstep
#endif // QUICKSTEP_PARSER_PARSE_KEY_VALUE_HPP_
diff --git a/parser/ParseStatement.hpp b/parser/ParseStatement.hpp
index d876163..cee7221 100644
--- a/parser/ParseStatement.hpp
+++ b/parser/ParseStatement.hpp
@@ -60,16 +60,16 @@
* @brief The possible types of SQL statements.
**/
enum StatementType {
- kCreateTable,
+ kCommand = 0,
+ kCopy,
kCreateIndex,
- kDropTable,
- kSetOperation,
- kInsert,
- kCopyFrom,
- kUpdate,
+ kCreateTable,
kDelete,
+ kDropTable,
+ kInsert,
kQuit,
- kCommand
+ kSetOperation,
+ kUpdate
};
/**
@@ -215,9 +215,10 @@
DISALLOW_COPY_AND_ASSIGN(ParseStatementCreateTable);
};
- /**
- * @brief The parsed representation of a CREATE INDEX statement.
- **/
+
+/**
+ * @brief The parsed representation of a CREATE INDEX statement.
+ **/
class ParseStatementCreateIndex : public ParseStatement {
public:
/**
@@ -423,6 +424,7 @@
DISALLOW_COPY_AND_ASSIGN(ParseStatementCreateIndex);
};
+
/**
* @brief The parsed representation of a DROP TABLE statement.
**/
@@ -479,6 +481,7 @@
DISALLOW_COPY_AND_ASSIGN(ParseStatementDropTable);
};
+
/**
* @brief The parsed representation of an UNION/INTERSECT/SELECT statement.
**/
@@ -519,14 +522,14 @@
std::string getName() const override { return "SetOperationStatement"; }
/**
- * @return Gets the top-level set operation query.
+ * @return Get the top-level set operation query.
*/
const ParseSetOperation* set_operation_query() const {
return set_operation_query_.get();
}
/**
- * @brief Gets the WITH table queries.
+ * @brief Get the WITH table queries.
*
* @return The parsed WITH table list.
*/
@@ -575,6 +578,7 @@
DISALLOW_COPY_AND_ASSIGN(ParseStatementSetOperation);
};
+
/**
* @brief The parsed representation of an INSERT statement.
*
@@ -694,6 +698,7 @@
DISALLOW_COPY_AND_ASSIGN(ParseStatementInsertTuple);
};
+
/**
* @brief The parsed representation of an INSERT ... SELECT ... statement.
**/
@@ -771,122 +776,135 @@
DISALLOW_COPY_AND_ASSIGN(ParseStatementInsertSelection);
};
-/**
- * @brief Optional parameters for a COPY FROM statement.
- **/
-struct ParseCopyFromParams : public ParseTreeNode {
- /**
- * @brief Constructor, sets default values.
- **/
- ParseCopyFromParams(const int line_number, const int column_number)
- : ParseTreeNode(line_number, column_number),
- escape_strings(true) {
- }
-
- std::string getName() const override { return "CopyFromParams"; }
-
- /**
- * @brief Sets the column delimiter.
- *
- * @param delimiter_in The column delimiter string.
- */
- void set_delimiter(ParseString* delimiter_in) {
- delimiter.reset(delimiter_in);
- }
-
- /**
- * @brief The string which terminates individual attribute values in the
- * input file. Can be NULL.
- **/
- std::unique_ptr<ParseString> delimiter;
-
- /**
- * @brief If true, replace C-style escape sequences in strings from the input
- * text file.
- **/
- bool escape_strings;
-
- 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 (delimiter != nullptr) {
- inline_field_names->push_back("delimiter");
- inline_field_values->push_back(delimiter->value());
- }
-
- inline_field_names->push_back("escape_string");
- inline_field_values->push_back(escape_strings ? "true" : "false");
- }
-};
/**
- * @brief The parsed representation of a COPY FROM statement.
+ * @brief The parsed representation of a COPY FROM/COPY TO statement.
**/
-class ParseStatementCopyFrom : public ParseStatement {
+class ParseStatementCopy : public ParseStatement {
public:
/**
- * @brief Constructor.
+ * @brief Copy direction (FROM text file/TO text file).
+ */
+ enum CopyDirection {
+ kFrom = 0,
+ kTo
+ };
+
+ /**
+ * @brief Constructor for a copy statement that copies a stored relation FROM
+ * a text file (or multiple text files, in the case that the file name
+ * is a GLOB pattern) / TO a text file.
*
* @param line_number Line number of the first token of this node in the SQL statement.
* @param column_number Column number of the first token of this node in the SQL statement.
- * @param relation_name The name of the relation to insert into.
- * @param source_filename The name of the text file to bulk insert from.
- * @param params The optional parameters of the COPY FROM statement (should
- * be supplied with defaults if not otherwise set).
+ * @param direction The copy direction (FROM/TO).
+ * @param relation_name The name of the relation.
+ * @param file_name The name of the file.
+ * @param params The optional parameters of the COPY statement.
**/
- ParseStatementCopyFrom(const int line_number,
- const int column_number,
- ParseString *relation_name,
- ParseString *source_filename,
- ParseCopyFromParams *params)
+ ParseStatementCopy(const int line_number,
+ const int column_number,
+ const CopyDirection direction,
+ ParseString *relation_name,
+ ParseString *file_name,
+ PtrList<ParseKeyValue> *params)
: ParseStatement(line_number, column_number),
+ direction_(direction),
relation_name_(relation_name),
- source_filename_(source_filename),
+ file_name_(file_name),
+ params_(params) {
+ }
+
+ /**
+ * @brief Constructor for a copy statement that copies the result table of a
+ * query TO a text file.
+ *
+ * @param line_number Line number of the first token of this node in the SQL statement.
+ * @param column_number Column number of the first token of this node in the SQL statement.
+ * @param set_operation_query The set operation query.
+ * @param with_clause The WITH clause of common table query expressions.
+ * @param file_name The name of the file.
+ * @param params The optional parameters of the COPY statement.
+ **/
+ ParseStatementCopy(const int line_number,
+ const int column_number,
+ ParseSetOperation *set_operation_query,
+ PtrVector<ParseSubqueryTableReference> *with_clause,
+ ParseString *file_name,
+ PtrList<ParseKeyValue> *params)
+ : ParseStatement(line_number, column_number),
+ direction_(kTo),
+ set_operation_query_(set_operation_query),
+ with_clause_(with_clause),
+ file_name_(file_name),
params_(params) {
}
/**
* @brief Destructor.
*/
- ~ParseStatementCopyFrom() override {
+ ~ParseStatementCopy() override {
}
StatementType getStatementType() const override {
- return kCopyFrom;
+ return kCopy;
}
- std::string getName() const override { return "CopyFromStatement"; }
+ std::string getName() const override {
+ return "CopyStatement";
+ }
/**
- * @brief Get the name of the relation to insert into.
+ * @brief Get the direction (FROM text file/TO text file) of the COPY statement.
*
- * @return The name of the relation to insert into.
+ * return The direction of the COPY statement.
+ */
+ const CopyDirection getCopyDirection() const {
+ return direction_;
+ }
+
+ /**
+ * @brief Get the name of the relation.
+ *
+ * @return The name of the relation.
**/
const ParseString* relation_name() const {
return relation_name_.get();
}
/**
- * @brief Get the name of the text file to copy from.
+ * @brief Get the set operation query.
*
- * @return The name of the text file to copy from.
- **/
- const ParseString* source_filename() const {
- return source_filename_.get();
+ * @return The set operation query.
+ */
+ const ParseSetOperation* set_operation_query() const {
+ return set_operation_query_.get();
}
/**
- * @brief Get the additional COPY FROM parameters.
+ * @brief Get the WITH table queries.
*
- * @return The string which terminates individual attribute values in the
- * input file.
+ * @return The parsed WITH table list.
+ */
+ const PtrVector<ParseSubqueryTableReference>* with_clause() const {
+ return with_clause_.get();
+ }
+
+ /**
+ * @brief Get the name of the text file to import from/export to.
+ *
+ * @return The name of the text file.
**/
- const ParseCopyFromParams* params() const {
+ const ParseString* file_name() const {
+ return file_name_.get();
+ }
+
+ /**
+ * @brief Get the additional COPY parameters.
+ *
+ * @return The additional COPY parameters.
+ **/
+ const PtrList<ParseKeyValue>* params() const {
return params_.get();
}
@@ -898,24 +916,53 @@
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("relation_name");
- inline_field_values->push_back(relation_name_->value());
+ inline_field_names->push_back("direction");
+ inline_field_values->push_back(direction_ == kFrom ? "FROM" : "TO");
- inline_field_names->push_back("source_file");
- inline_field_values->push_back(source_filename_->value());
+ inline_field_names->push_back("file");
+ inline_field_values->push_back(file_name_->value());
+
+ if (relation_name_ != nullptr) {
+ inline_field_names->push_back("relation_name");
+ inline_field_values->push_back(relation_name_->value());
+ }
+
+ if (set_operation_query_ != nullptr) {
+ non_container_child_field_names->push_back("set_operation_query");
+ non_container_child_fields->push_back(set_operation_query_.get());
+ }
+
+ if (with_clause_ != nullptr && !with_clause_->empty()) {
+ container_child_field_names->push_back("with_clause");
+ container_child_fields->emplace_back();
+ for (const ParseSubqueryTableReference &common_subquery : *with_clause_) {
+ container_child_fields->back().push_back(&common_subquery);
+ }
+ }
if (params_ != nullptr) {
- non_container_child_field_names->push_back("params");
- non_container_child_fields->push_back(params_.get());
+ container_child_field_names->push_back("params");
+ container_child_fields->emplace_back();
+ for (const ParseKeyValue ¶m : *params_) {
+ container_child_fields->back().push_back(¶m);
+ }
}
}
private:
- std::unique_ptr<ParseString> relation_name_;
- std::unique_ptr<ParseString> source_filename_;
- std::unique_ptr<ParseCopyFromParams> params_;
+ const CopyDirection direction_;
- DISALLOW_COPY_AND_ASSIGN(ParseStatementCopyFrom);
+ // NOTE(jianqiao):
+ // (1) Either relation_name_ or set_operation_query_ has non-null value.
+ // (2) set_operation_query_ must be null for COPY FROM statement.
+ std::unique_ptr<ParseString> relation_name_;
+ std::unique_ptr<ParseSetOperation> set_operation_query_;
+
+ std::unique_ptr<PtrVector<ParseSubqueryTableReference>> with_clause_;
+ std::unique_ptr<ParseString> file_name_;
+ std::unique_ptr<PtrList<ParseKeyValue>> params_;
+
+ DISALLOW_COPY_AND_ASSIGN(ParseStatementCopy);
};
@@ -1028,6 +1075,7 @@
DISALLOW_COPY_AND_ASSIGN(ParseStatementUpdate);
};
+
/**
* @brief The parsed representation of a DELETE statement.
**/
@@ -1140,6 +1188,7 @@
DISALLOW_COPY_AND_ASSIGN(ParseStatementQuit);
};
+
/**
* @brief Class to hold the parsed command name and an optional argument string.
* @details Commands are non-sql statements which can be issued to quickstep.
diff --git a/parser/SqlLexer.lpp b/parser/SqlLexer.lpp
index c6402e0..d818d0b 100644
--- a/parser/SqlLexer.lpp
+++ b/parser/SqlLexer.lpp
@@ -45,13 +45,13 @@
class ParseBlockProperties;
class ParseColumnConstraint;
class ParseCommand;
-struct ParseCopyFromParams;
class ParseDataType;
class ParseExpression;
struct ParseFrameInfo;
class ParseFunctionCall;
class ParseGroupBy;
class ParseHaving;
+class ParseKeyBoolValue;
class ParseKeyIntegerValue;
class ParseKeyStringValue;
class ParseKeyStringList;
@@ -75,7 +75,7 @@
class ParseSimpleWhenClause;
class ParseStringKeyLiteralValues;
class ParseStatement;
-class ParseStatementCopyFrom;
+class ParseStatementCopy;
class ParseStatementCreateTable;
class ParseStatementDelete;
class ParseStatementDropTable;
@@ -200,7 +200,6 @@
"decimal" return TOKEN_DECIMAL;
"default" return TOKEN_DEFAULT;
"delete" return TOKEN_DELETE;
- "delimiter" return TOKEN_DELIMITER;
"desc" return TOKEN_DESC;
"descending" return TOKEN_DESC;
"distinct" return TOKEN_DISTINCT;
@@ -208,7 +207,6 @@
"drop" return TOKEN_DROP;
"else" return TOKEN_ELSE;
"end" return TOKEN_END;
- "escape_strings" return TOKEN_ESCAPE_STRINGS;
"exists" return TOKEN_EXISTS;
"extract" return TOKEN_EXTRACT;
"false" return TOKEN_FALSE;
@@ -271,11 +269,14 @@
"set" return TOKEN_SET;
"sma" return TOKEN_SMA;
"smallint" return TOKEN_SMALLINT;
+ "stderr" return TOKEN_STDERR;
+ "stdout" return TOKEN_STDOUT;
"substring" return TOKEN_SUBSTRING;
"table" return TOKEN_TABLE;
"then" return TOKEN_THEN;
"time" return TOKEN_TIME;
"timestamp" return TOKEN_TIMESTAMP;
+ "to" return TOKEN_TO;
"true" return TOKEN_TRUE;
"tuplesample" return TOKEN_TUPLESAMPLE;
"unbounded" return TOKEN_UNBOUNDED;
diff --git a/parser/SqlParser.ypp b/parser/SqlParser.ypp
index 5db2171..8fbcdd7 100644
--- a/parser/SqlParser.ypp
+++ b/parser/SqlParser.ypp
@@ -168,8 +168,7 @@
quickstep::ParseKeyStringValue *key_string_value_;
quickstep::ParseKeyStringList *key_string_list_;
quickstep::ParseKeyIntegerValue *key_integer_value_;
-
- quickstep::ParseCopyFromParams *copy_from_params_;
+ quickstep::ParseKeyBoolValue *key_bool_value_;
quickstep::ParseAssignment *assignment_;
quickstep::PtrList<quickstep::ParseAssignment> *assignment_list_;
@@ -182,7 +181,7 @@
quickstep::ParseStatementUpdate *update_statement_;
quickstep::ParseStatementInsert *insert_statement_;
quickstep::ParseStatementDelete *delete_statement_;
- quickstep::ParseStatementCopyFrom *copy_from_statement_;
+ quickstep::ParseStatementCopy *copy_statement_;
quickstep::ParseStatementCreateTable *create_table_statement_;
quickstep::ParsePartitionClause *partition_clause_;
quickstep::ParseBlockProperties *block_properties_;
@@ -275,14 +274,12 @@
%token TOKEN_DECIMAL;
%token TOKEN_DEFAULT;
%token TOKEN_DELETE;
-%token TOKEN_DELIMITER;
%token TOKEN_DESC;
%token TOKEN_DISTINCT;
%token TOKEN_DOUBLE;
%token TOKEN_DROP;
%token TOKEN_ELSE;
%token TOKEN_END;
-%token TOKEN_ESCAPE_STRINGS;
%token TOKEN_EXISTS;
%token TOKEN_EXTRACT;
%token TOKEN_FALSE;
@@ -342,11 +339,14 @@
%token TOKEN_SET;
%token TOKEN_SMA;
%token TOKEN_SMALLINT;
+%token TOKEN_STDERR;
+%token TOKEN_STDOUT;
%token TOKEN_SUBSTRING;
%token TOKEN_TABLE;
%token TOKEN_THEN;
%token TOKEN_TIME;
%token TOKEN_TIMESTAMP;
+%token TOKEN_TO;
%token TOKEN_TRUE;
%token TOKEN_TUPLESAMPLE;
%token TOKEN_UNBOUNDED;
@@ -370,6 +370,7 @@
datetime_unit
index_type
partition_type
+ copy_to_target
%type <boolean_value_>
boolean_value
@@ -471,6 +472,7 @@
%type <key_value_list_>
key_value_list
+ opt_copy_params
opt_index_properties
%type <key_string_value_>
@@ -482,6 +484,9 @@
%type <key_integer_value_>
key_integer_value
+%type <key_bool_value_>
+ key_bool_value
+
%type <assignment_>
assignment_item
@@ -511,12 +516,8 @@
%type <insert_statement_>
insert_statement
-%type <copy_from_statement_>
- copy_from_statement
-
-%type <copy_from_params_>
- copy_from_params
- opt_copy_from_params
+%type <copy_statement_>
+ copy_statement
%type <create_table_statement_>
create_table_statement
@@ -665,7 +666,7 @@
alter_table_statement {
$$ = $1;
}
- | copy_from_statement {
+ | copy_statement {
$$ = $1;
}
| create_table_statement {
@@ -1024,17 +1025,23 @@
}
| key_integer_value {
$$ = $1;
+ }
+ | key_bool_value {
+ $$ = $1;
};
key_string_value:
any_name any_name {
$$ = new quickstep::ParseKeyStringValue(@1.first_line, @1.first_column, $1, $2);
}
+ | any_name TOKEN_STRING_SINGLE_QUOTED {
+ $$ = new quickstep::ParseKeyStringValue(@1.first_line, @1.first_column, $1, $2);
+ }
| any_name TOKEN_ALL {
// This is a special case to handle the COMPRESS ALL option of the BLOCK PROPERTIES.
$$ = new quickstep::ParseKeyStringValue(@1.first_line, @1.first_column, $1,
new quickstep::ParseString(@2.first_line, @2.first_column, "ALL"));
- }
+ };
key_string_list:
any_name '(' name_commalist ')' {
@@ -1052,6 +1059,11 @@
$$ = new quickstep::ParseKeyIntegerValue(@1.first_line, @1.first_column, $1, $2);
};
+key_bool_value:
+ any_name boolean_value {
+ $$ = new quickstep::ParseKeyBoolValue(@1.first_line, @1.first_column, $1, $2);
+ };
+
index_type:
TOKEN_BITWEAVING {
// Defaults to BitWeavingV, but IndexProperties can change this to H.
@@ -1100,37 +1112,46 @@
}
;
-copy_from_statement:
- TOKEN_COPY any_name TOKEN_FROM TOKEN_STRING_SINGLE_QUOTED opt_copy_from_params {
- $$ = new quickstep::ParseStatementCopyFrom(@1.first_line, @1.first_column, $2, $4, $5);
+copy_statement:
+ TOKEN_COPY any_name TOKEN_FROM TOKEN_STRING_SINGLE_QUOTED opt_copy_params {
+ $$ = new quickstep::ParseStatementCopy(@1.first_line, @1.first_column,
+ quickstep::ParseStatementCopy::kFrom,
+ $2, $4, $5);
+ }
+ | TOKEN_COPY any_name copy_to_target opt_copy_params {
+ $$ = new quickstep::ParseStatementCopy(@1.first_line, @1.first_column,
+ quickstep::ParseStatementCopy::kTo,
+ $2, $3, $4);
+ }
+ | TOKEN_COPY set_operation_union copy_to_target opt_copy_params {
+ $$ = new quickstep::ParseStatementCopy(@1.first_line, @1.first_column,
+ $2, nullptr, $3, $4);
+ }
+ | with_clause TOKEN_COPY set_operation_union copy_to_target opt_copy_params {
+ $$ = new quickstep::ParseStatementCopy(@1.first_line, @1.first_column,
+ $3, $1, $4, $5);
};
-opt_copy_from_params:
+copy_to_target:
+ TOKEN_TO TOKEN_STRING_SINGLE_QUOTED {
+ $$ = new quickstep::ParseString($2->line_number(), $2->column_number(), "@" + $2->value());
+ delete $2;
+ }
+ | TOKEN_TO TOKEN_STDOUT {
+ $$ = new quickstep::ParseString(@2.first_line, @2.first_column, "$stdout");
+ }
+ | TOKEN_TO TOKEN_STDERR {
+ $$ = new quickstep::ParseString(@2.first_line, @2.first_column, "$stderr");
+ };
+
+opt_copy_params:
{
$$ = nullptr;
}
- | TOKEN_WITH '(' copy_from_params ')' {
+ | TOKEN_WITH '(' key_value_list ')' {
$$ = $3;
};
-copy_from_params:
- TOKEN_DELIMITER TOKEN_STRING_SINGLE_QUOTED {
- $$ = new quickstep::ParseCopyFromParams(@1.first_line, @1.first_column);
- $$->set_delimiter($2);
- }
- | TOKEN_ESCAPE_STRINGS boolean_value {
- $$ = new quickstep::ParseCopyFromParams(@1.first_line, @1.first_column);
- $$->escape_strings = $2;
- }
- | copy_from_params ',' TOKEN_DELIMITER TOKEN_STRING_SINGLE_QUOTED {
- $$ = $1;
- $$->set_delimiter($4);
- }
- | copy_from_params ',' TOKEN_ESCAPE_STRINGS boolean_value {
- $$ = $1;
- $$->escape_strings = $4;
- };
-
update_statement:
TOKEN_UPDATE any_name TOKEN_SET assignment_list opt_where_clause {
$$ = new quickstep::ParseStatementUpdate(@1.first_line, @1.first_column, $2, $4, $5);
diff --git a/parser/preprocessed/SqlLexer_gen.cpp b/parser/preprocessed/SqlLexer_gen.cpp
index bd77ee1..4800cde 100644
--- a/parser/preprocessed/SqlLexer_gen.cpp
+++ b/parser/preprocessed/SqlLexer_gen.cpp
@@ -9,88 +9,244 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 3
+#define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
- #define yy_create_buffer quickstep_yy_create_buffer
+#ifdef yy_create_buffer
+#define quickstep_yy_create_buffer_ALREADY_DEFINED
+#else
+#define yy_create_buffer quickstep_yy_create_buffer
+#endif
- #define yy_delete_buffer quickstep_yy_delete_buffer
+#ifdef yy_delete_buffer
+#define quickstep_yy_delete_buffer_ALREADY_DEFINED
+#else
+#define yy_delete_buffer quickstep_yy_delete_buffer
+#endif
- #define yy_scan_buffer quickstep_yy_scan_buffer
+#ifdef yy_scan_buffer
+#define quickstep_yy_scan_buffer_ALREADY_DEFINED
+#else
+#define yy_scan_buffer quickstep_yy_scan_buffer
+#endif
- #define yy_scan_string quickstep_yy_scan_string
+#ifdef yy_scan_string
+#define quickstep_yy_scan_string_ALREADY_DEFINED
+#else
+#define yy_scan_string quickstep_yy_scan_string
+#endif
- #define yy_scan_bytes quickstep_yy_scan_bytes
+#ifdef yy_scan_bytes
+#define quickstep_yy_scan_bytes_ALREADY_DEFINED
+#else
+#define yy_scan_bytes quickstep_yy_scan_bytes
+#endif
- #define yy_init_buffer quickstep_yy_init_buffer
+#ifdef yy_init_buffer
+#define quickstep_yy_init_buffer_ALREADY_DEFINED
+#else
+#define yy_init_buffer quickstep_yy_init_buffer
+#endif
- #define yy_flush_buffer quickstep_yy_flush_buffer
+#ifdef yy_flush_buffer
+#define quickstep_yy_flush_buffer_ALREADY_DEFINED
+#else
+#define yy_flush_buffer quickstep_yy_flush_buffer
+#endif
- #define yy_load_buffer_state quickstep_yy_load_buffer_state
+#ifdef yy_load_buffer_state
+#define quickstep_yy_load_buffer_state_ALREADY_DEFINED
+#else
+#define yy_load_buffer_state quickstep_yy_load_buffer_state
+#endif
- #define yy_switch_to_buffer quickstep_yy_switch_to_buffer
+#ifdef yy_switch_to_buffer
+#define quickstep_yy_switch_to_buffer_ALREADY_DEFINED
+#else
+#define yy_switch_to_buffer quickstep_yy_switch_to_buffer
+#endif
- #define yypush_buffer_state quickstep_yypush_buffer_state
+#ifdef yypush_buffer_state
+#define quickstep_yypush_buffer_state_ALREADY_DEFINED
+#else
+#define yypush_buffer_state quickstep_yypush_buffer_state
+#endif
- #define yypop_buffer_state quickstep_yypop_buffer_state
+#ifdef yypop_buffer_state
+#define quickstep_yypop_buffer_state_ALREADY_DEFINED
+#else
+#define yypop_buffer_state quickstep_yypop_buffer_state
+#endif
- #define yyensure_buffer_stack quickstep_yyensure_buffer_stack
+#ifdef yyensure_buffer_stack
+#define quickstep_yyensure_buffer_stack_ALREADY_DEFINED
+#else
+#define yyensure_buffer_stack quickstep_yyensure_buffer_stack
+#endif
- #define yylex quickstep_yylex
+#ifdef yylex
+#define quickstep_yylex_ALREADY_DEFINED
+#else
+#define yylex quickstep_yylex
+#endif
- #define yyrestart quickstep_yyrestart
+#ifdef yyrestart
+#define quickstep_yyrestart_ALREADY_DEFINED
+#else
+#define yyrestart quickstep_yyrestart
+#endif
- #define yylex_init quickstep_yylex_init
+#ifdef yylex_init
+#define quickstep_yylex_init_ALREADY_DEFINED
+#else
+#define yylex_init quickstep_yylex_init
+#endif
- #define yylex_init_extra quickstep_yylex_init_extra
+#ifdef yylex_init_extra
+#define quickstep_yylex_init_extra_ALREADY_DEFINED
+#else
+#define yylex_init_extra quickstep_yylex_init_extra
+#endif
- #define yylex_destroy quickstep_yylex_destroy
+#ifdef yylex_destroy
+#define quickstep_yylex_destroy_ALREADY_DEFINED
+#else
+#define yylex_destroy quickstep_yylex_destroy
+#endif
- #define yyget_debug quickstep_yyget_debug
+#ifdef yyget_debug
+#define quickstep_yyget_debug_ALREADY_DEFINED
+#else
+#define yyget_debug quickstep_yyget_debug
+#endif
- #define yyset_debug quickstep_yyset_debug
+#ifdef yyset_debug
+#define quickstep_yyset_debug_ALREADY_DEFINED
+#else
+#define yyset_debug quickstep_yyset_debug
+#endif
- #define yyget_extra quickstep_yyget_extra
+#ifdef yyget_extra
+#define quickstep_yyget_extra_ALREADY_DEFINED
+#else
+#define yyget_extra quickstep_yyget_extra
+#endif
- #define yyset_extra quickstep_yyset_extra
+#ifdef yyset_extra
+#define quickstep_yyset_extra_ALREADY_DEFINED
+#else
+#define yyset_extra quickstep_yyset_extra
+#endif
- #define yyget_in quickstep_yyget_in
+#ifdef yyget_in
+#define quickstep_yyget_in_ALREADY_DEFINED
+#else
+#define yyget_in quickstep_yyget_in
+#endif
- #define yyset_in quickstep_yyset_in
+#ifdef yyset_in
+#define quickstep_yyset_in_ALREADY_DEFINED
+#else
+#define yyset_in quickstep_yyset_in
+#endif
- #define yyget_out quickstep_yyget_out
+#ifdef yyget_out
+#define quickstep_yyget_out_ALREADY_DEFINED
+#else
+#define yyget_out quickstep_yyget_out
+#endif
- #define yyset_out quickstep_yyset_out
+#ifdef yyset_out
+#define quickstep_yyset_out_ALREADY_DEFINED
+#else
+#define yyset_out quickstep_yyset_out
+#endif
- #define yyget_leng quickstep_yyget_leng
+#ifdef yyget_leng
+#define quickstep_yyget_leng_ALREADY_DEFINED
+#else
+#define yyget_leng quickstep_yyget_leng
+#endif
- #define yyget_text quickstep_yyget_text
+#ifdef yyget_text
+#define quickstep_yyget_text_ALREADY_DEFINED
+#else
+#define yyget_text quickstep_yyget_text
+#endif
- #define yyget_lineno quickstep_yyget_lineno
+#ifdef yyget_lineno
+#define quickstep_yyget_lineno_ALREADY_DEFINED
+#else
+#define yyget_lineno quickstep_yyget_lineno
+#endif
- #define yyset_lineno quickstep_yyset_lineno
+#ifdef yyset_lineno
+#define quickstep_yyset_lineno_ALREADY_DEFINED
+#else
+#define yyset_lineno quickstep_yyset_lineno
+#endif
- #define yyget_column quickstep_yyget_column
+#ifdef yyget_column
+#define quickstep_yyget_column_ALREADY_DEFINED
+#else
+#define yyget_column quickstep_yyget_column
+#endif
- #define yyset_column quickstep_yyset_column
+#ifdef yyset_column
+#define quickstep_yyset_column_ALREADY_DEFINED
+#else
+#define yyset_column quickstep_yyset_column
+#endif
- #define yywrap quickstep_yywrap
+#ifdef yywrap
+#define quickstep_yywrap_ALREADY_DEFINED
+#else
+#define yywrap quickstep_yywrap
+#endif
- #define yyget_lval quickstep_yyget_lval
+#ifdef yyget_lval
+#define quickstep_yyget_lval_ALREADY_DEFINED
+#else
+#define yyget_lval quickstep_yyget_lval
+#endif
- #define yyset_lval quickstep_yyset_lval
+#ifdef yyset_lval
+#define quickstep_yyset_lval_ALREADY_DEFINED
+#else
+#define yyset_lval quickstep_yyset_lval
+#endif
- #define yyget_lloc quickstep_yyget_lloc
+#ifdef yyget_lloc
+#define quickstep_yyget_lloc_ALREADY_DEFINED
+#else
+#define yyget_lloc quickstep_yyget_lloc
+#endif
- #define yyset_lloc quickstep_yyset_lloc
+#ifdef yyset_lloc
+#define quickstep_yyset_lloc_ALREADY_DEFINED
+#else
+#define yyset_lloc quickstep_yyset_lloc
+#endif
- #define yyalloc quickstep_yyalloc
+#ifdef yyalloc
+#define quickstep_yyalloc_ALREADY_DEFINED
+#else
+#define yyalloc quickstep_yyalloc
+#endif
- #define yyrealloc quickstep_yyrealloc
+#ifdef yyrealloc
+#define quickstep_yyrealloc_ALREADY_DEFINED
+#else
+#define yyrealloc quickstep_yyrealloc
+#endif
- #define yyfree quickstep_yyfree
+#ifdef yyfree
+#define quickstep_yyfree_ALREADY_DEFINED
+#else
+#define yyfree quickstep_yyfree
+#endif
/* First, we deal with platform-specific or compiler-specific issues. */
@@ -162,10 +318,16 @@
#define UINT32_MAX (4294967295U)
#endif
+#ifndef SIZE_MAX
+#define SIZE_MAX (~(size_t)0)
+#endif
+
#endif /* ! C99 */
#endif /* ! FLEXINT_H */
+/* begin standard C++ headers. */
+
/* TODO: this is always defined, so inline it */
#define yyconst const
@@ -214,7 +376,7 @@
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE quickstep_yyrestart(yyin ,yyscanner )
+#define YY_NEW_FILE yyrestart( yyin , yyscanner )
#define YY_END_OF_BUFFER_CHAR 0
/* Size of default input buffer. */
@@ -250,7 +412,7 @@
/* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
* access to the local variable yy_act. Since yyless() is a macro, it would break
- * existing scanners that call yyless() from OUTSIDE quickstep_yylex.
+ * existing scanners that call yyless() from OUTSIDE yylex.
* One obvious solution it to make yy_act a global. I tried that, and saw
* a 5% performance hit in a non-yylineno scanner, because yy_act is
* normally declared as a register variable-- so it is not worth it.
@@ -342,7 +504,7 @@
* possible backing-up.
*
* When we actually see the EOF, we change the status to "new"
- * (via quickstep_yyrestart()), so that the user can continue scanning by
+ * (via yyrestart()), so that the user can continue scanning by
* just pointing yyin at a new input file.
*/
#define YY_BUFFER_EOF_PENDING 2
@@ -364,43 +526,43 @@
*/
#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top]
-void quickstep_yyrestart ( FILE *input_file , yyscan_t yyscanner );
-void quickstep_yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
-YY_BUFFER_STATE quickstep_yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
-void quickstep_yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
-void quickstep_yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
-void quickstep_yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
-void quickstep_yypop_buffer_state ( yyscan_t yyscanner );
+void yyrestart ( FILE *input_file , yyscan_t yyscanner );
+void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
+void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
+void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
+void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
+void yypop_buffer_state ( yyscan_t yyscanner );
-static void quickstep_yyensure_buffer_stack ( yyscan_t yyscanner );
-static void quickstep_yy_load_buffer_state ( yyscan_t yyscanner );
-static void quickstep_yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner );
-#define YY_FLUSH_BUFFER quickstep_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner)
+static void yyensure_buffer_stack ( yyscan_t yyscanner );
+static void yy_load_buffer_state ( yyscan_t yyscanner );
+static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner );
+#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner)
-YY_BUFFER_STATE quickstep_yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
-YY_BUFFER_STATE quickstep_yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
-YY_BUFFER_STATE quickstep_yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
-void *quickstep_yyalloc ( yy_size_t , yyscan_t yyscanner );
-void *quickstep_yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
-void quickstep_yyfree ( void * , yyscan_t yyscanner );
+void *yyalloc ( yy_size_t , yyscan_t yyscanner );
+void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
+void yyfree ( void * , yyscan_t yyscanner );
-#define yy_new_buffer quickstep_yy_create_buffer
+#define yy_new_buffer yy_create_buffer
#define yy_set_interactive(is_interactive) \
{ \
if ( ! YY_CURRENT_BUFFER ){ \
- quickstep_yyensure_buffer_stack (yyscanner); \
+ yyensure_buffer_stack (yyscanner); \
YY_CURRENT_BUFFER_LVALUE = \
- quickstep_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+ yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \
} \
YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
}
#define yy_set_bol(at_bol) \
{ \
if ( ! YY_CURRENT_BUFFER ){\
- quickstep_yyensure_buffer_stack (yyscanner); \
+ yyensure_buffer_stack (yyscanner); \
YY_CURRENT_BUFFER_LVALUE = \
- quickstep_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \
+ yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \
} \
YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
}
@@ -430,8 +592,8 @@
yyg->yy_hold_char = *yy_cp; \
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 163
-#define YY_END_OF_BUFFER 164
+#define YY_NUM_RULES 164
+#define YY_END_OF_BUFFER 165
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -439,74 +601,72 @@
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static const flex_int16_t yy_accept[599] =
+static const flex_int16_t yy_accept[589] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 164, 2, 2, 162, 162, 161, 160, 162,
- 139, 135, 138, 135, 135, 158, 131, 128, 132, 157,
- 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 157, 157, 136, 4, 5, 5, 3, 154,
- 154, 151, 155, 155, 149, 156, 156, 153, 1, 161,
- 129, 159, 158, 158, 158, 0, 133, 130, 134, 157,
- 157, 157, 157, 10, 157, 157, 157, 22, 157, 157,
- 157, 157, 157, 157, 157, 157, 157, 157, 157, 137,
+ 0, 0, 165, 2, 2, 163, 163, 162, 161, 163,
+ 140, 136, 139, 136, 136, 159, 132, 129, 133, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 137, 4, 5, 5, 3, 155,
+ 155, 152, 156, 156, 150, 157, 157, 154, 1, 162,
+ 130, 160, 159, 159, 159, 0, 134, 131, 135, 158,
+ 158, 158, 158, 10, 158, 158, 158, 22, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 138,
- 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 157, 60, 69, 157, 157, 157, 157, 157,
- 157, 157, 157, 157, 157, 157, 83, 84, 157, 157,
- 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 157, 4, 5, 3, 154, 150, 155, 148,
- 148, 140, 142, 143, 144, 145, 146, 147, 148, 156,
- 152, 159, 158, 0, 158, 6, 7, 157, 9, 11,
- 157, 157, 15, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 157, 157, 33, 157, 157, 157, 157, 157,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 58, 67, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 81, 82, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 113, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 4, 5, 3, 155, 151, 156,
+ 149, 149, 141, 143, 144, 145, 146, 147, 148, 149,
+ 157, 153, 160, 159, 0, 159, 6, 7, 158, 9,
+ 11, 158, 158, 15, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 33, 158, 158, 158, 158,
- 157, 157, 157, 44, 157, 157, 157, 157, 157, 157,
- 157, 52, 157, 157, 157, 157, 157, 157, 157, 157,
- 157, 64, 157, 71, 157, 157, 157, 157, 157, 157,
- 157, 79, 157, 82, 157, 157, 157, 157, 157, 157,
- 157, 157, 157, 157, 157, 157, 157, 100, 157, 157,
- 105, 106, 157, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 157, 157, 157, 157, 157, 157, 140, 142,
- 141, 157, 157, 157, 157, 157, 157, 157, 20, 23,
- 157, 157, 157, 28, 157, 157, 157, 31, 157, 157,
- 157, 157, 38, 157, 157, 42, 43, 157, 157, 157,
+ 158, 158, 158, 158, 43, 158, 158, 158, 158, 158,
+ 158, 50, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 62, 158, 69, 158, 158, 158, 158, 158, 158,
+ 158, 77, 158, 80, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 98, 158, 158,
+ 103, 104, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 141,
+ 143, 142, 158, 158, 158, 158, 158, 158, 158, 20,
+ 23, 158, 158, 158, 28, 158, 158, 158, 31, 158,
+ 158, 158, 37, 158, 158, 41, 42, 158, 158, 158,
- 157, 157, 157, 157, 157, 54, 55, 157, 57, 157,
- 59, 157, 157, 157, 157, 68, 70, 72, 73, 74,
- 157, 76, 157, 157, 80, 157, 157, 87, 157, 157,
- 157, 157, 157, 94, 157, 96, 157, 157, 157, 102,
- 157, 157, 157, 157, 157, 157, 110, 111, 113, 157,
- 157, 157, 157, 157, 157, 157, 157, 122, 157, 157,
- 125, 126, 140, 141, 8, 157, 157, 157, 157, 157,
- 157, 157, 25, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 157, 157, 157, 157, 157, 157, 157, 48,
- 49, 50, 157, 157, 56, 157, 61, 62, 157, 157,
+ 158, 158, 158, 158, 52, 53, 158, 55, 158, 57,
+ 158, 158, 158, 158, 66, 68, 70, 71, 72, 158,
+ 74, 158, 158, 78, 158, 158, 85, 158, 158, 158,
+ 158, 158, 92, 158, 94, 158, 158, 158, 100, 158,
+ 158, 158, 158, 158, 158, 158, 158, 110, 111, 114,
+ 158, 158, 158, 158, 158, 158, 158, 158, 123, 158,
+ 158, 126, 127, 141, 142, 8, 158, 158, 158, 158,
+ 158, 158, 158, 25, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 46, 47,
+ 48, 158, 158, 54, 158, 59, 60, 158, 158, 158,
- 157, 75, 157, 78, 81, 85, 86, 157, 157, 157,
- 157, 157, 95, 157, 157, 99, 157, 157, 157, 157,
- 157, 109, 157, 157, 157, 116, 157, 157, 119, 157,
- 157, 123, 157, 157, 157, 157, 14, 157, 157, 157,
- 157, 157, 26, 157, 29, 157, 157, 157, 157, 157,
- 36, 157, 157, 157, 41, 157, 46, 157, 157, 157,
- 58, 63, 157, 157, 157, 77, 157, 157, 157, 157,
- 157, 157, 98, 157, 103, 104, 157, 157, 157, 157,
- 157, 117, 118, 120, 157, 124, 157, 157, 13, 157,
- 157, 157, 157, 157, 157, 21, 30, 157, 34, 35,
+ 73, 158, 76, 79, 83, 84, 158, 158, 158, 158,
+ 158, 93, 158, 158, 97, 158, 158, 158, 158, 158,
+ 158, 158, 109, 158, 158, 158, 117, 158, 158, 120,
+ 158, 158, 124, 158, 158, 158, 158, 14, 158, 158,
+ 158, 158, 158, 26, 158, 29, 158, 158, 158, 158,
+ 158, 36, 158, 158, 40, 44, 158, 158, 158, 56,
+ 61, 158, 158, 158, 75, 158, 158, 158, 158, 158,
+ 158, 96, 158, 101, 102, 158, 106, 107, 158, 158,
+ 158, 158, 118, 119, 121, 158, 125, 158, 158, 13,
+ 158, 158, 158, 158, 158, 158, 21, 30, 158, 34,
- 157, 157, 157, 157, 47, 157, 53, 65, 157, 157,
- 157, 90, 157, 92, 157, 157, 157, 157, 157, 157,
- 157, 157, 121, 157, 157, 157, 157, 157, 157, 157,
- 157, 32, 157, 157, 40, 157, 157, 157, 67, 157,
- 157, 93, 157, 157, 107, 157, 157, 157, 157, 157,
- 12, 157, 157, 157, 157, 24, 157, 37, 157, 157,
- 51, 66, 88, 91, 157, 157, 108, 112, 157, 115,
- 127, 16, 157, 157, 157, 27, 39, 157, 89, 97,
- 157, 157, 157, 18, 19, 157, 157, 114, 157, 157,
- 157, 157, 157, 101, 157, 45, 17, 0
-
+ 35, 158, 158, 45, 158, 51, 63, 158, 158, 158,
+ 88, 158, 90, 158, 158, 158, 158, 158, 158, 158,
+ 158, 122, 158, 158, 158, 158, 158, 158, 158, 158,
+ 32, 158, 39, 158, 158, 65, 158, 158, 91, 158,
+ 158, 105, 158, 158, 158, 158, 158, 12, 158, 158,
+ 158, 158, 24, 158, 158, 49, 64, 86, 89, 158,
+ 158, 108, 112, 158, 116, 128, 16, 158, 158, 158,
+ 27, 38, 87, 95, 158, 158, 158, 18, 19, 158,
+ 115, 158, 158, 158, 99, 158, 17, 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -553,157 +713,155 @@
8
} ;
-static const flex_int16_t yy_base[614] =
+static const flex_int16_t yy_base[604] =
{ 0,
0, 1, 46, 0, 117, 162, 2, 3, 127, 128,
- 6, 10, 159, 1324, 1324, 0, 1324, 13, 1324, 138,
- 1324, 1324, 1324, 142, 6, 129, 4, 1324, 134, 124,
+ 6, 10, 147, 1316, 1316, 0, 1316, 13, 1316, 130,
+ 1316, 1316, 1316, 129, 6, 129, 4, 1316, 28, 124,
159, 213, 165, 167, 263, 92, 158, 163, 96, 107,
- 218, 160, 186, 223, 221, 155, 281, 264, 279, 275,
- 186, 209, 0, 191, 1324, 147, 4, 19, 0, 0,
- 0, 140, 0, 0, 343, 0, 0, 141, 0, 22,
- 1324, 0, 307, 326, 338, 18, 1324, 1324, 1324, 0,
- 220, 315, 234, 239, 234, 288, 261, 0, 280, 335,
- 330, 342, 346, 332, 333, 382, 332, 331, 339, 1324,
+ 214, 160, 186, 219, 221, 155, 281, 274, 325, 257,
+ 186, 209, 0, 219, 1316, 27, 4, 19, 0, 0,
+ 0, 17, 0, 0, 389, 0, 0, 8, 0, 22,
+ 1316, 0, 293, 325, 343, 18, 1316, 1316, 1316, 0,
+ 223, 265, 234, 242, 260, 292, 288, 0, 299, 330,
+ 337, 324, 334, 324, 325, 380, 325, 331, 346, 1316,
- 336, 358, 363, 380, 356, 352, 378, 386, 387, 391,
- 390, 387, 386, 406, 0, 399, 386, 393, 407, 408,
- 401, 402, 410, 408, 431, 440, 0, 443, 431, 447,
- 438, 440, 454, 451, 447, 461, 457, 442, 466, 465,
- 468, 469, 468, 461, 456, 463, 502, 479, 475, 498,
- 496, 500, 504, 144, 29, 0, 0, 1324, 0, 1324,
- 1324, 22, 24, 1324, 1324, 1324, 1324, 1324, 0, 0,
- 1324, 0, 522, 26, 28, 0, 0, 504, 0, 514,
- 498, 513, 500, 521, 520, 508, 525, 508, 512, 507,
- 534, 517, 523, 537, 0, 535, 545, 554, 544, 542,
+ 348, 364, 378, 376, 371, 378, 382, 386, 390, 389,
+ 386, 385, 435, 0, 402, 389, 400, 435, 433, 431,
+ 433, 436, 431, 440, 447, 0, 452, 437, 453, 441,
+ 442, 456, 453, 449, 465, 457, 444, 494, 468, 495,
+ 500, 501, 499, 492, 0, 486, 492, 507, 506, 502,
+ 500, 508, 501, 516, 0, 29, 0, 0, 1316, 0,
+ 1316, 1316, 22, 24, 1316, 1316, 1316, 1316, 1316, 0,
+ 0, 1316, 0, 524, 26, 28, 0, 0, 517, 0,
+ 518, 501, 516, 504, 545, 525, 531, 552, 536, 542,
+ 537, 562, 544, 547, 561, 0, 558, 567, 564, 567,
- 565, 552, 564, 0, 571, 555, 559, 559, 560, 579,
- 569, 577, 570, 572, 564, 578, 578, 571, 585, 588,
- 589, 590, 585, 0, 580, 582, 599, 608, 613, 600,
- 605, 0, 614, 0, 622, 625, 614, 615, 633, 634,
- 625, 619, 634, 630, 638, 639, 637, 628, 633, 646,
- 0, 640, 634, 646, 646, 657, 658, 663, 663, 668,
- 678, 670, 665, 685, 676, 689, 687, 678, 30, 125,
- 0, 679, 684, 694, 686, 696, 691, 690, 0, 704,
- 695, 696, 690, 0, 691, 698, 713, 700, 708, 712,
- 716, 724, 736, 733, 731, 0, 0, 728, 726, 747,
+ 551, 570, 557, 569, 0, 556, 558, 560, 561, 580,
+ 570, 578, 572, 575, 567, 598, 598, 595, 610, 613,
+ 614, 615, 607, 0, 602, 603, 619, 616, 619, 606,
+ 608, 0, 617, 0, 626, 627, 615, 614, 634, 635,
+ 626, 620, 636, 633, 641, 659, 657, 652, 658, 671,
+ 0, 665, 673, 660, 668, 668, 678, 679, 673, 671,
+ 672, 689, 677, 671, 692, 683, 692, 690, 681, 30,
+ 125, 0, 685, 690, 705, 708, 718, 718, 718, 0,
+ 733, 724, 723, 717, 0, 718, 722, 736, 722, 730,
+ 723, 725, 741, 738, 736, 0, 0, 729, 749, 748,
- 746, 732, 733, 739, 746, 0, 0, 740, 0, 743,
- 0, 734, 741, 742, 756, 0, 0, 0, 0, 0,
- 741, 0, 744, 759, 749, 751, 758, 0, 769, 774,
- 786, 793, 777, 0, 794, 0, 782, 777, 782, 0,
- 800, 792, 806, 798, 791, 807, 0, 794, 0, 809,
- 794, 802, 796, 798, 812, 816, 814, 0, 820, 811,
- 0, 814, 131, 1324, 0, 828, 829, 816, 836, 833,
- 847, 854, 0, 844, 841, 855, 857, 850, 858, 867,
- 857, 865, 862, 858, 859, 869, 870, 857, 874, 0,
- 0, 0, 856, 873, 0, 876, 0, 0, 864, 880,
+ 734, 735, 741, 748, 0, 0, 743, 0, 747, 0,
+ 738, 750, 762, 774, 0, 0, 0, 0, 0, 767,
+ 0, 769, 785, 775, 777, 778, 0, 789, 794, 795,
+ 800, 784, 0, 798, 0, 786, 781, 786, 0, 803,
+ 794, 808, 800, 795, 793, 795, 812, 0, 800, 0,
+ 815, 805, 824, 818, 825, 840, 845, 843, 0, 847,
+ 838, 0, 841, 131, 1316, 0, 852, 852, 838, 858,
+ 844, 855, 859, 0, 850, 847, 861, 864, 856, 862,
+ 871, 861, 870, 863, 864, 879, 877, 894, 0, 0,
+ 0, 880, 898, 0, 901, 0, 0, 889, 905, 892,
- 873, 0, 885, 0, 0, 0, 0, 874, 893, 906,
- 893, 906, 0, 911, 901, 0, 913, 916, 902, 916,
- 908, 0, 907, 909, 915, 0, 925, 926, 0, 913,
- 932, 0, 911, 920, 928, 924, 0, 919, 924, 942,
- 939, 930, 0, 951, 0, 948, 945, 955, 957, 953,
- 0, 954, 971, 973, 0, 93, 0, 958, 971, 969,
- 0, 0, 966, 980, 985, 0, 978, 968, 980, 965,
- 971, 978, 0, 981, 0, 0, 981, 987, 998, 999,
- 997, 0, 0, 0, 988, 0, 994, 996, 0, 1002,
- 1008, 1013, 1015, 1026, 1023, 0, 0, 1028, 0, 0,
+ 0, 907, 0, 0, 0, 0, 895, 902, 913, 900,
+ 910, 0, 915, 905, 0, 917, 919, 904, 918, 910,
+ 909, 912, 0, 911, 914, 921, 0, 931, 937, 0,
+ 935, 954, 0, 938, 948, 957, 953, 0, 946, 951,
+ 969, 963, 953, 0, 973, 0, 970, 956, 964, 966,
+ 959, 0, 976, 978, 0, 0, 962, 976, 972, 0,
+ 0, 969, 983, 988, 0, 982, 973, 985, 975, 992,
+ 999, 0, 1007, 0, 0, 1007, 0, 0, 1015, 1024,
+ 1025, 1023, 0, 0, 0, 1010, 0, 1016, 1017, 0,
+ 1023, 1018, 1021, 1023, 1031, 1028, 0, 0, 1033, 0,
- 1029, 1027, 1018, 1022, 0, 1028, 0, 0, 1040, 1032,
- 1030, 0, 1032, 0, 1022, 1045, 1040, 1030, 1037, 1040,
- 1041, 1052, 0, 1038, 1052, 1050, 1050, 1052, 1049, 1063,
- 1070, 0, 1067, 1075, 0, 1070, 1084, 1072, 0, 1080,
- 1089, 0, 1094, 1087, 0, 1094, 1086, 1087, 1100, 1097,
- 0, 1099, 1102, 1096, 1104, 0, 1091, 0, 1105, 1097,
- 0, 0, 1097, 0, 1098, 1113, 0, 0, 1112, 0,
- 0, 0, 1108, 1122, 1121, 0, 0, 1133, 0, 0,
- 1123, 1142, 1128, 0, 0, 1135, 1145, 0, 1143, 1147,
- 1139, 1153, 1140, 0, 1141, 0, 0, 1324, 1206, 1216,
+ 0, 1030, 1020, 0, 1029, 0, 0, 1041, 1033, 1031,
+ 0, 1033, 0, 1024, 1048, 1043, 1038, 1056, 1058, 1064,
+ 1074, 0, 1062, 1076, 1070, 1069, 1070, 1068, 1071, 1076,
+ 0, 1077, 0, 1085, 1073, 0, 1080, 1088, 0, 1091,
+ 1084, 0, 1091, 1085, 1086, 1099, 1096, 0, 1098, 1102,
+ 1097, 1105, 0, 1096, 1121, 0, 0, 1110, 0, 1116,
+ 1128, 0, 0, 1128, 0, 0, 0, 1123, 1137, 1125,
+ 0, 0, 0, 0, 1124, 1141, 1127, 0, 0, 1143,
+ 0, 1140, 1132, 1146, 0, 1133, 0, 1316, 1198, 1208,
+ 1218, 1228, 1238, 1242, 1245, 1251, 1261, 1271, 1281, 1291,
- 1226, 1236, 1246, 1250, 1253, 1259, 1269, 1279, 1289, 1299,
- 1309, 1314, 1316
+ 1301, 1306, 1308
} ;
-static const flex_int16_t yy_def[614] =
+static const flex_int16_t yy_def[604] =
{ 0,
- 599, 599, 598, 3, 600, 600, 601, 601, 602, 602,
- 603, 603, 598, 598, 598, 604, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 598, 598, 598, 598, 606, 607,
- 607, 598, 608, 608, 609, 610, 610, 598, 604, 598,
- 598, 611, 598, 598, 598, 598, 598, 598, 598, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 598,
+ 589, 589, 588, 3, 590, 590, 591, 591, 592, 592,
+ 593, 593, 588, 588, 588, 594, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 588, 588, 588, 588, 596, 597,
+ 597, 588, 598, 598, 599, 600, 600, 588, 594, 588,
+ 588, 601, 588, 588, 588, 588, 588, 588, 588, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 588,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 598, 598, 606, 607, 598, 608, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 612, 610,
- 598, 611, 598, 598, 598, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 588, 588, 596, 597, 588, 598,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 602,
+ 600, 588, 601, 588, 588, 588, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 598, 598,
- 613, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 588,
+ 588, 603, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 598, 598, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 588, 588, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 605, 605, 605,
- 605, 605, 605, 605, 605, 605, 605, 0, 598, 598,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 595, 595, 595,
+ 595, 595, 595, 595, 595, 595, 595, 0, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598
+ 588, 588, 588
} ;
-static const flex_int16_t yy_nxt[1396] =
+static const flex_int16_t yy_nxt[1388] =
{ 0,
- 598, 598, 15, 15, 61, 61, 155, 155, 67, 62,
- 62, 68, 67, 598, 70, 68, 70, 73, 73, 77,
- 78, 155, 155, 70, 598, 70, 174, 174, 598, 175,
- 175, 155, 155, 269, 270, 270, 270, 175, 175, 175,
- 175, 363, 270, 598, 16, 16, 17, 18, 19, 18,
+ 588, 155, 15, 15, 61, 61, 156, 156, 67, 62,
+ 62, 68, 67, 172, 70, 68, 70, 73, 73, 77,
+ 78, 156, 156, 70, 159, 70, 175, 175, 155, 176,
+ 176, 156, 156, 270, 271, 271, 271, 176, 176, 176,
+ 176, 364, 271, 79, 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,
@@ -712,156 +870,154 @@
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, 64,
- 64, 17, 17, 17, 62, 62, 270, 270, 504, 74,
- 75, 75, 270, 270, 81, 154, 171, 158, 154, 79,
- 76, 72, 82, 71, 83, 111, 116, 117, 598, 84,
+ 58, 17, 17, 17, 17, 17, 110, 115, 116, 64,
+ 64, 17, 17, 17, 62, 62, 271, 271, 72, 74,
+ 75, 75, 271, 271, 81, 71, 588, 588, 588, 588,
+ 76, 588, 82, 588, 83, 110, 115, 116, 588, 84,
17, 17, 17, 56, 57, 58, 17, 17, 17, 17,
- 17, 65, 65, 81, 100, 112, 17, 17, 17, 76,
- 85, 82, 95, 83, 86, 122, 96, 87, 84, 113,
- 97, 123, 134, 114, 598, 101, 98, 102, 115, 99,
+ 17, 65, 65, 81, 100, 111, 17, 17, 17, 76,
+ 85, 82, 95, 83, 86, 121, 96, 87, 84, 112,
+ 97, 122, 133, 113, 588, 101, 98, 102, 114, 99,
- 88, 598, 103, 150, 112, 17, 17, 104, 598, 85,
- 598, 95, 153, 86, 122, 96, 87, 124, 113, 97,
- 123, 134, 114, 125, 101, 98, 102, 115, 99, 88,
- 89, 103, 150, 151, 152, 118, 104, 90, 131, 119,
- 176, 153, 132, 120, 91, 126, 124, 92, 93, 121,
- 94, 598, 125, 127, 179, 133, 598, 128, 180, 89,
- 129, 130, 151, 152, 118, 598, 90, 131, 119, 176,
- 181, 132, 120, 91, 126, 598, 92, 93, 121, 94,
- 105, 598, 127, 179, 133, 139, 128, 180, 106, 129,
- 130, 107, 184, 140, 108, 598, 142, 109, 135, 181,
+ 88, 588, 588, 151, 111, 17, 17, 103, 588, 85,
+ 588, 95, 588, 86, 121, 96, 87, 123, 112, 97,
+ 122, 133, 113, 124, 101, 98, 102, 114, 99, 88,
+ 89, 117, 151, 152, 153, 118, 103, 90, 130, 119,
+ 154, 125, 131, 177, 91, 120, 123, 92, 93, 126,
+ 94, 588, 124, 127, 180, 132, 128, 129, 588, 89,
+ 117, 181, 152, 153, 118, 588, 90, 130, 119, 154,
+ 125, 131, 177, 91, 120, 588, 92, 93, 126, 94,
+ 104, 588, 127, 180, 132, 128, 129, 148, 105, 149,
+ 181, 106, 150, 178, 107, 138, 182, 108, 134, 588,
- 110, 141, 136, 143, 144, 147, 137, 148, 598, 105,
- 149, 182, 138, 145, 139, 185, 146, 106, 73, 73,
- 107, 184, 140, 108, 183, 142, 109, 135, 76, 110,
- 141, 136, 143, 144, 147, 137, 148, 173, 173, 149,
- 182, 138, 145, 177, 185, 146, 161, 76, 74, 75,
- 75, 178, 186, 183, 162, 163, 187, 76, 188, 76,
- 189, 164, 190, 191, 192, 165, 193, 200, 201, 194,
- 202, 203, 177, 166, 195, 598, 76, 167, 204, 168,
- 178, 186, 205, 169, 208, 187, 209, 188, 76, 189,
- 164, 190, 191, 192, 165, 193, 200, 201, 194, 202,
+ 109, 179, 135, 139, 73, 73, 136, 588, 588, 104,
+ 140, 141, 137, 588, 76, 183, 148, 105, 149, 185,
+ 106, 150, 178, 107, 138, 182, 108, 134, 184, 109,
+ 179, 135, 139, 588, 186, 136, 174, 174, 588, 140,
+ 141, 137, 142, 76, 183, 192, 76, 187, 185, 143,
+ 144, 188, 193, 74, 75, 75, 145, 184, 194, 146,
+ 201, 195, 147, 186, 76, 189, 196, 190, 202, 191,
+ 588, 142, 588, 588, 192, 76, 187, 203, 143, 144,
+ 188, 193, 588, 204, 205, 145, 588, 194, 146, 201,
+ 195, 147, 162, 76, 189, 196, 190, 202, 191, 197,
- 203, 196, 166, 195, 197, 206, 167, 204, 168, 210,
- 198, 205, 169, 208, 211, 209, 207, 199, 213, 214,
- 212, 215, 216, 218, 223, 217, 219, 224, 225, 226,
- 196, 229, 230, 197, 206, 227, 220, 228, 210, 198,
- 231, 221, 222, 211, 232, 207, 199, 213, 214, 212,
- 215, 216, 218, 223, 217, 219, 224, 225, 226, 233,
- 229, 230, 234, 235, 227, 220, 228, 236, 237, 231,
- 221, 222, 238, 232, 239, 240, 242, 243, 244, 241,
- 247, 248, 252, 245, 246, 249, 253, 254, 233, 255,
- 256, 234, 235, 257, 250, 258, 236, 237, 598, 261,
+ 163, 164, 198, 206, 208, 209, 203, 165, 199, 210,
+ 211, 166, 204, 205, 207, 200, 212, 213, 214, 167,
+ 215, 216, 218, 168, 217, 169, 588, 223, 197, 170,
+ 224, 198, 206, 208, 209, 225, 165, 199, 210, 211,
+ 166, 588, 588, 207, 200, 212, 213, 214, 167, 215,
+ 216, 218, 168, 217, 169, 219, 223, 226, 170, 224,
+ 227, 229, 228, 230, 225, 220, 231, 232, 233, 234,
+ 221, 222, 235, 236, 237, 238, 239, 240, 242, 243,
+ 247, 241, 244, 248, 219, 252, 226, 245, 246, 227,
+ 229, 228, 230, 588, 220, 231, 232, 233, 234, 221,
- 262, 238, 251, 239, 240, 242, 243, 244, 241, 247,
- 248, 252, 245, 246, 249, 253, 254, 265, 255, 256,
- 259, 268, 257, 250, 258, 272, 263, 260, 261, 262,
- 266, 251, 264, 173, 173, 273, 267, 274, 275, 276,
- 277, 279, 280, 76, 281, 282, 265, 283, 284, 259,
- 268, 285, 278, 286, 272, 263, 260, 287, 288, 266,
- 289, 264, 290, 293, 273, 267, 274, 275, 276, 277,
- 279, 280, 76, 281, 282, 291, 283, 284, 294, 292,
- 285, 278, 286, 295, 296, 297, 287, 288, 298, 289,
- 299, 290, 293, 300, 301, 302, 303, 304, 305, 306,
+ 222, 235, 236, 237, 238, 239, 240, 242, 243, 247,
+ 241, 244, 248, 249, 252, 253, 245, 246, 254, 255,
+ 256, 257, 250, 258, 259, 260, 262, 263, 264, 266,
+ 251, 267, 261, 269, 265, 174, 174, 268, 273, 274,
+ 275, 276, 249, 277, 253, 76, 280, 254, 255, 256,
+ 257, 250, 258, 259, 260, 262, 263, 264, 266, 251,
+ 267, 261, 269, 265, 278, 281, 268, 273, 274, 275,
+ 276, 282, 277, 283, 76, 280, 279, 284, 285, 286,
+ 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
+ 297, 298, 299, 278, 281, 300, 301, 302, 303, 304,
- 307, 308, 309, 310, 291, 311, 312, 294, 292, 313,
- 314, 315, 295, 296, 297, 317, 318, 298, 319, 299,
- 320, 316, 300, 301, 302, 303, 304, 305, 306, 307,
- 308, 309, 310, 321, 311, 312, 322, 323, 313, 314,
- 315, 324, 325, 326, 317, 318, 327, 319, 328, 320,
- 316, 329, 330, 331, 332, 334, 333, 335, 336, 337,
- 338, 339, 321, 340, 342, 322, 323, 343, 344, 345,
- 324, 325, 326, 341, 346, 327, 347, 328, 348, 349,
- 329, 330, 331, 332, 334, 333, 335, 336, 337, 338,
- 339, 350, 340, 342, 351, 354, 343, 344, 345, 352,
+ 282, 305, 283, 306, 307, 279, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 308, 309, 300, 301, 302, 303, 304, 310,
+ 305, 311, 306, 307, 312, 313, 314, 316, 317, 318,
+ 319, 320, 321, 322, 323, 324, 315, 325, 326, 327,
+ 328, 308, 309, 329, 330, 331, 333, 332, 310, 334,
+ 311, 335, 336, 312, 313, 314, 316, 317, 318, 319,
+ 320, 321, 322, 323, 324, 315, 325, 326, 327, 328,
+ 337, 338, 329, 330, 331, 333, 332, 339, 334, 341,
+ 335, 336, 342, 343, 344, 346, 347, 340, 348, 349,
- 355, 353, 356, 346, 357, 347, 358, 348, 349, 360,
- 359, 361, 362, 365, 366, 367, 368, 369, 370, 371,
- 350, 372, 373, 351, 354, 374, 375, 376, 352, 355,
- 353, 356, 377, 357, 378, 358, 379, 380, 360, 359,
- 361, 362, 365, 366, 367, 368, 369, 370, 371, 381,
- 372, 373, 382, 383, 374, 375, 376, 384, 385, 386,
- 387, 377, 388, 378, 389, 379, 380, 390, 391, 392,
- 393, 394, 395, 396, 397, 398, 399, 402, 381, 400,
- 403, 382, 383, 404, 405, 406, 384, 385, 386, 387,
- 401, 388, 407, 389, 408, 409, 390, 391, 392, 393,
+ 350, 351, 352, 353, 345, 354, 355, 356, 357, 337,
+ 338, 358, 361, 359, 362, 363, 339, 360, 341, 366,
+ 367, 342, 343, 344, 346, 347, 368, 348, 349, 350,
+ 351, 352, 353, 345, 354, 355, 356, 357, 369, 370,
+ 358, 361, 359, 362, 363, 371, 360, 372, 366, 367,
+ 373, 374, 375, 376, 377, 368, 378, 379, 380, 381,
+ 382, 383, 384, 385, 386, 387, 388, 369, 370, 389,
+ 390, 391, 392, 393, 371, 394, 372, 395, 396, 373,
+ 374, 375, 376, 377, 397, 378, 379, 380, 381, 382,
+ 383, 384, 385, 386, 387, 388, 398, 399, 389, 390,
- 394, 395, 396, 397, 398, 399, 402, 410, 400, 403,
- 411, 412, 404, 405, 406, 413, 414, 415, 416, 401,
- 417, 407, 418, 408, 409, 419, 420, 421, 422, 423,
- 424, 425, 426, 427, 428, 429, 410, 430, 431, 411,
- 412, 432, 433, 434, 413, 414, 415, 416, 435, 417,
- 436, 418, 437, 438, 419, 420, 421, 422, 423, 424,
- 425, 426, 427, 428, 429, 439, 430, 431, 440, 441,
- 432, 433, 434, 442, 443, 444, 445, 435, 446, 436,
- 447, 437, 438, 448, 449, 450, 451, 452, 453, 454,
- 455, 456, 457, 458, 439, 459, 460, 440, 441, 461,
+ 391, 392, 393, 401, 394, 402, 395, 396, 400, 403,
+ 404, 405, 406, 397, 407, 408, 409, 410, 411, 412,
+ 413, 414, 415, 416, 417, 398, 399, 418, 419, 420,
+ 421, 422, 401, 423, 402, 424, 425, 400, 403, 404,
+ 405, 406, 426, 407, 408, 409, 410, 411, 412, 413,
+ 414, 415, 416, 417, 427, 428, 418, 419, 420, 421,
+ 422, 429, 423, 430, 424, 425, 431, 432, 433, 434,
+ 435, 426, 436, 437, 438, 439, 440, 442, 443, 441,
+ 444, 445, 446, 427, 428, 447, 448, 449, 450, 451,
+ 429, 452, 430, 453, 454, 431, 432, 433, 434, 435,
- 462, 463, 442, 443, 444, 445, 466, 446, 464, 447,
- 467, 465, 448, 449, 450, 451, 452, 453, 454, 455,
- 456, 457, 458, 468, 459, 460, 469, 470, 461, 462,
- 463, 471, 472, 473, 474, 466, 475, 464, 476, 467,
- 465, 477, 478, 479, 480, 481, 482, 483, 484, 485,
- 486, 487, 468, 488, 489, 469, 470, 490, 491, 492,
- 471, 472, 473, 474, 493, 475, 494, 476, 495, 496,
- 477, 478, 479, 480, 481, 482, 483, 484, 485, 486,
- 487, 497, 488, 489, 498, 499, 490, 491, 492, 500,
- 501, 502, 503, 493, 505, 494, 506, 495, 496, 507,
+ 455, 436, 437, 438, 439, 440, 442, 443, 441, 444,
+ 445, 446, 456, 457, 447, 448, 449, 450, 451, 458,
+ 452, 459, 453, 454, 460, 461, 462, 463, 465, 455,
+ 464, 466, 467, 468, 469, 470, 471, 472, 473, 474,
+ 475, 456, 457, 476, 477, 478, 479, 480, 458, 481,
+ 459, 482, 483, 460, 461, 462, 463, 465, 484, 464,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475,
+ 485, 486, 476, 477, 478, 479, 480, 487, 481, 488,
+ 482, 483, 489, 490, 491, 492, 493, 484, 494, 495,
+ 496, 497, 498, 499, 500, 501, 502, 503, 504, 485,
- 508, 509, 510, 511, 512, 513, 514, 515, 516, 517,
- 497, 518, 519, 498, 499, 520, 521, 522, 500, 501,
- 502, 503, 523, 505, 524, 506, 525, 526, 507, 508,
- 509, 510, 511, 512, 513, 514, 515, 516, 517, 527,
- 518, 519, 528, 529, 520, 521, 522, 530, 531, 532,
- 533, 523, 534, 524, 535, 525, 526, 536, 537, 538,
- 539, 540, 541, 542, 543, 544, 545, 546, 527, 547,
- 548, 528, 529, 549, 550, 551, 530, 531, 532, 533,
- 552, 534, 553, 535, 554, 555, 536, 537, 538, 539,
- 540, 541, 542, 543, 544, 545, 546, 556, 547, 548,
+ 486, 505, 506, 507, 508, 509, 487, 510, 488, 511,
+ 512, 489, 490, 491, 492, 493, 513, 494, 495, 496,
+ 497, 498, 499, 500, 501, 502, 503, 504, 514, 515,
+ 505, 506, 507, 508, 509, 516, 510, 517, 511, 512,
+ 518, 519, 520, 521, 522, 513, 523, 524, 525, 526,
+ 527, 528, 529, 530, 531, 532, 533, 514, 515, 534,
+ 535, 536, 537, 538, 516, 539, 517, 540, 541, 518,
+ 519, 520, 521, 522, 542, 523, 524, 525, 526, 527,
+ 528, 529, 530, 531, 532, 533, 543, 544, 534, 535,
+ 536, 537, 538, 545, 539, 546, 540, 541, 547, 548,
- 557, 558, 549, 550, 551, 559, 560, 561, 562, 552,
- 563, 553, 564, 554, 555, 565, 566, 567, 568, 569,
- 570, 571, 572, 573, 574, 575, 556, 576, 577, 557,
- 558, 578, 579, 580, 559, 560, 561, 562, 581, 563,
- 582, 564, 583, 584, 565, 566, 567, 568, 569, 570,
- 571, 572, 573, 574, 575, 585, 576, 577, 586, 587,
- 578, 579, 580, 588, 589, 590, 591, 581, 592, 582,
- 593, 583, 584, 594, 595, 596, 597, 598, 598, 598,
- 598, 598, 598, 598, 585, 598, 598, 586, 587, 598,
- 598, 598, 588, 589, 590, 591, 598, 592, 598, 593,
+ 549, 550, 551, 542, 552, 553, 554, 555, 556, 557,
+ 558, 559, 560, 561, 562, 543, 544, 563, 564, 565,
+ 566, 567, 545, 568, 546, 569, 570, 547, 548, 549,
+ 550, 551, 571, 552, 553, 554, 555, 556, 557, 558,
+ 559, 560, 561, 562, 572, 573, 563, 564, 565, 566,
+ 567, 574, 568, 575, 569, 570, 576, 577, 578, 579,
+ 580, 571, 581, 582, 583, 584, 585, 586, 587, 588,
+ 588, 588, 588, 572, 573, 588, 588, 588, 588, 588,
+ 574, 588, 575, 588, 588, 576, 577, 578, 579, 580,
+ 588, 581, 582, 583, 584, 585, 586, 587, 14, 14,
- 598, 598, 594, 595, 596, 597, 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, 598, 80, 156, 156, 156, 156, 598, 156, 157,
- 157, 157, 598, 157, 157, 157, 157, 157, 157, 159,
- 159, 159, 598, 159, 159, 159, 159, 598, 159, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 170,
+ 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, 588, 80, 157, 157, 157, 157, 588,
+ 157, 158, 158, 158, 588, 158, 158, 158, 158, 158,
+ 158, 160, 160, 160, 588, 160, 160, 160, 160, 588,
+ 160, 161, 161, 161, 161, 161, 161, 161, 161, 161,
+ 161, 171, 171, 588, 171, 171, 171, 171, 171, 171,
- 170, 598, 170, 170, 170, 170, 170, 170, 170, 172,
- 598, 172, 172, 172, 172, 172, 172, 172, 172, 271,
- 271, 364, 364, 13, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598
-
+ 171, 173, 588, 173, 173, 173, 173, 173, 173, 173,
+ 173, 272, 272, 365, 365, 13, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588
} ;
-static const flex_int16_t yy_chk[1396] =
+static const flex_int16_t yy_chk[1388] =
{ 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, 155, 155, 162, 162, 163, 163, 174, 174, 175,
- 175, 269, 269, 0, 1, 2, 3, 3, 3, 3,
+ 0, 155, 1, 2, 7, 8, 57, 57, 11, 7,
+ 8, 11, 12, 68, 18, 12, 18, 25, 25, 27,
+ 27, 58, 58, 70, 62, 70, 76, 76, 56, 76,
+ 76, 156, 156, 163, 163, 164, 164, 175, 175, 176,
+ 176, 270, 270, 29, 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,
@@ -871,150 +1027,148 @@
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, 9,
- 10, 5, 5, 5, 9, 10, 270, 270, 456, 26,
- 26, 26, 363, 363, 30, 154, 68, 62, 56, 29,
- 26, 24, 30, 20, 30, 36, 39, 40, 13, 30,
+ 10, 5, 5, 5, 9, 10, 271, 271, 24, 26,
+ 26, 26, 364, 364, 30, 20, 13, 0, 0, 0,
+ 26, 0, 30, 0, 30, 36, 39, 40, 0, 30,
5, 5, 6, 6, 6, 6, 6, 6, 6, 6,
6, 9, 10, 30, 34, 37, 6, 6, 6, 26,
31, 30, 33, 30, 31, 42, 33, 31, 30, 37,
33, 42, 46, 38, 0, 34, 33, 34, 38, 33,
- 31, 0, 34, 51, 37, 6, 6, 34, 0, 31,
- 0, 33, 54, 31, 42, 33, 31, 43, 37, 33,
+ 31, 0, 0, 51, 37, 6, 6, 34, 0, 31,
+ 0, 33, 0, 31, 42, 33, 31, 43, 37, 33,
42, 46, 38, 43, 34, 33, 34, 38, 33, 31,
- 32, 34, 51, 52, 52, 41, 34, 32, 45, 41,
- 81, 54, 45, 41, 32, 44, 43, 32, 32, 41,
- 32, 0, 43, 44, 83, 45, 0, 44, 84, 32,
- 44, 44, 52, 52, 41, 0, 32, 45, 41, 81,
- 85, 45, 41, 32, 44, 0, 32, 32, 41, 32,
- 35, 0, 44, 83, 45, 48, 44, 84, 35, 44,
- 44, 35, 87, 48, 35, 0, 49, 35, 47, 85,
+ 32, 41, 51, 52, 52, 41, 34, 32, 45, 41,
+ 54, 44, 45, 81, 32, 41, 43, 32, 32, 44,
+ 32, 0, 43, 44, 83, 45, 44, 44, 0, 32,
+ 41, 84, 52, 52, 41, 0, 32, 45, 41, 54,
+ 44, 45, 81, 32, 41, 0, 32, 32, 44, 32,
+ 35, 0, 44, 83, 45, 44, 44, 50, 35, 50,
+ 84, 35, 50, 82, 35, 48, 85, 35, 47, 0,
- 35, 48, 47, 49, 49, 50, 47, 50, 0, 35,
- 50, 86, 47, 49, 48, 89, 49, 35, 73, 73,
- 35, 87, 48, 35, 86, 49, 35, 47, 73, 35,
- 48, 47, 49, 49, 50, 47, 50, 74, 74, 50,
- 86, 47, 49, 82, 89, 49, 65, 74, 75, 75,
- 75, 82, 90, 86, 65, 65, 90, 73, 91, 75,
- 91, 65, 91, 92, 93, 65, 94, 97, 98, 95,
- 99, 101, 82, 65, 95, 0, 74, 65, 102, 65,
- 82, 90, 103, 65, 105, 90, 106, 91, 75, 91,
- 65, 91, 92, 93, 65, 94, 97, 98, 95, 99,
+ 35, 82, 47, 48, 73, 73, 47, 0, 0, 35,
+ 48, 48, 47, 0, 73, 86, 50, 35, 50, 87,
+ 35, 50, 82, 35, 48, 85, 35, 47, 86, 35,
+ 82, 47, 48, 0, 89, 47, 74, 74, 0, 48,
+ 48, 47, 49, 73, 86, 92, 74, 90, 87, 49,
+ 49, 90, 93, 75, 75, 75, 49, 86, 94, 49,
+ 97, 95, 49, 89, 75, 91, 95, 91, 98, 91,
+ 0, 49, 0, 0, 92, 74, 90, 99, 49, 49,
+ 90, 93, 0, 101, 102, 49, 0, 94, 49, 97,
+ 95, 49, 65, 75, 91, 95, 91, 98, 91, 96,
- 101, 96, 65, 95, 96, 104, 65, 102, 65, 107,
- 96, 103, 65, 105, 108, 106, 104, 96, 109, 110,
- 108, 111, 112, 113, 116, 112, 114, 117, 118, 119,
- 96, 121, 122, 96, 104, 120, 114, 120, 107, 96,
- 123, 114, 114, 108, 124, 104, 96, 109, 110, 108,
- 111, 112, 113, 116, 112, 114, 117, 118, 119, 125,
- 121, 122, 126, 128, 120, 114, 120, 129, 130, 123,
- 114, 114, 131, 124, 132, 133, 134, 135, 136, 133,
- 137, 138, 140, 136, 136, 139, 141, 142, 125, 143,
- 144, 126, 128, 145, 139, 146, 129, 130, 0, 148,
+ 65, 65, 96, 103, 104, 105, 99, 65, 96, 106,
+ 107, 65, 101, 102, 103, 96, 107, 108, 109, 65,
+ 110, 111, 112, 65, 111, 65, 0, 115, 96, 65,
+ 116, 96, 103, 104, 105, 117, 65, 96, 106, 107,
+ 65, 0, 0, 103, 96, 107, 108, 109, 65, 110,
+ 111, 112, 65, 111, 65, 113, 115, 118, 65, 116,
+ 119, 120, 119, 121, 117, 113, 122, 123, 124, 125,
+ 113, 113, 127, 128, 129, 130, 131, 132, 133, 134,
+ 136, 132, 135, 137, 113, 139, 118, 135, 135, 119,
+ 120, 119, 121, 0, 113, 122, 123, 124, 125, 113,
- 149, 131, 139, 132, 133, 134, 135, 136, 133, 137,
- 138, 140, 136, 136, 139, 141, 142, 151, 143, 144,
- 147, 153, 145, 139, 146, 178, 150, 147, 148, 149,
- 152, 139, 150, 173, 173, 180, 152, 181, 182, 183,
- 184, 185, 186, 173, 187, 188, 151, 189, 190, 147,
- 153, 191, 184, 192, 178, 150, 147, 193, 194, 152,
- 196, 150, 197, 199, 180, 152, 181, 182, 183, 184,
- 185, 186, 173, 187, 188, 198, 189, 190, 200, 198,
- 191, 184, 192, 201, 202, 203, 193, 194, 205, 196,
- 206, 197, 199, 207, 208, 209, 210, 211, 212, 213,
+ 113, 127, 128, 129, 130, 131, 132, 133, 134, 136,
+ 132, 135, 137, 138, 139, 140, 135, 135, 141, 142,
+ 143, 144, 138, 146, 147, 148, 149, 150, 151, 152,
+ 138, 153, 148, 154, 151, 174, 174, 153, 179, 181,
+ 182, 183, 138, 184, 140, 174, 186, 141, 142, 143,
+ 144, 138, 146, 147, 148, 149, 150, 151, 152, 138,
+ 153, 148, 154, 151, 185, 187, 153, 179, 181, 182,
+ 183, 188, 184, 189, 174, 186, 185, 190, 191, 192,
+ 193, 194, 195, 197, 198, 199, 200, 201, 202, 203,
+ 204, 206, 207, 185, 187, 208, 209, 210, 211, 212,
- 214, 215, 216, 217, 198, 218, 219, 200, 198, 220,
- 221, 222, 201, 202, 203, 223, 225, 205, 226, 206,
- 227, 222, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 228, 218, 219, 229, 230, 220, 221,
- 222, 231, 233, 235, 223, 225, 236, 226, 237, 227,
- 222, 238, 239, 240, 241, 242, 241, 243, 244, 245,
- 246, 247, 228, 248, 249, 229, 230, 250, 252, 253,
- 231, 233, 235, 248, 254, 236, 255, 237, 256, 257,
- 238, 239, 240, 241, 242, 241, 243, 244, 245, 246,
- 247, 258, 248, 249, 259, 261, 250, 252, 253, 260,
+ 188, 213, 189, 214, 215, 185, 190, 191, 192, 193,
+ 194, 195, 197, 198, 199, 200, 201, 202, 203, 204,
+ 206, 207, 216, 217, 208, 209, 210, 211, 212, 218,
+ 213, 219, 214, 215, 220, 221, 222, 223, 225, 226,
+ 227, 228, 229, 230, 231, 233, 222, 235, 236, 237,
+ 238, 216, 217, 239, 240, 241, 242, 241, 218, 243,
+ 219, 244, 245, 220, 221, 222, 223, 225, 226, 227,
+ 228, 229, 230, 231, 233, 222, 235, 236, 237, 238,
+ 246, 247, 239, 240, 241, 242, 241, 248, 243, 249,
+ 244, 245, 250, 252, 253, 254, 255, 248, 256, 257,
- 262, 260, 263, 254, 264, 255, 265, 256, 257, 266,
- 265, 267, 268, 272, 273, 274, 275, 276, 277, 278,
- 258, 280, 281, 259, 261, 282, 283, 285, 260, 262,
- 260, 263, 286, 264, 287, 265, 288, 289, 266, 265,
- 267, 268, 272, 273, 274, 275, 276, 277, 278, 290,
- 280, 281, 291, 292, 282, 283, 285, 293, 294, 295,
- 298, 286, 299, 287, 300, 288, 289, 301, 302, 303,
- 304, 305, 308, 310, 312, 313, 314, 321, 290, 315,
- 323, 291, 292, 324, 325, 326, 293, 294, 295, 298,
- 315, 299, 327, 300, 329, 330, 301, 302, 303, 304,
+ 258, 259, 260, 261, 253, 261, 262, 263, 264, 246,
+ 247, 265, 267, 266, 268, 269, 248, 266, 249, 273,
+ 274, 250, 252, 253, 254, 255, 275, 256, 257, 258,
+ 259, 260, 261, 253, 261, 262, 263, 264, 276, 277,
+ 265, 267, 266, 268, 269, 278, 266, 279, 273, 274,
+ 281, 282, 283, 284, 286, 275, 287, 288, 289, 290,
+ 291, 292, 293, 294, 295, 298, 299, 276, 277, 300,
+ 301, 302, 303, 304, 278, 307, 279, 309, 311, 281,
+ 282, 283, 284, 286, 312, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 298, 299, 313, 314, 300, 301,
- 305, 308, 310, 312, 313, 314, 321, 331, 315, 323,
- 332, 333, 324, 325, 326, 335, 337, 338, 339, 315,
- 341, 327, 342, 329, 330, 343, 344, 345, 346, 348,
- 350, 351, 352, 353, 354, 355, 331, 356, 357, 332,
- 333, 359, 360, 362, 335, 337, 338, 339, 366, 341,
- 367, 342, 368, 369, 343, 344, 345, 346, 348, 350,
- 351, 352, 353, 354, 355, 370, 356, 357, 370, 371,
- 359, 360, 362, 372, 374, 375, 376, 366, 377, 367,
- 378, 368, 369, 379, 380, 381, 382, 383, 384, 385,
- 386, 387, 388, 389, 370, 393, 394, 370, 371, 396,
+ 302, 303, 304, 320, 307, 322, 309, 311, 314, 323,
+ 324, 325, 326, 312, 328, 329, 330, 331, 332, 334,
+ 336, 337, 338, 340, 341, 313, 314, 342, 343, 344,
+ 345, 346, 320, 347, 322, 349, 351, 314, 323, 324,
+ 325, 326, 352, 328, 329, 330, 331, 332, 334, 336,
+ 337, 338, 340, 341, 353, 354, 342, 343, 344, 345,
+ 346, 355, 347, 356, 349, 351, 357, 358, 360, 361,
+ 363, 352, 367, 368, 369, 370, 371, 372, 373, 371,
+ 375, 376, 377, 353, 354, 378, 379, 380, 381, 382,
+ 355, 383, 356, 384, 385, 357, 358, 360, 361, 363,
- 399, 400, 372, 374, 375, 376, 403, 377, 401, 378,
- 408, 401, 379, 380, 381, 382, 383, 384, 385, 386,
- 387, 388, 389, 409, 393, 394, 410, 411, 396, 399,
- 400, 412, 414, 415, 417, 403, 418, 401, 419, 408,
- 401, 420, 421, 423, 424, 425, 427, 428, 430, 431,
- 433, 434, 409, 435, 436, 410, 411, 438, 439, 440,
- 412, 414, 415, 417, 441, 418, 442, 419, 444, 446,
- 420, 421, 423, 424, 425, 427, 428, 430, 431, 433,
- 434, 447, 435, 436, 448, 449, 438, 439, 440, 450,
- 452, 453, 454, 441, 458, 442, 459, 444, 446, 460,
+ 386, 367, 368, 369, 370, 371, 372, 373, 371, 375,
+ 376, 377, 387, 388, 378, 379, 380, 381, 382, 392,
+ 383, 393, 384, 385, 395, 398, 399, 400, 402, 386,
+ 400, 407, 408, 409, 410, 411, 413, 414, 416, 417,
+ 418, 387, 388, 419, 420, 421, 422, 424, 392, 425,
+ 393, 426, 428, 395, 398, 399, 400, 402, 429, 400,
+ 407, 408, 409, 410, 411, 413, 414, 416, 417, 418,
+ 431, 432, 419, 420, 421, 422, 424, 434, 425, 435,
+ 426, 428, 436, 437, 439, 440, 441, 429, 442, 443,
+ 445, 447, 448, 449, 450, 451, 453, 454, 457, 431,
- 463, 464, 465, 467, 468, 469, 470, 471, 472, 474,
- 447, 477, 478, 448, 449, 479, 480, 481, 450, 452,
- 453, 454, 485, 458, 487, 459, 488, 490, 460, 463,
- 464, 465, 467, 468, 469, 470, 471, 472, 474, 491,
- 477, 478, 492, 493, 479, 480, 481, 494, 495, 498,
- 501, 485, 502, 487, 503, 488, 490, 504, 506, 509,
- 510, 511, 513, 515, 516, 517, 518, 519, 491, 520,
- 521, 492, 493, 522, 524, 525, 494, 495, 498, 501,
- 526, 502, 527, 503, 528, 529, 504, 506, 509, 510,
- 511, 513, 515, 516, 517, 518, 519, 530, 520, 521,
+ 432, 458, 459, 462, 463, 464, 434, 466, 435, 467,
+ 468, 436, 437, 439, 440, 441, 469, 442, 443, 445,
+ 447, 448, 449, 450, 451, 453, 454, 457, 470, 471,
+ 458, 459, 462, 463, 464, 473, 466, 476, 467, 468,
+ 479, 480, 481, 482, 486, 469, 488, 489, 491, 492,
+ 493, 494, 495, 496, 499, 502, 503, 470, 471, 505,
+ 508, 509, 510, 512, 473, 514, 476, 515, 516, 479,
+ 480, 481, 482, 486, 517, 488, 489, 491, 492, 493,
+ 494, 495, 496, 499, 502, 503, 518, 519, 505, 508,
+ 509, 510, 512, 520, 514, 521, 515, 516, 523, 524,
- 531, 533, 522, 524, 525, 534, 536, 537, 538, 526,
- 540, 527, 541, 528, 529, 543, 544, 546, 547, 548,
- 549, 550, 552, 553, 554, 555, 530, 557, 559, 531,
- 533, 560, 563, 565, 534, 536, 537, 538, 566, 540,
- 569, 541, 573, 574, 543, 544, 546, 547, 548, 549,
- 550, 552, 553, 554, 555, 575, 557, 559, 578, 581,
- 560, 563, 565, 582, 583, 586, 587, 566, 589, 569,
- 590, 573, 574, 591, 592, 593, 595, 0, 0, 0,
- 0, 0, 0, 0, 575, 0, 0, 578, 581, 0,
- 0, 0, 582, 583, 586, 587, 0, 589, 0, 590,
+ 525, 526, 527, 517, 528, 529, 530, 532, 534, 535,
+ 537, 538, 540, 541, 543, 518, 519, 544, 545, 546,
+ 547, 549, 520, 550, 521, 551, 552, 523, 524, 525,
+ 526, 527, 554, 528, 529, 530, 532, 534, 535, 537,
+ 538, 540, 541, 543, 555, 558, 544, 545, 546, 547,
+ 549, 560, 550, 561, 551, 552, 564, 568, 569, 570,
+ 575, 554, 576, 577, 580, 582, 583, 584, 586, 0,
+ 0, 0, 0, 555, 558, 0, 0, 0, 0, 0,
+ 560, 0, 561, 0, 0, 564, 568, 569, 570, 575,
+ 0, 576, 577, 580, 582, 583, 584, 586, 589, 589,
- 0, 0, 591, 592, 593, 595, 599, 599, 599, 599,
- 599, 599, 599, 599, 599, 599, 600, 600, 600, 600,
- 600, 600, 600, 600, 600, 600, 601, 601, 601, 601,
- 601, 601, 601, 601, 601, 601, 602, 602, 602, 602,
- 602, 602, 602, 602, 602, 602, 603, 603, 603, 603,
- 603, 603, 603, 603, 603, 603, 604, 604, 605, 605,
- 605, 0, 605, 606, 606, 606, 606, 0, 606, 607,
- 607, 607, 0, 607, 607, 607, 607, 607, 607, 608,
- 608, 608, 0, 608, 608, 608, 608, 0, 608, 609,
- 609, 609, 609, 609, 609, 609, 609, 609, 609, 610,
+ 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,
+ 593, 593, 593, 593, 593, 593, 593, 593, 594, 594,
+ 595, 595, 595, 0, 595, 596, 596, 596, 596, 0,
+ 596, 597, 597, 597, 0, 597, 597, 597, 597, 597,
+ 597, 598, 598, 598, 0, 598, 598, 598, 598, 0,
+ 598, 599, 599, 599, 599, 599, 599, 599, 599, 599,
+ 599, 600, 600, 0, 600, 600, 600, 600, 600, 600,
- 610, 0, 610, 610, 610, 610, 610, 610, 610, 611,
- 0, 611, 611, 611, 611, 611, 611, 611, 611, 612,
- 612, 613, 613, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598, 598, 598, 598, 598, 598,
- 598, 598, 598, 598, 598
-
+ 600, 601, 0, 601, 601, 601, 601, 601, 601, 601,
+ 601, 602, 602, 603, 603, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588, 588, 588, 588,
+ 588, 588, 588, 588, 588, 588, 588
} ;
/* Table of booleans, true if rule could match eol. */
-static const flex_int32_t yy_rule_can_match_eol[164] =
+static const flex_int32_t yy_rule_can_match_eol[165] =
{ 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,
@@ -1023,8 +1177,8 @@
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, 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.
@@ -1074,13 +1228,13 @@
class ParseBlockProperties;
class ParseColumnConstraint;
class ParseCommand;
-struct ParseCopyFromParams;
class ParseDataType;
class ParseExpression;
struct ParseFrameInfo;
class ParseFunctionCall;
class ParseGroupBy;
class ParseHaving;
+class ParseKeyBoolValue;
class ParseKeyIntegerValue;
class ParseKeyStringValue;
class ParseKeyStringList;
@@ -1104,7 +1258,7 @@
class ParseSimpleWhenClause;
class ParseStringKeyLiteralValues;
class ParseStatement;
-class ParseStatementCopyFrom;
+class ParseStatementCopy;
class ParseStatementCreateTable;
class ParseStatementDelete;
class ParseStatementDropTable;
@@ -1135,14 +1289,14 @@
yycolumn += yyleng; \
}
-#line 1138 "SqlLexer_gen.cpp"
+#line 1292 "SqlLexer_gen.cpp"
/* FIXME(chasseur, qzeng): Add support for hexadecimal literals. */
/**
* These patterns are based on the SQL-2011 standard for syntax of numeric
* literals (Part 2, Section 5.3 of the standard).
**/
-#line 1145 "SqlLexer_gen.cpp"
+#line 1299 "SqlLexer_gen.cpp"
#define INITIAL 0
#define CONDITION_SQL 1
@@ -1209,50 +1363,50 @@
# define yylloc yyg->yylloc_r
-int quickstep_yylex_init (yyscan_t* scanner);
+int yylex_init (yyscan_t* scanner);
-int quickstep_yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
+int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
/* Accessor methods to globals.
These are made visible to non-reentrant scanners for convenience. */
-int quickstep_yylex_destroy ( yyscan_t yyscanner );
+int yylex_destroy ( yyscan_t yyscanner );
-int quickstep_yyget_debug ( yyscan_t yyscanner );
+int yyget_debug ( yyscan_t yyscanner );
-void quickstep_yyset_debug ( int debug_flag , yyscan_t yyscanner );
+void yyset_debug ( int debug_flag , yyscan_t yyscanner );
-YY_EXTRA_TYPE quickstep_yyget_extra ( yyscan_t yyscanner );
+YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner );
-void quickstep_yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
+void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
-FILE *quickstep_yyget_in ( yyscan_t yyscanner );
+FILE *yyget_in ( yyscan_t yyscanner );
-void quickstep_yyset_in ( FILE * _in_str , yyscan_t yyscanner );
+void yyset_in ( FILE * _in_str , yyscan_t yyscanner );
-FILE *quickstep_yyget_out ( yyscan_t yyscanner );
+FILE *yyget_out ( yyscan_t yyscanner );
-void quickstep_yyset_out ( FILE * _out_str , yyscan_t yyscanner );
+void yyset_out ( FILE * _out_str , yyscan_t yyscanner );
- int quickstep_yyget_leng ( yyscan_t yyscanner );
+ int yyget_leng ( yyscan_t yyscanner );
-char *quickstep_yyget_text ( yyscan_t yyscanner );
+char *yyget_text ( yyscan_t yyscanner );
-int quickstep_yyget_lineno ( yyscan_t yyscanner );
+int yyget_lineno ( yyscan_t yyscanner );
-void quickstep_yyset_lineno ( int _line_number , yyscan_t yyscanner );
+void yyset_lineno ( int _line_number , yyscan_t yyscanner );
-int quickstep_yyget_column ( yyscan_t yyscanner );
+int yyget_column ( yyscan_t yyscanner );
-void quickstep_yyset_column ( int _column_no , yyscan_t yyscanner );
+void yyset_column ( int _column_no , yyscan_t yyscanner );
-YYSTYPE * quickstep_yyget_lval ( yyscan_t yyscanner );
+YYSTYPE * yyget_lval ( yyscan_t yyscanner );
-void quickstep_yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
+void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
- YYLTYPE *quickstep_yyget_lloc ( yyscan_t yyscanner );
+ YYLTYPE *yyget_lloc ( yyscan_t yyscanner );
- void quickstep_yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner );
+ void yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner );
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -1260,9 +1414,9 @@
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
-extern "C" int quickstep_yywrap ( yyscan_t yyscanner );
+extern "C" int yywrap ( yyscan_t yyscanner );
#else
-extern int quickstep_yywrap ( yyscan_t yyscanner );
+extern int yywrap ( yyscan_t yyscanner );
#endif
#endif
@@ -1367,10 +1521,10 @@
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1
-extern int quickstep_yylex \
+extern int yylex \
(YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner);
-#define YY_DECL int quickstep_yylex \
+#define YY_DECL int yylex \
(YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner)
#endif /* !YY_DECL */
@@ -1420,19 +1574,19 @@
yyout = stdout;
if ( ! YY_CURRENT_BUFFER ) {
- quickstep_yyensure_buffer_stack (yyscanner);
+ yyensure_buffer_stack (yyscanner);
YY_CURRENT_BUFFER_LVALUE =
- quickstep_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+ yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner);
}
- quickstep_yy_load_buffer_state(yyscanner );
+ yy_load_buffer_state( yyscanner );
}
{
#line 132 "../SqlLexer.lpp"
-#line 1435 "SqlLexer_gen.cpp"
+#line 1589 "SqlLexer_gen.cpp"
while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */
{
@@ -1459,13 +1613,13 @@
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 >= 599 )
+ if ( yy_current_state >= 589 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
- while ( yy_current_state != 598 );
+ while ( yy_current_state != 588 );
yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state;
@@ -1709,7 +1863,7 @@
case 37:
YY_RULE_SETUP
#line 203 "../SqlLexer.lpp"
-return TOKEN_DELIMITER;
+return TOKEN_DESC;
YY_BREAK
case 38:
YY_RULE_SETUP
@@ -1719,347 +1873,347 @@
case 39:
YY_RULE_SETUP
#line 205 "../SqlLexer.lpp"
-return TOKEN_DESC;
+return TOKEN_DISTINCT;
YY_BREAK
case 40:
YY_RULE_SETUP
#line 206 "../SqlLexer.lpp"
-return TOKEN_DISTINCT;
+return TOKEN_DOUBLE;
YY_BREAK
case 41:
YY_RULE_SETUP
#line 207 "../SqlLexer.lpp"
-return TOKEN_DOUBLE;
+return TOKEN_DROP;
YY_BREAK
case 42:
YY_RULE_SETUP
#line 208 "../SqlLexer.lpp"
-return TOKEN_DROP;
+return TOKEN_ELSE;
YY_BREAK
case 43:
YY_RULE_SETUP
#line 209 "../SqlLexer.lpp"
-return TOKEN_ELSE;
+return TOKEN_END;
YY_BREAK
case 44:
YY_RULE_SETUP
#line 210 "../SqlLexer.lpp"
-return TOKEN_END;
+return TOKEN_EXISTS;
YY_BREAK
case 45:
YY_RULE_SETUP
#line 211 "../SqlLexer.lpp"
-return TOKEN_ESCAPE_STRINGS;
+return TOKEN_EXTRACT;
YY_BREAK
case 46:
YY_RULE_SETUP
#line 212 "../SqlLexer.lpp"
-return TOKEN_EXISTS;
+return TOKEN_FALSE;
YY_BREAK
case 47:
YY_RULE_SETUP
#line 213 "../SqlLexer.lpp"
-return TOKEN_EXTRACT;
+return TOKEN_FIRST;
YY_BREAK
case 48:
YY_RULE_SETUP
#line 214 "../SqlLexer.lpp"
-return TOKEN_FALSE;
+return TOKEN_FLOAT;
YY_BREAK
case 49:
YY_RULE_SETUP
#line 215 "../SqlLexer.lpp"
-return TOKEN_FIRST;
+return TOKEN_FOLLOWING;
YY_BREAK
case 50:
YY_RULE_SETUP
#line 216 "../SqlLexer.lpp"
-return TOKEN_FLOAT;
+return TOKEN_FOR;
YY_BREAK
case 51:
YY_RULE_SETUP
#line 217 "../SqlLexer.lpp"
-return TOKEN_FOLLOWING;
+return TOKEN_FOREIGN;
YY_BREAK
case 52:
YY_RULE_SETUP
#line 218 "../SqlLexer.lpp"
-return TOKEN_FOR;
+return TOKEN_FROM;
YY_BREAK
case 53:
YY_RULE_SETUP
#line 219 "../SqlLexer.lpp"
-return TOKEN_FOREIGN;
+return TOKEN_FULL;
YY_BREAK
case 54:
YY_RULE_SETUP
#line 220 "../SqlLexer.lpp"
-return TOKEN_FROM;
+return TOKEN_GROUP;
YY_BREAK
case 55:
YY_RULE_SETUP
#line 221 "../SqlLexer.lpp"
-return TOKEN_FULL;
+return TOKEN_HASH;
YY_BREAK
case 56:
YY_RULE_SETUP
#line 222 "../SqlLexer.lpp"
-return TOKEN_GROUP;
+return TOKEN_HAVING;
YY_BREAK
case 57:
YY_RULE_SETUP
#line 223 "../SqlLexer.lpp"
-return TOKEN_HASH;
+return TOKEN_HOUR;
YY_BREAK
case 58:
YY_RULE_SETUP
#line 224 "../SqlLexer.lpp"
-return TOKEN_HAVING;
+return TOKEN_IN;
YY_BREAK
case 59:
YY_RULE_SETUP
#line 225 "../SqlLexer.lpp"
-return TOKEN_HOUR;
+return TOKEN_INDEX;
YY_BREAK
case 60:
YY_RULE_SETUP
#line 226 "../SqlLexer.lpp"
-return TOKEN_IN;
+return TOKEN_INNER;
YY_BREAK
case 61:
YY_RULE_SETUP
#line 227 "../SqlLexer.lpp"
-return TOKEN_INDEX;
+return TOKEN_INSERT;
YY_BREAK
case 62:
YY_RULE_SETUP
#line 228 "../SqlLexer.lpp"
-return TOKEN_INNER;
+return TOKEN_INTEGER;
YY_BREAK
case 63:
YY_RULE_SETUP
#line 229 "../SqlLexer.lpp"
-return TOKEN_INSERT;
+return TOKEN_INTEGER;
YY_BREAK
case 64:
YY_RULE_SETUP
#line 230 "../SqlLexer.lpp"
-return TOKEN_INTEGER;
+return TOKEN_INTERSECT;
YY_BREAK
case 65:
YY_RULE_SETUP
#line 231 "../SqlLexer.lpp"
-return TOKEN_INTEGER;
+return TOKEN_INTERVAL;
YY_BREAK
case 66:
YY_RULE_SETUP
#line 232 "../SqlLexer.lpp"
-return TOKEN_INTERSECT;
+return TOKEN_INTO;
YY_BREAK
case 67:
YY_RULE_SETUP
#line 233 "../SqlLexer.lpp"
-return TOKEN_INTERVAL;
+return TOKEN_IS;
YY_BREAK
case 68:
YY_RULE_SETUP
#line 234 "../SqlLexer.lpp"
-return TOKEN_INTO;
+return TOKEN_JOIN;
YY_BREAK
case 69:
YY_RULE_SETUP
#line 235 "../SqlLexer.lpp"
-return TOKEN_IS;
+return TOKEN_KEY;
YY_BREAK
case 70:
YY_RULE_SETUP
#line 236 "../SqlLexer.lpp"
-return TOKEN_JOIN;
+return TOKEN_LAST;
YY_BREAK
case 71:
YY_RULE_SETUP
#line 237 "../SqlLexer.lpp"
-return TOKEN_KEY;
+return TOKEN_LEFT;
YY_BREAK
case 72:
YY_RULE_SETUP
#line 238 "../SqlLexer.lpp"
-return TOKEN_LAST;
+return TOKEN_LIKE;
YY_BREAK
case 73:
YY_RULE_SETUP
#line 239 "../SqlLexer.lpp"
-return TOKEN_LEFT;
+return TOKEN_LIMIT;
YY_BREAK
case 74:
YY_RULE_SETUP
#line 240 "../SqlLexer.lpp"
-return TOKEN_LIKE;
+return TOKEN_LONG;
YY_BREAK
case 75:
YY_RULE_SETUP
#line 241 "../SqlLexer.lpp"
-return TOKEN_LIMIT;
+return TOKEN_MINUTE;
YY_BREAK
case 76:
YY_RULE_SETUP
#line 242 "../SqlLexer.lpp"
-return TOKEN_LONG;
+return TOKEN_MONTH;
YY_BREAK
case 77:
YY_RULE_SETUP
#line 243 "../SqlLexer.lpp"
-return TOKEN_MINUTE;
+return TOKEN_NOT;
YY_BREAK
case 78:
YY_RULE_SETUP
#line 244 "../SqlLexer.lpp"
-return TOKEN_MONTH;
+return TOKEN_NULL;
YY_BREAK
case 79:
YY_RULE_SETUP
#line 245 "../SqlLexer.lpp"
-return TOKEN_NOT;
+return TOKEN_NULLS;
YY_BREAK
case 80:
YY_RULE_SETUP
#line 246 "../SqlLexer.lpp"
-return TOKEN_NULL;
+return TOKEN_OFF;
YY_BREAK
case 81:
YY_RULE_SETUP
#line 247 "../SqlLexer.lpp"
-return TOKEN_NULLS;
+return TOKEN_ON;
YY_BREAK
case 82:
YY_RULE_SETUP
#line 248 "../SqlLexer.lpp"
-return TOKEN_OFF;
+return TOKEN_OR;
YY_BREAK
case 83:
YY_RULE_SETUP
#line 249 "../SqlLexer.lpp"
-return TOKEN_ON;
+return TOKEN_ORDER;
YY_BREAK
case 84:
YY_RULE_SETUP
#line 250 "../SqlLexer.lpp"
-return TOKEN_OR;
+return TOKEN_OUTER;
YY_BREAK
case 85:
YY_RULE_SETUP
#line 251 "../SqlLexer.lpp"
-return TOKEN_ORDER;
+return TOKEN_OVER;
YY_BREAK
case 86:
YY_RULE_SETUP
#line 252 "../SqlLexer.lpp"
-return TOKEN_OUTER;
+return TOKEN_PARTITION;
YY_BREAK
case 87:
YY_RULE_SETUP
#line 253 "../SqlLexer.lpp"
-return TOKEN_OVER;
+return TOKEN_PARTITIONS;
YY_BREAK
case 88:
YY_RULE_SETUP
#line 254 "../SqlLexer.lpp"
-return TOKEN_PARTITION;
+return TOKEN_PERCENT;
YY_BREAK
case 89:
YY_RULE_SETUP
#line 255 "../SqlLexer.lpp"
-return TOKEN_PARTITIONS;
+return TOKEN_PRECEDING;
YY_BREAK
case 90:
YY_RULE_SETUP
#line 256 "../SqlLexer.lpp"
-return TOKEN_PERCENT;
+return TOKEN_PRIMARY;
YY_BREAK
case 91:
YY_RULE_SETUP
#line 257 "../SqlLexer.lpp"
-return TOKEN_PRECEDING;
+return TOKEN_PRIORITY;
YY_BREAK
case 92:
YY_RULE_SETUP
#line 258 "../SqlLexer.lpp"
-return TOKEN_PRIMARY;
+return TOKEN_QUIT;
YY_BREAK
case 93:
YY_RULE_SETUP
#line 259 "../SqlLexer.lpp"
-return TOKEN_PRIORITY;
+return TOKEN_RANGE;
YY_BREAK
case 94:
YY_RULE_SETUP
#line 260 "../SqlLexer.lpp"
-return TOKEN_QUIT;
+return TOKEN_REAL;
YY_BREAK
case 95:
YY_RULE_SETUP
#line 261 "../SqlLexer.lpp"
-return TOKEN_RANGE;
+return TOKEN_REFERENCES;
YY_BREAK
case 96:
YY_RULE_SETUP
#line 262 "../SqlLexer.lpp"
-return TOKEN_REAL;
+return TOKEN_REGEXP;
YY_BREAK
case 97:
YY_RULE_SETUP
#line 263 "../SqlLexer.lpp"
-return TOKEN_REFERENCES;
+return TOKEN_RIGHT;
YY_BREAK
case 98:
YY_RULE_SETUP
#line 264 "../SqlLexer.lpp"
-return TOKEN_REGEXP;
+return TOKEN_ROW;
YY_BREAK
case 99:
YY_RULE_SETUP
#line 265 "../SqlLexer.lpp"
-return TOKEN_RIGHT;
+return TOKEN_ROW_DELIMITER;
YY_BREAK
case 100:
YY_RULE_SETUP
#line 266 "../SqlLexer.lpp"
-return TOKEN_ROW;
+return TOKEN_ROWS;
YY_BREAK
case 101:
YY_RULE_SETUP
#line 267 "../SqlLexer.lpp"
-return TOKEN_ROW_DELIMITER;
+return TOKEN_SECOND;
YY_BREAK
case 102:
YY_RULE_SETUP
#line 268 "../SqlLexer.lpp"
-return TOKEN_ROWS;
+return TOKEN_SELECT;
YY_BREAK
case 103:
YY_RULE_SETUP
#line 269 "../SqlLexer.lpp"
-return TOKEN_SECOND;
+return TOKEN_SET;
YY_BREAK
case 104:
YY_RULE_SETUP
#line 270 "../SqlLexer.lpp"
-return TOKEN_SELECT;
+return TOKEN_SMA;
YY_BREAK
case 105:
YY_RULE_SETUP
#line 271 "../SqlLexer.lpp"
-return TOKEN_SET;
+return TOKEN_SMALLINT;
YY_BREAK
case 106:
YY_RULE_SETUP
#line 272 "../SqlLexer.lpp"
-return TOKEN_SMA;
+return TOKEN_STDERR;
YY_BREAK
case 107:
YY_RULE_SETUP
#line 273 "../SqlLexer.lpp"
-return TOKEN_SMALLINT;
+return TOKEN_STDOUT;
YY_BREAK
case 108:
YY_RULE_SETUP
@@ -2089,87 +2243,87 @@
case 113:
YY_RULE_SETUP
#line 279 "../SqlLexer.lpp"
-return TOKEN_TRUE;
+return TOKEN_TO;
YY_BREAK
case 114:
YY_RULE_SETUP
#line 280 "../SqlLexer.lpp"
-return TOKEN_TUPLESAMPLE;
+return TOKEN_TRUE;
YY_BREAK
case 115:
YY_RULE_SETUP
#line 281 "../SqlLexer.lpp"
-return TOKEN_UNBOUNDED;
+return TOKEN_TUPLESAMPLE;
YY_BREAK
case 116:
YY_RULE_SETUP
#line 282 "../SqlLexer.lpp"
-return TOKEN_UNION;
+return TOKEN_UNBOUNDED;
YY_BREAK
case 117:
YY_RULE_SETUP
#line 283 "../SqlLexer.lpp"
-return TOKEN_UNIQUE;
+return TOKEN_UNION;
YY_BREAK
case 118:
YY_RULE_SETUP
#line 284 "../SqlLexer.lpp"
-return TOKEN_UPDATE;
+return TOKEN_UNIQUE;
YY_BREAK
case 119:
YY_RULE_SETUP
#line 285 "../SqlLexer.lpp"
-return TOKEN_USING;
+return TOKEN_UPDATE;
YY_BREAK
case 120:
YY_RULE_SETUP
#line 286 "../SqlLexer.lpp"
-return TOKEN_VALUES;
+return TOKEN_USING;
YY_BREAK
case 121:
YY_RULE_SETUP
#line 287 "../SqlLexer.lpp"
-return TOKEN_VARCHAR;
+return TOKEN_VALUES;
YY_BREAK
case 122:
YY_RULE_SETUP
#line 288 "../SqlLexer.lpp"
-return TOKEN_WHEN;
+return TOKEN_VARCHAR;
YY_BREAK
case 123:
YY_RULE_SETUP
#line 289 "../SqlLexer.lpp"
-return TOKEN_WHERE;
+return TOKEN_WHEN;
YY_BREAK
case 124:
YY_RULE_SETUP
#line 290 "../SqlLexer.lpp"
-return TOKEN_WINDOW;
+return TOKEN_WHERE;
YY_BREAK
case 125:
YY_RULE_SETUP
#line 291 "../SqlLexer.lpp"
-return TOKEN_WITH;
+return TOKEN_WINDOW;
YY_BREAK
case 126:
YY_RULE_SETUP
#line 292 "../SqlLexer.lpp"
-return TOKEN_YEAR;
+return TOKEN_WITH;
YY_BREAK
case 127:
YY_RULE_SETUP
#line 293 "../SqlLexer.lpp"
-return TOKEN_YEARMONTH;
+return TOKEN_YEAR;
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 295 "../SqlLexer.lpp"
-return TOKEN_EQ;
+#line 294 "../SqlLexer.lpp"
+return TOKEN_YEARMONTH;
YY_BREAK
case 129:
YY_RULE_SETUP
#line 296 "../SqlLexer.lpp"
-return TOKEN_NEQ;
+return TOKEN_EQ;
YY_BREAK
case 130:
YY_RULE_SETUP
@@ -2179,56 +2333,61 @@
case 131:
YY_RULE_SETUP
#line 298 "../SqlLexer.lpp"
-return TOKEN_LT;
+return TOKEN_NEQ;
YY_BREAK
case 132:
YY_RULE_SETUP
#line 299 "../SqlLexer.lpp"
-return TOKEN_GT;
+return TOKEN_LT;
YY_BREAK
case 133:
YY_RULE_SETUP
#line 300 "../SqlLexer.lpp"
-return TOKEN_LEQ;
+return TOKEN_GT;
YY_BREAK
case 134:
YY_RULE_SETUP
#line 301 "../SqlLexer.lpp"
-return TOKEN_GEQ;
+return TOKEN_LEQ;
YY_BREAK
case 135:
YY_RULE_SETUP
-#line 303 "../SqlLexer.lpp"
-return yytext[0];
+#line 302 "../SqlLexer.lpp"
+return TOKEN_GEQ;
YY_BREAK
case 136:
YY_RULE_SETUP
#line 304 "../SqlLexer.lpp"
return yytext[0];
YY_BREAK
+case 137:
+YY_RULE_SETUP
+#line 305 "../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 137:
+case 138:
YY_RULE_SETUP
-#line 310 "../SqlLexer.lpp"
+#line 311 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_SINGLE_QUOTED_ESCAPED);
}
YY_BREAK
-case 138:
+case 139:
YY_RULE_SETUP
-#line 315 "../SqlLexer.lpp"
+#line 316 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_SINGLE_QUOTED);
}
YY_BREAK
-case 139:
+case 140:
YY_RULE_SETUP
-#line 320 "../SqlLexer.lpp"
+#line 321 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
BEGIN(CONDITION_STRING_DOUBLE_QUOTED);
@@ -2240,7 +2399,7 @@
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 329 "../SqlLexer.lpp"
+#line 330 "../SqlLexer.lpp"
{
delete yylval->string_value_;
BEGIN(INITIAL);
@@ -2251,9 +2410,9 @@
/* Process escape sequences. */
-case 140:
+case 141:
YY_RULE_SETUP
-#line 339 "../SqlLexer.lpp"
+#line 340 "../SqlLexer.lpp"
{
/* Octal code */
unsigned int code;
@@ -2267,9 +2426,9 @@
yylval->string_value_->push_back(code);
}
YY_BREAK
-case 141:
+case 142:
YY_RULE_SETUP
-#line 351 "../SqlLexer.lpp"
+#line 352 "../SqlLexer.lpp"
{
/* Hexadecimal code */
unsigned int code;
@@ -2277,9 +2436,9 @@
yylval->string_value_->push_back(code);
}
YY_BREAK
-case 142:
+case 143:
YY_RULE_SETUP
-#line 357 "../SqlLexer.lpp"
+#line 358 "../SqlLexer.lpp"
{
/* A numeric escape sequence that isn't correctly specified. */
delete yylval->string_value_;
@@ -2288,58 +2447,58 @@
return TOKEN_LEX_ERROR;
}
YY_BREAK
-case 143:
+case 144:
YY_RULE_SETUP
-#line 364 "../SqlLexer.lpp"
+#line 365 "../SqlLexer.lpp"
{
/* Backspace */
yylval->string_value_->push_back('\b');
}
YY_BREAK
-case 144:
+case 145:
YY_RULE_SETUP
-#line 368 "../SqlLexer.lpp"
+#line 369 "../SqlLexer.lpp"
{
/* Form-feed */
yylval->string_value_->push_back('\f');
}
YY_BREAK
-case 145:
+case 146:
YY_RULE_SETUP
-#line 372 "../SqlLexer.lpp"
+#line 373 "../SqlLexer.lpp"
{
/* Newline */
yylval->string_value_->push_back('\n');
}
YY_BREAK
-case 146:
+case 147:
YY_RULE_SETUP
-#line 376 "../SqlLexer.lpp"
+#line 377 "../SqlLexer.lpp"
{
/* Carriage-return */
yylval->string_value_->push_back('\r');
}
YY_BREAK
-case 147:
+case 148:
YY_RULE_SETUP
-#line 380 "../SqlLexer.lpp"
+#line 381 "../SqlLexer.lpp"
{
/* Horizontal Tab */
yylval->string_value_->push_back('\t');
}
YY_BREAK
-case 148:
-/* rule 148 can match eol */
+case 149:
+/* rule 149 can match eol */
YY_RULE_SETUP
-#line 384 "../SqlLexer.lpp"
+#line 385 "../SqlLexer.lpp"
{
/* Any other character (including actual newline or carriage return) */
yylval->string_value_->push_back(yytext[1]);
}
YY_BREAK
-case 149:
+case 150:
YY_RULE_SETUP
-#line 388 "../SqlLexer.lpp"
+#line 389 "../SqlLexer.lpp"
{
/* This should only be encountered right before an EOF. */
delete yylval->string_value_;
@@ -2350,17 +2509,17 @@
YY_BREAK
-case 150:
+case 151:
YY_RULE_SETUP
-#line 398 "../SqlLexer.lpp"
+#line 399 "../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 151:
+case 152:
YY_RULE_SETUP
-#line 402 "../SqlLexer.lpp"
+#line 403 "../SqlLexer.lpp"
{
/* End string */
BEGIN(CONDITION_SQL);
@@ -2369,17 +2528,17 @@
YY_BREAK
-case 152:
+case 153:
YY_RULE_SETUP
-#line 410 "../SqlLexer.lpp"
+#line 411 "../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 153:
+case 154:
YY_RULE_SETUP
-#line 414 "../SqlLexer.lpp"
+#line 415 "../SqlLexer.lpp"
{
/* End string */
BEGIN(CONDITION_SQL);
@@ -2387,94 +2546,94 @@
}
YY_BREAK
-case 154:
-/* rule 154 can match eol */
-YY_RULE_SETUP
-#line 421 "../SqlLexer.lpp"
-{
- /* Scan up to a quote. */
- yylval->string_value_->append(yytext, yyleng);
-}
- YY_BREAK
case 155:
/* rule 155 can match eol */
YY_RULE_SETUP
-#line 426 "../SqlLexer.lpp"
+#line 422 "../SqlLexer.lpp"
{
- /* Scan up to a quote or escape sequence. */
+ /* Scan up to a quote. */
yylval->string_value_->append(yytext, yyleng);
}
YY_BREAK
case 156:
/* rule 156 can match eol */
YY_RULE_SETUP
-#line 431 "../SqlLexer.lpp"
+#line 427 "../SqlLexer.lpp"
+{
+ /* Scan up to a quote or escape sequence. */
+ yylval->string_value_->append(yytext, yyleng);
+}
+ YY_BREAK
+case 157:
+/* rule 157 can match eol */
+YY_RULE_SETUP
+#line 432 "../SqlLexer.lpp"
{
/* Scan up to a quote. */
yylval->string_value_->append(yytext, yyleng);
}
YY_BREAK
-case 157:
+case 158:
YY_RULE_SETUP
-#line 437 "../SqlLexer.lpp"
+#line 438 "../SqlLexer.lpp"
{
yylval->string_value_ = new quickstep::ParseString(
yylloc->first_line, yylloc->first_column, std::string(yytext, yyleng));
return TOKEN_NAME;
}
YY_BREAK
-case 158:
+case 159:
YY_RULE_SETUP
-#line 443 "../SqlLexer.lpp"
+#line 444 "../SqlLexer.lpp"
{
yylval->numeric_literal_value_ = new quickstep::NumericParseLiteralValue(
yylloc->first_line, yylloc->first_column, yytext);
return TOKEN_UNSIGNED_NUMVAL;
}
YY_BREAK
-case 159:
+case 160:
YY_RULE_SETUP
-#line 449 "../SqlLexer.lpp"
+#line 450 "../SqlLexer.lpp"
/* comment */
YY_BREAK
-case 160:
-/* rule 160 can match eol */
+case 161:
+/* rule 161 can match eol */
YY_RULE_SETUP
-#line 451 "../SqlLexer.lpp"
+#line 452 "../SqlLexer.lpp"
{ yycolumn = 0; }
YY_BREAK
-case 161:
+case 162:
YY_RULE_SETUP
-#line 453 "../SqlLexer.lpp"
+#line 454 "../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 457 "../SqlLexer.lpp"
+#line 458 "../SqlLexer.lpp"
{
/* All conditions except for mutli-state string extracting conditions. */
BEGIN(INITIAL);
return TOKEN_EOF;
}
YY_BREAK
-case 162:
+case 163:
YY_RULE_SETUP
-#line 463 "../SqlLexer.lpp"
+#line 464 "../SqlLexer.lpp"
{
BEGIN(INITIAL);
quickstep_yyerror(NULL, yyscanner, NULL, "illegal character");
return TOKEN_LEX_ERROR;
}
YY_BREAK
-case 163:
+case 164:
YY_RULE_SETUP
-#line 469 "../SqlLexer.lpp"
+#line 470 "../SqlLexer.lpp"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 2477 "SqlLexer_gen.cpp"
+#line 2636 "SqlLexer_gen.cpp"
case YY_END_OF_BUFFER:
{
@@ -2490,7 +2649,7 @@
/* We're scanning a new file or input source. It's
* possible that this happened because the user
* just pointed yyin at a new source and called
- * quickstep_yylex(). If so, then we have to assure
+ * yylex(). If so, then we have to assure
* consistency between YY_CURRENT_BUFFER and our
* globals. Here is the right place to do so, because
* this is the first action (other than possibly a
@@ -2551,7 +2710,7 @@
{
yyg->yy_did_buffer_switch_on_eof = 0;
- if ( quickstep_yywrap(yyscanner ) )
+ if ( yywrap( yyscanner ) )
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
@@ -2605,7 +2764,7 @@
} /* end of action switch */
} /* end of scanning one token */
} /* end of user's declarations */
-} /* end of quickstep_yylex */
+} /* end of yylex */
/* yy_get_next_buffer - try to read in a new buffer
*
@@ -2684,7 +2843,8 @@
b->yy_ch_buf = (char *)
/* Include room in for 2 EOB chars. */
- quickstep_yyrealloc((void *) b->yy_ch_buf,(yy_size_t) (b->yy_buf_size + 2) ,yyscanner );
+ yyrealloc( (void *) b->yy_ch_buf,
+ (yy_size_t) (b->yy_buf_size + 2) , yyscanner );
}
else
/* Can't grow it, we don't own it. */
@@ -2716,7 +2876,7 @@
if ( number_to_move == YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE;
- quickstep_yyrestart(yyin ,yyscanner);
+ yyrestart( yyin , yyscanner);
}
else
@@ -2733,9 +2893,12 @@
if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
/* Extend the array by 50%, plus the number we really need. */
int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) quickstep_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,(yy_size_t) new_size ,yyscanner );
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(
+ (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner );
if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ /* "- 2" to take care of EOB's */
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
}
yyg->yy_n_chars += number_to_move;
@@ -2768,7 +2931,7 @@
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 >= 599 )
+ if ( yy_current_state >= 589 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -2797,11 +2960,11 @@
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 >= 599 )
+ if ( yy_current_state >= 589 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
- yy_is_jam = (yy_current_state == 598);
+ yy_is_jam = (yy_current_state == 588);
(void)yyg;
return yy_is_jam ? 0 : yy_current_state;
@@ -2853,13 +3016,13 @@
*/
/* Reset buffer status. */
- quickstep_yyrestart(yyin ,yyscanner);
+ yyrestart( yyin , yyscanner);
/*FALLTHROUGH*/
case EOB_ACT_END_OF_FILE:
{
- if ( quickstep_yywrap(yyscanner ) )
+ if ( yywrap( yyscanner ) )
return 0;
if ( ! yyg->yy_did_buffer_switch_on_eof )
@@ -2898,34 +3061,34 @@
* @param yyscanner The scanner object.
* @note This function does not reset the start condition to @c INITIAL .
*/
- void quickstep_yyrestart (FILE * input_file , yyscan_t yyscanner)
+ void yyrestart (FILE * input_file , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
if ( ! YY_CURRENT_BUFFER ){
- quickstep_yyensure_buffer_stack (yyscanner);
+ yyensure_buffer_stack (yyscanner);
YY_CURRENT_BUFFER_LVALUE =
- quickstep_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner);
+ yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner);
}
- quickstep_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner);
- quickstep_yy_load_buffer_state(yyscanner );
+ yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner);
+ yy_load_buffer_state( yyscanner );
}
/** Switch to a different input buffer.
* @param new_buffer The new input buffer.
* @param yyscanner The scanner object.
*/
- void quickstep_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
/* TODO. We should be able to replace this entire function body
* with
- * quickstep_yypop_buffer_state();
- * quickstep_yypush_buffer_state(new_buffer);
+ * yypop_buffer_state();
+ * yypush_buffer_state(new_buffer);
*/
- quickstep_yyensure_buffer_stack (yyscanner);
+ yyensure_buffer_stack (yyscanner);
if ( YY_CURRENT_BUFFER == new_buffer )
return;
@@ -2938,17 +3101,17 @@
}
YY_CURRENT_BUFFER_LVALUE = new_buffer;
- quickstep_yy_load_buffer_state(yyscanner );
+ yy_load_buffer_state( yyscanner );
/* We don't actually know whether we did this switch during
- * EOF (quickstep_yywrap()) processing, but the only time this flag
- * is looked at is after quickstep_yywrap() is called, so it's safe
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
* to go ahead and always set it.
*/
yyg->yy_did_buffer_switch_on_eof = 1;
}
-static void quickstep_yy_load_buffer_state (yyscan_t yyscanner)
+static void yy_load_buffer_state (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
@@ -2963,35 +3126,35 @@
* @param yyscanner The scanner object.
* @return the allocated buffer state.
*/
- YY_BUFFER_STATE quickstep_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner)
+ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner)
{
YY_BUFFER_STATE b;
- b = (YY_BUFFER_STATE) quickstep_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner );
if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in quickstep_yy_create_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_buf_size = 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.
*/
- b->yy_ch_buf = (char *) quickstep_yyalloc((yy_size_t) (b->yy_buf_size + 2) ,yyscanner );
+ b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner );
if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in quickstep_yy_create_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
b->yy_is_our_buffer = 1;
- quickstep_yy_init_buffer(b,file ,yyscanner);
+ yy_init_buffer( b, file , yyscanner);
return b;
}
/** Destroy the buffer.
- * @param b a buffer created with quickstep_yy_create_buffer()
+ * @param b a buffer created with yy_create_buffer()
* @param yyscanner The scanner object.
*/
- void quickstep_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
+ void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
@@ -3002,28 +3165,28 @@
YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
if ( b->yy_is_our_buffer )
- quickstep_yyfree((void *) b->yy_ch_buf ,yyscanner );
+ yyfree( (void *) b->yy_ch_buf , yyscanner );
- quickstep_yyfree((void *) b ,yyscanner );
+ yyfree( (void *) b , yyscanner );
}
/* Initializes or reinitializes a buffer.
* This function is sometimes called more than once on the same buffer,
- * such as during a quickstep_yyrestart() or at EOF.
+ * such as during a yyrestart() or at EOF.
*/
- static void quickstep_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner)
+ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner)
{
int oerrno = errno;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
- quickstep_yy_flush_buffer(b ,yyscanner);
+ yy_flush_buffer( b , yyscanner);
b->yy_input_file = file;
b->yy_fill_buffer = 1;
- /* If b is the current buffer, then quickstep_yy_init_buffer was _probably_
- * called from quickstep_yyrestart() or through yy_get_next_buffer.
+ /* If b is the current buffer, then yy_init_buffer was _probably_
+ * called from yyrestart() or through yy_get_next_buffer.
* In that case, we don't want to reset the lineno or column.
*/
if (b != YY_CURRENT_BUFFER){
@@ -3040,7 +3203,7 @@
* @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
* @param yyscanner The scanner object.
*/
- void quickstep_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
+ void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
if ( ! b )
@@ -3061,7 +3224,7 @@
b->yy_buffer_status = YY_BUFFER_NEW;
if ( b == YY_CURRENT_BUFFER )
- quickstep_yy_load_buffer_state(yyscanner );
+ yy_load_buffer_state( yyscanner );
}
/** Pushes the new state onto the stack. The new state becomes
@@ -3070,15 +3233,15 @@
* @param new_buffer The new state.
* @param yyscanner The scanner object.
*/
-void quickstep_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
+void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
if (new_buffer == NULL)
return;
- quickstep_yyensure_buffer_stack(yyscanner);
+ yyensure_buffer_stack(yyscanner);
- /* This block is copied from quickstep_yy_switch_to_buffer. */
+ /* This block is copied from yy_switch_to_buffer. */
if ( YY_CURRENT_BUFFER )
{
/* Flush out information for old buffer. */
@@ -3092,8 +3255,8 @@
yyg->yy_buffer_stack_top++;
YY_CURRENT_BUFFER_LVALUE = new_buffer;
- /* copied from quickstep_yy_switch_to_buffer. */
- quickstep_yy_load_buffer_state(yyscanner );
+ /* copied from yy_switch_to_buffer. */
+ yy_load_buffer_state( yyscanner );
yyg->yy_did_buffer_switch_on_eof = 1;
}
@@ -3101,19 +3264,19 @@
* The next element becomes the new top.
* @param yyscanner The scanner object.
*/
-void quickstep_yypop_buffer_state (yyscan_t yyscanner)
+void yypop_buffer_state (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
if (!YY_CURRENT_BUFFER)
return;
- quickstep_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner);
+ yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner);
YY_CURRENT_BUFFER_LVALUE = NULL;
if (yyg->yy_buffer_stack_top > 0)
--yyg->yy_buffer_stack_top;
if (YY_CURRENT_BUFFER) {
- quickstep_yy_load_buffer_state(yyscanner );
+ yy_load_buffer_state( yyscanner );
yyg->yy_did_buffer_switch_on_eof = 1;
}
}
@@ -3121,7 +3284,7 @@
/* Allocates the stack if it does not exist.
* Guarantees space for at least one push.
*/
-static void quickstep_yyensure_buffer_stack (yyscan_t yyscanner)
+static void yyensure_buffer_stack (yyscan_t yyscanner)
{
yy_size_t num_to_alloc;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
@@ -3133,11 +3296,11 @@
* immediate realloc on the next call.
*/
num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
- yyg->yy_buffer_stack = (struct yy_buffer_state**)quickstep_yyalloc
+ yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc
(num_to_alloc * sizeof(struct yy_buffer_state*)
, yyscanner);
if ( ! yyg->yy_buffer_stack )
- YY_FATAL_ERROR( "out of dynamic memory in quickstep_yyensure_buffer_stack()" );
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
@@ -3152,12 +3315,12 @@
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
+ yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc
(yyg->yy_buffer_stack,
num_to_alloc * sizeof(struct yy_buffer_state*)
, yyscanner);
if ( ! yyg->yy_buffer_stack )
- YY_FATAL_ERROR( "out of dynamic memory in quickstep_yyensure_buffer_stack()" );
+ YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
/* zero only the new slots.*/
memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -3171,7 +3334,7 @@
* @param yyscanner The scanner object.
* @return the newly allocated buffer state object.
*/
-YY_BUFFER_STATE quickstep_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner)
+YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner)
{
YY_BUFFER_STATE b;
@@ -3181,9 +3344,9 @@
/* They forgot to leave room for the EOB's. */
return NULL;
- b = (YY_BUFFER_STATE) quickstep_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner );
+ b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner );
if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in quickstep_yy_scan_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */
b->yy_buf_pos = b->yy_ch_buf = base;
@@ -3195,33 +3358,33 @@
b->yy_fill_buffer = 0;
b->yy_buffer_status = YY_BUFFER_NEW;
- quickstep_yy_switch_to_buffer(b ,yyscanner );
+ yy_switch_to_buffer( b , yyscanner );
return b;
}
-/** Setup the input buffer state to scan a string. The next call to quickstep_yylex() will
+/** Setup the input buffer state to scan a string. The next call to yylex() will
* scan from a @e copy of @a str.
* @param yystr a NUL-terminated string to scan
* @param yyscanner The scanner object.
* @return the newly allocated buffer state object.
* @note If you want to scan bytes that may contain NUL values, then use
- * quickstep_yy_scan_bytes() instead.
+ * yy_scan_bytes() instead.
*/
-YY_BUFFER_STATE quickstep_yy_scan_string (const char * yystr , yyscan_t yyscanner)
+YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner)
{
- return quickstep_yy_scan_bytes(yystr,(int) strlen(yystr) ,yyscanner);
+ return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner);
}
-/** Setup the input buffer state to scan the given bytes. The next call to quickstep_yylex() will
+/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
* scan from a @e copy of @a bytes.
* @param yybytes the byte buffer to scan
* @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
* @param yyscanner The scanner object.
* @return the newly allocated buffer state object.
*/
-YY_BUFFER_STATE quickstep_yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner)
+YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner)
{
YY_BUFFER_STATE b;
char *buf;
@@ -3230,18 +3393,18 @@
/* Get memory for full buffer, including space for trailing EOB's. */
n = (yy_size_t) (_yybytes_len + 2);
- buf = (char *) quickstep_yyalloc(n ,yyscanner );
+ buf = (char *) yyalloc( n , yyscanner );
if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in quickstep_yy_scan_bytes()" );
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
for ( i = 0; i < _yybytes_len; ++i )
buf[i] = yybytes[i];
buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
- b = quickstep_yy_scan_buffer(buf,n ,yyscanner);
+ b = yy_scan_buffer( buf, n , yyscanner);
if ( ! b )
- YY_FATAL_ERROR( "bad buffer in quickstep_yy_scan_bytes()" );
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
/* It's okay to grow etc. this buffer, and we should throw it
* away when we're done.
@@ -3259,7 +3422,7 @@
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
(void)yyg;
- (void) fprintf( stderr, "%s\n", msg );
+ fprintf( stderr, "%s\n", msg );
exit( YY_EXIT_FAILURE );
}
@@ -3285,7 +3448,7 @@
/** Get the user-defined data for this scanner.
* @param yyscanner The scanner object.
*/
-YY_EXTRA_TYPE quickstep_yyget_extra (yyscan_t yyscanner)
+YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yyextra;
@@ -3294,7 +3457,7 @@
/** Get the current line number.
* @param yyscanner The scanner object.
*/
-int quickstep_yyget_lineno (yyscan_t yyscanner)
+int yyget_lineno (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
@@ -3307,7 +3470,7 @@
/** Get the current column number.
* @param yyscanner The scanner object.
*/
-int quickstep_yyget_column (yyscan_t yyscanner)
+int yyget_column (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
@@ -3320,7 +3483,7 @@
/** Get the input stream.
* @param yyscanner The scanner object.
*/
-FILE *quickstep_yyget_in (yyscan_t yyscanner)
+FILE *yyget_in (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yyin;
@@ -3329,7 +3492,7 @@
/** Get the output stream.
* @param yyscanner The scanner object.
*/
-FILE *quickstep_yyget_out (yyscan_t yyscanner)
+FILE *yyget_out (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yyout;
@@ -3338,7 +3501,7 @@
/** Get the length of the current token.
* @param yyscanner The scanner object.
*/
-int quickstep_yyget_leng (yyscan_t yyscanner)
+int yyget_leng (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yyleng;
@@ -3348,7 +3511,7 @@
* @param yyscanner The scanner object.
*/
-char *quickstep_yyget_text (yyscan_t yyscanner)
+char *yyget_text (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yytext;
@@ -3358,7 +3521,7 @@
* @param user_defined The data to be associated with this scanner.
* @param yyscanner The scanner object.
*/
-void quickstep_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
+void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yyextra = user_defined ;
@@ -3368,13 +3531,13 @@
* @param _line_number line number
* @param yyscanner The scanner object.
*/
-void quickstep_yyset_lineno (int _line_number , yyscan_t yyscanner)
+void yyset_lineno (int _line_number , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
/* lineno is only valid if an input buffer exists. */
if (! YY_CURRENT_BUFFER )
- YY_FATAL_ERROR( "quickstep_yyset_lineno called with no buffer" );
+ YY_FATAL_ERROR( "yyset_lineno called with no buffer" );
yylineno = _line_number;
}
@@ -3383,13 +3546,13 @@
* @param _column_no column number
* @param yyscanner The scanner object.
*/
-void quickstep_yyset_column (int _column_no , yyscan_t yyscanner)
+void yyset_column (int _column_no , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
/* column is only valid if an input buffer exists. */
if (! YY_CURRENT_BUFFER )
- YY_FATAL_ERROR( "quickstep_yyset_column called with no buffer" );
+ YY_FATAL_ERROR( "yyset_column called with no buffer" );
yycolumn = _column_no;
}
@@ -3398,27 +3561,27 @@
* input buffer.
* @param _in_str A readable stream.
* @param yyscanner The scanner object.
- * @see quickstep_yy_switch_to_buffer
+ * @see yy_switch_to_buffer
*/
-void quickstep_yyset_in (FILE * _in_str , yyscan_t yyscanner)
+void yyset_in (FILE * _in_str , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yyin = _in_str ;
}
-void quickstep_yyset_out (FILE * _out_str , yyscan_t yyscanner)
+void yyset_out (FILE * _out_str , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yyout = _out_str ;
}
-int quickstep_yyget_debug (yyscan_t yyscanner)
+int yyget_debug (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yy_flex_debug;
}
-void quickstep_yyset_debug (int _bdebug , yyscan_t yyscanner)
+void yyset_debug (int _bdebug , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yy_flex_debug = _bdebug ;
@@ -3426,25 +3589,25 @@
/* Accessor methods for yylval and yylloc */
-YYSTYPE * quickstep_yyget_lval (yyscan_t yyscanner)
+YYSTYPE * yyget_lval (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yylval;
}
-void quickstep_yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
+void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yylval = yylval_param;
}
-YYLTYPE *quickstep_yyget_lloc (yyscan_t yyscanner)
+YYLTYPE *yyget_lloc (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
return yylloc;
}
-void quickstep_yyset_lloc (YYLTYPE * yylloc_param , yyscan_t yyscanner)
+void yyset_lloc (YYLTYPE * yylloc_param , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
yylloc = yylloc_param;
@@ -3452,18 +3615,18 @@
/* User-visible API */
-/* quickstep_yylex_init is special because it creates the scanner itself, so it is
+/* yylex_init is special because it creates the scanner itself, so it is
* the ONLY reentrant function that doesn't take the scanner as the last argument.
* That's why we explicitly handle the declaration, instead of using our macros.
*/
-int quickstep_yylex_init(yyscan_t* ptr_yy_globals)
+int yylex_init(yyscan_t* ptr_yy_globals)
{
if (ptr_yy_globals == NULL){
errno = EINVAL;
return 1;
}
- *ptr_yy_globals = (yyscan_t) quickstep_yyalloc ( sizeof( struct yyguts_t ), NULL );
+ *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );
if (*ptr_yy_globals == NULL){
errno = ENOMEM;
@@ -3476,25 +3639,25 @@
return yy_init_globals ( *ptr_yy_globals );
}
-/* quickstep_yylex_init_extra has the same functionality as quickstep_yylex_init, but follows the
+/* yylex_init_extra has the same functionality as yylex_init, but follows the
* convention of taking the scanner as the last argument. Note however, that
* this is a *pointer* to a scanner, as it will be allocated by this call (and
* is the reason, too, why this function also must handle its own declaration).
- * The user defined value in the first argument will be available to quickstep_yyalloc in
+ * The user defined value in the first argument will be available to yyalloc in
* the yyextra field.
*/
-int quickstep_yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals )
{
struct yyguts_t dummy_yyguts;
- quickstep_yyset_extra (yy_user_defined, &dummy_yyguts);
+ yyset_extra (yy_user_defined, &dummy_yyguts);
if (ptr_yy_globals == NULL){
errno = EINVAL;
return 1;
}
- *ptr_yy_globals = (yyscan_t) quickstep_yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+ *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
if (*ptr_yy_globals == NULL){
errno = ENOMEM;
@@ -3505,7 +3668,7 @@
yy_init_globals. Leave at 0x00 for releases. */
memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
- quickstep_yyset_extra (yy_user_defined, *ptr_yy_globals);
+ yyset_extra (yy_user_defined, *ptr_yy_globals);
return yy_init_globals ( *ptr_yy_globals );
}
@@ -3514,7 +3677,7 @@
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
/* Initialization is the same as for the non-reentrant scanner.
- * This function is called from quickstep_yylex_destroy(), so don't allocate here.
+ * This function is called from yylex_destroy(), so don't allocate here.
*/
yyg->yy_buffer_stack = NULL;
@@ -3538,37 +3701,37 @@
#endif
/* For future reference: Set errno on error, since we are called by
- * quickstep_yylex_init()
+ * yylex_init()
*/
return 0;
}
-/* quickstep_yylex_destroy is for both reentrant and non-reentrant scanners. */
-int quickstep_yylex_destroy (yyscan_t yyscanner)
+/* yylex_destroy is for both reentrant and non-reentrant scanners. */
+int yylex_destroy (yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
/* Pop the buffer stack, destroying each element. */
while(YY_CURRENT_BUFFER){
- quickstep_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner );
+ yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner );
YY_CURRENT_BUFFER_LVALUE = NULL;
- quickstep_yypop_buffer_state(yyscanner);
+ yypop_buffer_state(yyscanner);
}
/* Destroy the stack itself. */
- quickstep_yyfree(yyg->yy_buffer_stack ,yyscanner);
+ yyfree(yyg->yy_buffer_stack , yyscanner);
yyg->yy_buffer_stack = NULL;
/* Destroy the start condition stack. */
- quickstep_yyfree(yyg->yy_start_stack ,yyscanner );
+ yyfree( yyg->yy_start_stack , yyscanner );
yyg->yy_start_stack = NULL;
/* Reset the globals. This is important in a non-reentrant scanner so the next time
- * quickstep_yylex() is called, initialization will occur. */
+ * yylex() is called, initialization will occur. */
yy_init_globals( yyscanner);
/* Destroy the main struct (reentrant only). */
- quickstep_yyfree ( yyscanner , yyscanner );
+ yyfree ( yyscanner , yyscanner );
yyscanner = NULL;
return 0;
}
@@ -3600,14 +3763,14 @@
}
#endif
-void *quickstep_yyalloc (yy_size_t size , yyscan_t yyscanner)
+void *yyalloc (yy_size_t size , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
(void)yyg;
return malloc(size);
}
-void *quickstep_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
+void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner)
{
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
(void)yyg;
@@ -3622,15 +3785,15 @@
return realloc(ptr, size);
}
-void quickstep_yyfree (void * ptr , yyscan_t yyscanner)
+void 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 */
+ free( (char *) ptr ); /* see yyrealloc() for (char *) cast */
}
#define YYTABLES_NAME "yytables"
-#line 469 "../SqlLexer.lpp"
+#line 470 "../SqlLexer.lpp"
diff --git a/parser/preprocessed/SqlLexer_gen.hpp b/parser/preprocessed/SqlLexer_gen.hpp
index 86e36f0..5fafae5 100644
--- a/parser/preprocessed/SqlLexer_gen.hpp
+++ b/parser/preprocessed/SqlLexer_gen.hpp
@@ -13,88 +13,244 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 3
+#define YY_FLEX_SUBMINOR_VERSION 4
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
- #define yy_create_buffer quickstep_yy_create_buffer
+#ifdef yy_create_buffer
+#define quickstep_yy_create_buffer_ALREADY_DEFINED
+#else
+#define yy_create_buffer quickstep_yy_create_buffer
+#endif
- #define yy_delete_buffer quickstep_yy_delete_buffer
+#ifdef yy_delete_buffer
+#define quickstep_yy_delete_buffer_ALREADY_DEFINED
+#else
+#define yy_delete_buffer quickstep_yy_delete_buffer
+#endif
- #define yy_scan_buffer quickstep_yy_scan_buffer
+#ifdef yy_scan_buffer
+#define quickstep_yy_scan_buffer_ALREADY_DEFINED
+#else
+#define yy_scan_buffer quickstep_yy_scan_buffer
+#endif
- #define yy_scan_string quickstep_yy_scan_string
+#ifdef yy_scan_string
+#define quickstep_yy_scan_string_ALREADY_DEFINED
+#else
+#define yy_scan_string quickstep_yy_scan_string
+#endif
- #define yy_scan_bytes quickstep_yy_scan_bytes
+#ifdef yy_scan_bytes
+#define quickstep_yy_scan_bytes_ALREADY_DEFINED
+#else
+#define yy_scan_bytes quickstep_yy_scan_bytes
+#endif
- #define yy_init_buffer quickstep_yy_init_buffer
+#ifdef yy_init_buffer
+#define quickstep_yy_init_buffer_ALREADY_DEFINED
+#else
+#define yy_init_buffer quickstep_yy_init_buffer
+#endif
- #define yy_flush_buffer quickstep_yy_flush_buffer
+#ifdef yy_flush_buffer
+#define quickstep_yy_flush_buffer_ALREADY_DEFINED
+#else
+#define yy_flush_buffer quickstep_yy_flush_buffer
+#endif
- #define yy_load_buffer_state quickstep_yy_load_buffer_state
+#ifdef yy_load_buffer_state
+#define quickstep_yy_load_buffer_state_ALREADY_DEFINED
+#else
+#define yy_load_buffer_state quickstep_yy_load_buffer_state
+#endif
- #define yy_switch_to_buffer quickstep_yy_switch_to_buffer
+#ifdef yy_switch_to_buffer
+#define quickstep_yy_switch_to_buffer_ALREADY_DEFINED
+#else
+#define yy_switch_to_buffer quickstep_yy_switch_to_buffer
+#endif
- #define yypush_buffer_state quickstep_yypush_buffer_state
+#ifdef yypush_buffer_state
+#define quickstep_yypush_buffer_state_ALREADY_DEFINED
+#else
+#define yypush_buffer_state quickstep_yypush_buffer_state
+#endif
- #define yypop_buffer_state quickstep_yypop_buffer_state
+#ifdef yypop_buffer_state
+#define quickstep_yypop_buffer_state_ALREADY_DEFINED
+#else
+#define yypop_buffer_state quickstep_yypop_buffer_state
+#endif
- #define yyensure_buffer_stack quickstep_yyensure_buffer_stack
+#ifdef yyensure_buffer_stack
+#define quickstep_yyensure_buffer_stack_ALREADY_DEFINED
+#else
+#define yyensure_buffer_stack quickstep_yyensure_buffer_stack
+#endif
- #define yylex quickstep_yylex
+#ifdef yylex
+#define quickstep_yylex_ALREADY_DEFINED
+#else
+#define yylex quickstep_yylex
+#endif
- #define yyrestart quickstep_yyrestart
+#ifdef yyrestart
+#define quickstep_yyrestart_ALREADY_DEFINED
+#else
+#define yyrestart quickstep_yyrestart
+#endif
- #define yylex_init quickstep_yylex_init
+#ifdef yylex_init
+#define quickstep_yylex_init_ALREADY_DEFINED
+#else
+#define yylex_init quickstep_yylex_init
+#endif
- #define yylex_init_extra quickstep_yylex_init_extra
+#ifdef yylex_init_extra
+#define quickstep_yylex_init_extra_ALREADY_DEFINED
+#else
+#define yylex_init_extra quickstep_yylex_init_extra
+#endif
- #define yylex_destroy quickstep_yylex_destroy
+#ifdef yylex_destroy
+#define quickstep_yylex_destroy_ALREADY_DEFINED
+#else
+#define yylex_destroy quickstep_yylex_destroy
+#endif
- #define yyget_debug quickstep_yyget_debug
+#ifdef yyget_debug
+#define quickstep_yyget_debug_ALREADY_DEFINED
+#else
+#define yyget_debug quickstep_yyget_debug
+#endif
- #define yyset_debug quickstep_yyset_debug
+#ifdef yyset_debug
+#define quickstep_yyset_debug_ALREADY_DEFINED
+#else
+#define yyset_debug quickstep_yyset_debug
+#endif
- #define yyget_extra quickstep_yyget_extra
+#ifdef yyget_extra
+#define quickstep_yyget_extra_ALREADY_DEFINED
+#else
+#define yyget_extra quickstep_yyget_extra
+#endif
- #define yyset_extra quickstep_yyset_extra
+#ifdef yyset_extra
+#define quickstep_yyset_extra_ALREADY_DEFINED
+#else
+#define yyset_extra quickstep_yyset_extra
+#endif
- #define yyget_in quickstep_yyget_in
+#ifdef yyget_in
+#define quickstep_yyget_in_ALREADY_DEFINED
+#else
+#define yyget_in quickstep_yyget_in
+#endif
- #define yyset_in quickstep_yyset_in
+#ifdef yyset_in
+#define quickstep_yyset_in_ALREADY_DEFINED
+#else
+#define yyset_in quickstep_yyset_in
+#endif
- #define yyget_out quickstep_yyget_out
+#ifdef yyget_out
+#define quickstep_yyget_out_ALREADY_DEFINED
+#else
+#define yyget_out quickstep_yyget_out
+#endif
- #define yyset_out quickstep_yyset_out
+#ifdef yyset_out
+#define quickstep_yyset_out_ALREADY_DEFINED
+#else
+#define yyset_out quickstep_yyset_out
+#endif
- #define yyget_leng quickstep_yyget_leng
+#ifdef yyget_leng
+#define quickstep_yyget_leng_ALREADY_DEFINED
+#else
+#define yyget_leng quickstep_yyget_leng
+#endif
- #define yyget_text quickstep_yyget_text
+#ifdef yyget_text
+#define quickstep_yyget_text_ALREADY_DEFINED
+#else
+#define yyget_text quickstep_yyget_text
+#endif
- #define yyget_lineno quickstep_yyget_lineno
+#ifdef yyget_lineno
+#define quickstep_yyget_lineno_ALREADY_DEFINED
+#else
+#define yyget_lineno quickstep_yyget_lineno
+#endif
- #define yyset_lineno quickstep_yyset_lineno
+#ifdef yyset_lineno
+#define quickstep_yyset_lineno_ALREADY_DEFINED
+#else
+#define yyset_lineno quickstep_yyset_lineno
+#endif
- #define yyget_column quickstep_yyget_column
+#ifdef yyget_column
+#define quickstep_yyget_column_ALREADY_DEFINED
+#else
+#define yyget_column quickstep_yyget_column
+#endif
- #define yyset_column quickstep_yyset_column
+#ifdef yyset_column
+#define quickstep_yyset_column_ALREADY_DEFINED
+#else
+#define yyset_column quickstep_yyset_column
+#endif
- #define yywrap quickstep_yywrap
+#ifdef yywrap
+#define quickstep_yywrap_ALREADY_DEFINED
+#else
+#define yywrap quickstep_yywrap
+#endif
- #define yyget_lval quickstep_yyget_lval
+#ifdef yyget_lval
+#define quickstep_yyget_lval_ALREADY_DEFINED
+#else
+#define yyget_lval quickstep_yyget_lval
+#endif
- #define yyset_lval quickstep_yyset_lval
+#ifdef yyset_lval
+#define quickstep_yyset_lval_ALREADY_DEFINED
+#else
+#define yyset_lval quickstep_yyset_lval
+#endif
- #define yyget_lloc quickstep_yyget_lloc
+#ifdef yyget_lloc
+#define quickstep_yyget_lloc_ALREADY_DEFINED
+#else
+#define yyget_lloc quickstep_yyget_lloc
+#endif
- #define yyset_lloc quickstep_yyset_lloc
+#ifdef yyset_lloc
+#define quickstep_yyset_lloc_ALREADY_DEFINED
+#else
+#define yyset_lloc quickstep_yyset_lloc
+#endif
- #define yyalloc quickstep_yyalloc
+#ifdef yyalloc
+#define quickstep_yyalloc_ALREADY_DEFINED
+#else
+#define yyalloc quickstep_yyalloc
+#endif
- #define yyrealloc quickstep_yyrealloc
+#ifdef yyrealloc
+#define quickstep_yyrealloc_ALREADY_DEFINED
+#else
+#define yyrealloc quickstep_yyrealloc
+#endif
- #define yyfree quickstep_yyfree
+#ifdef yyfree
+#define quickstep_yyfree_ALREADY_DEFINED
+#else
+#define yyfree quickstep_yyfree
+#endif
/* First, we deal with platform-specific or compiler-specific issues. */
@@ -166,10 +322,16 @@
#define UINT32_MAX (4294967295U)
#endif
+#ifndef SIZE_MAX
+#define SIZE_MAX (~(size_t)0)
+#endif
+
#endif /* ! C99 */
#endif /* ! FLEXINT_H */
+/* begin standard C++ headers. */
+
/* TODO: this is always defined, so inline it */
#define yyconst const
@@ -270,21 +432,21 @@
};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-void quickstep_yyrestart ( FILE *input_file , yyscan_t yyscanner );
-void quickstep_yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
-YY_BUFFER_STATE quickstep_yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
-void quickstep_yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
-void quickstep_yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
-void quickstep_yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
-void quickstep_yypop_buffer_state ( yyscan_t yyscanner );
+void yyrestart ( FILE *input_file , yyscan_t yyscanner );
+void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner );
+void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
+void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner );
+void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner );
+void yypop_buffer_state ( yyscan_t yyscanner );
-YY_BUFFER_STATE quickstep_yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
-YY_BUFFER_STATE quickstep_yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
-YY_BUFFER_STATE quickstep_yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner );
+YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner );
-void *quickstep_yyalloc ( yy_size_t , yyscan_t yyscanner );
-void *quickstep_yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
-void quickstep_yyfree ( void * , yyscan_t yyscanner );
+void *yyalloc ( yy_size_t , yyscan_t yyscanner );
+void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner );
+void yyfree ( void * , yyscan_t yyscanner );
/* Begin user sect3 */
@@ -315,50 +477,50 @@
#define YY_EXTRA_TYPE void *
#endif
-int quickstep_yylex_init (yyscan_t* scanner);
+int yylex_init (yyscan_t* scanner);
-int quickstep_yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
+int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);
/* Accessor methods to globals.
These are made visible to non-reentrant scanners for convenience. */
-int quickstep_yylex_destroy ( yyscan_t yyscanner );
+int yylex_destroy ( yyscan_t yyscanner );
-int quickstep_yyget_debug ( yyscan_t yyscanner );
+int yyget_debug ( yyscan_t yyscanner );
-void quickstep_yyset_debug ( int debug_flag , yyscan_t yyscanner );
+void yyset_debug ( int debug_flag , yyscan_t yyscanner );
-YY_EXTRA_TYPE quickstep_yyget_extra ( yyscan_t yyscanner );
+YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner );
-void quickstep_yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
+void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner );
-FILE *quickstep_yyget_in ( yyscan_t yyscanner );
+FILE *yyget_in ( yyscan_t yyscanner );
-void quickstep_yyset_in ( FILE * _in_str , yyscan_t yyscanner );
+void yyset_in ( FILE * _in_str , yyscan_t yyscanner );
-FILE *quickstep_yyget_out ( yyscan_t yyscanner );
+FILE *yyget_out ( yyscan_t yyscanner );
-void quickstep_yyset_out ( FILE * _out_str , yyscan_t yyscanner );
+void yyset_out ( FILE * _out_str , yyscan_t yyscanner );
- int quickstep_yyget_leng ( yyscan_t yyscanner );
+ int yyget_leng ( yyscan_t yyscanner );
-char *quickstep_yyget_text ( yyscan_t yyscanner );
+char *yyget_text ( yyscan_t yyscanner );
-int quickstep_yyget_lineno ( yyscan_t yyscanner );
+int yyget_lineno ( yyscan_t yyscanner );
-void quickstep_yyset_lineno ( int _line_number , yyscan_t yyscanner );
+void yyset_lineno ( int _line_number , yyscan_t yyscanner );
-int quickstep_yyget_column ( yyscan_t yyscanner );
+int yyget_column ( yyscan_t yyscanner );
-void quickstep_yyset_column ( int _column_no , yyscan_t yyscanner );
+void yyset_column ( int _column_no , yyscan_t yyscanner );
-YYSTYPE * quickstep_yyget_lval ( yyscan_t yyscanner );
+YYSTYPE * yyget_lval ( yyscan_t yyscanner );
-void quickstep_yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
+void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner );
- YYLTYPE *quickstep_yyget_lloc ( yyscan_t yyscanner );
+ YYLTYPE *yyget_lloc ( yyscan_t yyscanner );
- void quickstep_yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner );
+ void yyset_lloc ( YYLTYPE * yylloc_param , yyscan_t yyscanner );
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -366,9 +528,9 @@
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
-extern "C" int quickstep_yywrap ( yyscan_t yyscanner );
+extern "C" int yywrap ( yyscan_t yyscanner );
#else
-extern int quickstep_yywrap ( yyscan_t yyscanner );
+extern int yywrap ( yyscan_t yyscanner );
#endif
#endif
@@ -405,10 +567,10 @@
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1
-extern int quickstep_yylex \
+extern int yylex \
(YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner);
-#define YY_DECL int quickstep_yylex \
+#define YY_DECL int yylex \
(YYSTYPE * yylval_param, YYLTYPE * yylloc_param , yyscan_t yyscanner)
#endif /* !YY_DECL */
@@ -426,9 +588,154 @@
#undef YY_DECL
#endif
-#line 469 "../SqlLexer.lpp"
+#ifndef quickstep_yy_create_buffer_ALREADY_DEFINED
+#undef yy_create_buffer
+#endif
+#ifndef quickstep_yy_delete_buffer_ALREADY_DEFINED
+#undef yy_delete_buffer
+#endif
+#ifndef quickstep_yy_scan_buffer_ALREADY_DEFINED
+#undef yy_scan_buffer
+#endif
+#ifndef quickstep_yy_scan_string_ALREADY_DEFINED
+#undef yy_scan_string
+#endif
+#ifndef quickstep_yy_scan_bytes_ALREADY_DEFINED
+#undef yy_scan_bytes
+#endif
+#ifndef quickstep_yy_init_buffer_ALREADY_DEFINED
+#undef yy_init_buffer
+#endif
+#ifndef quickstep_yy_flush_buffer_ALREADY_DEFINED
+#undef yy_flush_buffer
+#endif
+#ifndef quickstep_yy_load_buffer_state_ALREADY_DEFINED
+#undef yy_load_buffer_state
+#endif
+#ifndef quickstep_yy_switch_to_buffer_ALREADY_DEFINED
+#undef yy_switch_to_buffer
+#endif
+#ifndef quickstep_yypush_buffer_state_ALREADY_DEFINED
+#undef yypush_buffer_state
+#endif
+#ifndef quickstep_yypop_buffer_state_ALREADY_DEFINED
+#undef yypop_buffer_state
+#endif
+#ifndef quickstep_yyensure_buffer_stack_ALREADY_DEFINED
+#undef yyensure_buffer_stack
+#endif
+#ifndef quickstep_yylex_ALREADY_DEFINED
+#undef yylex
+#endif
+#ifndef quickstep_yyrestart_ALREADY_DEFINED
+#undef yyrestart
+#endif
+#ifndef quickstep_yylex_init_ALREADY_DEFINED
+#undef yylex_init
+#endif
+#ifndef quickstep_yylex_init_extra_ALREADY_DEFINED
+#undef yylex_init_extra
+#endif
+#ifndef quickstep_yylex_destroy_ALREADY_DEFINED
+#undef yylex_destroy
+#endif
+#ifndef quickstep_yyget_debug_ALREADY_DEFINED
+#undef yyget_debug
+#endif
+#ifndef quickstep_yyset_debug_ALREADY_DEFINED
+#undef yyset_debug
+#endif
+#ifndef quickstep_yyget_extra_ALREADY_DEFINED
+#undef yyget_extra
+#endif
+#ifndef quickstep_yyset_extra_ALREADY_DEFINED
+#undef yyset_extra
+#endif
+#ifndef quickstep_yyget_in_ALREADY_DEFINED
+#undef yyget_in
+#endif
+#ifndef quickstep_yyset_in_ALREADY_DEFINED
+#undef yyset_in
+#endif
+#ifndef quickstep_yyget_out_ALREADY_DEFINED
+#undef yyget_out
+#endif
+#ifndef quickstep_yyset_out_ALREADY_DEFINED
+#undef yyset_out
+#endif
+#ifndef quickstep_yyget_leng_ALREADY_DEFINED
+#undef yyget_leng
+#endif
+#ifndef quickstep_yyget_text_ALREADY_DEFINED
+#undef yyget_text
+#endif
+#ifndef quickstep_yyget_lineno_ALREADY_DEFINED
+#undef yyget_lineno
+#endif
+#ifndef quickstep_yyset_lineno_ALREADY_DEFINED
+#undef yyset_lineno
+#endif
+#ifndef quickstep_yyget_column_ALREADY_DEFINED
+#undef yyget_column
+#endif
+#ifndef quickstep_yyset_column_ALREADY_DEFINED
+#undef yyset_column
+#endif
+#ifndef quickstep_yywrap_ALREADY_DEFINED
+#undef yywrap
+#endif
+#ifndef quickstep_yyget_lval_ALREADY_DEFINED
+#undef yyget_lval
+#endif
+#ifndef quickstep_yyset_lval_ALREADY_DEFINED
+#undef yyset_lval
+#endif
+#ifndef quickstep_yyget_lloc_ALREADY_DEFINED
+#undef yyget_lloc
+#endif
+#ifndef quickstep_yyset_lloc_ALREADY_DEFINED
+#undef yyset_lloc
+#endif
+#ifndef quickstep_yyalloc_ALREADY_DEFINED
+#undef yyalloc
+#endif
+#ifndef quickstep_yyrealloc_ALREADY_DEFINED
+#undef yyrealloc
+#endif
+#ifndef quickstep_yyfree_ALREADY_DEFINED
+#undef yyfree
+#endif
+#ifndef quickstep_yytext_ALREADY_DEFINED
+#undef yytext
+#endif
+#ifndef quickstep_yyleng_ALREADY_DEFINED
+#undef yyleng
+#endif
+#ifndef quickstep_yyin_ALREADY_DEFINED
+#undef yyin
+#endif
+#ifndef quickstep_yyout_ALREADY_DEFINED
+#undef yyout
+#endif
+#ifndef quickstep_yy_flex_debug_ALREADY_DEFINED
+#undef yy_flex_debug
+#endif
+#ifndef quickstep_yylineno_ALREADY_DEFINED
+#undef yylineno
+#endif
+#ifndef quickstep_yytables_fload_ALREADY_DEFINED
+#undef yytables_fload
+#endif
+#ifndef quickstep_yytables_destroy_ALREADY_DEFINED
+#undef yytables_destroy
+#endif
+#ifndef quickstep_yyTABLES_NAME_ALREADY_DEFINED
+#undef yyTABLES_NAME
+#endif
+
+#line 470 "../SqlLexer.lpp"
-#line 432 "SqlLexer_gen.hpp"
+#line 739 "SqlLexer_gen.hpp"
#undef quickstep_yyIN_HEADER
#endif /* quickstep_yyHEADER_H */
diff --git a/parser/preprocessed/SqlParser_gen.cpp b/parser/preprocessed/SqlParser_gen.cpp
index 5cd7426..72c61dd 100644
--- a/parser/preprocessed/SqlParser_gen.cpp
+++ b/parser/preprocessed/SqlParser_gen.cpp
@@ -237,90 +237,91 @@
TOKEN_DECIMAL = 304,
TOKEN_DEFAULT = 305,
TOKEN_DELETE = 306,
- TOKEN_DELIMITER = 307,
- TOKEN_DESC = 308,
- TOKEN_DISTINCT = 309,
- TOKEN_DOUBLE = 310,
- TOKEN_DROP = 311,
- TOKEN_ELSE = 312,
- TOKEN_END = 313,
- TOKEN_ESCAPE_STRINGS = 314,
- TOKEN_EXISTS = 315,
- TOKEN_EXTRACT = 316,
- TOKEN_FALSE = 317,
- TOKEN_FIRST = 318,
- TOKEN_FLOAT = 319,
- TOKEN_FOLLOWING = 320,
- TOKEN_FOR = 321,
- TOKEN_FOREIGN = 322,
- TOKEN_FROM = 323,
- TOKEN_FULL = 324,
- TOKEN_GROUP = 325,
- TOKEN_HASH = 326,
- TOKEN_HAVING = 327,
- TOKEN_HOUR = 328,
- TOKEN_IN = 329,
- TOKEN_INDEX = 330,
- TOKEN_INNER = 331,
- TOKEN_INSERT = 332,
- TOKEN_INTEGER = 333,
- TOKEN_INTERVAL = 334,
- TOKEN_INTO = 335,
- TOKEN_JOIN = 336,
- TOKEN_KEY = 337,
- TOKEN_LAST = 338,
- TOKEN_LEFT = 339,
- TOKEN_LIMIT = 340,
- TOKEN_LONG = 341,
- TOKEN_MINUTE = 342,
- TOKEN_MONTH = 343,
- TOKEN_NULL = 344,
- TOKEN_NULLS = 345,
- TOKEN_OFF = 346,
- TOKEN_ON = 347,
- TOKEN_ORDER = 348,
- TOKEN_OUTER = 349,
- TOKEN_OVER = 350,
- TOKEN_PARTITION = 351,
- TOKEN_PARTITIONS = 352,
- TOKEN_PERCENT = 353,
- TOKEN_PRECEDING = 354,
- TOKEN_PRIMARY = 355,
- TOKEN_PRIORITY = 356,
- TOKEN_QUIT = 357,
- TOKEN_RANGE = 358,
- TOKEN_REAL = 359,
- TOKEN_REFERENCES = 360,
- TOKEN_RIGHT = 361,
- TOKEN_ROW = 362,
- TOKEN_ROW_DELIMITER = 363,
- TOKEN_ROWS = 364,
- TOKEN_SECOND = 365,
- TOKEN_SELECT = 366,
- TOKEN_SET = 367,
- TOKEN_SMA = 368,
- TOKEN_SMALLINT = 369,
+ TOKEN_DESC = 307,
+ TOKEN_DISTINCT = 308,
+ TOKEN_DOUBLE = 309,
+ TOKEN_DROP = 310,
+ TOKEN_ELSE = 311,
+ TOKEN_END = 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_STDERR = 368,
+ TOKEN_STDOUT = 369,
TOKEN_SUBSTRING = 370,
TOKEN_TABLE = 371,
TOKEN_THEN = 372,
TOKEN_TIME = 373,
TOKEN_TIMESTAMP = 374,
- TOKEN_TRUE = 375,
- TOKEN_TUPLESAMPLE = 376,
- TOKEN_UNBOUNDED = 377,
- TOKEN_UNIQUE = 378,
- TOKEN_UPDATE = 379,
- TOKEN_USING = 380,
- TOKEN_VALUES = 381,
- TOKEN_VARCHAR = 382,
- TOKEN_WHEN = 383,
- TOKEN_WHERE = 384,
- TOKEN_WINDOW = 385,
- TOKEN_WITH = 386,
- TOKEN_YEAR = 387,
- TOKEN_YEARMONTH = 388,
- TOKEN_EOF = 389,
- TOKEN_LEX_ERROR = 390
+ TOKEN_TO = 375,
+ TOKEN_TRUE = 376,
+ TOKEN_TUPLESAMPLE = 377,
+ TOKEN_UNBOUNDED = 378,
+ TOKEN_UNIQUE = 379,
+ TOKEN_UPDATE = 380,
+ TOKEN_USING = 381,
+ TOKEN_VALUES = 382,
+ TOKEN_VARCHAR = 383,
+ TOKEN_WHEN = 384,
+ TOKEN_WHERE = 385,
+ TOKEN_WINDOW = 386,
+ TOKEN_WITH = 387,
+ TOKEN_YEAR = 388,
+ TOKEN_YEARMONTH = 389,
+ TOKEN_EOF = 390,
+ TOKEN_LEX_ERROR = 391
};
#endif
@@ -380,8 +381,7 @@
quickstep::ParseKeyStringValue *key_string_value_;
quickstep::ParseKeyStringList *key_string_list_;
quickstep::ParseKeyIntegerValue *key_integer_value_;
-
- quickstep::ParseCopyFromParams *copy_from_params_;
+ quickstep::ParseKeyBoolValue *key_bool_value_;
quickstep::ParseAssignment *assignment_;
quickstep::PtrList<quickstep::ParseAssignment> *assignment_list_;
@@ -394,7 +394,7 @@
quickstep::ParseStatementUpdate *update_statement_;
quickstep::ParseStatementInsert *insert_statement_;
quickstep::ParseStatementDelete *delete_statement_;
- quickstep::ParseStatementCopyFrom *copy_from_statement_;
+ quickstep::ParseStatementCopy *copy_statement_;
quickstep::ParseStatementCreateTable *create_table_statement_;
quickstep::ParsePartitionClause *partition_clause_;
quickstep::ParseBlockProperties *block_properties_;
@@ -460,7 +460,7 @@
#endif /* !YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED */
/* Copy the second part of user declarations. */
-#line 223 "../SqlParser.ypp" /* yacc.c:358 */
+#line 222 "../SqlParser.ypp" /* yacc.c:358 */
/* This header needs YYSTYPE, which is defined by the %union directive above */
#include "SqlLexer_gen.hpp"
@@ -708,23 +708,23 @@
#endif /* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 49
+#define YYFINAL 50
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 1207
+#define YYLAST 1391
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 147
+#define YYNTOKENS 148
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 109
+#define YYNNTS 110
/* YYNRULES -- Number of rules. */
-#define YYNRULES 293
+#define YYNRULES 298
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 543
+#define YYNSTATES 550
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 390
+#define YYMAXUTOK 391
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -734,11 +734,11 @@
static const yytype_uint8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 142, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 143, 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, 146, 2, 2,
- 143, 144, 23, 21, 145, 22, 27, 24, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 141,
+ 2, 2, 2, 2, 2, 2, 2, 147, 2, 2,
+ 144, 145, 23, 21, 146, 22, 27, 24, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 142,
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,
@@ -772,43 +772,43 @@
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, 138, 139,
- 140
+ 140, 141
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 639, 639, 643, 647, 651, 655, 658, 665, 668,
- 671, 674, 677, 680, 683, 686, 689, 692, 698, 704,
- 711, 717, 724, 733, 738, 747, 752, 757, 761, 767,
- 772, 775, 778, 783, 786, 789, 792, 795, 798, 801,
- 804, 807, 810, 822, 825, 828, 846, 866, 869, 872,
- 877, 882, 888, 894, 903, 907, 913, 916, 921, 926,
- 931, 938, 945, 949, 955, 958, 963, 966, 971, 974,
- 979, 982, 1001, 1004, 1009, 1013, 1019, 1022, 1025, 1030,
- 1033, 1040, 1045, 1056, 1061, 1065, 1069, 1075, 1078, 1084,
- 1092, 1095, 1098, 1104, 1109, 1112, 1117, 1121, 1125, 1129,
- 1135, 1140, 1145, 1149, 1155, 1164, 1167, 1172, 1175, 1194,
- 1199, 1203, 1209, 1215, 1224, 1229, 1237, 1243, 1249, 1252,
- 1255, 1260, 1263, 1268, 1272, 1278, 1281, 1284, 1289, 1294,
- 1299, 1302, 1305, 1310, 1313, 1316, 1319, 1322, 1325, 1328,
- 1331, 1336, 1339, 1344, 1348, 1352, 1355, 1359, 1362, 1367,
- 1370, 1375, 1378, 1383, 1387, 1393, 1396, 1401, 1404, 1409,
- 1412, 1417, 1420, 1439, 1442, 1447, 1451, 1457, 1463, 1468,
- 1471, 1476, 1479, 1484, 1487, 1492, 1495, 1500, 1501, 1504,
- 1509, 1510, 1513, 1518, 1522, 1528, 1535, 1538, 1541, 1546,
- 1549, 1552, 1558, 1561, 1566, 1571, 1580, 1585, 1594, 1599,
- 1602, 1607, 1610, 1615, 1621, 1627, 1630, 1633, 1636, 1639,
- 1642, 1648, 1657, 1660, 1665, 1668, 1673, 1676, 1681, 1684,
- 1687, 1690, 1694, 1698, 1701, 1704, 1707, 1710, 1715, 1719,
- 1723, 1726, 1731, 1736, 1740, 1746, 1749, 1754, 1758, 1764,
- 1769, 1773, 1779, 1784, 1787, 1792, 1796, 1802, 1805, 1808,
- 1811, 1823, 1827, 1846, 1859, 1874, 1877, 1880, 1883, 1886,
- 1889, 1894, 1898, 1904, 1907, 1912, 1916, 1923, 1926, 1929,
- 1932, 1935, 1938, 1941, 1944, 1947, 1950, 1955, 1966, 1969,
- 1974, 1977, 1980, 1986, 1990, 1996, 1999, 2007, 2010, 2013,
- 2016, 2022, 2027, 2032
+ 0, 640, 640, 644, 648, 652, 656, 659, 666, 669,
+ 672, 675, 678, 681, 684, 687, 690, 693, 699, 705,
+ 712, 718, 725, 734, 739, 748, 753, 758, 762, 768,
+ 773, 776, 779, 784, 787, 790, 793, 796, 799, 802,
+ 805, 808, 811, 823, 826, 829, 847, 867, 870, 873,
+ 878, 883, 889, 895, 904, 908, 914, 917, 922, 927,
+ 932, 939, 946, 950, 956, 959, 964, 967, 972, 975,
+ 980, 983, 1002, 1005, 1010, 1014, 1020, 1023, 1026, 1029,
+ 1034, 1037, 1040, 1047, 1052, 1063, 1068, 1073, 1077, 1081,
+ 1087, 1090, 1096, 1104, 1107, 1110, 1116, 1121, 1126, 1130,
+ 1136, 1140, 1143, 1148, 1151, 1156, 1161, 1166, 1170, 1176,
+ 1185, 1188, 1193, 1196, 1215, 1220, 1224, 1230, 1236, 1245,
+ 1250, 1258, 1264, 1270, 1273, 1276, 1281, 1284, 1289, 1293,
+ 1299, 1302, 1305, 1310, 1315, 1320, 1323, 1326, 1331, 1334,
+ 1337, 1340, 1343, 1346, 1349, 1352, 1357, 1360, 1365, 1369,
+ 1373, 1376, 1380, 1383, 1388, 1391, 1396, 1399, 1404, 1408,
+ 1414, 1417, 1422, 1425, 1430, 1433, 1438, 1441, 1460, 1463,
+ 1468, 1472, 1478, 1484, 1489, 1492, 1497, 1500, 1505, 1508,
+ 1513, 1516, 1521, 1522, 1525, 1530, 1531, 1534, 1539, 1543,
+ 1549, 1556, 1559, 1562, 1567, 1570, 1573, 1579, 1582, 1587,
+ 1592, 1601, 1606, 1615, 1620, 1623, 1628, 1631, 1636, 1642,
+ 1648, 1651, 1654, 1657, 1660, 1663, 1669, 1678, 1681, 1686,
+ 1689, 1694, 1697, 1702, 1705, 1708, 1711, 1715, 1719, 1722,
+ 1725, 1728, 1731, 1736, 1740, 1744, 1747, 1752, 1757, 1761,
+ 1767, 1770, 1775, 1779, 1785, 1790, 1794, 1800, 1805, 1808,
+ 1813, 1817, 1823, 1826, 1829, 1832, 1844, 1848, 1867, 1880,
+ 1895, 1898, 1901, 1904, 1907, 1910, 1915, 1919, 1925, 1928,
+ 1933, 1937, 1944, 1947, 1950, 1953, 1956, 1959, 1962, 1965,
+ 1968, 1971, 1976, 1987, 1990, 1995, 1998, 2001, 2007, 2011,
+ 2017, 2020, 2028, 2031, 2034, 2037, 2043, 2048, 2053
};
#endif
@@ -830,38 +830,38 @@
"TOKEN_CHARACTER", "TOKEN_CHECK", "TOKEN_COLUMN", "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_DELETE", "TOKEN_DESC", "TOKEN_DISTINCT", "TOKEN_DOUBLE",
+ "TOKEN_DROP", "TOKEN_ELSE", "TOKEN_END", "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_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",
+ "TOKEN_STDERR", "TOKEN_STDOUT", "TOKEN_SUBSTRING", "TOKEN_TABLE",
+ "TOKEN_THEN", "TOKEN_TIME", "TOKEN_TIMESTAMP", "TOKEN_TO", "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", "key_bool_value", "index_type",
+ "opt_index_properties", "insert_statement", "copy_statement",
+ "copy_to_target", "opt_copy_params", "update_statement",
"delete_statement", "assignment_list", "assignment_item",
"set_operation_statement", "opt_priority_clause", "with_clause",
"with_list", "with_list_element", "set_operation_union",
@@ -909,16 +909,16 @@
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, 388, 389,
- 390, 59, 10, 40, 41, 44, 37
+ 390, 391, 59, 10, 40, 41, 44, 37
};
# endif
-#define YYPACT_NINF -244
+#define YYPACT_NINF -395
#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-244)))
+ (!!((Yystate) == (-395)))
-#define YYTABLE_NINF -134
+#define YYTABLE_NINF -139
#define yytable_value_is_error(Yytable_value) \
0
@@ -927,61 +927,61 @@
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- 807, -244, -244, -55, 203, -26, -2, -6, 43, -244,
- 86, 203, 203, -244, 136, 125, -244, -244, -244, -244,
- -244, -244, -244, -244, -244, -244, -22, -3, 128, -244,
- -78, 182, 203, -244, -244, 130, 203, 203, 203, 203,
- 203, -244, -244, 633, 107, 89, -244, 209, 120, -244,
- -244, -244, 197, -3, 86, 161, -244, 137, -244, -244,
- -244, 27, 265, 180, 141, 170, -244, -25, -244, -244,
- 301, 313, -244, -244, -244, 660, 188, -244, 249, -244,
- -244, 206, -244, -244, 357, -244, -244, -244, -244, 221,
- -244, -244, 222, 282, 783, 366, 299, 231, -244, -244,
- 272, 7, -244, -244, 277, -244, -244, -244, -244, -244,
- 933, -5, 203, 203, 237, 203, 203, -244, 137, 374,
- -244, 233, 239, 246, 203, 203, 551, -244, -244, 244,
- 203, -244, -244, -244, 551, 47, 40, -244, 376, -244,
- 153, 153, 960, 381, -244, 8, 24, -244, 23, 170,
- 960, -244, -244, 203, 960, -244, -244, -244, -244, 960,
- 36, 313, -244, 203, 363, 94, -244, 378, -244, 137,
- -244, 144, -244, 137, 128, -244, 203, -21, 203, 203,
- 248, -244, 250, -244, 147, 1069, 810, 237, 469, 387,
- 388, -244, -244, 329, 380, 1042, 152, 45, 960, 48,
- -244, 960, -244, 333, 257, -244, -244, -244, -244, -244,
- -244, 330, -244, 168, 260, -244, -244, 19, 66, 146,
- -244, 264, 66, 51, 335, -244, -244, 7, -244, 304,
- -244, -244, 267, 960, -244, 279, 158, 203, -244, 960,
- -244, 203, -244, -244, 270, 331, 334, 273, -244, -244,
- -244, 165, 203, 290, -21, 203, -244, 77, -244, -244,
- 2, 64, 551, 551, 193, -244, -244, -244, -244, -244,
- -244, -244, -244, 960, 281, 960, 31, -244, 162, 294,
- 960, 71, -244, 364, 279, -244, -244, 960, 419, -244,
- 110, 203, -244, -244, 332, -244, 336, 337, 342, 23,
- -244, 423, 426, 66, 392, 361, 397, 296, 343, -244,
- 166, -244, 960, -244, 279, -244, 551, 300, 302, 203,
- 437, 119, 169, -244, 172, 421, 60, -244, 305, 316,
- -244, 355, 310, 1042, -244, 368, 203, -244, -244, 77,
- -244, -244, 388, -244, -244, -244, 960, 315, 95, 783,
- -244, 279, 362, -244, -244, 1042, 317, 279, 960, -244,
- 26, -15, -244, -244, -244, -244, -244, 23, 146, 356,
- 358, -244, 960, 551, 365, 960, -244, 420, 111, -244,
- 279, 4, 203, 203, 174, -244, -244, -244, -244, -244,
- -244, -244, 201, -244, 203, -244, -244, -244, -244, 321,
- -21, 427, 369, -244, 551, -244, -244, 323, -244, 238,
- 783, -244, 960, 179, -244, -244, 1042, 279, -244, 460,
- -244, 384, -244, -244, 326, 387, 435, 394, 326, 960,
- -244, -244, -244, 459, -244, 181, 183, -244, 480, 119,
- -244, 203, -244, -244, 345, 447, -244, 6, 203, 960,
- 185, 279, -244, 192, 349, 551, 960, 489, 367, 353,
- -244, 240, 12, 389, -244, -244, -244, 208, -244, -244,
- -244, -244, 11, 203, 22, -244, 359, 279, -244, -244,
- -244, 387, 353, -244, 203, -244, 367, -244, 960, -244,
- -244, 405, 404, 398, 407, 500, 203, -244, 203, -244,
- -244, 203, -244, 210, -244, -244, 371, -244, 482, -244,
- -244, 129, -244, -244, -244, -244, 13, 373, -244, 212,
- -244, 203, 375, -244, -244, 449, 410, 454, -244, 203,
- -244, 214, 304, -244, -244, -244, 216, 424, 383, -244,
- 521, -244, -244
+ 174, -395, -395, -64, 85, -26, 14, -31, -16, -395,
+ 40, 196, 196, -395, 109, 102, -395, -395, -395, -395,
+ -395, -395, -395, -395, -395, -395, 148, -3, 87, -395,
+ -40, 121, 196, -395, -395, 1, -5, 196, 196, 196,
+ 196, 196, -395, -395, 716, 82, 2, -395, 153, 63,
+ -395, -395, -395, 98, 152, -3, 40, 141, -395, 98,
+ -395, -395, -395, 12, 97, 116, 261, 116, 169, 126,
+ 138, -395, 176, -395, -395, 270, 274, -395, -395, -395,
+ 807, 139, -395, 210, -395, -395, 154, -395, -395, 297,
+ -395, -395, -395, -395, 172, -395, -395, 177, 231, 901,
+ 313, 265, 192, -395, -395, 338, 23, -395, -395, 243,
+ -395, -395, -395, -395, -395, 1083, -7, 196, 196, 214,
+ 196, 1, 196, -395, 98, 363, -395, 205, 263, -395,
+ -395, -395, 255, -395, 116, -395, 196, 196, 625, -395,
+ -395, 262, 196, -395, -395, -395, 625, 33, -29, -395,
+ 409, -395, 165, 165, 1174, 411, -395, -14, 28, -395,
+ 13, 138, 1174, -395, -395, 196, 1174, -395, -395, -395,
+ -395, 1174, 18, 274, -395, 196, 398, 59, -395, 417,
+ -395, 98, -395, 202, -395, 116, 98, 87, -395, 196,
+ 80, 196, 196, 196, -395, 285, -395, 211, 1241, 992,
+ 214, 534, 422, 423, -395, -395, 312, 415, 1252, 219,
+ 43, 1174, 61, -395, 1174, -395, 369, 292, -395, -395,
+ -395, -395, -395, -395, 367, -395, 216, 294, -395, -395,
+ 7, 186, 267, -395, 298, 186, 3, 372, -395, -395,
+ 23, -395, 347, -395, -395, 295, 1174, -395, 351, 229,
+ 196, -395, 1174, -395, 196, -395, -395, -395, 303, 366,
+ 368, 304, -395, -395, -395, 232, -395, -395, -395, -395,
+ -395, 34, 196, 323, 80, 196, -395, 188, -395, -395,
+ 4, 65, 625, 625, 276, -395, -395, -395, -395, -395,
+ -395, -395, -395, 1174, 311, 1174, 51, -395, 234, 326,
+ 1174, 71, -395, 399, 351, -395, -395, 1174, 453, -395,
+ 160, 196, -395, -395, 370, -395, 373, 374, 379, 13,
+ -395, 457, 462, 186, 430, 400, 431, 329, 380, -395,
+ 236, -395, 1174, -395, 351, -395, 625, 333, 334, 196,
+ -395, 196, -395, -395, -395, -395, -395, -395, -395, 196,
+ -395, -395, -395, 238, 454, 184, -395, 336, 348, -395,
+ 391, 342, 1252, -395, 403, 196, -395, -395, 188, -395,
+ -395, 423, -395, -395, -395, 1174, 345, 341, 901, -395,
+ 351, 401, -395, -395, 1252, 350, 351, 1174, -395, 37,
+ 35, -395, -395, -395, -395, -395, 13, 267, 390, 395,
+ -395, 1174, 625, 396, 1174, -395, 455, 108, -395, 351,
+ 8, 196, 196, 240, -395, 242, -395, 196, -395, -395,
+ -395, -395, 354, 80, 461, 402, -395, 625, -395, -395,
+ 356, -395, 346, 901, -395, 1174, 245, -395, -395, 1252,
+ 351, -395, 495, -395, 408, -395, -395, 358, 422, 464,
+ 420, 358, 1174, -395, -395, -395, 490, -395, 249, 251,
+ -395, -395, -395, 196, -395, -395, 375, 468, -395, 19,
+ 196, 1174, 264, 351, -395, 266, 371, 625, 1174, 504,
+ 376, 377, -395, 227, 46, 405, -395, 269, 196, -9,
+ -395, 381, 351, -395, -395, -395, 422, 377, -395, 196,
+ -395, 376, -395, 1174, -395, -395, 421, 418, 407, 425,
+ 515, 196, -395, 277, -395, -395, 384, -395, 496, -395,
+ -395, 49, -395, -395, -395, -395, 56, 386, -395, 196,
+ 388, -395, -395, 466, 426, 467, -395, 196, 279, 347,
+ -395, -395, -395, 281, 445, 404, -395, 539, -395, -395
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -989,93 +989,93 @@
means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 0, 6, 293, 0, 0, 0, 0, 0, 0, 18,
- 118, 0, 0, 7, 0, 0, 15, 8, 10, 11,
- 13, 14, 9, 17, 12, 16, 0, 107, 114, 116,
- 0, 291, 0, 285, 286, 0, 0, 0, 0, 0,
- 0, 119, 120, 0, 0, 109, 110, 0, 151, 1,
- 3, 2, 0, 107, 118, 0, 105, 0, 5, 4,
- 292, 0, 0, 0, 0, 192, 25, 0, 251, 248,
- 0, 277, 121, 40, 29, 0, 0, 30, 31, 34,
- 36, 0, 37, 39, 0, 41, 247, 35, 38, 0,
- 32, 33, 0, 0, 0, 0, 0, 122, 123, 227,
- 127, 213, 215, 217, 220, 223, 224, 225, 219, 218,
- 0, 263, 0, 0, 0, 0, 0, 106, 0, 0,
- 115, 0, 0, 94, 0, 0, 0, 101, 193, 0,
- 0, 91, 249, 250, 0, 0, 243, 240, 0, 43,
- 0, 252, 0, 0, 44, 0, 0, 254, 0, 192,
- 0, 278, 279, 0, 0, 126, 281, 282, 280, 0,
- 0, 0, 216, 0, 0, 192, 103, 0, 111, 0,
- 112, 0, 283, 0, 113, 108, 0, 0, 0, 0,
- 0, 93, 66, 27, 0, 0, 0, 0, 0, 194,
- 196, 198, 200, 0, 218, 0, 0, 0, 0, 243,
- 237, 0, 241, 0, 0, 257, 258, 259, 256, 260,
- 255, 0, 253, 0, 0, 129, 226, 0, 0, 153,
- 142, 128, 147, 130, 155, 124, 125, 212, 214, 169,
- 221, 264, 0, 0, 228, 245, 0, 0, 100, 0,
- 152, 0, 92, 19, 0, 0, 0, 0, 20, 21,
- 22, 0, 0, 0, 64, 0, 42, 56, 199, 207,
- 0, 0, 0, 0, 0, 267, 269, 270, 271, 272,
- 268, 273, 275, 0, 0, 0, 0, 261, 0, 0,
- 0, 0, 238, 0, 244, 236, 45, 0, 0, 46,
- 133, 0, 143, 149, 139, 134, 135, 137, 0, 0,
- 146, 0, 0, 145, 0, 157, 0, 0, 171, 229,
- 0, 230, 0, 102, 104, 284, 0, 0, 0, 0,
- 0, 0, 0, 265, 0, 263, 0, 63, 65, 68,
- 28, 0, 0, 0, 47, 0, 0, 49, 55, 57,
- 26, 206, 195, 197, 274, 276, 0, 0, 0, 0,
- 208, 205, 0, 204, 90, 0, 0, 242, 0, 235,
- 0, 0, 148, 150, 140, 136, 138, 0, 154, 0,
- 0, 144, 0, 0, 159, 0, 222, 0, 173, 231,
- 246, 0, 0, 0, 0, 96, 289, 290, 288, 287,
- 97, 95, 0, 67, 0, 83, 84, 85, 86, 87,
- 0, 0, 70, 48, 0, 51, 50, 0, 54, 0,
- 0, 210, 0, 0, 203, 262, 0, 239, 232, 0,
- 233, 0, 131, 132, 156, 158, 0, 161, 170, 0,
- 176, 175, 168, 0, 61, 0, 0, 58, 0, 0,
- 266, 0, 24, 62, 0, 0, 23, 0, 0, 0,
- 0, 201, 209, 0, 0, 0, 0, 0, 163, 172,
- 183, 186, 0, 0, 59, 98, 99, 0, 74, 76,
- 77, 78, 0, 0, 0, 52, 0, 202, 211, 89,
- 234, 141, 160, 162, 0, 117, 164, 165, 0, 187,
- 188, 189, 0, 0, 0, 0, 0, 88, 0, 82,
- 80, 0, 79, 0, 72, 73, 0, 53, 0, 166,
- 184, 0, 185, 177, 179, 178, 0, 0, 75, 0,
- 69, 0, 0, 190, 191, 0, 0, 0, 174, 0,
- 81, 0, 169, 180, 182, 181, 0, 0, 0, 60,
- 0, 167, 71
+ 0, 6, 298, 0, 0, 0, 0, 0, 0, 18,
+ 123, 0, 0, 7, 0, 0, 15, 8, 10, 11,
+ 13, 14, 9, 17, 12, 16, 0, 112, 119, 121,
+ 0, 296, 0, 290, 291, 0, 0, 0, 0, 0,
+ 0, 0, 124, 125, 0, 0, 114, 115, 0, 156,
+ 1, 3, 2, 0, 0, 112, 123, 0, 110, 0,
+ 5, 4, 297, 0, 0, 103, 0, 103, 0, 0,
+ 197, 25, 0, 256, 253, 0, 282, 126, 40, 29,
+ 0, 0, 30, 31, 34, 36, 0, 37, 39, 0,
+ 41, 252, 35, 38, 0, 32, 33, 0, 0, 0,
+ 0, 0, 127, 128, 232, 132, 218, 220, 222, 225,
+ 228, 229, 230, 224, 223, 0, 268, 0, 0, 0,
+ 0, 0, 0, 111, 0, 0, 120, 0, 0, 100,
+ 102, 101, 0, 98, 103, 97, 0, 0, 0, 106,
+ 198, 0, 0, 94, 254, 255, 0, 0, 248, 245,
+ 0, 43, 0, 257, 0, 0, 44, 0, 0, 259,
+ 0, 197, 0, 283, 284, 0, 0, 131, 286, 287,
+ 285, 0, 0, 0, 221, 0, 0, 197, 108, 0,
+ 116, 0, 117, 0, 288, 103, 0, 118, 113, 0,
+ 0, 0, 0, 0, 96, 66, 27, 0, 0, 0,
+ 0, 0, 199, 201, 203, 205, 0, 223, 0, 0,
+ 0, 0, 248, 242, 0, 246, 0, 0, 262, 263,
+ 264, 261, 265, 260, 0, 258, 0, 0, 134, 231,
+ 0, 0, 158, 147, 133, 152, 135, 160, 129, 130,
+ 217, 219, 174, 226, 269, 0, 0, 233, 250, 0,
+ 0, 105, 0, 157, 0, 99, 95, 19, 0, 0,
+ 0, 0, 20, 21, 22, 0, 74, 76, 77, 78,
+ 79, 0, 0, 0, 64, 0, 42, 56, 204, 212,
+ 0, 0, 0, 0, 0, 272, 274, 275, 276, 277,
+ 273, 278, 280, 0, 0, 0, 0, 266, 0, 0,
+ 0, 0, 243, 0, 249, 241, 45, 0, 0, 46,
+ 138, 0, 148, 154, 144, 139, 140, 142, 0, 0,
+ 151, 0, 0, 150, 0, 162, 0, 0, 176, 234,
+ 0, 235, 0, 107, 109, 289, 0, 0, 0, 0,
+ 104, 0, 81, 84, 82, 294, 295, 293, 292, 0,
+ 80, 85, 270, 0, 268, 0, 63, 65, 68, 28,
+ 0, 0, 0, 47, 0, 0, 49, 55, 57, 26,
+ 211, 200, 202, 279, 281, 0, 0, 0, 0, 213,
+ 210, 0, 209, 93, 0, 0, 247, 0, 240, 0,
+ 0, 153, 155, 145, 141, 143, 0, 159, 0, 0,
+ 149, 0, 0, 164, 0, 227, 0, 178, 236, 251,
+ 0, 0, 0, 0, 75, 0, 67, 0, 86, 87,
+ 88, 89, 90, 0, 0, 70, 48, 0, 51, 50,
+ 0, 54, 0, 0, 215, 0, 0, 208, 267, 0,
+ 244, 237, 0, 238, 0, 136, 137, 161, 163, 0,
+ 166, 175, 0, 181, 180, 173, 0, 61, 0, 0,
+ 58, 83, 271, 0, 24, 62, 0, 0, 23, 0,
+ 0, 0, 0, 206, 214, 0, 0, 0, 0, 0,
+ 168, 177, 188, 191, 0, 0, 59, 0, 0, 0,
+ 52, 0, 207, 216, 92, 239, 146, 165, 167, 0,
+ 122, 169, 170, 0, 192, 193, 194, 0, 0, 0,
+ 0, 0, 91, 0, 72, 73, 0, 53, 0, 171,
+ 189, 0, 190, 182, 184, 183, 0, 0, 69, 0,
+ 0, 195, 196, 0, 0, 0, 179, 0, 0, 174,
+ 185, 187, 186, 0, 0, 0, 60, 0, 172, 71
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -244, -244, -244, -244, -244, -244, -244, -244, -132, -244,
- 346, 191, -244, -244, -243, -244, -244, -244, -244, -244,
- -244, 59, 35, -244, -244, -244, -244, -244, -244, -244,
- -244, -244, -244, -244, -244, 303, -244, 483, -244, -244,
- 428, 200, 425, -8, 485, -244, -244, 395, -244, -98,
- -244, -244, -165, 175, -179, -10, -244, -244, -244, -244,
- -244, -244, -244, 58, 5, -244, -244, -244, -244, -244,
- -244, 90, 61, -244, -244, 39, -244, -133, 285, 287,
- 379, -37, 400, 403, 438, -144, -244, -244, -244, -244,
- 352, -244, 430, 360, -212, -186, 429, 148, -121, -244,
- -244, -244, -244, -244, -127, -4, 132, -244, -244
+ -395, -395, -395, -395, -395, -395, -395, -395, -164, -395,
+ 349, 180, -395, -395, -271, -395, -395, -395, -395, -395,
+ -395, -394, 209, -395, -395, -395, -395, -395, -395, -395,
+ -395, 24, -46, -395, -395, -395, 301, -395, 497, -395,
+ -395, 435, 259, 433, -28, 498, -395, -395, 397, -395,
+ -90, -395, -395, -207, 162, -187, -10, -395, -395, -395,
+ -395, -395, -395, -395, 60, 21, -395, -395, -395, -395,
+ -395, -395, 84, 62, -395, -395, -54, -395, -145, 282,
+ 280, 382, -35, 406, 412, 451, -156, -395, -395, -395,
+ -395, 355, -395, 427, 359, -232, -203, 429, 129, -128,
+ -395, -395, -395, -395, -395, -136, -4, -395, -395, -395
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 14, 15, 16, 17, 18, 19, 20, 183, 184,
- 95, 338, 339, 340, 248, 328, 329, 253, 402, 446,
- 506, 467, 468, 469, 470, 471, 399, 442, 21, 22,
- 181, 322, 23, 24, 165, 166, 25, 56, 26, 45,
- 46, 145, 28, 29, 43, 96, 97, 98, 149, 99,
- 303, 298, 219, 220, 292, 293, 221, 305, 374, 427,
- 458, 485, 486, 487, 307, 308, 378, 432, 433, 495,
- 528, 459, 460, 491, 512, 127, 128, 189, 190, 191,
- 192, 193, 101, 102, 103, 104, 105, 106, 107, 199,
- 200, 136, 137, 203, 236, 108, 211, 278, 109, 324,
- 275, 110, 154, 159, 171, 111, 390, 30, 31
+ -1, 14, 15, 16, 17, 18, 19, 20, 196, 197,
+ 100, 367, 368, 369, 262, 357, 358, 273, 425, 468,
+ 516, 265, 266, 267, 268, 269, 270, 422, 464, 21,
+ 22, 65, 133, 23, 24, 177, 178, 25, 58, 26,
+ 46, 47, 157, 28, 29, 44, 101, 102, 103, 161,
+ 104, 323, 318, 232, 233, 312, 313, 234, 325, 403,
+ 450, 480, 500, 501, 502, 327, 328, 407, 455, 456,
+ 510, 536, 481, 482, 506, 522, 139, 140, 202, 203,
+ 204, 205, 206, 106, 107, 108, 109, 110, 111, 112,
+ 212, 213, 148, 149, 216, 249, 113, 224, 298, 114,
+ 353, 295, 115, 166, 171, 183, 116, 351, 30, 31
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -1083,348 +1083,386 @@
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 35, 197, 47, 196, 222, 194, 100, 44, 48, 277,
- 262, 327, 262, 194, 262, 33, 170, 34, 499, 492,
- 525, 310, 163, 33, 244, 34, 54, 33, 61, 34,
- 156, 157, 63, 64, 65, 66, 67, 54, 135, 500,
- 33, 352, 34, 300, 243, 151, 152, 151, 152, 120,
- 218, 245, 290, 262, 36, 260, 419, 146, 121, 131,
- 52, 58, 493, 526, 59, 194, 32, 194, 151, 152,
- 33, 38, 34, 222, 264, 265, 266, 267, 268, 269,
- 270, 271, 272, 273, 246, 151, 152, 331, 122, 259,
- 301, 10, 151, 152, 10, 37, 155, 395, 504, 291,
- 396, 397, 201, 47, 412, 213, 129, 247, 167, 48,
- 201, 172, 173, 100, 41, 39, 151, 152, 130, 218,
- 182, 185, 332, 330, 371, 353, 172, 235, 40, 420,
- 505, 323, 333, 55, 368, 10, 49, 413, 164, 494,
- 527, 194, 194, 274, 223, 42, 341, 405, 434, 226,
- 475, 261, 215, 158, 501, 222, 230, 443, 57, 231,
- 424, 281, 217, 428, 284, 242, 217, 280, 216, 415,
- 418, 334, 185, 134, 249, 250, 350, 302, 398, 229,
- 198, 198, 335, 381, 294, 60, 386, 336, 224, 151,
- 152, 295, 384, 358, 164, 194, 235, 523, 450, 296,
- 27, 218, 314, 62, 238, 337, 205, 33, 216, 34,
- 344, 345, 346, 223, 48, 387, 388, 524, 48, 430,
- 294, 297, 320, 222, 112, 431, 53, 295, 126, 321,
- 277, 206, -133, 167, 113, 296, 348, 315, 351, 237,
- 425, 288, 114, 357, 389, 207, 208, 449, 325, 411,
- 360, 185, 194, 10, 362, 435, 436, 297, 438, 151,
- 152, 151, 152, 115, 50, 439, 51, 119, 209, 218,
- 123, 447, 347, 440, 489, 380, 33, 124, 34, 176,
- 177, 363, 116, 194, 125, 178, 179, 48, 240, 241,
- 210, 254, 255, 151, 152, 223, 279, 241, 490, 48,
- 151, 152, 311, 312, 126, 153, 354, 355, 132, 409,
- 379, 312, 235, 391, 392, 172, 393, 394, 437, 241,
- 133, 417, 481, 452, 312, 463, 241, 464, 241, 478,
- 312, 138, 407, 139, 194, 235, 479, 355, 235, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 140,
- 151, 152, 497, 498, 520, 498, 530, 241, 537, 241,
- 539, 241, 141, 223, 142, 143, 144, 33, 68, 34,
- 69, 147, 148, 235, 519, 451, 150, 160, 172, 172,
- 169, 175, 180, 204, 70, 71, 232, 195, 214, 239,
- 325, 251, 461, 252, 531, 262, 285, 263, 73, 74,
- 276, 286, 536, 287, 289, 306, 75, 76, 274, 299,
- 304, 309, 477, 316, 77, 78, 319, 79, 317, 461,
- 326, 318, 233, 80, 349, 356, 361, 359, 367, 81,
- 369, 364, 82, 370, 372, 365, 366, 472, 373, 375,
- 376, 377, 385, 382, 476, 383, 83, 84, 163, 403,
- 400, 461, 401, 404, 85, 406, 414, 86, 410, 422,
- 416, 423, 429, 426, 441, 444, 448, 454, 502, 472,
- 445, 312, 87, 33, 68, 34, 69, 456, 462, 186,
- 508, 455, 88, 89, 457, 465, 90, 91, 473, 474,
- 70, 71, 517, 480, 472, 92, 483, 172, 488, 496,
- 511, 93, 484, 507, 73, 74, 94, 234, 513, 516,
- 514, 515, 75, 76, 521, 522, 529, 172, 532, 533,
- 77, 78, 534, 79, 535, 172, 540, 541, 542, 80,
- 408, 257, 503, 518, 187, 81, 117, 538, 82, 118,
- 313, 168, 421, 174, 509, 225, 482, 342, 162, 510,
- 343, 282, 83, 84, 227, 33, 68, 34, 69, 283,
- 85, 186, 228, 86, 453, 258, 202, 0, 0, 0,
- 212, 466, 70, 71, 0, 0, 0, 0, 87, 0,
- 0, 0, 0, 0, 0, 10, 73, 74, 88, 89,
- 0, 0, 90, 91, 75, 76, 0, 0, 0, 0,
- 0, 92, 77, 78, 0, 79, 0, 93, 0, 0,
- 0, 80, 188, 0, 0, 0, 187, 81, 0, 0,
- 82, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 83, 84, 0, 33, 68, 34,
- 69, 0, 85, 0, 0, 86, 0, 0, 0, 0,
- 0, 0, 0, 0, 70, 71, 72, 0, 0, 0,
- 87, 0, 0, 0, 33, 68, 34, 69, 73, 74,
- 88, 89, 0, 0, 90, 91, 75, 76, 0, 0,
- 0, 70, 71, 92, 77, 78, 0, 79, 0, 93,
- 0, 0, 0, 80, 188, 73, 74, 0, 0, 81,
- 0, 0, 82, 75, 76, 0, 0, 0, 0, 0,
- 0, 77, 78, 0, 79, 0, 83, 84, 0, 0,
- 80, 0, 0, 0, 85, 0, 81, 86, 0, 82,
+ 36, 210, 48, 356, 235, 297, 209, 45, 49, 105,
+ 207, 33, 282, 34, 330, 56, 282, 33, 207, 34,
+ 175, 135, 33, 310, 34, 257, 56, 282, 63, 182,
+ 56, 126, 214, 68, 69, 70, 71, 72, 33, 342,
+ 34, 343, 321, 127, 143, 147, 168, 169, 320, 163,
+ 164, 282, 37, 507, 163, 164, 280, 32, 163, 164,
+ 67, 381, 344, 533, 158, 514, 66, 41, 42, 487,
+ 231, 207, 128, 207, 235, 284, 285, 286, 287, 288,
+ 289, 290, 291, 292, 293, 39, 163, 164, 194, 33,
+ 40, 34, 163, 164, 513, 38, 508, 515, 43, 345,
+ 60, 167, 129, 61, 442, 146, 534, 237, 48, 50,
+ 279, 359, 397, 179, 49, 531, 184, 59, 186, 226,
+ 64, 10, 214, 251, 62, 258, 64, 105, 346, 347,
+ 322, 228, 195, 198, 57, 532, 400, 176, 184, 255,
+ 231, 248, 294, 382, 352, 185, 436, 176, 118, 370,
+ 259, 230, 465, 457, 207, 207, 236, 230, 256, 428,
+ 348, 239, 242, 235, 490, 300, 281, 211, 243, 447,
+ 170, 244, 451, 229, 509, 1, 301, 2, 349, 304,
+ 443, 438, 441, 260, 535, 198, 119, 263, 264, 271,
+ 33, 410, 34, 387, 138, 211, 53, 117, 360, 10,
+ 33, 472, 34, 413, 379, 250, 3, 120, 207, 261,
+ 229, 248, 10, 415, 453, 130, 131, 334, 218, 311,
+ 454, 418, 4, 5, 419, 420, 236, 49, 54, 231,
+ 6, 49, 314, 361, 7, 122, 297, 163, 164, 315,
+ 235, 219, 51, 362, 52, 125, 179, 316, 163, 164,
+ 335, 189, 190, 132, 8, 220, 221, 448, 377, 27,
+ 380, 504, 10, 35, 136, 386, 134, 350, 354, 317,
+ 137, 198, 389, 138, 207, 458, 459, 144, 222, 9,
+ 363, 145, 469, 150, 505, 55, 434, 308, 10, 462,
+ 10, 364, 151, 373, 374, 375, 365, 409, 152, 207,
+ 421, 392, 153, 223, 11, 391, 231, 49, 141, 191,
+ 192, 12, 121, 156, 13, 236, 154, 366, 159, 49,
+ 142, 155, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 496, 163, 164, 184, 160, 271, 162, 314,
+ 432, 172, 33, 248, 34, 184, 315, 253, 254, 207,
+ 435, -138, 440, 376, 316, 471, 274, 275, 181, 163,
+ 164, 430, 163, 164, 299, 254, 248, 163, 164, 248,
+ 188, 165, 163, 164, 331, 332, 317, 340, 341, 383,
+ 384, 408, 332, 416, 417, 460, 254, 461, 254, 294,
+ 474, 332, 236, 538, 485, 254, 486, 254, 248, 193,
+ 473, 543, 33, 73, 34, 74, 208, 184, 184, 493,
+ 332, 494, 384, 354, 512, 341, 217, 483, 227, 75,
+ 76, 245, 528, 341, 544, 254, 546, 254, 252, 272,
+ 282, 305, 283, 78, 79, 296, 492, 306, 307, 309,
+ 329, 80, 81, 483, 319, 324, 326, 336, 339, 82,
+ 83, 337, 84, 338, 355, 378, 246, 85, 385, 271,
+ 390, 388, 86, 396, 398, 87, 491, 393, 483, 399,
+ 394, 395, 401, 404, 405, 402, 406, 411, 412, 88,
+ 89, 175, 423, 426, 271, 424, 427, 90, 429, 433,
+ 91, 445, 449, 437, 439, 518, 446, 452, 463, 466,
+ 470, 467, 476, 477, 332, 92, 478, 527, 479, 484,
+ 489, 498, 499, 511, 521, 93, 495, 524, 94, 488,
+ 523, 95, 96, 503, 526, 184, 517, 525, 529, 530,
+ 537, 97, 539, 184, 540, 542, 541, 98, 33, 73,
+ 34, 74, 99, 247, 199, 547, 549, 277, 431, 548,
+ 414, 333, 123, 180, 124, 75, 76, 187, 444, 238,
+ 545, 519, 497, 372, 371, 520, 174, 302, 475, 78,
+ 79, 303, 240, 0, 0, 215, 0, 80, 81, 0,
+ 0, 278, 225, 241, 0, 82, 83, 0, 84, 0,
+ 0, 0, 0, 85, 0, 0, 0, 200, 86, 0,
+ 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 88, 89, 0, 0, 0,
+ 0, 0, 0, 90, 0, 0, 91, 0, 0, 33,
+ 73, 34, 74, 0, 0, 199, 0, 0, 0, 0,
+ 0, 92, 0, 0, 0, 0, 75, 76, 10, 0,
+ 0, 93, 0, 0, 94, 0, 0, 95, 96, 0,
+ 78, 79, 0, 0, 0, 0, 0, 97, 80, 81,
+ 0, 0, 0, 98, 0, 0, 82, 83, 201, 84,
+ 0, 0, 0, 0, 85, 0, 0, 0, 200, 86,
+ 0, 0, 87, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 88, 89, 0, 0,
+ 0, 0, 0, 0, 90, 0, 0, 91, 0, 0,
+ 33, 73, 34, 74, 0, 0, 0, 0, 0, 0,
+ 0, 0, 92, 0, 0, 0, 0, 75, 76, 77,
+ 0, 0, 93, 0, 0, 94, 0, 0, 95, 96,
+ 0, 78, 79, 0, 0, 0, 0, 0, 97, 80,
+ 81, 0, 0, 0, 98, 0, 0, 82, 83, 201,
+ 84, 0, 0, 0, 0, 85, 0, 0, 0, 0,
+ 86, 0, 0, 87, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 88, 89, 0,
+ 0, 0, 0, 0, 0, 90, 0, 0, 91, 0,
+ 0, 33, 73, 34, 74, 0, 0, 0, 0, 0,
+ 0, 0, 0, 92, 0, 0, 0, 0, 75, 76,
+ 0, 0, 0, 93, 0, 0, 94, 0, 0, 95,
+ 96, 0, 78, 79, 0, 0, 0, 0, 0, 97,
+ 80, 81, 0, 0, 0, 98, 0, 0, 82, 83,
+ 99, 84, 0, 0, 0, 0, 85, 0, 0, 0,
+ 0, 86, 0, 0, 87, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 88, 89,
+ 0, 0, 0, 0, 0, 0, 90, 0, 0, 91,
+ 0, 0, 0, 0, 0, 33, 73, 34, 74, 0,
+ 0, 0, 0, 0, 92, 0, 0, 0, 0, 0,
+ 0, 0, 75, 76, 93, 0, 0, 94, 0, 0,
+ 95, 96, 0, 0, 0, 0, 78, 79, 0, 0,
+ 97, 146, 0, 0, 80, 81, 98, 0, 0, 0,
+ 0, 99, 82, 83, 0, 84, 0, 0, 0, 0,
+ 85, 0, 0, 0, 0, 86, 0, 0, 87, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 87, 83, 84, 0, 0, 0, 0, 0,
- 0, 85, 88, 89, 86, 0, 90, 91, 0, 0,
- 0, 0, 0, 0, 0, 92, 0, 0, 0, 87,
- 0, 93, 0, 0, 0, 0, 94, 0, 0, 88,
- 89, 0, 0, 90, 91, 0, 0, 33, 68, 34,
- 69, 0, 92, 134, 0, 0, 0, 0, 93, 0,
- 0, 0, 0, 94, 70, 71, 0, 0, 1, 0,
- 2, 0, 0, 0, 33, 68, 34, 69, 73, 74,
- 0, 0, 0, 0, 0, 0, 75, 76, 0, 0,
- 0, 70, 71, 0, 77, 78, 0, 79, 0, 3,
- 0, 0, 0, 80, 0, 73, 74, 0, 0, 81,
- 0, 0, 82, 75, 76, 4, 5, 0, 0, 0,
- 0, 77, 78, 6, 79, 0, 83, 84, 7, 0,
- 80, 0, 0, 0, 85, 187, 81, 86, 0, 82,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,
- 0, 0, 87, 83, 84, 0, 0, 0, 0, 10,
- 0, 85, 88, 89, 86, 0, 90, 91, 0, 0,
- 0, 0, 0, 0, 9, 92, 0, 0, 0, 87,
- 0, 93, 0, 10, 0, 0, 94, 0, 0, 88,
- 89, 0, 0, 90, 91, 0, 11, 33, 68, 34,
- 69, 0, 92, 12, 0, 0, 13, 0, 93, 0,
- 0, 0, 0, 188, 70, 161, 0, 0, 0, 0,
- 0, 0, 0, 0, 33, 68, 34, 69, 73, 74,
- 0, 0, 0, 0, 0, 0, 75, 76, 0, 0,
- 0, 70, 71, 0, 77, 78, 0, 79, 0, 0,
- 0, 0, 0, 80, 0, 73, 74, 0, 0, 81,
- 0, 0, 82, 75, 76, 0, 0, 0, 0, 0,
- 0, 77, 78, 0, 79, 0, 83, 84, 0, 0,
- 80, 0, 0, 0, 85, 0, 81, 86, 0, 82,
+ 0, 0, 88, 89, 0, 0, 0, 0, 0, 0,
+ 90, 0, 0, 91, 0, 0, 33, 73, 34, 74,
+ 0, 0, 0, 0, 0, 0, 0, 0, 92, 0,
+ 0, 0, 0, 75, 76, 10, 0, 0, 93, 0,
+ 0, 94, 0, 0, 95, 96, 0, 78, 79, 0,
+ 0, 0, 0, 0, 97, 80, 81, 0, 0, 0,
+ 98, 0, 0, 82, 83, 99, 84, 0, 0, 0,
+ 0, 85, 0, 0, 0, 200, 86, 0, 0, 87,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 87, 83, 84, 0, 0, 68, 0, 69,
- 0, 85, 88, 89, 86, 0, 90, 91, 0, 0,
- 0, 0, 0, 70, 161, 92, 0, 0, 0, 87,
- 0, 93, 0, 0, 0, 0, 94, 73, 74, 88,
- 89, 0, 0, 90, 91, 0, 76, 0, 0, 0,
- 0, 0, 92, 77, 78, 0, 79, 0, 93, 0,
- 0, 0, 80, 94, 73, 74, 0, 0, 0, 0,
- 0, 82, 0, 76, 0, 0, 0, 0, 0, 0,
- 77, 78, 0, 79, 0, 83, 84, 0, 0, 80,
- 0, 0, 0, 85, 0, 0, 86, 0, 82, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 87, 83, 256, 0, 0, 0, 0, 0, 0,
- 85, 88, 0, 0, 0, 90, 91, 0, 0, 0,
- 0, 0, 0, 0, 92, 0, 0, 0, 87, 0,
- 93, 0, 0, 0, 0, 0, 0, 0, 88, 0,
- 0, 0, 90, 91, 0, 0, 0, 0, 0, 0,
- 0, 92, 0, 0, 0, 0, 0, 93
+ 0, 0, 0, 88, 89, 0, 0, 0, 0, 0,
+ 0, 90, 0, 0, 91, 0, 0, 33, 73, 34,
+ 74, 0, 0, 0, 0, 0, 0, 0, 0, 92,
+ 0, 0, 0, 0, 75, 173, 0, 0, 0, 93,
+ 0, 0, 94, 0, 0, 95, 96, 0, 78, 79,
+ 0, 0, 0, 0, 0, 97, 80, 81, 0, 0,
+ 0, 98, 0, 0, 82, 83, 201, 84, 0, 0,
+ 0, 0, 85, 0, 0, 0, 0, 86, 0, 0,
+ 87, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 88, 89, 0, 0, 0, 0,
+ 0, 0, 90, 0, 0, 91, 0, 0, 33, 73,
+ 34, 74, 0, 0, 0, 0, 0, 0, 0, 0,
+ 92, 0, 0, 0, 0, 75, 76, 0, 0, 0,
+ 93, 0, 0, 94, 0, 0, 95, 96, 0, 78,
+ 79, 0, 0, 0, 0, 0, 97, 80, 81, 0,
+ 0, 0, 98, 0, 0, 82, 83, 99, 84, 0,
+ 0, 0, 0, 85, 0, 0, 0, 0, 86, 0,
+ 0, 87, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 88, 89, 73, 0, 74,
+ 0, 0, 0, 90, 0, 0, 91, 0, 0, 0,
+ 0, 0, 0, 75, 173, 0, 78, 79, 0, 0,
+ 0, 92, 0, 0, 0, 81, 0, 78, 79, 0,
+ 0, 93, 82, 83, 94, 84, 81, 95, 96, 0,
+ 85, 0, 0, 82, 83, 0, 84, 97, 87, 0,
+ 0, 85, 0, 98, 0, 0, 0, 0, 99, 87,
+ 0, 0, 88, 276, 0, 0, 0, 0, 0, 0,
+ 90, 0, 0, 88, 89, 0, 0, 0, 0, 0,
+ 0, 90, 0, 0, 91, 0, 0, 0, 92, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 93, 92,
+ 0, 0, 0, 0, 95, 96, 0, 0, 0, 93,
+ 0, 0, 0, 0, 97, 95, 96, 0, 0, 0,
+ 98, 0, 0, 0, 0, 97, 0, 0, 0, 0,
+ 0, 98
};
static const yytype_int16 yycheck[] =
{
- 4, 134, 12, 130, 148, 126, 43, 11, 12, 195,
- 8, 254, 8, 134, 8, 4, 114, 6, 7, 7,
- 7, 233, 27, 4, 45, 6, 29, 4, 32, 6,
- 23, 24, 36, 37, 38, 39, 40, 29, 75, 28,
- 4, 10, 6, 222, 176, 21, 22, 21, 22, 57,
- 148, 72, 217, 8, 80, 188, 71, 94, 31, 67,
- 82, 139, 50, 50, 142, 186, 121, 188, 21, 22,
- 4, 73, 6, 217, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 105, 21, 22, 10, 61, 187,
- 39, 116, 21, 22, 116, 121, 100, 37, 76, 33,
- 40, 41, 62, 113, 9, 142, 131, 128, 112, 113,
- 62, 115, 116, 150, 28, 121, 21, 22, 143, 217,
- 124, 125, 45, 255, 303, 94, 130, 164, 85, 144,
- 108, 252, 55, 136, 299, 116, 0, 349, 143, 127,
- 127, 262, 263, 79, 148, 59, 144, 333, 144, 153,
- 144, 188, 144, 146, 143, 299, 160, 400, 30, 163,
- 372, 198, 143, 375, 201, 173, 143, 122, 144, 355,
- 144, 94, 176, 133, 178, 179, 274, 126, 118, 143,
- 133, 133, 105, 316, 74, 3, 67, 110, 149, 21,
- 22, 81, 319, 122, 143, 316, 233, 68, 410, 89,
- 0, 299, 239, 73, 165, 128, 53, 4, 144, 6,
- 17, 18, 19, 217, 218, 96, 97, 88, 222, 108,
- 74, 111, 57, 367, 117, 114, 26, 81, 134, 64,
- 416, 78, 86, 237, 145, 89, 273, 241, 275, 145,
- 373, 73, 33, 280, 125, 92, 93, 9, 252, 347,
- 287, 255, 373, 116, 144, 382, 383, 111, 57, 21,
- 22, 21, 22, 143, 139, 64, 141, 106, 115, 367,
- 5, 404, 79, 394, 34, 312, 4, 97, 6, 46,
- 47, 291, 85, 404, 143, 46, 47, 291, 144, 145,
- 137, 144, 145, 21, 22, 299, 144, 145, 58, 303,
- 21, 22, 144, 145, 134, 33, 144, 145, 7, 346,
- 144, 145, 349, 144, 145, 319, 144, 145, 144, 145,
- 7, 358, 455, 144, 145, 144, 145, 144, 145, 144,
- 145, 143, 336, 84, 455, 372, 144, 145, 375, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 143,
- 21, 22, 144, 145, 144, 145, 144, 145, 144, 145,
- 144, 145, 5, 367, 143, 143, 84, 4, 5, 6,
- 7, 5, 73, 410, 501, 412, 145, 100, 382, 383,
- 143, 7, 136, 7, 21, 22, 23, 143, 7, 11,
- 394, 143, 429, 143, 521, 8, 63, 9, 35, 36,
- 20, 144, 529, 73, 144, 101, 43, 44, 79, 145,
- 75, 144, 449, 143, 51, 52, 143, 54, 87, 456,
- 130, 87, 59, 60, 143, 131, 7, 63, 86, 66,
- 7, 99, 69, 7, 42, 99, 99, 441, 77, 42,
- 144, 98, 5, 143, 448, 143, 83, 84, 27, 94,
- 145, 488, 136, 143, 91, 87, 94, 94, 143, 103,
- 143, 103, 42, 98, 143, 38, 143, 7, 472, 473,
- 101, 145, 109, 4, 5, 6, 7, 42, 19, 10,
- 484, 97, 119, 120, 90, 5, 123, 124, 143, 42,
- 21, 22, 496, 144, 498, 132, 7, 501, 145, 110,
- 95, 138, 135, 144, 35, 36, 143, 144, 104, 9,
- 112, 104, 43, 44, 143, 33, 143, 521, 143, 70,
- 51, 52, 112, 54, 70, 529, 102, 144, 7, 60,
- 339, 185, 473, 498, 65, 66, 53, 532, 69, 54,
- 237, 113, 367, 118, 486, 150, 456, 262, 110, 488,
- 263, 199, 83, 84, 154, 4, 5, 6, 7, 199,
- 91, 10, 159, 94, 416, 186, 136, -1, -1, -1,
- 141, 439, 21, 22, -1, -1, -1, -1, 109, -1,
- -1, -1, -1, -1, -1, 116, 35, 36, 119, 120,
- -1, -1, 123, 124, 43, 44, -1, -1, -1, -1,
- -1, 132, 51, 52, -1, 54, -1, 138, -1, -1,
- -1, 60, 143, -1, -1, -1, 65, 66, -1, -1,
- 69, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 83, 84, -1, 4, 5, 6,
- 7, -1, 91, -1, -1, 94, -1, -1, -1, -1,
- -1, -1, -1, -1, 21, 22, 23, -1, -1, -1,
- 109, -1, -1, -1, 4, 5, 6, 7, 35, 36,
- 119, 120, -1, -1, 123, 124, 43, 44, -1, -1,
- -1, 21, 22, 132, 51, 52, -1, 54, -1, 138,
- -1, -1, -1, 60, 143, 35, 36, -1, -1, 66,
- -1, -1, 69, 43, 44, -1, -1, -1, -1, -1,
- -1, 51, 52, -1, 54, -1, 83, 84, -1, -1,
- 60, -1, -1, -1, 91, -1, 66, 94, -1, 69,
+ 4, 146, 12, 274, 160, 208, 142, 11, 12, 44,
+ 138, 4, 8, 6, 246, 29, 8, 4, 146, 6,
+ 27, 67, 4, 230, 6, 189, 29, 8, 32, 119,
+ 29, 59, 61, 37, 38, 39, 40, 41, 4, 5,
+ 6, 7, 39, 31, 72, 80, 23, 24, 235, 21,
+ 22, 8, 78, 7, 21, 22, 201, 121, 21, 22,
+ 36, 10, 28, 7, 99, 74, 71, 83, 28, 463,
+ 160, 199, 60, 201, 230, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 71, 21, 22, 134, 4,
+ 121, 6, 21, 22, 488, 121, 50, 106, 58, 65,
+ 140, 105, 5, 143, 69, 134, 50, 161, 118, 0,
+ 200, 275, 319, 117, 118, 66, 120, 30, 122, 154,
+ 125, 114, 61, 177, 3, 45, 125, 162, 94, 95,
+ 127, 145, 136, 137, 137, 86, 323, 144, 142, 185,
+ 230, 176, 77, 92, 272, 121, 378, 144, 146, 145,
+ 70, 144, 423, 145, 282, 283, 160, 144, 186, 362,
+ 126, 165, 144, 319, 145, 122, 201, 134, 172, 401,
+ 147, 175, 404, 145, 128, 1, 211, 3, 144, 214,
+ 145, 384, 145, 103, 128, 189, 33, 191, 192, 193,
+ 4, 336, 6, 122, 135, 134, 48, 115, 10, 114,
+ 4, 433, 6, 339, 294, 146, 32, 144, 336, 129,
+ 145, 246, 114, 349, 106, 118, 119, 252, 53, 33,
+ 112, 37, 48, 49, 40, 41, 230, 231, 80, 319,
+ 56, 235, 72, 45, 60, 83, 439, 21, 22, 79,
+ 396, 76, 140, 55, 142, 104, 250, 87, 21, 22,
+ 254, 46, 47, 137, 80, 90, 91, 402, 293, 0,
+ 295, 34, 114, 4, 95, 300, 5, 271, 272, 109,
+ 144, 275, 307, 135, 402, 411, 412, 7, 113, 105,
+ 92, 7, 427, 144, 57, 26, 376, 71, 114, 417,
+ 114, 103, 82, 17, 18, 19, 108, 332, 144, 427,
+ 116, 311, 5, 138, 130, 145, 396, 311, 132, 46,
+ 47, 137, 53, 82, 140, 319, 144, 129, 5, 323,
+ 144, 144, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 477, 21, 22, 339, 71, 341, 146, 72,
+ 375, 98, 4, 378, 6, 349, 79, 145, 146, 477,
+ 9, 84, 387, 77, 87, 9, 145, 146, 144, 21,
+ 22, 365, 21, 22, 145, 146, 401, 21, 22, 404,
+ 7, 33, 21, 22, 145, 146, 109, 145, 146, 145,
+ 146, 145, 146, 145, 146, 145, 146, 145, 146, 77,
+ 145, 146, 396, 529, 145, 146, 145, 146, 433, 144,
+ 435, 537, 4, 5, 6, 7, 144, 411, 412, 145,
+ 146, 145, 146, 417, 145, 146, 7, 452, 7, 21,
+ 22, 23, 145, 146, 145, 146, 145, 146, 11, 144,
+ 8, 62, 9, 35, 36, 20, 471, 145, 71, 145,
+ 145, 43, 44, 478, 146, 73, 99, 144, 144, 51,
+ 52, 85, 54, 85, 131, 144, 58, 59, 132, 463,
+ 7, 62, 64, 84, 7, 67, 470, 97, 503, 7,
+ 97, 97, 42, 42, 145, 75, 96, 144, 144, 81,
+ 82, 27, 146, 92, 488, 137, 144, 89, 85, 144,
+ 92, 101, 96, 92, 144, 499, 101, 42, 144, 38,
+ 144, 99, 7, 95, 146, 107, 42, 511, 88, 19,
+ 42, 7, 136, 108, 93, 117, 145, 110, 120, 144,
+ 102, 123, 124, 146, 9, 529, 145, 102, 144, 33,
+ 144, 133, 144, 537, 68, 68, 110, 139, 4, 5,
+ 6, 7, 144, 145, 10, 100, 7, 198, 368, 145,
+ 341, 250, 55, 118, 56, 21, 22, 124, 396, 162,
+ 539, 501, 478, 283, 282, 503, 115, 212, 439, 35,
+ 36, 212, 166, -1, -1, 148, -1, 43, 44, -1,
+ -1, 199, 153, 171, -1, 51, 52, -1, 54, -1,
+ -1, -1, -1, 59, -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, -1,
+ -1, -1, -1, 89, -1, -1, 92, -1, -1, 4,
+ 5, 6, 7, -1, -1, 10, -1, -1, -1, -1,
+ -1, 107, -1, -1, -1, -1, 21, 22, 114, -1,
+ -1, 117, -1, -1, 120, -1, -1, 123, 124, -1,
+ 35, 36, -1, -1, -1, -1, -1, 133, 43, 44,
+ -1, -1, -1, 139, -1, -1, 51, 52, 144, 54,
+ -1, -1, -1, -1, 59, -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,
+ -1, -1, -1, -1, 89, -1, -1, 92, -1, -1,
+ 4, 5, 6, 7, -1, -1, -1, -1, -1, -1,
+ -1, -1, 107, -1, -1, -1, -1, 21, 22, 23,
+ -1, -1, 117, -1, -1, 120, -1, -1, 123, 124,
+ -1, 35, 36, -1, -1, -1, -1, -1, 133, 43,
+ 44, -1, -1, -1, 139, -1, -1, 51, 52, 144,
+ 54, -1, -1, -1, -1, 59, -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, 4, 5, 6, 7, -1, -1, -1, -1, -1,
+ -1, -1, -1, 107, -1, -1, -1, -1, 21, 22,
+ -1, -1, -1, 117, -1, -1, 120, -1, -1, 123,
+ 124, -1, 35, 36, -1, -1, -1, -1, -1, 133,
+ 43, 44, -1, -1, -1, 139, -1, -1, 51, 52,
+ 144, 54, -1, -1, -1, -1, 59, -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, -1, -1, 4, 5, 6, 7, -1,
+ -1, -1, -1, -1, 107, -1, -1, -1, -1, -1,
+ -1, -1, 21, 22, 117, -1, -1, 120, -1, -1,
+ 123, 124, -1, -1, -1, -1, 35, 36, -1, -1,
+ 133, 134, -1, -1, 43, 44, 139, -1, -1, -1,
+ -1, 144, 51, 52, -1, 54, -1, -1, -1, -1,
+ 59, -1, -1, -1, -1, 64, -1, -1, 67, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 109, 83, 84, -1, -1, -1, -1, -1,
- -1, 91, 119, 120, 94, -1, 123, 124, -1, -1,
- -1, -1, -1, -1, -1, 132, -1, -1, -1, 109,
- -1, 138, -1, -1, -1, -1, 143, -1, -1, 119,
- 120, -1, -1, 123, 124, -1, -1, 4, 5, 6,
- 7, -1, 132, 133, -1, -1, -1, -1, 138, -1,
- -1, -1, -1, 143, 21, 22, -1, -1, 1, -1,
- 3, -1, -1, -1, 4, 5, 6, 7, 35, 36,
- -1, -1, -1, -1, -1, -1, 43, 44, -1, -1,
- -1, 21, 22, -1, 51, 52, -1, 54, -1, 32,
- -1, -1, -1, 60, -1, 35, 36, -1, -1, 66,
- -1, -1, 69, 43, 44, 48, 49, -1, -1, -1,
- -1, 51, 52, 56, 54, -1, 83, 84, 61, -1,
- 60, -1, -1, -1, 91, 65, 66, 94, -1, 69,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 82,
- -1, -1, 109, 83, 84, -1, -1, -1, -1, 116,
- -1, 91, 119, 120, 94, -1, 123, 124, -1, -1,
- -1, -1, -1, -1, 107, 132, -1, -1, -1, 109,
- -1, 138, -1, 116, -1, -1, 143, -1, -1, 119,
- 120, -1, -1, 123, 124, -1, 129, 4, 5, 6,
- 7, -1, 132, 136, -1, -1, 139, -1, 138, -1,
- -1, -1, -1, 143, 21, 22, -1, -1, -1, -1,
- -1, -1, -1, -1, 4, 5, 6, 7, 35, 36,
- -1, -1, -1, -1, -1, -1, 43, 44, -1, -1,
- -1, 21, 22, -1, 51, 52, -1, 54, -1, -1,
- -1, -1, -1, 60, -1, 35, 36, -1, -1, 66,
- -1, -1, 69, 43, 44, -1, -1, -1, -1, -1,
- -1, 51, 52, -1, 54, -1, 83, 84, -1, -1,
- 60, -1, -1, -1, 91, -1, 66, 94, -1, 69,
+ -1, -1, 81, 82, -1, -1, -1, -1, -1, -1,
+ 89, -1, -1, 92, -1, -1, 4, 5, 6, 7,
+ -1, -1, -1, -1, -1, -1, -1, -1, 107, -1,
+ -1, -1, -1, 21, 22, 114, -1, -1, 117, -1,
+ -1, 120, -1, -1, 123, 124, -1, 35, 36, -1,
+ -1, -1, -1, -1, 133, 43, 44, -1, -1, -1,
+ 139, -1, -1, 51, 52, 144, 54, -1, -1, -1,
+ -1, 59, -1, -1, -1, 63, 64, -1, -1, 67,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 109, 83, 84, -1, -1, 5, -1, 7,
- -1, 91, 119, 120, 94, -1, 123, 124, -1, -1,
- -1, -1, -1, 21, 22, 132, -1, -1, -1, 109,
- -1, 138, -1, -1, -1, -1, 143, 35, 36, 119,
- 120, -1, -1, 123, 124, -1, 44, -1, -1, -1,
- -1, -1, 132, 51, 52, -1, 54, -1, 138, -1,
- -1, -1, 60, 143, 35, 36, -1, -1, -1, -1,
- -1, 69, -1, 44, -1, -1, -1, -1, -1, -1,
- 51, 52, -1, 54, -1, 83, 84, -1, -1, 60,
- -1, -1, -1, 91, -1, -1, 94, -1, 69, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 109, 83, 84, -1, -1, -1, -1, -1, -1,
- 91, 119, -1, -1, -1, 123, 124, -1, -1, -1,
- -1, -1, -1, -1, 132, -1, -1, -1, 109, -1,
- 138, -1, -1, -1, -1, -1, -1, -1, 119, -1,
- -1, -1, 123, 124, -1, -1, -1, -1, -1, -1,
- -1, 132, -1, -1, -1, -1, -1, 138
+ -1, -1, -1, 81, 82, -1, -1, -1, -1, -1,
+ -1, 89, -1, -1, 92, -1, -1, 4, 5, 6,
+ 7, -1, -1, -1, -1, -1, -1, -1, -1, 107,
+ -1, -1, -1, -1, 21, 22, -1, -1, -1, 117,
+ -1, -1, 120, -1, -1, 123, 124, -1, 35, 36,
+ -1, -1, -1, -1, -1, 133, 43, 44, -1, -1,
+ -1, 139, -1, -1, 51, 52, 144, 54, -1, -1,
+ -1, -1, 59, -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, 4, 5,
+ 6, 7, -1, -1, -1, -1, -1, -1, -1, -1,
+ 107, -1, -1, -1, -1, 21, 22, -1, -1, -1,
+ 117, -1, -1, 120, -1, -1, 123, 124, -1, 35,
+ 36, -1, -1, -1, -1, -1, 133, 43, 44, -1,
+ -1, -1, 139, -1, -1, 51, 52, 144, 54, -1,
+ -1, -1, -1, 59, -1, -1, -1, -1, 64, -1,
+ -1, 67, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 81, 82, 5, -1, 7,
+ -1, -1, -1, 89, -1, -1, 92, -1, -1, -1,
+ -1, -1, -1, 21, 22, -1, 35, 36, -1, -1,
+ -1, 107, -1, -1, -1, 44, -1, 35, 36, -1,
+ -1, 117, 51, 52, 120, 54, 44, 123, 124, -1,
+ 59, -1, -1, 51, 52, -1, 54, 133, 67, -1,
+ -1, 59, -1, 139, -1, -1, -1, -1, 144, 67,
+ -1, -1, 81, 82, -1, -1, -1, -1, -1, -1,
+ 89, -1, -1, 81, 82, -1, -1, -1, -1, -1,
+ -1, 89, -1, -1, 92, -1, -1, -1, 107, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 117, 107,
+ -1, -1, -1, -1, 123, 124, -1, -1, -1, 117,
+ -1, -1, -1, -1, 133, 123, 124, -1, -1, -1,
+ 139, -1, -1, -1, -1, 133, -1, -1, -1, -1,
+ -1, 139
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
-static const yytype_uint8 yystos[] =
+static const yytype_uint16 yystos[] =
{
- 0, 1, 3, 32, 48, 49, 56, 61, 82, 107,
- 116, 129, 136, 139, 148, 149, 150, 151, 152, 153,
- 154, 175, 176, 179, 180, 183, 185, 188, 189, 190,
- 254, 255, 121, 4, 6, 252, 80, 121, 73, 121,
- 85, 28, 59, 191, 252, 186, 187, 202, 252, 0,
- 139, 141, 82, 188, 29, 136, 184, 30, 139, 142,
- 3, 252, 73, 252, 252, 252, 252, 252, 5, 7,
- 21, 22, 23, 35, 36, 43, 44, 51, 52, 54,
- 60, 66, 69, 83, 84, 91, 94, 109, 119, 120,
- 123, 124, 132, 138, 143, 157, 192, 193, 194, 196,
- 228, 229, 230, 231, 232, 233, 234, 235, 242, 245,
- 248, 252, 117, 145, 33, 143, 85, 184, 191, 106,
- 190, 31, 61, 5, 97, 143, 134, 222, 223, 131,
- 143, 190, 7, 7, 133, 228, 238, 239, 143, 84,
- 143, 5, 143, 143, 84, 188, 228, 5, 73, 195,
- 145, 21, 22, 33, 249, 252, 23, 24, 146, 250,
- 100, 22, 231, 27, 143, 181, 182, 252, 187, 143,
- 196, 251, 252, 252, 189, 7, 46, 47, 46, 47,
- 136, 177, 252, 155, 156, 252, 10, 65, 143, 224,
- 225, 226, 227, 228, 245, 143, 251, 224, 133, 236,
- 237, 62, 239, 240, 7, 53, 78, 92, 93, 115,
- 137, 243, 243, 228, 7, 144, 144, 143, 196, 199,
- 200, 203, 232, 252, 222, 194, 252, 229, 230, 143,
- 252, 252, 23, 59, 144, 228, 241, 145, 222, 11,
- 144, 145, 190, 155, 45, 72, 105, 128, 161, 252,
- 252, 143, 143, 164, 144, 145, 84, 157, 227, 196,
- 224, 228, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 79, 247, 20, 242, 244, 144,
- 122, 228, 237, 240, 228, 63, 144, 73, 73, 144,
- 199, 33, 201, 202, 74, 81, 89, 111, 198, 145,
- 201, 39, 126, 197, 75, 204, 101, 211, 212, 144,
- 241, 144, 145, 182, 228, 252, 143, 87, 87, 143,
- 57, 64, 178, 245, 246, 252, 130, 161, 162, 163,
- 155, 10, 45, 55, 94, 105, 110, 128, 158, 159,
- 160, 144, 225, 226, 17, 18, 19, 79, 228, 143,
- 196, 228, 10, 94, 144, 145, 131, 228, 122, 63,
- 228, 7, 144, 202, 99, 99, 99, 86, 199, 7,
- 7, 201, 42, 77, 205, 42, 144, 98, 213, 144,
- 228, 224, 143, 143, 251, 5, 67, 96, 97, 125,
- 253, 144, 145, 144, 145, 37, 40, 41, 118, 173,
- 145, 136, 165, 94, 143, 242, 87, 252, 158, 228,
- 143, 196, 9, 241, 94, 242, 143, 228, 144, 71,
- 144, 200, 103, 103, 241, 224, 98, 206, 241, 42,
- 108, 114, 214, 215, 144, 251, 251, 144, 57, 64,
- 245, 143, 174, 161, 38, 101, 166, 224, 143, 9,
- 241, 228, 144, 244, 7, 97, 42, 90, 207, 218,
- 219, 228, 19, 144, 144, 5, 253, 168, 169, 170,
- 171, 172, 252, 143, 42, 144, 252, 228, 144, 144,
- 144, 224, 218, 7, 135, 208, 209, 210, 145, 34,
- 58, 220, 7, 50, 127, 216, 110, 144, 145, 7,
- 28, 143, 252, 168, 76, 108, 167, 144, 252, 210,
- 219, 95, 221, 104, 112, 104, 9, 252, 169, 251,
- 144, 143, 33, 68, 88, 7, 50, 127, 217, 143,
- 144, 251, 143, 70, 112, 70, 251, 144, 211, 144,
- 102, 144, 7
+ 0, 1, 3, 32, 48, 49, 56, 60, 80, 105,
+ 114, 130, 137, 140, 149, 150, 151, 152, 153, 154,
+ 155, 177, 178, 181, 182, 185, 187, 190, 191, 192,
+ 256, 257, 121, 4, 6, 190, 254, 78, 121, 71,
+ 121, 83, 28, 58, 193, 254, 188, 189, 204, 254,
+ 0, 140, 142, 48, 80, 190, 29, 137, 186, 30,
+ 140, 143, 3, 254, 125, 179, 71, 179, 254, 254,
+ 254, 254, 254, 5, 7, 21, 22, 23, 35, 36,
+ 43, 44, 51, 52, 54, 59, 64, 67, 81, 82,
+ 89, 92, 107, 117, 120, 123, 124, 133, 139, 144,
+ 158, 194, 195, 196, 198, 230, 231, 232, 233, 234,
+ 235, 236, 237, 244, 247, 250, 254, 115, 146, 33,
+ 144, 190, 83, 186, 193, 104, 192, 31, 60, 5,
+ 118, 119, 137, 180, 5, 180, 95, 144, 135, 224,
+ 225, 132, 144, 192, 7, 7, 134, 230, 240, 241,
+ 144, 82, 144, 5, 144, 144, 82, 190, 230, 5,
+ 71, 197, 146, 21, 22, 33, 251, 254, 23, 24,
+ 147, 252, 98, 22, 233, 27, 144, 183, 184, 254,
+ 189, 144, 198, 253, 254, 179, 254, 191, 7, 46,
+ 47, 46, 47, 144, 180, 254, 156, 157, 254, 10,
+ 63, 144, 226, 227, 228, 229, 230, 247, 144, 253,
+ 226, 134, 238, 239, 61, 241, 242, 7, 53, 76,
+ 90, 91, 113, 138, 245, 245, 230, 7, 145, 145,
+ 144, 198, 201, 202, 205, 234, 254, 224, 196, 254,
+ 231, 232, 144, 254, 254, 23, 58, 145, 230, 243,
+ 146, 224, 11, 145, 146, 180, 192, 156, 45, 70,
+ 103, 129, 162, 254, 254, 169, 170, 171, 172, 173,
+ 174, 254, 144, 165, 145, 146, 82, 158, 229, 198,
+ 226, 230, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 77, 249, 20, 244, 246, 145,
+ 122, 230, 239, 242, 230, 62, 145, 71, 71, 145,
+ 201, 33, 203, 204, 72, 79, 87, 109, 200, 146,
+ 203, 39, 127, 199, 73, 206, 99, 213, 214, 145,
+ 243, 145, 146, 184, 230, 254, 144, 85, 85, 144,
+ 145, 146, 5, 7, 28, 65, 94, 95, 126, 144,
+ 254, 255, 247, 248, 254, 131, 162, 163, 164, 156,
+ 10, 45, 55, 92, 103, 108, 129, 159, 160, 161,
+ 145, 227, 228, 17, 18, 19, 77, 230, 144, 198,
+ 230, 10, 92, 145, 146, 132, 230, 122, 62, 230,
+ 7, 145, 204, 97, 97, 97, 84, 201, 7, 7,
+ 203, 42, 75, 207, 42, 145, 96, 215, 145, 230,
+ 226, 144, 144, 253, 170, 253, 145, 146, 37, 40,
+ 41, 116, 175, 146, 137, 166, 92, 144, 244, 85,
+ 254, 159, 230, 144, 198, 9, 243, 92, 244, 144,
+ 230, 145, 69, 145, 202, 101, 101, 243, 226, 96,
+ 208, 243, 42, 106, 112, 216, 217, 145, 253, 253,
+ 145, 145, 247, 144, 176, 162, 38, 99, 167, 226,
+ 144, 9, 243, 230, 145, 246, 7, 95, 42, 88,
+ 209, 220, 221, 230, 19, 145, 145, 169, 144, 42,
+ 145, 254, 230, 145, 145, 145, 226, 220, 7, 136,
+ 210, 211, 212, 146, 34, 57, 222, 7, 50, 128,
+ 218, 108, 145, 169, 74, 106, 168, 145, 254, 212,
+ 221, 93, 223, 102, 110, 102, 9, 254, 145, 144,
+ 33, 66, 86, 7, 50, 128, 219, 144, 253, 144,
+ 68, 110, 68, 253, 145, 213, 145, 100, 145, 7
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint8 yyr1[] =
+static const yytype_uint16 yyr1[] =
{
- 0, 147, 148, 148, 148, 148, 148, 148, 149, 149,
- 149, 149, 149, 149, 149, 149, 149, 149, 150, 151,
- 151, 151, 151, 152, 153, 154, 155, 156, 156, 157,
- 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
- 157, 157, 157, 157, 157, 157, 157, 158, 158, 158,
- 158, 158, 158, 158, 159, 159, 160, 160, 161, 161,
- 161, 161, 162, 162, 163, 163, 164, 164, 165, 165,
- 166, 166, 167, 167, 168, 168, 169, 169, 169, 170,
- 170, 171, 172, 173, 173, 173, 173, 174, 174, 175,
- 175, 175, 175, 176, 177, 177, 178, 178, 178, 178,
- 179, 180, 181, 181, 182, 183, 183, 184, 184, 185,
- 186, 186, 187, 188, 188, 189, 189, 190, 191, 191,
- 191, 192, 192, 193, 193, 194, 194, 194, 195, 196,
- 197, 197, 197, 198, 198, 198, 198, 198, 198, 198,
- 198, 199, 199, 200, 200, 200, 200, 200, 200, 201,
- 201, 202, 202, 203, 203, 204, 204, 205, 205, 206,
- 206, 207, 207, 208, 208, 209, 209, 210, 211, 212,
- 212, 213, 213, 214, 214, 215, 215, 216, 216, 216,
- 217, 217, 217, 218, 218, 219, 220, 220, 220, 221,
- 221, 221, 222, 222, 223, 224, 224, 225, 225, 226,
- 226, 227, 227, 227, 227, 227, 227, 227, 227, 227,
- 227, 227, 228, 228, 229, 229, 230, 230, 231, 231,
- 231, 231, 231, 231, 231, 231, 231, 231, 232, 232,
- 232, 232, 233, 234, 234, 235, 235, 236, 236, 237,
- 238, 238, 239, 240, 240, 241, 241, 242, 242, 242,
- 242, 242, 242, 242, 242, 243, 243, 243, 243, 243,
- 243, 244, 244, 245, 245, 246, 246, 247, 247, 247,
- 247, 247, 247, 247, 247, 247, 247, 248, 249, 249,
- 250, 250, 250, 251, 251, 252, 252, 253, 253, 253,
- 253, 254, 255, 255
+ 0, 148, 149, 149, 149, 149, 149, 149, 150, 150,
+ 150, 150, 150, 150, 150, 150, 150, 150, 151, 152,
+ 152, 152, 152, 153, 154, 155, 156, 157, 157, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 159, 159, 159,
+ 159, 159, 159, 159, 160, 160, 161, 161, 162, 162,
+ 162, 162, 163, 163, 164, 164, 165, 165, 166, 166,
+ 167, 167, 168, 168, 169, 169, 170, 170, 170, 170,
+ 171, 171, 171, 172, 173, 174, 175, 175, 175, 175,
+ 176, 176, 177, 177, 177, 177, 178, 178, 178, 178,
+ 179, 179, 179, 180, 180, 181, 182, 183, 183, 184,
+ 185, 185, 186, 186, 187, 188, 188, 189, 190, 190,
+ 191, 191, 192, 193, 193, 193, 194, 194, 195, 195,
+ 196, 196, 196, 197, 198, 199, 199, 199, 200, 200,
+ 200, 200, 200, 200, 200, 200, 201, 201, 202, 202,
+ 202, 202, 202, 202, 203, 203, 204, 204, 205, 205,
+ 206, 206, 207, 207, 208, 208, 209, 209, 210, 210,
+ 211, 211, 212, 213, 214, 214, 215, 215, 216, 216,
+ 217, 217, 218, 218, 218, 219, 219, 219, 220, 220,
+ 221, 222, 222, 222, 223, 223, 223, 224, 224, 225,
+ 226, 226, 227, 227, 228, 228, 229, 229, 229, 229,
+ 229, 229, 229, 229, 229, 229, 229, 230, 230, 231,
+ 231, 232, 232, 233, 233, 233, 233, 233, 233, 233,
+ 233, 233, 233, 234, 234, 234, 234, 235, 236, 236,
+ 237, 237, 238, 238, 239, 240, 240, 241, 242, 242,
+ 243, 243, 244, 244, 244, 244, 244, 244, 244, 244,
+ 245, 245, 245, 245, 245, 245, 246, 246, 247, 247,
+ 248, 248, 249, 249, 249, 249, 249, 249, 249, 249,
+ 249, 249, 250, 251, 251, 252, 252, 252, 253, 253,
+ 254, 254, 255, 255, 255, 255, 256, 257, 257
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -1437,29 +1475,29 @@
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, 4, 1, 3, 1, 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
+ 0, 8, 1, 1, 1, 3, 1, 1, 1, 1,
+ 2, 2, 2, 4, 2, 2, 1, 1, 1, 1,
+ 0, 3, 10, 7, 4, 5, 5, 4, 4, 5,
+ 2, 2, 2, 0, 4, 5, 4, 3, 1, 3,
+ 2, 3, 0, 3, 2, 1, 3, 3, 4, 1,
+ 3, 1, 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
};
@@ -1956,1061 +1994,1071 @@
switch (yytype)
{
case 3: /* TOKEN_COMMAND */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).string_value_) != nullptr) {
delete ((*yyvaluep).string_value_);
}
}
-#line 1966 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2004 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
case 4: /* TOKEN_NAME */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).string_value_) != nullptr) {
delete ((*yyvaluep).string_value_);
}
}
-#line 1976 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2014 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
case 5: /* TOKEN_STRING_SINGLE_QUOTED */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).string_value_) != nullptr) {
delete ((*yyvaluep).string_value_);
}
}
-#line 1986 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2024 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
case 6: /* TOKEN_STRING_DOUBLE_QUOTED */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).string_value_) != nullptr) {
delete ((*yyvaluep).string_value_);
}
}
-#line 1996 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2034 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
case 7: /* TOKEN_UNSIGNED_NUMVAL */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).numeric_literal_value_) != nullptr) {
delete ((*yyvaluep).numeric_literal_value_);
}
}
-#line 2006 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2044 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 149: /* sql_statement */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 150: /* sql_statement */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).statement_) != nullptr) {
delete ((*yyvaluep).statement_);
}
}
-#line 2016 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2054 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 150: /* quit_statement */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 151: /* quit_statement */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).quit_statement_) != nullptr) {
delete ((*yyvaluep).quit_statement_);
}
}
-#line 2026 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2064 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 151: /* alter_table_statement */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 152: /* alter_table_statement */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).statement_) != nullptr) {
delete ((*yyvaluep).statement_);
}
}
-#line 2036 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2074 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 152: /* create_table_statement */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 153: /* create_table_statement */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).create_table_statement_) != nullptr) {
delete ((*yyvaluep).create_table_statement_);
}
}
-#line 2046 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2084 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 153: /* create_index_statement */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 154: /* create_index_statement */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).statement_) != nullptr) {
delete ((*yyvaluep).statement_);
}
}
-#line 2056 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2094 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 154: /* drop_table_statement */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 155: /* drop_table_statement */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).drop_table_statement_) != nullptr) {
delete ((*yyvaluep).drop_table_statement_);
}
}
-#line 2066 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2104 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 155: /* column_def */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 156: /* column_def */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).attribute_definition_) != nullptr) {
delete ((*yyvaluep).attribute_definition_);
}
}
-#line 2076 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2114 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 156: /* column_def_commalist */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 157: /* column_def_commalist */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).attribute_definition_list_) != nullptr) {
delete ((*yyvaluep).attribute_definition_list_);
}
}
-#line 2086 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2124 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 157: /* data_type */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 158: /* data_type */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).data_type_) != nullptr) {
delete ((*yyvaluep).data_type_);
}
}
-#line 2096 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2134 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 158: /* column_constraint_def */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 159: /* column_constraint_def */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).column_constraint_) != nullptr) {
delete ((*yyvaluep).column_constraint_);
}
}
-#line 2106 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2144 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 159: /* column_constraint_def_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 160: /* column_constraint_def_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).column_constraint_list_) != nullptr) {
delete ((*yyvaluep).column_constraint_list_);
}
}
-#line 2116 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2154 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 160: /* opt_column_constraint_def_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 161: /* opt_column_constraint_def_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).column_constraint_list_) != nullptr) {
delete ((*yyvaluep).column_constraint_list_);
}
}
-#line 2126 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2164 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 164: /* opt_column_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 165: /* opt_column_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).attribute_list_) != nullptr) {
delete ((*yyvaluep).attribute_list_);
}
}
-#line 2136 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2174 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 165: /* opt_block_properties */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 166: /* opt_block_properties */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).block_properties_) != nullptr) {
delete ((*yyvaluep).block_properties_);
}
}
-#line 2146 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2184 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 166: /* opt_partition_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 167: /* opt_partition_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).partition_clause_) != nullptr) {
delete ((*yyvaluep).partition_clause_);
}
}
-#line 2156 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2194 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 167: /* partition_type */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 168: /* partition_type */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).string_value_) != nullptr) {
delete ((*yyvaluep).string_value_);
}
}
-#line 2166 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2204 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 168: /* key_value_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 169: /* key_value_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).key_value_list_) != nullptr) {
delete ((*yyvaluep).key_value_list_);
}
}
-#line 2176 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2214 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 169: /* key_value */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 170: /* key_value */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).key_value_) != nullptr) {
delete ((*yyvaluep).key_value_);
}
}
-#line 2186 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2224 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 170: /* key_string_value */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 171: /* key_string_value */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).key_string_value_) != nullptr) {
delete ((*yyvaluep).key_string_value_);
}
}
-#line 2196 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2234 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 171: /* key_string_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 172: /* key_string_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).key_string_list_) != nullptr) {
delete ((*yyvaluep).key_string_list_);
}
}
-#line 2206 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2244 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 172: /* key_integer_value */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 173: /* key_integer_value */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).key_integer_value_) != nullptr) {
delete ((*yyvaluep).key_integer_value_);
}
}
-#line 2216 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2254 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 173: /* index_type */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 174: /* key_bool_value */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
+ {
+ if (((*yyvaluep).key_bool_value_) != nullptr) {
+ delete ((*yyvaluep).key_bool_value_);
+ }
+}
+#line 2264 "SqlParser_gen.cpp" /* yacc.c:1257 */
+ break;
+
+ case 175: /* index_type */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).string_value_) != nullptr) {
delete ((*yyvaluep).string_value_);
}
}
-#line 2226 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2274 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 174: /* opt_index_properties */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 176: /* opt_index_properties */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).key_value_list_) != nullptr) {
delete ((*yyvaluep).key_value_list_);
}
}
-#line 2236 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2284 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 175: /* insert_statement */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 177: /* insert_statement */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).insert_statement_) != nullptr) {
delete ((*yyvaluep).insert_statement_);
}
}
-#line 2246 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2294 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 176: /* copy_from_statement */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 178: /* copy_statement */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
- if (((*yyvaluep).copy_from_statement_) != nullptr) {
- delete ((*yyvaluep).copy_from_statement_);
+ if (((*yyvaluep).copy_statement_) != nullptr) {
+ delete ((*yyvaluep).copy_statement_);
}
}
-#line 2256 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2304 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 177: /* opt_copy_from_params */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 179: /* copy_to_target */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
- if (((*yyvaluep).copy_from_params_) != nullptr) {
- delete ((*yyvaluep).copy_from_params_);
+ if (((*yyvaluep).string_value_) != nullptr) {
+ delete ((*yyvaluep).string_value_);
}
}
-#line 2266 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2314 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 178: /* copy_from_params */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 180: /* opt_copy_params */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
- if (((*yyvaluep).copy_from_params_) != nullptr) {
- delete ((*yyvaluep).copy_from_params_);
+ if (((*yyvaluep).key_value_list_) != nullptr) {
+ delete ((*yyvaluep).key_value_list_);
}
}
-#line 2276 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2324 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 179: /* update_statement */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 181: /* update_statement */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).update_statement_) != nullptr) {
delete ((*yyvaluep).update_statement_);
}
}
-#line 2286 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2334 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 180: /* delete_statement */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 182: /* delete_statement */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).delete_statement_) != nullptr) {
delete ((*yyvaluep).delete_statement_);
}
}
-#line 2296 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2344 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 181: /* assignment_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 183: /* assignment_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).assignment_list_) != nullptr) {
delete ((*yyvaluep).assignment_list_);
}
}
-#line 2306 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2354 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 182: /* assignment_item */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 184: /* assignment_item */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).assignment_) != nullptr) {
delete ((*yyvaluep).assignment_);
}
}
-#line 2316 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2364 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 183: /* set_operation_statement */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 185: /* set_operation_statement */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).set_operation_statement_) != nullptr) {
delete ((*yyvaluep).set_operation_statement_);
}
}
-#line 2326 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2374 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 184: /* opt_priority_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 186: /* opt_priority_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).opt_priority_clause_) != nullptr) {
delete ((*yyvaluep).opt_priority_clause_);
}
}
-#line 2336 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2384 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 185: /* with_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 187: /* with_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).with_list_) != nullptr) {
delete ((*yyvaluep).with_list_);
}
}
-#line 2346 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2394 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 186: /* with_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 188: /* with_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).with_list_) != nullptr) {
delete ((*yyvaluep).with_list_);
}
}
-#line 2356 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2404 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 187: /* with_list_element */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 189: /* with_list_element */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).with_list_element_) != nullptr) {
delete ((*yyvaluep).with_list_element_);
}
}
-#line 2366 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2414 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 188: /* set_operation_union */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 190: /* set_operation_union */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).set_operation_) != nullptr) {
delete ((*yyvaluep).set_operation_);
}
}
-#line 2376 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2424 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 189: /* set_operation_intersect */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 191: /* set_operation_intersect */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).set_operation_) != nullptr) {
delete ((*yyvaluep).set_operation_);
}
}
-#line 2386 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2434 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 190: /* select_query */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 192: /* select_query */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).select_query_) != nullptr) {
delete ((*yyvaluep).select_query_);
}
}
-#line 2396 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2444 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 191: /* opt_all_distinct */
-#line 624 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 193: /* opt_all_distinct */
+#line 625 "../SqlParser.ypp" /* yacc.c:1257 */
{ }
-#line 2402 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2450 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 192: /* selection */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 194: /* selection */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).selection_) != nullptr) {
delete ((*yyvaluep).selection_);
}
}
-#line 2412 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2460 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 193: /* selection_item_commalist */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 195: /* selection_item_commalist */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).selection_list_) != nullptr) {
delete ((*yyvaluep).selection_list_);
}
}
-#line 2422 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2470 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 194: /* selection_item */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 196: /* selection_item */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).selection_item_) != nullptr) {
delete ((*yyvaluep).selection_item_);
}
}
-#line 2432 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2480 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 195: /* from_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 197: /* from_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).table_reference_list_) != nullptr) {
delete ((*yyvaluep).table_reference_list_);
}
}
-#line 2442 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2490 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 196: /* subquery_expression */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 198: /* subquery_expression */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).subquery_expression_) != nullptr) {
delete ((*yyvaluep).subquery_expression_);
}
}
-#line 2452 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2500 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 197: /* opt_sample_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 199: /* opt_sample_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).opt_sample_clause_) != nullptr) {
delete ((*yyvaluep).opt_sample_clause_);
}
}
-#line 2462 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2510 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 198: /* join_type */
-#line 628 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 200: /* join_type */
+#line 629 "../SqlParser.ypp" /* yacc.c:1257 */
{ }
-#line 2468 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2516 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 199: /* joined_table_reference */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 201: /* joined_table_reference */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).table_reference_) != nullptr) {
delete ((*yyvaluep).table_reference_);
}
}
-#line 2478 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2526 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 200: /* table_reference */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 202: /* table_reference */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).table_reference_) != nullptr) {
delete ((*yyvaluep).table_reference_);
}
}
-#line 2488 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2536 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 201: /* table_reference_signature */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 203: /* table_reference_signature */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).table_reference_signature_) != nullptr) {
delete ((*yyvaluep).table_reference_signature_);
}
}
-#line 2498 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2546 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 202: /* table_reference_signature_primary */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 204: /* table_reference_signature_primary */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).table_reference_signature_) != nullptr) {
delete ((*yyvaluep).table_reference_signature_);
}
}
-#line 2508 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2556 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 203: /* joined_table_reference_commalist */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 205: /* joined_table_reference_commalist */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).table_reference_list_) != nullptr) {
delete ((*yyvaluep).table_reference_list_);
}
}
-#line 2518 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2566 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 204: /* opt_group_by_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 206: /* opt_group_by_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).opt_group_by_clause_) != nullptr) {
delete ((*yyvaluep).opt_group_by_clause_);
}
}
-#line 2528 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2576 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 205: /* opt_having_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 207: /* opt_having_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).opt_having_clause_) != nullptr) {
delete ((*yyvaluep).opt_having_clause_);
}
}
-#line 2538 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2586 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 206: /* opt_order_by_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 208: /* opt_order_by_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).opt_order_by_clause_) != nullptr) {
delete ((*yyvaluep).opt_order_by_clause_);
}
}
-#line 2548 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2596 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 207: /* opt_limit_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 209: /* opt_limit_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).opt_limit_clause_) != nullptr) {
delete ((*yyvaluep).opt_limit_clause_);
}
}
-#line 2558 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2606 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 208: /* opt_window_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 210: /* opt_window_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).opt_window_clause_) != nullptr) {
delete ((*yyvaluep).opt_window_clause_);
}
}
-#line 2568 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2616 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 209: /* window_declaration_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 211: /* window_declaration_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).opt_window_clause_) != nullptr) {
delete ((*yyvaluep).opt_window_clause_);
}
}
-#line 2578 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2626 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 210: /* window_declaration */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 212: /* window_declaration */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).window_definition_) != nullptr) {
delete ((*yyvaluep).window_definition_);
}
}
-#line 2588 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2636 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 211: /* window_definition */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 213: /* window_definition */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).window_definition_) != nullptr) {
delete ((*yyvaluep).window_definition_);
}
}
-#line 2598 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2646 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 212: /* opt_window_partition */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 214: /* opt_window_partition */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).window_partition_by_list_) != nullptr) {
delete ((*yyvaluep).window_partition_by_list_);
}
}
-#line 2608 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2656 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 213: /* opt_window_order */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 215: /* opt_window_order */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).window_order_by_list_) != nullptr) {
delete ((*yyvaluep).window_order_by_list_);
}
}
-#line 2618 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2666 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 214: /* opt_window_frame */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 216: /* opt_window_frame */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).window_frame_info_) != nullptr) {
delete ((*yyvaluep).window_frame_info_);
}
}
-#line 2628 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2676 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 215: /* frame_mode */
-#line 624 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 217: /* frame_mode */
+#line 625 "../SqlParser.ypp" /* yacc.c:1257 */
{ }
-#line 2634 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2682 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 216: /* frame_preceding */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 218: /* frame_preceding */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).numeric_literal_value_) != nullptr) {
delete ((*yyvaluep).numeric_literal_value_);
}
}
-#line 2644 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2692 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 217: /* frame_following */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 219: /* frame_following */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).numeric_literal_value_) != nullptr) {
delete ((*yyvaluep).numeric_literal_value_);
}
}
-#line 2654 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2702 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 218: /* order_commalist */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 220: /* order_commalist */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).order_commalist_) != nullptr) {
delete ((*yyvaluep).order_commalist_);
}
}
-#line 2664 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2712 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 219: /* order_item */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 221: /* order_item */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).order_item_) != nullptr) {
delete ((*yyvaluep).order_item_);
}
}
-#line 2674 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2722 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 220: /* opt_order_direction */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 222: /* opt_order_direction */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).order_direction_) != nullptr) {
delete ((*yyvaluep).order_direction_);
}
}
-#line 2684 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2732 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 221: /* opt_nulls_first */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 223: /* opt_nulls_first */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).order_direction_) != nullptr) {
delete ((*yyvaluep).order_direction_);
}
}
-#line 2694 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2742 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 222: /* opt_where_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 224: /* opt_where_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).predicate_) != nullptr) {
delete ((*yyvaluep).predicate_);
}
}
-#line 2704 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2752 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 223: /* where_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 225: /* where_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).predicate_) != nullptr) {
delete ((*yyvaluep).predicate_);
}
}
-#line 2714 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2762 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 224: /* or_expression */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 226: /* or_expression */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).predicate_) != nullptr) {
delete ((*yyvaluep).predicate_);
}
}
-#line 2724 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2772 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 225: /* and_expression */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 227: /* and_expression */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).predicate_) != nullptr) {
delete ((*yyvaluep).predicate_);
}
}
-#line 2734 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2782 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 226: /* not_expression */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 228: /* not_expression */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).predicate_) != nullptr) {
delete ((*yyvaluep).predicate_);
}
}
-#line 2744 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2792 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 227: /* predicate_expression_base */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 229: /* predicate_expression_base */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).predicate_) != nullptr) {
delete ((*yyvaluep).predicate_);
}
}
-#line 2754 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2802 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 228: /* add_expression */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 230: /* add_expression */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).expression_) != nullptr) {
delete ((*yyvaluep).expression_);
}
}
-#line 2764 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2812 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 229: /* multiply_expression */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 231: /* multiply_expression */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).expression_) != nullptr) {
delete ((*yyvaluep).expression_);
}
}
-#line 2774 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2822 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 230: /* unary_expression */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 232: /* unary_expression */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).expression_) != nullptr) {
delete ((*yyvaluep).expression_);
}
}
-#line 2784 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2832 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 231: /* expression_base */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 233: /* expression_base */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).expression_) != nullptr) {
delete ((*yyvaluep).expression_);
}
}
-#line 2794 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2842 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 232: /* function_call */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 234: /* function_call */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).function_call_) != nullptr) {
delete ((*yyvaluep).function_call_);
}
}
-#line 2804 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2852 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 233: /* extract_function */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 235: /* extract_function */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).expression_) != nullptr) {
delete ((*yyvaluep).expression_);
}
}
-#line 2814 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2862 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 234: /* substr_function */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 236: /* substr_function */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).expression_) != nullptr) {
delete ((*yyvaluep).expression_);
}
}
-#line 2824 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2872 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 235: /* case_expression */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 237: /* case_expression */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).expression_) != nullptr) {
delete ((*yyvaluep).expression_);
}
}
-#line 2834 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2882 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 236: /* simple_when_clause_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 238: /* simple_when_clause_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).simple_when_clause_list_) != nullptr) {
delete ((*yyvaluep).simple_when_clause_list_);
}
}
-#line 2844 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2892 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 237: /* simple_when_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 239: /* simple_when_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).simple_when_clause_) != nullptr) {
delete ((*yyvaluep).simple_when_clause_);
}
}
-#line 2854 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2902 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 238: /* searched_when_clause_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 240: /* searched_when_clause_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).searched_when_clause_list_) != nullptr) {
delete ((*yyvaluep).searched_when_clause_list_);
}
}
-#line 2864 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2912 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 239: /* searched_when_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 241: /* searched_when_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).searched_when_clause_) != nullptr) {
delete ((*yyvaluep).searched_when_clause_);
}
}
-#line 2874 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2922 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 240: /* opt_else_clause */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 242: /* opt_else_clause */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).expression_) != nullptr) {
delete ((*yyvaluep).expression_);
}
}
-#line 2884 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2932 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 241: /* expression_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 243: /* expression_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).expression_list_) != nullptr) {
delete ((*yyvaluep).expression_list_);
}
}
-#line 2894 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2942 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 242: /* literal_value */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 244: /* literal_value */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).literal_value_) != nullptr) {
delete ((*yyvaluep).literal_value_);
}
}
-#line 2904 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2952 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 243: /* datetime_unit */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 245: /* datetime_unit */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).string_value_) != nullptr) {
delete ((*yyvaluep).string_value_);
}
}
-#line 2914 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2962 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 244: /* literal_value_commalist */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 246: /* literal_value_commalist */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).literal_value_list_) != nullptr) {
delete ((*yyvaluep).literal_value_list_);
}
}
-#line 2924 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2972 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 245: /* attribute_ref */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 247: /* attribute_ref */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).attribute_) != nullptr) {
delete ((*yyvaluep).attribute_);
}
}
-#line 2934 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2982 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 246: /* attribute_ref_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 248: /* attribute_ref_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).attribute_list_) != nullptr) {
delete ((*yyvaluep).attribute_list_);
}
}
-#line 2944 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2992 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 247: /* comparison_operation */
-#line 625 "../SqlParser.ypp" /* yacc.c:1257 */
- { }
-#line 2950 "SqlParser_gen.cpp" /* yacc.c:1257 */
- break;
-
- case 248: /* unary_operation */
+ case 249: /* comparison_operation */
#line 626 "../SqlParser.ypp" /* yacc.c:1257 */
{ }
-#line 2956 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 2998 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 249: /* add_operation */
+ case 250: /* unary_operation */
#line 627 "../SqlParser.ypp" /* yacc.c:1257 */
{ }
-#line 2962 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 3004 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 250: /* multiply_operation */
-#line 627 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 251: /* add_operation */
+#line 628 "../SqlParser.ypp" /* yacc.c:1257 */
{ }
-#line 2968 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 3010 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 251: /* name_commalist */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 252: /* multiply_operation */
+#line 628 "../SqlParser.ypp" /* yacc.c:1257 */
+ { }
+#line 3016 "SqlParser_gen.cpp" /* yacc.c:1257 */
+ break;
+
+ case 253: /* name_commalist */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).string_list_) != nullptr) {
delete ((*yyvaluep).string_list_);
}
}
-#line 2978 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 3026 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 252: /* any_name */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 254: /* any_name */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).string_value_) != nullptr) {
delete ((*yyvaluep).string_value_);
}
}
-#line 2988 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 3036 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 253: /* boolean_value */
-#line 624 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 255: /* boolean_value */
+#line 625 "../SqlParser.ypp" /* yacc.c:1257 */
{ }
-#line 2994 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 3042 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 254: /* command */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 256: /* command */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).command_) != nullptr) {
delete ((*yyvaluep).command_);
}
}
-#line 3004 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 3052 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
- case 255: /* command_argument_list */
-#line 630 "../SqlParser.ypp" /* yacc.c:1257 */
+ case 257: /* command_argument_list */
+#line 631 "../SqlParser.ypp" /* yacc.c:1257 */
{
if (((*yyvaluep).command_argument_list_) != nullptr) {
delete ((*yyvaluep).command_argument_list_);
}
}
-#line 3014 "SqlParser_gen.cpp" /* yacc.c:1257 */
+#line 3062 "SqlParser_gen.cpp" /* yacc.c:1257 */
break;
@@ -3302,148 +3350,148 @@
switch (yyn)
{
case 2:
-#line 639 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 640 "../SqlParser.ypp" /* yacc.c:1661 */
{
*parsedStatement = (yyvsp[-1].statement_);
YYACCEPT;
}
-#line 3311 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3359 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 3:
-#line 643 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 644 "../SqlParser.ypp" /* yacc.c:1661 */
{
*parsedStatement = (yyvsp[-1].statement_);
YYACCEPT;
}
-#line 3320 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3368 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 4:
-#line 647 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 648 "../SqlParser.ypp" /* yacc.c:1661 */
{
*parsedStatement = (yyvsp[-1].command_);
YYACCEPT;
}
-#line 3329 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3377 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 5:
-#line 651 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 652 "../SqlParser.ypp" /* yacc.c:1661 */
{
*parsedStatement = (yyvsp[-1].command_);
YYACCEPT;
}
-#line 3338 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3386 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 6:
-#line 655 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 656 "../SqlParser.ypp" /* yacc.c:1661 */
{
YYABORT;
}
-#line 3346 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3394 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 7:
-#line 658 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 659 "../SqlParser.ypp" /* yacc.c:1661 */
{
// Regular yyparse() return codes are non-negative, so use a negative one here.
return -1;
}
-#line 3355 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 8:
-#line 665 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.statement_) = (yyvsp[0].statement_);
- }
-#line 3363 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 9:
-#line 668 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.statement_) = (yyvsp[0].copy_from_statement_);
- }
-#line 3371 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 10:
-#line 671 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.statement_) = (yyvsp[0].create_table_statement_);
- }
-#line 3379 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 11:
-#line 674 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.statement_) = (yyvsp[0].statement_);
- }
-#line 3387 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 12:
-#line 677 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.statement_) = (yyvsp[0].delete_statement_);
- }
-#line 3395 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 13:
-#line 680 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.statement_) = (yyvsp[0].drop_table_statement_);
- }
#line 3403 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 14:
-#line 683 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 8:
+#line 666 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.statement_) = (yyvsp[0].insert_statement_);
+ (yyval.statement_) = (yyvsp[0].statement_);
}
#line 3411 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 15:
-#line 686 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 9:
+#line 669 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.statement_) = (yyvsp[0].quit_statement_);
+ (yyval.statement_) = (yyvsp[0].copy_statement_);
}
#line 3419 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 16:
-#line 689 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 10:
+#line 672 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.statement_) = (yyvsp[0].set_operation_statement_);
+ (yyval.statement_) = (yyvsp[0].create_table_statement_);
}
#line 3427 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 17:
-#line 692 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 11:
+#line 675 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.statement_) = (yyvsp[0].update_statement_);
+ (yyval.statement_) = (yyvsp[0].statement_);
}
#line 3435 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 18:
-#line 698 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 12:
+#line 678 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.quit_statement_) = new quickstep::ParseStatementQuit((yylsp[0]).first_line, (yylsp[0]).first_column);
+ (yyval.statement_) = (yyvsp[0].delete_statement_);
}
#line 3443 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
+ case 13:
+#line 681 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.statement_) = (yyvsp[0].drop_table_statement_);
+ }
+#line 3451 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 14:
+#line 684 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.statement_) = (yyvsp[0].insert_statement_);
+ }
+#line 3459 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 15:
+#line 687 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.statement_) = (yyvsp[0].quit_statement_);
+ }
+#line 3467 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 16:
+#line 690 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.statement_) = (yyvsp[0].set_operation_statement_);
+ }
+#line 3475 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 17:
+#line 693 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.statement_) = (yyvsp[0].update_statement_);
+ }
+#line 3483 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 18:
+#line 699 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.quit_statement_) = new quickstep::ParseStatementQuit((yylsp[0]).first_line, (yylsp[0]).first_column);
+ }
+#line 3491 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
case 19:
-#line 704 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 705 "../SqlParser.ypp" /* yacc.c:1661 */
{
delete (yyvsp[-3].string_value_);
delete (yyvsp[0].attribute_definition_);
@@ -3451,22 +3499,22 @@
NotSupported(&(yylsp[-5]), yyscanner, "ALTER statements");
YYERROR;
}
-#line 3455 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3503 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 20:
-#line 711 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 712 "../SqlParser.ypp" /* yacc.c:1661 */
{
delete (yyvsp[-3].string_value_);
(yyval.statement_) = nullptr;
NotSupported(&(yylsp[-5]), yyscanner, "ALTER statements");
YYERROR;
}
-#line 3466 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3514 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 21:
-#line 717 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 718 "../SqlParser.ypp" /* yacc.c:1661 */
{
delete (yyvsp[-3].string_value_);
delete (yyvsp[0].string_value_);
@@ -3474,11 +3522,11 @@
NotSupported(&(yylsp[-5]), yyscanner, "ALTER statements");
YYERROR;
}
-#line 3478 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3526 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 22:
-#line 724 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 725 "../SqlParser.ypp" /* yacc.c:1661 */
{
delete (yyvsp[-3].string_value_);
delete (yyvsp[0].string_value_);
@@ -3486,19 +3534,19 @@
NotSupported(&(yylsp[-5]), yyscanner, "ALTER statements");
YYERROR;
}
-#line 3490 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3538 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 23:
-#line 733 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 734 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.create_table_statement_) = new quickstep::ParseStatementCreateTable((yylsp[-8]).first_line, (yylsp[-8]).first_column, (yyvsp[-6].string_value_), (yyvsp[-4].attribute_definition_list_), (yyvsp[-1].block_properties_), (yyvsp[0].partition_clause_));
}
-#line 3498 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3546 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 24:
-#line 738 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 739 "../SqlParser.ypp" /* yacc.c:1661 */
{
if ((yyvsp[0].key_value_list_)) {
(yyval.statement_) = new quickstep::ParseStatementCreateIndex((yylsp[-8]).first_line, (yylsp[-8]).first_column, (yyvsp[-6].string_value_), (yyvsp[-4].string_value_), (yyvsp[-3].attribute_list_), (yyvsp[-1].string_value_), (yylsp[0]).first_line, (yylsp[0]).first_column, (yyvsp[0].key_value_list_));
@@ -3506,153 +3554,153 @@
(yyval.statement_) = new quickstep::ParseStatementCreateIndex((yylsp[-8]).first_line, (yylsp[-8]).first_column, (yyvsp[-6].string_value_), (yyvsp[-4].string_value_), (yyvsp[-3].attribute_list_), (yyvsp[-1].string_value_));
}
}
-#line 3510 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3558 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 25:
-#line 747 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 748 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.drop_table_statement_) = new quickstep::ParseStatementDropTable((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[0].string_value_));
}
-#line 3518 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3566 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 26:
-#line 752 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 753 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.attribute_definition_) = new quickstep::ParseAttributeDefinition((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-2].string_value_), (yyvsp[-1].data_type_), (yyvsp[0].column_constraint_list_));
}
-#line 3526 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3574 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 27:
-#line 757 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 758 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.attribute_definition_list_) = new quickstep::PtrList<quickstep::ParseAttributeDefinition>();
(yyval.attribute_definition_list_)->push_back((yyvsp[0].attribute_definition_));
}
-#line 3535 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3583 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 28:
-#line 761 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 762 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.attribute_definition_list_) = (yyvsp[-2].attribute_definition_list_);
(yyval.attribute_definition_list_)->push_back((yyvsp[0].attribute_definition_));
}
-#line 3544 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3592 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 29:
-#line 767 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 768 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.data_type_) = nullptr;
NotSupported(&(yylsp[0]), yyscanner, "BIT data type");
YYERROR;
}
-#line 3554 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3602 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 30:
-#line 772 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 773 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kDate));
}
-#line 3562 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3610 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 31:
-#line 775 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 776 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kDatetime));
}
-#line 3570 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3618 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 32:
-#line 778 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 779 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.data_type_) = nullptr;
NotSupported(&(yylsp[0]), yyscanner, "TIME data type");
YYERROR;
}
-#line 3580 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 33:
-#line 783 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kDatetime));
- }
-#line 3588 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 34:
-#line 786 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kDouble));
- }
-#line 3596 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 35:
-#line 789 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kDouble));
- }
-#line 3604 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 36:
-#line 792 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kDouble));
- }
-#line 3612 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 37:
-#line 795 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kFloat));
- }
-#line 3620 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 38:
-#line 798 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kInt));
- }
#line 3628 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 39:
-#line 801 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 33:
+#line 784 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kInt));
+ (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kDatetime));
}
#line 3636 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 40:
-#line 804 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 34:
+#line 787 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kLong));
+ (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kDouble));
}
#line 3644 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 41:
-#line 807 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 35:
+#line 790 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kLong));
+ (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kDouble));
}
#line 3652 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
+ case 36:
+#line 793 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kDouble));
+ }
+#line 3660 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 37:
+#line 796 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kFloat));
+ }
+#line 3668 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 38:
+#line 799 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kInt));
+ }
+#line 3676 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 39:
+#line 802 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kInt));
+ }
+#line 3684 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 40:
+#line 805 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kLong));
+ }
+#line 3692 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 41:
+#line 808 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kLong));
+ }
+#line 3700 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
case 42:
-#line 810 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 811 "../SqlParser.ypp" /* yacc.c:1661 */
{
/**
* NOTE(chasseur): This pattern exhibits a shift/reduce conflict with the
@@ -3665,27 +3713,27 @@
"or YEARMONTH INTERVAL");
YYERROR;
}
-#line 3669 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3717 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 43:
-#line 822 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 823 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kDatetimeInterval));
}
-#line 3677 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3725 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 44:
-#line 825 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 826 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.data_type_) = new quickstep::ParseDataType(quickstep::TypeFactory::GetType(quickstep::kYearMonthInterval));
}
-#line 3685 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3733 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 45:
-#line 828 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 829 "../SqlParser.ypp" /* yacc.c:1661 */
{
if ((yyvsp[-1].numeric_literal_value_)->float_like()) {
delete (yyvsp[-1].numeric_literal_value_);
@@ -3704,11 +3752,11 @@
}
}
}
-#line 3708 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3756 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 46:
-#line 846 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 847 "../SqlParser.ypp" /* yacc.c:1661 */
{
if ((yyvsp[-1].numeric_literal_value_)->float_like()) {
delete (yyvsp[-1].numeric_literal_value_);
@@ -3727,69 +3775,69 @@
}
}
}
-#line 3731 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3779 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 47:
-#line 866 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 867 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.column_constraint_) = new quickstep::ParseColumnConstraintNull((yylsp[0]).first_line, (yylsp[0]).first_column);
}
-#line 3739 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3787 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 48:
-#line 869 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 870 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.column_constraint_) = new quickstep::ParseColumnConstraintNotNull((yylsp[-1]).first_line, (yylsp[-1]).first_column);
}
-#line 3747 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3795 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 49:
-#line 872 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 873 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.column_constraint_) = nullptr;
NotSupported(&(yylsp[0]), yyscanner, "Column Constraints (UNIQUE)");
YYERROR;
}
-#line 3757 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3805 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 50:
-#line 877 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 878 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.column_constraint_) = nullptr;
NotSupported(&(yylsp[-1]), yyscanner, "Column Constraints (PRIMARY KEY)");
YYERROR;
}
-#line 3767 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3815 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 51:
-#line 882 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 883 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.column_constraint_) = nullptr;
delete (yyvsp[0].literal_value_);
NotSupported(&(yylsp[-1]), yyscanner, "Column Constraints (DEFAULT)");
YYERROR;
}
-#line 3778 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3826 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 52:
-#line 888 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 889 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.column_constraint_) = nullptr;
delete (yyvsp[-1].predicate_);
NotSupported(&(yylsp[-3]), yyscanner, "Column Constraints (CHECK)");
YYERROR;
}
-#line 3789 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3837 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 53:
-#line 894 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 895 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.column_constraint_) = nullptr;
delete (yyvsp[-3].string_value_);
@@ -3797,65 +3845,65 @@
NotSupported(&(yylsp[-4]), yyscanner, "Foreign Keys");
YYERROR;
}
-#line 3801 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3849 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 54:
-#line 903 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 904 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.column_constraint_list_) = (yyvsp[-1].column_constraint_list_);
(yyval.column_constraint_list_)->push_back((yyvsp[0].column_constraint_));
}
-#line 3810 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3858 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 55:
-#line 907 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 908 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.column_constraint_list_) = new quickstep::PtrList<quickstep::ParseColumnConstraint>();
(yyval.column_constraint_list_)->push_back((yyvsp[0].column_constraint_));
}
-#line 3819 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3867 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 56:
-#line 913 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 914 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.column_constraint_list_) = nullptr;
}
-#line 3827 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3875 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 57:
-#line 916 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 917 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.column_constraint_list_) = (yyvsp[0].column_constraint_list_);
}
-#line 3835 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3883 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 58:
-#line 921 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 922 "../SqlParser.ypp" /* yacc.c:1661 */
{
delete (yyvsp[-1].string_list_);
NotSupported(&(yylsp[-3]), yyscanner, "Table Constraints (UNIQUE)");
YYERROR;
}
-#line 3845 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3893 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 59:
-#line 926 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 927 "../SqlParser.ypp" /* yacc.c:1661 */
{
delete (yyvsp[-1].string_list_);
NotSupported(&(yylsp[-4]), yyscanner, "Table Constraints (PRIMARY KEY)");
YYERROR;
}
-#line 3855 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3903 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 60:
-#line 931 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 932 "../SqlParser.ypp" /* yacc.c:1661 */
{
delete (yyvsp[-6].string_list_);
delete (yyvsp[-3].string_value_);
@@ -3863,95 +3911,95 @@
NotSupported(&(yylsp[-9]), yyscanner, "Table Constraints (FOREIGN KEY)");
YYERROR;
}
-#line 3867 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3915 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 61:
-#line 938 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 939 "../SqlParser.ypp" /* yacc.c:1661 */
{
delete (yyvsp[-1].predicate_);
NotSupported(&(yylsp[-3]), yyscanner, "Table Constraints (CHECK)");
YYERROR;
}
-#line 3877 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3925 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 62:
-#line 945 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 946 "../SqlParser.ypp" /* yacc.c:1661 */
{
NotSupported(&(yylsp[-2]), yyscanner, "Table Constraints");
YYERROR;
}
-#line 3886 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 3934 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 63:
-#line 949 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 950 "../SqlParser.ypp" /* yacc.c:1661 */
{
NotSupported(&(yylsp[0]), yyscanner, "Table Constraints");
YYERROR;
}
-#line 3895 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 64:
-#line 955 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- /* $$ = nullptr; */
- }
-#line 3903 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 65:
-#line 958 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- /* $$ = $1; */
- }
-#line 3911 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 66:
-#line 963 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.attribute_list_) = nullptr;
- }
-#line 3919 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 67:
-#line 966 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.attribute_list_) = (yyvsp[-1].attribute_list_);
- }
-#line 3927 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 68:
-#line 971 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.block_properties_) = nullptr;
- }
-#line 3935 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 69:
-#line 974 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.block_properties_) = new quickstep::ParseBlockProperties((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-1].key_value_list_));
- }
#line 3943 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 70:
-#line 979 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 64:
+#line 956 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.partition_clause_) = nullptr;
+ /* $$ = nullptr; */
}
#line 3951 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
+ case 65:
+#line 959 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ /* $$ = $1; */
+ }
+#line 3959 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 66:
+#line 964 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.attribute_list_) = nullptr;
+ }
+#line 3967 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 67:
+#line 967 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.attribute_list_) = (yyvsp[-1].attribute_list_);
+ }
+#line 3975 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 68:
+#line 972 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.block_properties_) = nullptr;
+ }
+#line 3983 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 69:
+#line 975 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.block_properties_) = new quickstep::ParseBlockProperties((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-1].key_value_list_));
+ }
+#line 3991 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 70:
+#line 980 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.partition_clause_) = nullptr;
+ }
+#line 3999 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
case 71:
-#line 982 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 983 "../SqlParser.ypp" /* yacc.c:1661 */
{
if ((yyvsp[0].numeric_literal_value_)->float_like()) {
delete (yyvsp[0].numeric_literal_value_);
@@ -3969,95 +4017,111 @@
}
}
}
-#line 3973 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4021 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 72:
-#line 1001 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1002 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, quickstep::kHashPartitionType);
}
-#line 3981 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4029 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 73:
-#line 1004 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1005 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, quickstep::kRangePartitionType);
}
-#line 3989 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4037 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 74:
-#line 1009 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1010 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.key_value_list_) = new quickstep::PtrList<quickstep::ParseKeyValue>();
(yyval.key_value_list_)->push_back((yyvsp[0].key_value_));
}
-#line 3998 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4046 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 75:
-#line 1013 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1014 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.key_value_list_) = (yyvsp[-2].key_value_list_);
(yyval.key_value_list_)->push_back((yyvsp[0].key_value_));
}
-#line 4007 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4055 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 76:
-#line 1019 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1020 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.key_value_) = (yyvsp[0].key_string_value_);
}
-#line 4015 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4063 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 77:
-#line 1022 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1023 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.key_value_) = (yyvsp[0].key_string_list_);
}
-#line 4023 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4071 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 78:
-#line 1025 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1026 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.key_value_) = (yyvsp[0].key_integer_value_);
}
-#line 4031 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4079 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 79:
-#line 1030 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1029 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.key_string_value_) = new quickstep::ParseKeyStringValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].string_value_));
+ (yyval.key_value_) = (yyvsp[0].key_bool_value_);
}
-#line 4039 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4087 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 80:
-#line 1033 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1034 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.key_string_value_) = new quickstep::ParseKeyStringValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].string_value_));
+ }
+#line 4095 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 81:
+#line 1037 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.key_string_value_) = new quickstep::ParseKeyStringValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].string_value_));
+ }
+#line 4103 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 82:
+#line 1040 "../SqlParser.ypp" /* yacc.c:1661 */
{
// This is a special case to handle the COMPRESS ALL option of the BLOCK PROPERTIES.
(yyval.key_string_value_) = new quickstep::ParseKeyStringValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].string_value_),
new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, "ALL"));
}
-#line 4049 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4113 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 81:
-#line 1040 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 83:
+#line 1047 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.key_string_list_) = new quickstep::ParseKeyStringList((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-3].string_value_), (yyvsp[-1].string_list_));
}
-#line 4057 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4121 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 82:
-#line 1045 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 84:
+#line 1052 "../SqlParser.ypp" /* yacc.c:1661 */
{
if ((yyvsp[0].numeric_literal_value_)->float_like()) {
delete (yyvsp[0].numeric_literal_value_);
@@ -4067,64 +4131,72 @@
}
(yyval.key_integer_value_) = new quickstep::ParseKeyIntegerValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].numeric_literal_value_));
}
-#line 4071 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4135 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 83:
-#line 1056 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 85:
+#line 1063 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.key_bool_value_) = new quickstep::ParseKeyBoolValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].boolean_value_));
+ }
+#line 4143 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 86:
+#line 1068 "../SqlParser.ypp" /* yacc.c:1661 */
{
// Defaults to BitWeavingV, but IndexProperties can change this to H.
(yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column,
std::to_string(quickstep::IndexSubBlockType::kBitWeavingV));
}
-#line 4081 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4153 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 84:
-#line 1061 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 87:
+#line 1073 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column,
std::to_string(quickstep::IndexSubBlockType::kBloomFilter));
}
-#line 4090 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4162 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 85:
-#line 1065 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 88:
+#line 1077 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column,
std::to_string(quickstep::IndexSubBlockType::kCSBTree));
}
-#line 4099 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4171 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 86:
-#line 1069 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 89:
+#line 1081 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column,
std::to_string(quickstep::IndexSubBlockType::kSMA));
}
-#line 4108 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4180 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 87:
-#line 1075 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 90:
+#line 1087 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.key_value_list_) = nullptr;
}
-#line 4116 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4188 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 88:
-#line 1078 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 91:
+#line 1090 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.key_value_list_) = (yyvsp[-1].key_value_list_);
}
-#line 4124 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4196 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 89:
-#line 1084 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 92:
+#line 1096 "../SqlParser.ypp" /* yacc.c:1661 */
{
delete (yyvsp[-7].string_value_);
delete (yyvsp[-5].string_list_);
@@ -4133,161 +4205,180 @@
NotSupported(&(yylsp[-6]), yyscanner, "list of column names in INSERT statement");
YYERROR;
}
-#line 4137 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 90:
-#line 1092 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.insert_statement_) = new quickstep::ParseStatementInsertTuple((yylsp[-6]).first_line, (yylsp[-6]).first_column, (yyvsp[-4].string_value_), (yyvsp[-1].literal_value_list_));
- }
-#line 4145 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 91:
-#line 1095 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.insert_statement_) = new quickstep::ParseStatementInsertSelection((yylsp[-3]).first_line, (yylsp[-2]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].select_query_), nullptr);
- }
-#line 4153 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 92:
-#line 1098 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.insert_statement_) = new quickstep::ParseStatementInsertSelection((yylsp[-4]).first_line, (yylsp[-3]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].select_query_), (yyvsp[-4].with_list_));
- }
-#line 4161 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4209 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 93:
#line 1104 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.copy_from_statement_) = new quickstep::ParseStatementCopyFrom((yylsp[-4]).first_line, (yylsp[-4]).first_column, (yyvsp[-3].string_value_), (yyvsp[-1].string_value_), (yyvsp[0].copy_from_params_));
+ (yyval.insert_statement_) = new quickstep::ParseStatementInsertTuple((yylsp[-6]).first_line, (yylsp[-6]).first_column, (yyvsp[-4].string_value_), (yyvsp[-1].literal_value_list_));
}
-#line 4169 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4217 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 94:
-#line 1109 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1107 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.copy_from_params_) = nullptr;
+ (yyval.insert_statement_) = new quickstep::ParseStatementInsertSelection((yylsp[-3]).first_line, (yylsp[-2]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].select_query_), nullptr);
}
-#line 4177 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4225 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 95:
-#line 1112 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1110 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.copy_from_params_) = (yyvsp[-1].copy_from_params_);
+ (yyval.insert_statement_) = new quickstep::ParseStatementInsertSelection((yylsp[-4]).first_line, (yylsp[-3]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].select_query_), (yyvsp[-4].with_list_));
}
-#line 4185 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4233 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 96:
-#line 1117 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1116 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.copy_from_params_) = new quickstep::ParseCopyFromParams((yylsp[-1]).first_line, (yylsp[-1]).first_column);
- (yyval.copy_from_params_)->set_delimiter((yyvsp[0].string_value_));
+ (yyval.copy_statement_) = new quickstep::ParseStatementCopy((yylsp[-4]).first_line, (yylsp[-4]).first_column,
+ quickstep::ParseStatementCopy::kFrom,
+ (yyvsp[-3].string_value_), (yyvsp[-1].string_value_), (yyvsp[0].key_value_list_));
}
-#line 4194 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4243 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 97:
#line 1121 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.copy_from_params_) = new quickstep::ParseCopyFromParams((yylsp[-1]).first_line, (yylsp[-1]).first_column);
- (yyval.copy_from_params_)->escape_strings = (yyvsp[0].boolean_value_);
+ (yyval.copy_statement_) = new quickstep::ParseStatementCopy((yylsp[-3]).first_line, (yylsp[-3]).first_column,
+ quickstep::ParseStatementCopy::kTo,
+ (yyvsp[-2].string_value_), (yyvsp[-1].string_value_), (yyvsp[0].key_value_list_));
}
-#line 4203 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4253 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 98:
-#line 1125 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1126 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.copy_from_params_) = (yyvsp[-3].copy_from_params_);
- (yyval.copy_from_params_)->set_delimiter((yyvsp[0].string_value_));
+ (yyval.copy_statement_) = new quickstep::ParseStatementCopy((yylsp[-3]).first_line, (yylsp[-3]).first_column,
+ (yyvsp[-2].set_operation_), nullptr, (yyvsp[-1].string_value_), (yyvsp[0].key_value_list_));
}
-#line 4212 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4262 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 99:
-#line 1129 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1130 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.copy_from_params_) = (yyvsp[-3].copy_from_params_);
- (yyval.copy_from_params_)->escape_strings = (yyvsp[0].boolean_value_);
+ (yyval.copy_statement_) = new quickstep::ParseStatementCopy((yylsp[-4]).first_line, (yylsp[-4]).first_column,
+ (yyvsp[-2].set_operation_), (yyvsp[-4].with_list_), (yyvsp[-1].string_value_), (yyvsp[0].key_value_list_));
}
-#line 4221 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4271 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 100:
-#line 1135 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1136 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.update_statement_) = new quickstep::ParseStatementUpdate((yylsp[-4]).first_line, (yylsp[-4]).first_column, (yyvsp[-3].string_value_), (yyvsp[-1].assignment_list_), (yyvsp[0].predicate_));
+ (yyval.string_value_) = new quickstep::ParseString((yyvsp[0].string_value_)->line_number(), (yyvsp[0].string_value_)->column_number(), "@" + (yyvsp[0].string_value_)->value());
+ delete (yyvsp[0].string_value_);
}
-#line 4229 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4280 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 101:
#line 1140 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.delete_statement_) = new quickstep::ParseStatementDelete((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].predicate_));
+ (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, "$stdout");
}
-#line 4237 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4288 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 102:
-#line 1145 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1143 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, "$stderr");
+ }
+#line 4296 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 103:
+#line 1148 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.key_value_list_) = nullptr;
+ }
+#line 4304 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 104:
+#line 1151 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.key_value_list_) = (yyvsp[-1].key_value_list_);
+ }
+#line 4312 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 105:
+#line 1156 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.update_statement_) = new quickstep::ParseStatementUpdate((yylsp[-4]).first_line, (yylsp[-4]).first_column, (yyvsp[-3].string_value_), (yyvsp[-1].assignment_list_), (yyvsp[0].predicate_));
+ }
+#line 4320 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 106:
+#line 1161 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.delete_statement_) = new quickstep::ParseStatementDelete((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].predicate_));
+ }
+#line 4328 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 107:
+#line 1166 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.assignment_list_) = (yyvsp[-2].assignment_list_);
(yyval.assignment_list_)->push_back((yyvsp[0].assignment_));
}
-#line 4246 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4337 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 103:
-#line 1149 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 108:
+#line 1170 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.assignment_list_) = new quickstep::PtrList<quickstep::ParseAssignment>();
(yyval.assignment_list_)->push_back((yyvsp[0].assignment_));
}
-#line 4255 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4346 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 104:
-#line 1155 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 109:
+#line 1176 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.assignment_) = new quickstep::ParseAssignment((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-2].string_value_), (yyvsp[0].expression_));
}
-#line 4263 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4354 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 105:
-#line 1164 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 110:
+#line 1185 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.set_operation_statement_) = new quickstep::ParseStatementSetOperation((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].set_operation_), nullptr, (yyvsp[0].opt_priority_clause_));
}
-#line 4271 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4362 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 106:
-#line 1167 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 111:
+#line 1188 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.set_operation_statement_) = new quickstep::ParseStatementSetOperation((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-1].set_operation_), (yyvsp[-2].with_list_), (yyvsp[0].opt_priority_clause_));
}
-#line 4279 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4370 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 107:
-#line 1172 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 112:
+#line 1193 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.opt_priority_clause_) = nullptr;
}
-#line 4287 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4378 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 108:
-#line 1175 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 113:
+#line 1196 "../SqlParser.ypp" /* yacc.c:1661 */
{
if ((yyvsp[0].numeric_literal_value_)->float_like()) {
delete (yyvsp[0].numeric_literal_value_);
@@ -4305,46 +4396,46 @@
}
}
}
-#line 4309 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4400 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 109:
-#line 1194 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 114:
+#line 1215 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.with_list_) = (yyvsp[0].with_list_);
}
-#line 4317 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4408 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 110:
-#line 1199 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 115:
+#line 1220 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.with_list_) = new quickstep::PtrVector<quickstep::ParseSubqueryTableReference>();
(yyval.with_list_)->push_back((yyvsp[0].with_list_element_));
}
-#line 4326 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4417 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 111:
-#line 1203 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 116:
+#line 1224 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.with_list_) = (yyvsp[-2].with_list_);
(yyval.with_list_)->push_back((yyvsp[0].with_list_element_));
}
-#line 4335 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4426 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 112:
-#line 1209 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 117:
+#line 1230 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.with_list_element_) = new quickstep::ParseSubqueryTableReference((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[0].subquery_expression_));
(yyval.with_list_element_)->set_table_reference_signature((yyvsp[-2].table_reference_signature_));
}
-#line 4344 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4435 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 113:
-#line 1215 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 118:
+#line 1236 "../SqlParser.ypp" /* yacc.c:1661 */
{
if ((yyvsp[-1].boolean_value_)) {
(yyval.set_operation_) = new quickstep::ParseSetOperation((yylsp[-3]).first_line, (yylsp[-3]).first_column, quickstep::ParseSetOperation::kUnion);
@@ -4354,19 +4445,19 @@
(yyval.set_operation_)->addOperand((yyvsp[-3].set_operation_));
(yyval.set_operation_)->addOperand((yyvsp[0].set_operation_));
}
-#line 4358 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4449 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 114:
-#line 1224 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 119:
+#line 1245 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.set_operation_) = (yyvsp[0].set_operation_);
}
-#line 4366 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4457 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 115:
-#line 1229 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 120:
+#line 1250 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.set_operation_) = new quickstep::ParseSetOperation((yylsp[-2]).first_line, (yylsp[-2]).first_column, quickstep::ParseSetOperation::kIntersect);
quickstep::ParseSetOperation *op = new quickstep::ParseSetOperation(
@@ -4375,387 +4466,387 @@
(yyval.set_operation_)->addOperand((yyvsp[-2].set_operation_));
(yyval.set_operation_)->addOperand(op);
}
-#line 4379 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4470 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 116:
-#line 1237 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 121:
+#line 1258 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.set_operation_) = new quickstep::ParseSetOperation((yylsp[0]).first_line, (yylsp[0]).first_column, quickstep::ParseSetOperation::kSelect);
(yyval.set_operation_)->addOperand((yyvsp[0].select_query_));
}
-#line 4388 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 117:
-#line 1244 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.select_query_) = new quickstep::ParseSelect((yylsp[-9]).first_line, (yylsp[-9]).first_column, (yyvsp[-7].selection_), (yyvsp[-6].table_reference_list_), (yyvsp[-5].predicate_), (yyvsp[-4].opt_group_by_clause_), (yyvsp[-3].opt_having_clause_), (yyvsp[-2].opt_order_by_clause_), (yyvsp[-1].opt_limit_clause_), (yyvsp[0].opt_window_clause_));
- }
-#line 4396 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 118:
-#line 1249 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.boolean_value_) = true; // Distinct
- }
-#line 4404 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 119:
-#line 1252 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.boolean_value_) = false; // All
- }
-#line 4412 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 120:
-#line 1255 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.boolean_value_) = true; // Distinct
- }
-#line 4420 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 121:
-#line 1260 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.selection_) = new quickstep::ParseSelectionStar((yylsp[0]).first_line, (yylsp[0]).first_column);
- }
-#line 4428 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4479 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 122:
-#line 1263 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1265 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.selection_) = (yyvsp[0].selection_list_);
+ (yyval.select_query_) = new quickstep::ParseSelect((yylsp[-9]).first_line, (yylsp[-9]).first_column, (yyvsp[-7].selection_), (yyvsp[-6].table_reference_list_), (yyvsp[-5].predicate_), (yyvsp[-4].opt_group_by_clause_), (yyvsp[-3].opt_having_clause_), (yyvsp[-2].opt_order_by_clause_), (yyvsp[-1].opt_limit_clause_), (yyvsp[0].opt_window_clause_));
}
-#line 4436 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4487 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 123:
-#line 1268 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1270 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.selection_list_) = new quickstep::ParseSelectionList((yylsp[0]).first_line, (yylsp[0]).first_column);
- (yyval.selection_list_)->add((yyvsp[0].selection_item_));
+ (yyval.boolean_value_) = true; // Distinct
}
-#line 4445 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4495 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 124:
-#line 1272 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1273 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.selection_list_) = (yyvsp[-2].selection_list_);
- (yyval.selection_list_)->add((yyvsp[0].selection_item_));
+ (yyval.boolean_value_) = false; // All
}
-#line 4454 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4503 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 125:
-#line 1278 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1276 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.selection_item_) = new quickstep::ParseSelectionItem((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-2].expression_), (yyvsp[0].string_value_));
+ (yyval.boolean_value_) = true; // Distinct
}
-#line 4462 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4511 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 126:
#line 1281 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.selection_item_) = new quickstep::ParseSelectionItem((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].expression_), (yyvsp[0].string_value_));
+ (yyval.selection_) = new quickstep::ParseSelectionStar((yylsp[0]).first_line, (yylsp[0]).first_column);
}
-#line 4470 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4519 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 127:
#line 1284 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.selection_item_) = new quickstep::ParseSelectionItem((yylsp[0]).first_line, (yylsp[0]).first_column, (yyvsp[0].expression_));
+ (yyval.selection_) = (yyvsp[0].selection_list_);
}
-#line 4478 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4527 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 128:
#line 1289 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.table_reference_list_) = (yyvsp[0].table_reference_list_);
+ (yyval.selection_list_) = new quickstep::ParseSelectionList((yylsp[0]).first_line, (yylsp[0]).first_column);
+ (yyval.selection_list_)->add((yyvsp[0].selection_item_));
}
-#line 4486 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4536 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 129:
-#line 1294 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1293 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.subquery_expression_) = new quickstep::ParseSubqueryExpression((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-1].set_operation_));
+ (yyval.selection_list_) = (yyvsp[-2].selection_list_);
+ (yyval.selection_list_)->add((yyvsp[0].selection_item_));
}
-#line 4494 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4545 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 130:
#line 1299 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.opt_sample_clause_) = NULL;
+ (yyval.selection_item_) = new quickstep::ParseSelectionItem((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-2].expression_), (yyvsp[0].string_value_));
}
-#line 4502 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4553 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 131:
#line 1302 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.opt_sample_clause_) = new quickstep::ParseSample((yylsp[-2]).first_line, (yylsp[-2]).first_column, true, (yyvsp[-1].numeric_literal_value_));
+ (yyval.selection_item_) = new quickstep::ParseSelectionItem((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].expression_), (yyvsp[0].string_value_));
}
-#line 4510 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4561 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 132:
#line 1305 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.opt_sample_clause_) = new quickstep::ParseSample((yylsp[-2]).first_line, (yylsp[-2]).first_column, false, (yyvsp[-1].numeric_literal_value_));
+ (yyval.selection_item_) = new quickstep::ParseSelectionItem((yylsp[0]).first_line, (yylsp[0]).first_column, (yyvsp[0].expression_));
}
-#line 4518 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4569 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 133:
#line 1310 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kInnerJoin;
+ (yyval.table_reference_list_) = (yyvsp[0].table_reference_list_);
}
-#line 4526 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4577 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 134:
-#line 1313 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1315 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kInnerJoin;
+ (yyval.subquery_expression_) = new quickstep::ParseSubqueryExpression((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-1].set_operation_));
}
-#line 4534 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4585 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 135:
-#line 1316 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1320 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kLeftOuterJoin;
+ (yyval.opt_sample_clause_) = NULL;
}
-#line 4542 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4593 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 136:
-#line 1319 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1323 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kLeftOuterJoin;
+ (yyval.opt_sample_clause_) = new quickstep::ParseSample((yylsp[-2]).first_line, (yylsp[-2]).first_column, true, (yyvsp[-1].numeric_literal_value_));
}
-#line 4550 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4601 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 137:
-#line 1322 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1326 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kRightOuterJoin;
+ (yyval.opt_sample_clause_) = new quickstep::ParseSample((yylsp[-2]).first_line, (yylsp[-2]).first_column, false, (yyvsp[-1].numeric_literal_value_));
}
-#line 4558 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4609 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 138:
-#line 1325 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1331 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kRightOuterJoin;
+ (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kInnerJoin;
}
-#line 4566 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4617 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 139:
-#line 1328 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1334 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kFullOuterJoin;
+ (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kInnerJoin;
}
-#line 4574 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4625 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 140:
-#line 1331 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1337 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kFullOuterJoin;
+ (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kLeftOuterJoin;
}
-#line 4582 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4633 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 141:
-#line 1336 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1340 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.table_reference_) = new quickstep::ParseJoinedTableReference((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-4].join_type_), (yyvsp[-5].table_reference_), (yyvsp[-2].table_reference_), (yyvsp[0].predicate_));
+ (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kLeftOuterJoin;
}
-#line 4590 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4641 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 142:
-#line 1339 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1343 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.table_reference_) = (yyvsp[0].table_reference_);
+ (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kRightOuterJoin;
}
-#line 4598 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4649 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 143:
-#line 1344 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1346 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.table_reference_) = new quickstep::ParseSubqueryTableReference((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].subquery_expression_));
- (yyval.table_reference_)->set_table_reference_signature((yyvsp[0].table_reference_signature_));
+ (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kRightOuterJoin;
}
-#line 4607 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4657 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 144:
-#line 1348 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1349 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.table_reference_) = new quickstep::ParseSimpleTableReference((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-2].string_value_), (yyvsp[-1].opt_sample_clause_));
- (yyval.table_reference_)->set_table_reference_signature((yyvsp[0].table_reference_signature_));
+ (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kFullOuterJoin;
}
-#line 4616 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4665 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 145:
#line 1352 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.table_reference_) = new quickstep::ParseSimpleTableReference((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].opt_sample_clause_));
- }
-#line 4624 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 146:
-#line 1355 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.table_reference_) = new quickstep::ParseGeneratorTableReference((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].function_call_));
- (yyval.table_reference_)->set_table_reference_signature((yyvsp[0].table_reference_signature_));
- }
-#line 4633 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 147:
-#line 1359 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.table_reference_) = new quickstep::ParseGeneratorTableReference((yylsp[0]).first_line, (yylsp[0]).first_column, (yyvsp[0].function_call_));
- }
-#line 4641 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 148:
-#line 1362 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.table_reference_) = (yyvsp[-1].table_reference_);
- }
-#line 4649 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 149:
-#line 1367 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.table_reference_signature_) = (yyvsp[0].table_reference_signature_);
- }
-#line 4657 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 150:
-#line 1370 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.table_reference_signature_) = (yyvsp[0].table_reference_signature_);
- }
-#line 4665 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 151:
-#line 1375 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.table_reference_signature_) = new ::quickstep::ParseTableReferenceSignature((yylsp[0]).first_line, (yylsp[0]).first_column, (yyvsp[0].string_value_));
+ (yyval.join_type_) = quickstep::ParseJoinedTableReference::JoinType::kFullOuterJoin;
}
#line 4673 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 152:
-#line 1378 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 146:
+#line 1357 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.table_reference_signature_) = new ::quickstep::ParseTableReferenceSignature((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-3].string_value_), (yyvsp[-1].string_list_));
+ (yyval.table_reference_) = new quickstep::ParseJoinedTableReference((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-4].join_type_), (yyvsp[-5].table_reference_), (yyvsp[-2].table_reference_), (yyvsp[0].predicate_));
}
#line 4681 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
+ case 147:
+#line 1360 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.table_reference_) = (yyvsp[0].table_reference_);
+ }
+#line 4689 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 148:
+#line 1365 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.table_reference_) = new quickstep::ParseSubqueryTableReference((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].subquery_expression_));
+ (yyval.table_reference_)->set_table_reference_signature((yyvsp[0].table_reference_signature_));
+ }
+#line 4698 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 149:
+#line 1369 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.table_reference_) = new quickstep::ParseSimpleTableReference((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-2].string_value_), (yyvsp[-1].opt_sample_clause_));
+ (yyval.table_reference_)->set_table_reference_signature((yyvsp[0].table_reference_signature_));
+ }
+#line 4707 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 150:
+#line 1373 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.table_reference_) = new quickstep::ParseSimpleTableReference((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].opt_sample_clause_));
+ }
+#line 4715 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 151:
+#line 1376 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.table_reference_) = new quickstep::ParseGeneratorTableReference((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].function_call_));
+ (yyval.table_reference_)->set_table_reference_signature((yyvsp[0].table_reference_signature_));
+ }
+#line 4724 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 152:
+#line 1380 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.table_reference_) = new quickstep::ParseGeneratorTableReference((yylsp[0]).first_line, (yylsp[0]).first_column, (yyvsp[0].function_call_));
+ }
+#line 4732 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
case 153:
#line 1383 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.table_reference_list_) = new quickstep::PtrList<quickstep::ParseTableReference>();
- (yyval.table_reference_list_)->push_back((yyvsp[0].table_reference_));
+ (yyval.table_reference_) = (yyvsp[-1].table_reference_);
}
-#line 4690 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4740 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 154:
-#line 1387 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1388 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.table_reference_list_) = (yyvsp[-2].table_reference_list_);
- (yyval.table_reference_list_)->push_back((yyvsp[0].table_reference_));
+ (yyval.table_reference_signature_) = (yyvsp[0].table_reference_signature_);
}
-#line 4699 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4748 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 155:
-#line 1393 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1391 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.opt_group_by_clause_) = nullptr;
+ (yyval.table_reference_signature_) = (yyvsp[0].table_reference_signature_);
}
-#line 4707 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4756 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 156:
#line 1396 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.opt_group_by_clause_) = new quickstep::ParseGroupBy((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[0].expression_list_));
+ (yyval.table_reference_signature_) = new ::quickstep::ParseTableReferenceSignature((yylsp[0]).first_line, (yylsp[0]).first_column, (yyvsp[0].string_value_));
}
-#line 4715 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4764 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 157:
-#line 1401 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1399 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.opt_having_clause_) = nullptr;
+ (yyval.table_reference_signature_) = new ::quickstep::ParseTableReferenceSignature((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-3].string_value_), (yyvsp[-1].string_list_));
}
-#line 4723 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4772 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 158:
#line 1404 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.opt_having_clause_) = new quickstep::ParseHaving((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[0].predicate_));
+ (yyval.table_reference_list_) = new quickstep::PtrList<quickstep::ParseTableReference>();
+ (yyval.table_reference_list_)->push_back((yyvsp[0].table_reference_));
}
-#line 4731 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4781 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 159:
-#line 1409 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1408 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.opt_order_by_clause_) = nullptr;
+ (yyval.table_reference_list_) = (yyvsp[-2].table_reference_list_);
+ (yyval.table_reference_list_)->push_back((yyvsp[0].table_reference_));
}
-#line 4739 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4790 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 160:
-#line 1412 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1414 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.opt_order_by_clause_) = new quickstep::ParseOrderBy((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[0].order_commalist_));
+ (yyval.opt_group_by_clause_) = nullptr;
}
-#line 4747 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4798 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 161:
#line 1417 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.opt_limit_clause_) = nullptr;
+ (yyval.opt_group_by_clause_) = new quickstep::ParseGroupBy((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[0].expression_list_));
}
-#line 4755 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4806 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 162:
-#line 1420 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1422 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.opt_having_clause_) = nullptr;
+ }
+#line 4814 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 163:
+#line 1425 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.opt_having_clause_) = new quickstep::ParseHaving((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[0].predicate_));
+ }
+#line 4822 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 164:
+#line 1430 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.opt_order_by_clause_) = nullptr;
+ }
+#line 4830 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 165:
+#line 1433 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.opt_order_by_clause_) = new quickstep::ParseOrderBy((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[0].order_commalist_));
+ }
+#line 4838 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 166:
+#line 1438 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.opt_limit_clause_) = nullptr;
+ }
+#line 4846 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 167:
+#line 1441 "../SqlParser.ypp" /* yacc.c:1661 */
{
if ((yyvsp[0].numeric_literal_value_)->float_like()) {
delete (yyvsp[0].numeric_literal_value_);
@@ -4773,258 +4864,258 @@
}
}
}
-#line 4777 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4868 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 163:
-#line 1439 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 168:
+#line 1460 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.opt_window_clause_) = nullptr;
}
-#line 4785 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4876 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 164:
-#line 1442 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 169:
+#line 1463 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.opt_window_clause_) = (yyvsp[0].opt_window_clause_);
}
-#line 4793 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4884 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 165:
-#line 1447 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 170:
+#line 1468 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.opt_window_clause_) = new quickstep::PtrList<quickstep::ParseWindow>();
(yyval.opt_window_clause_)->push_back((yyvsp[0].window_definition_));
}
-#line 4802 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4893 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 166:
-#line 1451 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 171:
+#line 1472 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.opt_window_clause_) = (yyvsp[-1].opt_window_clause_);
(yyval.opt_window_clause_)->push_back((yyvsp[0].window_definition_));
}
-#line 4811 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4902 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 167:
-#line 1457 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 172:
+#line 1478 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.window_definition_) = (yyvsp[-1].window_definition_);
(yyval.window_definition_)->setName((yyvsp[-4].string_value_));
}
-#line 4820 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 168:
-#line 1463 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.window_definition_) = new quickstep::ParseWindow((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-2].window_partition_by_list_), (yyvsp[-1].window_order_by_list_), (yyvsp[0].window_frame_info_));
- }
-#line 4828 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 169:
-#line 1468 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.window_partition_by_list_) = nullptr;
- }
-#line 4836 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 170:
-#line 1471 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.window_partition_by_list_) = (yyvsp[0].expression_list_);
- }
-#line 4844 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 171:
-#line 1476 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.window_order_by_list_) = nullptr;
- }
-#line 4852 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 172:
-#line 1479 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.window_order_by_list_) = (yyvsp[0].order_commalist_);
- }
-#line 4860 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4911 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 173:
#line 1484 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.window_frame_info_) = nullptr;
+ (yyval.window_definition_) = new quickstep::ParseWindow((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-2].window_partition_by_list_), (yyvsp[-1].window_order_by_list_), (yyvsp[0].window_frame_info_));
}
-#line 4868 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4919 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 174:
-#line 1487 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1489 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.window_frame_info_) = new quickstep::ParseFrameInfo((yylsp[-4]).first_line, (yylsp[-4]).first_column, (yyvsp[-4].boolean_value_), (yyvsp[-2].numeric_literal_value_)->long_value(), (yyvsp[0].numeric_literal_value_)->long_value());
+ (yyval.window_partition_by_list_) = nullptr;
}
-#line 4876 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4927 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 175:
#line 1492 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.boolean_value_) = true;
+ (yyval.window_partition_by_list_) = (yyvsp[0].expression_list_);
}
-#line 4884 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4935 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 176:
-#line 1495 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1497 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.boolean_value_) = false;
+ (yyval.window_order_by_list_) = nullptr;
}
-#line 4892 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4943 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 177:
+#line 1500 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.window_order_by_list_) = (yyvsp[0].order_commalist_);
+ }
+#line 4951 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 178:
-#line 1501 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1505 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.numeric_literal_value_) = new quickstep::NumericParseLiteralValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, "-1");
+ (yyval.window_frame_info_) = nullptr;
}
-#line 4900 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4959 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 179:
-#line 1504 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1508 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.numeric_literal_value_) = new quickstep::NumericParseLiteralValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, "0");
+ (yyval.window_frame_info_) = new quickstep::ParseFrameInfo((yylsp[-4]).first_line, (yylsp[-4]).first_column, (yyvsp[-4].boolean_value_), (yyvsp[-2].numeric_literal_value_)->long_value(), (yyvsp[0].numeric_literal_value_)->long_value());
}
-#line 4908 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4967 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 180:
+#line 1513 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.boolean_value_) = true;
+ }
+#line 4975 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 181:
-#line 1510 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1516 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.numeric_literal_value_) = new quickstep::NumericParseLiteralValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, "-1");
+ (yyval.boolean_value_) = false;
}
-#line 4916 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 182:
-#line 1513 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.numeric_literal_value_) = new quickstep::NumericParseLiteralValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, "0");
- }
-#line 4924 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 4983 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 183:
-#line 1518 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1522 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.numeric_literal_value_) = new quickstep::NumericParseLiteralValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, "-1");
+ }
+#line 4991 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 184:
+#line 1525 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.numeric_literal_value_) = new quickstep::NumericParseLiteralValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, "0");
+ }
+#line 4999 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 186:
+#line 1531 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.numeric_literal_value_) = new quickstep::NumericParseLiteralValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, "-1");
+ }
+#line 5007 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 187:
+#line 1534 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.numeric_literal_value_) = new quickstep::NumericParseLiteralValue((yylsp[-1]).first_line, (yylsp[-1]).first_column, "0");
+ }
+#line 5015 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 188:
+#line 1539 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.order_commalist_) = new quickstep::PtrList<quickstep::ParseOrderByItem>();
(yyval.order_commalist_)->push_back((yyvsp[0].order_item_));
}
-#line 4933 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5024 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 184:
-#line 1522 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 189:
+#line 1543 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.order_commalist_) = (yyvsp[-2].order_commalist_);
(yyval.order_commalist_)->push_back((yyvsp[0].order_item_));
}
-#line 4942 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 185:
-#line 1528 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.order_item_) = new quickstep::ParseOrderByItem((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-2].expression_), (yyvsp[-1].order_direction_), (yyvsp[0].order_direction_));
- delete (yyvsp[-1].order_direction_);
- delete (yyvsp[0].order_direction_);
- }
-#line 4952 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 186:
-#line 1535 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.order_direction_) = nullptr;
- }
-#line 4960 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 187:
-#line 1538 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.order_direction_) = new bool(true);
- }
-#line 4968 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 188:
-#line 1541 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.order_direction_) = new bool(false);
- }
-#line 4976 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 189:
-#line 1546 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.order_direction_) = nullptr;
- }
-#line 4984 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5033 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 190:
#line 1549 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.order_direction_) = new bool(true);
+ (yyval.order_item_) = new quickstep::ParseOrderByItem((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[-2].expression_), (yyvsp[-1].order_direction_), (yyvsp[0].order_direction_));
+ delete (yyvsp[-1].order_direction_);
+ delete (yyvsp[0].order_direction_);
}
-#line 4992 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5043 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 191:
-#line 1552 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1556 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.order_direction_) = new bool(false);
+ (yyval.order_direction_) = nullptr;
}
-#line 5000 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5051 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 192:
-#line 1558 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1559 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.predicate_) = nullptr;
+ (yyval.order_direction_) = new bool(true);
}
-#line 5008 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5059 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 193:
-#line 1561 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1562 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.predicate_) = (yyvsp[0].predicate_);
+ (yyval.order_direction_) = new bool(false);
}
-#line 5016 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5067 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 194:
-#line 1566 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1567 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.predicate_) = (yyvsp[0].predicate_);
+ (yyval.order_direction_) = nullptr;
}
-#line 5024 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5075 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 195:
-#line 1571 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1570 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.order_direction_) = new bool(true);
+ }
+#line 5083 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 196:
+#line 1573 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.order_direction_) = new bool(false);
+ }
+#line 5091 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 197:
+#line 1579 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.predicate_) = nullptr;
+ }
+#line 5099 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 198:
+#line 1582 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.predicate_) = (yyvsp[0].predicate_);
+ }
+#line 5107 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 199:
+#line 1587 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.predicate_) = (yyvsp[0].predicate_);
+ }
+#line 5115 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 200:
+#line 1592 "../SqlParser.ypp" /* yacc.c:1661 */
{
if ((yyvsp[-2].predicate_)->getParsePredicateType() == quickstep::ParsePredicate::kDisjunction) {
(yyval.predicate_) = (yyvsp[-2].predicate_);
@@ -5034,19 +5125,19 @@
}
static_cast<quickstep::ParsePredicateDisjunction *>((yyval.predicate_))->addPredicate((yyvsp[0].predicate_));
}
-#line 5038 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5129 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 196:
-#line 1580 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 201:
+#line 1601 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.predicate_) = (yyvsp[0].predicate_);
}
-#line 5046 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5137 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 197:
-#line 1585 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 202:
+#line 1606 "../SqlParser.ypp" /* yacc.c:1661 */
{
if ((yyvsp[-2].predicate_)->getParsePredicateType() == quickstep::ParsePredicate::kConjunction) {
(yyval.predicate_) = (yyvsp[-2].predicate_);
@@ -5056,453 +5147,453 @@
}
static_cast<quickstep::ParsePredicateConjunction *>((yyval.predicate_))->addPredicate((yyvsp[0].predicate_));
}
-#line 5060 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5151 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 198:
-#line 1594 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 203:
+#line 1615 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.predicate_) = (yyvsp[0].predicate_);
}
-#line 5068 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5159 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 199:
-#line 1599 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 204:
+#line 1620 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.predicate_) = new quickstep::ParsePredicateNegation((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[0].predicate_));
}
-#line 5076 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5167 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 200:
-#line 1602 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 205:
+#line 1623 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.predicate_) = (yyvsp[0].predicate_);
}
-#line 5084 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5175 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 201:
-#line 1607 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 206:
+#line 1628 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.predicate_) = new quickstep::ParsePredicateBetween((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-4].expression_), (yyvsp[-2].expression_), (yyvsp[0].expression_));
}
-#line 5092 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5183 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 202:
-#line 1610 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 207:
+#line 1631 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.predicate_) = new quickstep::ParsePredicateNegation(
(yylsp[-4]).first_line, (yylsp[-4]).first_column,
new quickstep::ParsePredicateBetween((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-5].expression_), (yyvsp[-2].expression_), (yyvsp[0].expression_)));
}
-#line 5102 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5193 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 203:
-#line 1615 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 208:
+#line 1636 "../SqlParser.ypp" /* yacc.c:1661 */
{
delete (yyvsp[-3].attribute_);
(yyval.predicate_) = nullptr;
NotSupported(&(yylsp[-2]), yyscanner, "NULL comparison predicates");
YYERROR;
}
-#line 5113 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5204 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 204:
-#line 1621 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 209:
+#line 1642 "../SqlParser.ypp" /* yacc.c:1661 */
{
delete (yyvsp[-2].attribute_);
(yyval.predicate_) = nullptr;
NotSupported(&(yylsp[-1]), yyscanner, "NULL comparison predicates");
YYERROR;
}
-#line 5124 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 205:
-#line 1627 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.predicate_) = new quickstep::ParsePredicateComparison((yylsp[-1]).first_line, (yylsp[-1]).first_column, *(yyvsp[-1].comparison_), (yyvsp[-2].expression_), (yyvsp[0].expression_));
- }
-#line 5132 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 206:
-#line 1630 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.predicate_) = (yyvsp[-1].predicate_);
- }
-#line 5140 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 207:
-#line 1633 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.predicate_) = new quickstep::ParsePredicateExists((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[0].subquery_expression_));
- }
-#line 5148 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 208:
-#line 1636 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.predicate_) = new quickstep::ParsePredicateInTableQuery((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-2].expression_), (yyvsp[0].subquery_expression_));
- }
-#line 5156 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 209:
-#line 1639 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.predicate_) = new quickstep::ParsePredicateInValueList((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-4].expression_), (yyvsp[-1].expression_list_));
- }
-#line 5164 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5215 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 210:
-#line 1642 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1648 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.predicate_) = new quickstep::ParsePredicateComparison((yylsp[-1]).first_line, (yylsp[-1]).first_column, *(yyvsp[-1].comparison_), (yyvsp[-2].expression_), (yyvsp[0].expression_));
+ }
+#line 5223 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 211:
+#line 1651 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.predicate_) = (yyvsp[-1].predicate_);
+ }
+#line 5231 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 212:
+#line 1654 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.predicate_) = new quickstep::ParsePredicateExists((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[0].subquery_expression_));
+ }
+#line 5239 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 213:
+#line 1657 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.predicate_) = new quickstep::ParsePredicateInTableQuery((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-2].expression_), (yyvsp[0].subquery_expression_));
+ }
+#line 5247 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 214:
+#line 1660 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.predicate_) = new quickstep::ParsePredicateInValueList((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-4].expression_), (yyvsp[-1].expression_list_));
+ }
+#line 5255 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 215:
+#line 1663 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.predicate_) = new quickstep::ParsePredicateNegation(
(yylsp[-2]).first_line,
(yylsp[-2]).first_column,
new quickstep::ParsePredicateInTableQuery((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-3].expression_), (yyvsp[0].subquery_expression_)));
}
-#line 5175 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5266 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 211:
-#line 1648 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 216:
+#line 1669 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.predicate_) = new quickstep::ParsePredicateNegation(
(yylsp[-4]).first_line,
(yylsp[-4]).first_column,
new quickstep::ParsePredicateInValueList((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-5].expression_), (yyvsp[-1].expression_list_)));
}
-#line 5186 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 212:
-#line 1657 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_) = new quickstep::ParseBinaryExpression((yylsp[-1]).first_line, (yylsp[-1]).first_column, *(yyvsp[-1].binary_operation_), (yyvsp[-2].expression_), (yyvsp[0].expression_));
- }
-#line 5194 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 213:
-#line 1660 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_) = (yyvsp[0].expression_);
- }
-#line 5202 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 214:
-#line 1665 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_) = new quickstep::ParseBinaryExpression((yylsp[-1]).first_line, (yylsp[-1]).first_column, *(yyvsp[-1].binary_operation_), (yyvsp[-2].expression_), (yyvsp[0].expression_));
- }
-#line 5210 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 215:
-#line 1668 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_) = (yyvsp[0].expression_);
- }
-#line 5218 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 216:
-#line 1673 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_) = new quickstep::ParseUnaryExpression((yylsp[-1]).first_line, (yylsp[-1]).first_column, *(yyvsp[-1].unary_operation_), (yyvsp[0].expression_));
- }
-#line 5226 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5277 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 217:
-#line 1676 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1678 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.expression_) = (yyvsp[0].expression_);
+ (yyval.expression_) = new quickstep::ParseBinaryExpression((yylsp[-1]).first_line, (yylsp[-1]).first_column, *(yyvsp[-1].binary_operation_), (yyvsp[-2].expression_), (yyvsp[0].expression_));
}
-#line 5234 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5285 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 218:
#line 1681 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.expression_) = (yyvsp[0].attribute_);
+ (yyval.expression_) = (yyvsp[0].expression_);
}
-#line 5242 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5293 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 219:
-#line 1684 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1686 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.expression_) = new quickstep::ParseScalarLiteral((yyvsp[0].literal_value_));
+ (yyval.expression_) = new quickstep::ParseBinaryExpression((yylsp[-1]).first_line, (yylsp[-1]).first_column, *(yyvsp[-1].binary_operation_), (yyvsp[-2].expression_), (yyvsp[0].expression_));
}
-#line 5250 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5301 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 220:
-#line 1687 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1689 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.expression_) = (yyvsp[0].function_call_);
+ (yyval.expression_) = (yyvsp[0].expression_);
}
-#line 5258 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5309 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 221:
-#line 1690 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1694 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyvsp[-2].function_call_)->setWindowName((yyvsp[0].string_value_));
- (yyval.expression_) = (yyvsp[-2].function_call_);
+ (yyval.expression_) = new quickstep::ParseUnaryExpression((yylsp[-1]).first_line, (yylsp[-1]).first_column, *(yyvsp[-1].unary_operation_), (yyvsp[0].expression_));
}
-#line 5267 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5317 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 222:
-#line 1694 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyvsp[-4].function_call_)->setWindow((yyvsp[-1].window_definition_));
- (yyval.expression_) = (yyvsp[-4].function_call_);
- }
-#line 5276 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 223:
-#line 1698 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1697 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.expression_) = (yyvsp[0].expression_);
}
-#line 5284 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 224:
-#line 1701 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_) = (yyvsp[0].expression_);
- }
-#line 5292 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 225:
-#line 1704 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_) = (yyvsp[0].expression_);
- }
-#line 5300 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 226:
-#line 1707 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_) = (yyvsp[-1].expression_);
- }
-#line 5308 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 227:
-#line 1710 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_) = (yyvsp[0].subquery_expression_);
- }
-#line 5316 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 228:
-#line 1715 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.function_call_) = new quickstep::ParseFunctionCall(
- (yylsp[-2]).first_line, (yylsp[-2]).first_column, false, (yyvsp[-2].string_value_), new quickstep::PtrList<quickstep::ParseExpression>());
- }
#line 5325 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 229:
+ case 223:
+#line 1702 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.expression_) = (yyvsp[0].attribute_);
+ }
+#line 5333 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 224:
+#line 1705 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.expression_) = new quickstep::ParseScalarLiteral((yyvsp[0].literal_value_));
+ }
+#line 5341 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 225:
+#line 1708 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.expression_) = (yyvsp[0].function_call_);
+ }
+#line 5349 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 226:
+#line 1711 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyvsp[-2].function_call_)->setWindowName((yyvsp[0].string_value_));
+ (yyval.expression_) = (yyvsp[-2].function_call_);
+ }
+#line 5358 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 227:
+#line 1715 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyvsp[-4].function_call_)->setWindow((yyvsp[-1].window_definition_));
+ (yyval.expression_) = (yyvsp[-4].function_call_);
+ }
+#line 5367 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 228:
#line 1719 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.function_call_) = new quickstep::ParseFunctionCall(
- (yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-3].string_value_), new quickstep::ParseStar((yylsp[-1]).first_line, (yylsp[-1]).first_column));
+ (yyval.expression_) = (yyvsp[0].expression_);
}
-#line 5334 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5375 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 229:
+#line 1722 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.expression_) = (yyvsp[0].expression_);
+ }
+#line 5383 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 230:
-#line 1723 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1725 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.function_call_) = new quickstep::ParseFunctionCall((yylsp[-3]).first_line, (yylsp[-3]).first_column, false, (yyvsp[-3].string_value_), (yyvsp[-1].expression_list_));
+ (yyval.expression_) = (yyvsp[0].expression_);
}
-#line 5342 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5391 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 231:
-#line 1726 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1728 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.function_call_) = new quickstep::ParseFunctionCall((yylsp[-4]).first_line, (yylsp[-4]).first_column, true, (yyvsp[-4].string_value_), (yyvsp[-1].expression_list_));
+ (yyval.expression_) = (yyvsp[-1].expression_);
}
-#line 5350 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5399 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 232:
#line 1731 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.expression_) = new quickstep::ParseExtractFunction((yylsp[-5]).first_line, (yylsp[-5]).first_column, (yyvsp[-3].string_value_), (yyvsp[-1].expression_));
+ (yyval.expression_) = (yyvsp[0].subquery_expression_);
}
-#line 5358 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5407 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 233:
#line 1736 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.expression_) = new quickstep::ParseSubstringFunction(
- (yylsp[-5]).first_line, (yylsp[-5]).first_column, (yyvsp[-3].expression_), (yyvsp[-1].numeric_literal_value_)->long_value());
+ (yyval.function_call_) = new quickstep::ParseFunctionCall(
+ (yylsp[-2]).first_line, (yylsp[-2]).first_column, false, (yyvsp[-2].string_value_), new quickstep::PtrList<quickstep::ParseExpression>());
}
-#line 5367 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5416 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 234:
#line 1740 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.expression_) = new quickstep::ParseSubstringFunction(
- (yylsp[-7]).first_line, (yylsp[-7]).first_column, (yyvsp[-5].expression_), (yyvsp[-3].numeric_literal_value_)->long_value(), (yyvsp[-1].numeric_literal_value_)->long_value());
+ (yyval.function_call_) = new quickstep::ParseFunctionCall(
+ (yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-3].string_value_), new quickstep::ParseStar((yylsp[-1]).first_line, (yylsp[-1]).first_column));
}
-#line 5376 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5425 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 235:
-#line 1746 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1744 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.expression_) = new quickstep::ParseSimpleCaseExpression((yylsp[-4]).first_line, (yylsp[-4]).first_column, (yyvsp[-3].expression_), (yyvsp[-2].simple_when_clause_list_), (yyvsp[-1].expression_));
+ (yyval.function_call_) = new quickstep::ParseFunctionCall((yylsp[-3]).first_line, (yylsp[-3]).first_column, false, (yyvsp[-3].string_value_), (yyvsp[-1].expression_list_));
}
-#line 5384 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5433 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 236:
-#line 1749 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1747 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.expression_) = new quickstep::ParseSearchedCaseExpression((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-2].searched_when_clause_list_), (yyvsp[-1].expression_));
+ (yyval.function_call_) = new quickstep::ParseFunctionCall((yylsp[-4]).first_line, (yylsp[-4]).first_column, true, (yyvsp[-4].string_value_), (yyvsp[-1].expression_list_));
}
-#line 5392 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5441 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 237:
-#line 1754 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1752 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.expression_) = new quickstep::ParseExtractFunction((yylsp[-5]).first_line, (yylsp[-5]).first_column, (yyvsp[-3].string_value_), (yyvsp[-1].expression_));
+ }
+#line 5449 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 238:
+#line 1757 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.expression_) = new quickstep::ParseSubstringFunction(
+ (yylsp[-5]).first_line, (yylsp[-5]).first_column, (yyvsp[-3].expression_), (yyvsp[-1].numeric_literal_value_)->long_value());
+ }
+#line 5458 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 239:
+#line 1761 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.expression_) = new quickstep::ParseSubstringFunction(
+ (yylsp[-7]).first_line, (yylsp[-7]).first_column, (yyvsp[-5].expression_), (yyvsp[-3].numeric_literal_value_)->long_value(), (yyvsp[-1].numeric_literal_value_)->long_value());
+ }
+#line 5467 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 240:
+#line 1767 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.expression_) = new quickstep::ParseSimpleCaseExpression((yylsp[-4]).first_line, (yylsp[-4]).first_column, (yyvsp[-3].expression_), (yyvsp[-2].simple_when_clause_list_), (yyvsp[-1].expression_));
+ }
+#line 5475 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 241:
+#line 1770 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.expression_) = new quickstep::ParseSearchedCaseExpression((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-2].searched_when_clause_list_), (yyvsp[-1].expression_));
+ }
+#line 5483 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 242:
+#line 1775 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.simple_when_clause_list_) = new quickstep::PtrVector<quickstep::ParseSimpleWhenClause>;
(yyval.simple_when_clause_list_)->push_back((yyvsp[0].simple_when_clause_));
}
-#line 5401 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5492 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 238:
-#line 1758 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 243:
+#line 1779 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.simple_when_clause_list_) = (yyvsp[-1].simple_when_clause_list_);
(yyval.simple_when_clause_list_)->push_back((yyvsp[0].simple_when_clause_));
}
-#line 5410 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5501 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 239:
-#line 1764 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 244:
+#line 1785 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.simple_when_clause_) = new quickstep::ParseSimpleWhenClause((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-2].expression_), (yyvsp[0].expression_));
}
-#line 5418 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5509 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 240:
-#line 1769 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 245:
+#line 1790 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.searched_when_clause_list_) = new quickstep::PtrVector<quickstep::ParseSearchedWhenClause>;
(yyval.searched_when_clause_list_)->push_back((yyvsp[0].searched_when_clause_));
}
-#line 5427 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5518 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 241:
-#line 1773 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 246:
+#line 1794 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.searched_when_clause_list_) = (yyvsp[-1].searched_when_clause_list_);
(yyval.searched_when_clause_list_)->push_back((yyvsp[0].searched_when_clause_));
}
-#line 5436 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 242:
-#line 1779 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.searched_when_clause_) = new quickstep::ParseSearchedWhenClause((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-2].predicate_), (yyvsp[0].expression_));
- }
-#line 5444 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 243:
-#line 1784 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_) = NULL;
- }
-#line 5452 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 244:
-#line 1787 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_) = (yyvsp[0].expression_);
- }
-#line 5460 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 245:
-#line 1792 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_list_) = new quickstep::PtrList<quickstep::ParseExpression>();
- (yyval.expression_list_)->push_back((yyvsp[0].expression_));
- }
-#line 5469 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 246:
-#line 1796 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.expression_list_) = (yyvsp[-2].expression_list_);
- (yyval.expression_list_)->push_back((yyvsp[0].expression_));
- }
-#line 5478 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5527 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 247:
-#line 1802 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1800 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.literal_value_) = new quickstep::NullParseLiteralValue((yylsp[0]).first_line, (yylsp[0]).first_column);
+ (yyval.searched_when_clause_) = new quickstep::ParseSearchedWhenClause((yylsp[-3]).first_line, (yylsp[-3]).first_column, (yyvsp[-2].predicate_), (yyvsp[0].expression_));
}
-#line 5486 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5535 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 248:
#line 1805 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.literal_value_) = (yyvsp[0].numeric_literal_value_);
+ (yyval.expression_) = NULL;
}
-#line 5494 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5543 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 249:
#line 1808 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.literal_value_) = (yyvsp[0].numeric_literal_value_);
+ (yyval.expression_) = (yyvsp[0].expression_);
}
-#line 5502 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5551 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 250:
-#line 1811 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1813 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.expression_list_) = new quickstep::PtrList<quickstep::ParseExpression>();
+ (yyval.expression_list_)->push_back((yyvsp[0].expression_));
+ }
+#line 5560 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 251:
+#line 1817 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.expression_list_) = (yyvsp[-2].expression_list_);
+ (yyval.expression_list_)->push_back((yyvsp[0].expression_));
+ }
+#line 5569 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 252:
+#line 1823 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.literal_value_) = new quickstep::NullParseLiteralValue((yylsp[0]).first_line, (yylsp[0]).first_column);
+ }
+#line 5577 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 253:
+#line 1826 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.literal_value_) = (yyvsp[0].numeric_literal_value_);
+ }
+#line 5585 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 254:
+#line 1829 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.literal_value_) = (yyvsp[0].numeric_literal_value_);
+ }
+#line 5593 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 255:
+#line 1832 "../SqlParser.ypp" /* yacc.c:1661 */
{
/**
* NOTE(chasseur): This case exhibits a shift/reduce conflict with the
@@ -5515,20 +5606,20 @@
(yyvsp[0].numeric_literal_value_)->prependMinus();
(yyval.literal_value_) = (yyvsp[0].numeric_literal_value_);
}
-#line 5519 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5610 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 251:
-#line 1823 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 256:
+#line 1844 "../SqlParser.ypp" /* yacc.c:1661 */
{
(yyval.literal_value_) = new quickstep::StringParseLiteralValue((yyvsp[0].string_value_),
nullptr); // No explicit type.
}
-#line 5528 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5619 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 252:
-#line 1827 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 257:
+#line 1848 "../SqlParser.ypp" /* yacc.c:1661 */
{
/**
* NOTE(chasseur): This case exhibits a shift/reduce conflict with the
@@ -5548,11 +5639,11 @@
YYERROR;
}
}
-#line 5552 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5643 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 253:
-#line 1846 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 258:
+#line 1867 "../SqlParser.ypp" /* yacc.c:1661 */
{
quickstep::StringParseLiteralValue *parse_value;
const std::string &datetime_type_value = (yyvsp[0].string_value_)->value();
@@ -5566,11 +5657,11 @@
YYERROR;
}
}
-#line 5570 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5661 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 254:
-#line 1859 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 259:
+#line 1880 "../SqlParser.ypp" /* yacc.c:1661 */
{
quickstep::StringParseLiteralValue *parse_value
= new quickstep::StringParseLiteralValue((yyvsp[0].string_value_), &((yyvsp[-1].data_type_)->getType()));
@@ -5584,191 +5675,191 @@
(yyval.literal_value_) = parse_value;
}
}
-#line 5588 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 255:
-#line 1874 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("YEAR"));
- }
-#line 5596 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 256:
-#line 1877 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("MONTH"));
- }
-#line 5604 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 257:
-#line 1880 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("DAY"));
- }
-#line 5612 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 258:
-#line 1883 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("HOUR"));
- }
-#line 5620 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 259:
-#line 1886 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("MINUTE"));
- }
-#line 5628 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5679 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 260:
-#line 1889 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1895 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("SECOND"));
+ (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("YEAR"));
}
-#line 5636 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5687 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 261:
-#line 1894 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1898 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.literal_value_list_) = new quickstep::PtrList<quickstep::ParseScalarLiteral>();
- (yyval.literal_value_list_)->push_back(new quickstep::ParseScalarLiteral((yyvsp[0].literal_value_)));
+ (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("MONTH"));
}
-#line 5645 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5695 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 262:
-#line 1898 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1901 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.literal_value_list_) = (yyvsp[-2].literal_value_list_);
- (yyval.literal_value_list_)->push_back(new quickstep::ParseScalarLiteral((yyvsp[0].literal_value_)));
+ (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("DAY"));
}
-#line 5654 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5703 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 263:
#line 1904 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.attribute_) = new quickstep::ParseAttribute((yylsp[0]).first_line, (yylsp[0]).first_column, (yyvsp[0].string_value_));
+ (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("HOUR"));
}
-#line 5662 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5711 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 264:
#line 1907 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.attribute_) = new quickstep::ParseAttribute((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[0].string_value_), (yyvsp[-2].string_value_));
+ (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("MINUTE"));
}
-#line 5670 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5719 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 265:
-#line 1912 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1910 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.attribute_list_) = new quickstep::PtrList<quickstep::ParseAttribute>();
- (yyval.attribute_list_)->push_back((yyvsp[0].attribute_));
+ (yyval.string_value_) = new quickstep::ParseString((yylsp[0]).first_line, (yylsp[0]).first_column, std::string("SECOND"));
}
-#line 5679 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5727 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 266:
-#line 1916 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1915 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.attribute_list_) = (yyvsp[-2].attribute_list_);
- (yyval.attribute_list_)->push_back((yyvsp[0].attribute_));
- }
-#line 5688 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 267:
-#line 1923 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kEqual);
- }
-#line 5696 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 268:
-#line 1926 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kNotEqual);
- }
-#line 5704 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 269:
-#line 1929 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kLess);
- }
-#line 5712 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 270:
-#line 1932 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kLessOrEqual);
- }
-#line 5720 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 271:
-#line 1935 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kGreater);
- }
-#line 5728 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 272:
-#line 1938 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kGreaterOrEqual);
+ (yyval.literal_value_list_) = new quickstep::PtrList<quickstep::ParseScalarLiteral>();
+ (yyval.literal_value_list_)->push_back(new quickstep::ParseScalarLiteral((yyvsp[0].literal_value_)));
}
#line 5736 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 273:
-#line 1941 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 267:
+#line 1919 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kLike);
+ (yyval.literal_value_list_) = (yyvsp[-2].literal_value_list_);
+ (yyval.literal_value_list_)->push_back(new quickstep::ParseScalarLiteral((yyvsp[0].literal_value_)));
}
-#line 5744 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5745 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 268:
+#line 1925 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.attribute_) = new quickstep::ParseAttribute((yylsp[0]).first_line, (yylsp[0]).first_column, (yyvsp[0].string_value_));
+ }
+#line 5753 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 269:
+#line 1928 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.attribute_) = new quickstep::ParseAttribute((yylsp[-2]).first_line, (yylsp[-2]).first_column, (yyvsp[0].string_value_), (yyvsp[-2].string_value_));
+ }
+#line 5761 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 270:
+#line 1933 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.attribute_list_) = new quickstep::PtrList<quickstep::ParseAttribute>();
+ (yyval.attribute_list_)->push_back((yyvsp[0].attribute_));
+ }
+#line 5770 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 271:
+#line 1937 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.attribute_list_) = (yyvsp[-2].attribute_list_);
+ (yyval.attribute_list_)->push_back((yyvsp[0].attribute_));
+ }
+#line 5779 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 272:
+#line 1944 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kEqual);
+ }
+#line 5787 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 273:
+#line 1947 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kNotEqual);
+ }
+#line 5795 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 274:
-#line 1944 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1950 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kNotLike);
+ (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kLess);
}
-#line 5752 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5803 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 275:
-#line 1947 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1953 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kRegexMatch);
+ (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kLessOrEqual);
}
-#line 5760 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5811 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 276:
-#line 1950 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1956 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kNotRegexMatch);
+ (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kGreater);
}
-#line 5768 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5819 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 277:
-#line 1955 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1959 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kGreaterOrEqual);
+ }
+#line 5827 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 278:
+#line 1962 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kLike);
+ }
+#line 5835 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 279:
+#line 1965 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kNotLike);
+ }
+#line 5843 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 280:
+#line 1968 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kRegexMatch);
+ }
+#line 5851 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 281:
+#line 1971 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.comparison_) = &quickstep::ComparisonFactory::GetComparison(quickstep::ComparisonID::kNotRegexMatch);
+ }
+#line 5859 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 282:
+#line 1976 "../SqlParser.ypp" /* yacc.c:1661 */
{
/**
* NOTE(chasseur): This case exhibits a shift/reduce conflict with the
@@ -5778,146 +5869,146 @@
**/
(yyval.unary_operation_) = &quickstep::UnaryOperationFactory::GetUnaryOperation(quickstep::UnaryOperationID::kNegate);
}
-#line 5782 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 278:
-#line 1966 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.binary_operation_) = &quickstep::BinaryOperationFactory::GetBinaryOperation(quickstep::BinaryOperationID::kAdd);
- }
-#line 5790 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 279:
-#line 1969 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.binary_operation_) = &quickstep::BinaryOperationFactory::GetBinaryOperation(quickstep::BinaryOperationID::kSubtract);
- }
-#line 5798 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 280:
-#line 1974 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.binary_operation_) = &quickstep::BinaryOperationFactory::GetBinaryOperation(quickstep::BinaryOperationID::kModulo);
- }
-#line 5806 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 281:
-#line 1977 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.binary_operation_) = &quickstep::BinaryOperationFactory::GetBinaryOperation(quickstep::BinaryOperationID::kMultiply);
- }
-#line 5814 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 282:
-#line 1980 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.binary_operation_) = &quickstep::BinaryOperationFactory::GetBinaryOperation(quickstep::BinaryOperationID::kDivide);
- }
-#line 5822 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5873 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 283:
-#line 1986 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1987 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.string_list_) = new quickstep::PtrList<quickstep::ParseString>();
- (yyval.string_list_)->push_back((yyvsp[0].string_value_));
+ (yyval.binary_operation_) = &quickstep::BinaryOperationFactory::GetBinaryOperation(quickstep::BinaryOperationID::kAdd);
}
-#line 5831 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5881 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 284:
#line 1990 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.string_list_) = (yyvsp[-2].string_list_);
- (yyval.string_list_)->push_back((yyvsp[0].string_value_));
+ (yyval.binary_operation_) = &quickstep::BinaryOperationFactory::GetBinaryOperation(quickstep::BinaryOperationID::kSubtract);
}
-#line 5840 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5889 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 285:
-#line 1996 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1995 "../SqlParser.ypp" /* yacc.c:1661 */
{
- (yyval.string_value_) = (yyvsp[0].string_value_);
+ (yyval.binary_operation_) = &quickstep::BinaryOperationFactory::GetBinaryOperation(quickstep::BinaryOperationID::kModulo);
}
-#line 5848 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5897 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 286:
-#line 1999 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 1998 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.binary_operation_) = &quickstep::BinaryOperationFactory::GetBinaryOperation(quickstep::BinaryOperationID::kMultiply);
+ }
+#line 5905 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 287:
+#line 2001 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.binary_operation_) = &quickstep::BinaryOperationFactory::GetBinaryOperation(quickstep::BinaryOperationID::kDivide);
+ }
+#line 5913 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 288:
+#line 2007 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.string_list_) = new quickstep::PtrList<quickstep::ParseString>();
+ (yyval.string_list_)->push_back((yyvsp[0].string_value_));
+ }
+#line 5922 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 289:
+#line 2011 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.string_list_) = (yyvsp[-2].string_list_);
+ (yyval.string_list_)->push_back((yyvsp[0].string_value_));
+ }
+#line 5931 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 290:
+#line 2017 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.string_value_) = (yyvsp[0].string_value_);
+ }
+#line 5939 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 291:
+#line 2020 "../SqlParser.ypp" /* yacc.c:1661 */
{
if ((yyvsp[0].string_value_)->value().empty()) {
quickstep_yyerror(&(yylsp[0]), yyscanner, nullptr, "Zero-length identifier");
}
(yyval.string_value_) = (yyvsp[0].string_value_);
}
-#line 5859 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 287:
-#line 2007 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.boolean_value_) = true;
- }
-#line 5867 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 288:
-#line 2010 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.boolean_value_) = true;
- }
-#line 5875 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 289:
-#line 2013 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.boolean_value_) = false;
- }
-#line 5883 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 290:
-#line 2016 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.boolean_value_) = false;
- }
-#line 5891 "SqlParser_gen.cpp" /* yacc.c:1661 */
- break;
-
- case 291:
-#line 2022 "../SqlParser.ypp" /* yacc.c:1661 */
- {
- (yyval.command_) = new quickstep::ParseCommand((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].command_argument_list_));
- }
-#line 5899 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 5950 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
case 292:
-#line 2027 "../SqlParser.ypp" /* yacc.c:1661 */
+#line 2028 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.boolean_value_) = true;
+ }
+#line 5958 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 293:
+#line 2031 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.boolean_value_) = true;
+ }
+#line 5966 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 294:
+#line 2034 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.boolean_value_) = false;
+ }
+#line 5974 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 295:
+#line 2037 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.boolean_value_) = false;
+ }
+#line 5982 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 296:
+#line 2043 "../SqlParser.ypp" /* yacc.c:1661 */
+ {
+ (yyval.command_) = new quickstep::ParseCommand((yylsp[-1]).first_line, (yylsp[-1]).first_column, (yyvsp[-1].string_value_), (yyvsp[0].command_argument_list_));
+ }
+#line 5990 "SqlParser_gen.cpp" /* yacc.c:1661 */
+ break;
+
+ case 297:
+#line 2048 "../SqlParser.ypp" /* yacc.c:1661 */
{
quickstep::PtrVector<quickstep::ParseString> *argument_list = (yyvsp[-1].command_argument_list_);
argument_list->push_back((yyvsp[0].string_value_));
(yyval.command_argument_list_) = argument_list;
}
-#line 5909 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 6000 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
- case 293:
-#line 2032 "../SqlParser.ypp" /* yacc.c:1661 */
+ case 298:
+#line 2053 "../SqlParser.ypp" /* yacc.c:1661 */
{ /* Epsilon, an empy match. */
(yyval.command_argument_list_) = new quickstep::PtrVector<quickstep::ParseString>();
}
-#line 5917 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 6008 "SqlParser_gen.cpp" /* yacc.c:1661 */
break;
-#line 5921 "SqlParser_gen.cpp" /* yacc.c:1661 */
+#line 6012 "SqlParser_gen.cpp" /* yacc.c:1661 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -6152,7 +6243,7 @@
#endif
return yyresult;
}
-#line 2036 "../SqlParser.ypp" /* yacc.c:1906 */
+#line 2057 "../SqlParser.ypp" /* yacc.c:1906 */
void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string &feature) {
diff --git a/parser/preprocessed/SqlParser_gen.hpp b/parser/preprocessed/SqlParser_gen.hpp
index a6d12e2..f6b5247 100644
--- a/parser/preprocessed/SqlParser_gen.hpp
+++ b/parser/preprocessed/SqlParser_gen.hpp
@@ -94,90 +94,91 @@
TOKEN_DECIMAL = 304,
TOKEN_DEFAULT = 305,
TOKEN_DELETE = 306,
- TOKEN_DELIMITER = 307,
- TOKEN_DESC = 308,
- TOKEN_DISTINCT = 309,
- TOKEN_DOUBLE = 310,
- TOKEN_DROP = 311,
- TOKEN_ELSE = 312,
- TOKEN_END = 313,
- TOKEN_ESCAPE_STRINGS = 314,
- TOKEN_EXISTS = 315,
- TOKEN_EXTRACT = 316,
- TOKEN_FALSE = 317,
- TOKEN_FIRST = 318,
- TOKEN_FLOAT = 319,
- TOKEN_FOLLOWING = 320,
- TOKEN_FOR = 321,
- TOKEN_FOREIGN = 322,
- TOKEN_FROM = 323,
- TOKEN_FULL = 324,
- TOKEN_GROUP = 325,
- TOKEN_HASH = 326,
- TOKEN_HAVING = 327,
- TOKEN_HOUR = 328,
- TOKEN_IN = 329,
- TOKEN_INDEX = 330,
- TOKEN_INNER = 331,
- TOKEN_INSERT = 332,
- TOKEN_INTEGER = 333,
- TOKEN_INTERVAL = 334,
- TOKEN_INTO = 335,
- TOKEN_JOIN = 336,
- TOKEN_KEY = 337,
- TOKEN_LAST = 338,
- TOKEN_LEFT = 339,
- TOKEN_LIMIT = 340,
- TOKEN_LONG = 341,
- TOKEN_MINUTE = 342,
- TOKEN_MONTH = 343,
- TOKEN_NULL = 344,
- TOKEN_NULLS = 345,
- TOKEN_OFF = 346,
- TOKEN_ON = 347,
- TOKEN_ORDER = 348,
- TOKEN_OUTER = 349,
- TOKEN_OVER = 350,
- TOKEN_PARTITION = 351,
- TOKEN_PARTITIONS = 352,
- TOKEN_PERCENT = 353,
- TOKEN_PRECEDING = 354,
- TOKEN_PRIMARY = 355,
- TOKEN_PRIORITY = 356,
- TOKEN_QUIT = 357,
- TOKEN_RANGE = 358,
- TOKEN_REAL = 359,
- TOKEN_REFERENCES = 360,
- TOKEN_RIGHT = 361,
- TOKEN_ROW = 362,
- TOKEN_ROW_DELIMITER = 363,
- TOKEN_ROWS = 364,
- TOKEN_SECOND = 365,
- TOKEN_SELECT = 366,
- TOKEN_SET = 367,
- TOKEN_SMA = 368,
- TOKEN_SMALLINT = 369,
+ TOKEN_DESC = 307,
+ TOKEN_DISTINCT = 308,
+ TOKEN_DOUBLE = 309,
+ TOKEN_DROP = 310,
+ TOKEN_ELSE = 311,
+ TOKEN_END = 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_STDERR = 368,
+ TOKEN_STDOUT = 369,
TOKEN_SUBSTRING = 370,
TOKEN_TABLE = 371,
TOKEN_THEN = 372,
TOKEN_TIME = 373,
TOKEN_TIMESTAMP = 374,
- TOKEN_TRUE = 375,
- TOKEN_TUPLESAMPLE = 376,
- TOKEN_UNBOUNDED = 377,
- TOKEN_UNIQUE = 378,
- TOKEN_UPDATE = 379,
- TOKEN_USING = 380,
- TOKEN_VALUES = 381,
- TOKEN_VARCHAR = 382,
- TOKEN_WHEN = 383,
- TOKEN_WHERE = 384,
- TOKEN_WINDOW = 385,
- TOKEN_WITH = 386,
- TOKEN_YEAR = 387,
- TOKEN_YEARMONTH = 388,
- TOKEN_EOF = 389,
- TOKEN_LEX_ERROR = 390
+ TOKEN_TO = 375,
+ TOKEN_TRUE = 376,
+ TOKEN_TUPLESAMPLE = 377,
+ TOKEN_UNBOUNDED = 378,
+ TOKEN_UNIQUE = 379,
+ TOKEN_UPDATE = 380,
+ TOKEN_USING = 381,
+ TOKEN_VALUES = 382,
+ TOKEN_VARCHAR = 383,
+ TOKEN_WHEN = 384,
+ TOKEN_WHERE = 385,
+ TOKEN_WINDOW = 386,
+ TOKEN_WITH = 387,
+ TOKEN_YEAR = 388,
+ TOKEN_YEARMONTH = 389,
+ TOKEN_EOF = 390,
+ TOKEN_LEX_ERROR = 391
};
#endif
@@ -237,8 +238,7 @@
quickstep::ParseKeyStringValue *key_string_value_;
quickstep::ParseKeyStringList *key_string_list_;
quickstep::ParseKeyIntegerValue *key_integer_value_;
-
- quickstep::ParseCopyFromParams *copy_from_params_;
+ quickstep::ParseKeyBoolValue *key_bool_value_;
quickstep::ParseAssignment *assignment_;
quickstep::PtrList<quickstep::ParseAssignment> *assignment_list_;
@@ -251,7 +251,7 @@
quickstep::ParseStatementUpdate *update_statement_;
quickstep::ParseStatementInsert *insert_statement_;
quickstep::ParseStatementDelete *delete_statement_;
- quickstep::ParseStatementCopyFrom *copy_from_statement_;
+ quickstep::ParseStatementCopy *copy_statement_;
quickstep::ParseStatementCreateTable *create_table_statement_;
quickstep::ParsePartitionClause *partition_clause_;
quickstep::ParseBlockProperties *block_properties_;
diff --git a/parser/tests/Copy.test b/parser/tests/Copy.test
index dccaa82..7d1677d 100644
--- a/parser/tests/Copy.test
+++ b/parser/tests/Copy.test
@@ -24,34 +24,131 @@
COPY test FROM 'test.txt'
--
-CopyFromStatement[relation_name=test,source_file=test.txt]
+CopyStatement[direction=FROM,file=test.txt,relation_name=test]
==
COPY test FROM 'test.txt' WITH (DELIMITER 'd', ESCAPE_STRINGS FALSE)
--
-CopyFromStatement[relation_name=test,source_file=test.txt]
-+-params=CopyFromParams[delimiter=d,escape_string=false]
+CopyStatement[direction=FROM,file=test.txt,relation_name=test]
++-params=
+ +-KeyStringValue[key=DELIMITER]
+ | +-value=String[value=d]
+ +-KeyBoolValue[key=ESCAPE_STRINGS,value=false]
==
COPY test FROM 'test.txt' WITH (DELIMITER '123', ESCAPE_STRINGS FALSE)
--
-CopyFromStatement[relation_name=test,source_file=test.txt]
-+-params=CopyFromParams[delimiter=123,escape_string=false]
+CopyStatement[direction=FROM,file=test.txt,relation_name=test]
++-params=
+ +-KeyStringValue[key=DELIMITER]
+ | +-value=String[value=123]
+ +-KeyBoolValue[key=ESCAPE_STRINGS,value=false]
==
COPY test FROM 'test.txt' WITH (DELIMITER e'\t')
--
-CopyFromStatement[relation_name=test,source_file=test.txt]
-+-params=CopyFromParams[delimiter= ,escape_string=true]
+CopyStatement[direction=FROM,file=test.txt,relation_name=test]
++-params=
+ +-KeyStringValue[key=DELIMITER]
+ +-value=String[value= ]
==
COPY test FROM 'test.txt' WITH (ESCAPE_STRINGS FALSE, DELIMITER 'd')
--
-CopyFromStatement[relation_name=test,source_file=test.txt]
-+-params=CopyFromParams[delimiter=d,escape_string=false]
+CopyStatement[direction=FROM,file=test.txt,relation_name=test]
++-params=
+ +-KeyBoolValue[key=ESCAPE_STRINGS,value=false]
+ +-KeyStringValue[key=DELIMITER]
+ +-value=String[value=d]
==
COPY test FROM 'test.txt' WITH (DELIMITER '1', ESCAPE_STRINGS FALSE, DELIMITER '2', ESCAPE_STRINGS TRUE)
--
-CopyFromStatement[relation_name=test,source_file=test.txt]
-+-params=CopyFromParams[delimiter=2,escape_string=true]
+CopyStatement[direction=FROM,file=test.txt,relation_name=test]
++-params=
+ +-KeyStringValue[key=DELIMITER]
+ | +-value=String[value=1]
+ +-KeyBoolValue[key=ESCAPE_STRINGS,value=false]
+ +-KeyStringValue[key=DELIMITER]
+ | +-value=String[value=2]
+ +-KeyBoolValue[key=ESCAPE_STRINGS,value=true]
+==
+
+COPY test TO 'test.txt';
+--
+CopyStatement[direction=TO,file=@test.txt,relation_name=test]
+==
+
+COPY test TO stdout;
+--
+CopyStatement[direction=TO,file=$stdout,relation_name=test]
+==
+
+COPY test TO stderr;
+--
+CopyStatement[direction=TO,file=$stderr,relation_name=test]
+==
+
+COPY test TO 'stdout';
+--
+CopyStatement[direction=TO,file=@stdout,relation_name=test]
+==
+
+COPY test TO 'test.txt' WITH (FORMAT 'TEXT');
+--
+CopyStatement[direction=TO,file=@test.txt,relation_name=test]
++-params=
+ +-KeyStringValue[key=FORMAT]
+ +-value=String[value=TEXT]
+==
+
+COPY test TO 'test.txt' WITH (FORMAT 'CSV');
+--
+CopyStatement[direction=TO,file=@test.txt,relation_name=test]
++-params=
+ +-KeyStringValue[key=FORMAT]
+ +-value=String[value=CSV]
+==
+
+COPY test TO stdout
+WITH (FORMAT 'CSV', DELIMITER e'\t', HEADER TRUE, QUOTE '$', NULL_STRING 'NULL');
+--
+CopyStatement[direction=TO,file=$stdout,relation_name=test]
++-params=
+ +-KeyStringValue[key=FORMAT]
+ | +-value=String[value=CSV]
+ +-KeyStringValue[key=DELIMITER]
+ | +-value=String[value= ]
+ +-KeyBoolValue[key=HEADER,value=true]
+ +-KeyStringValue[key=QUOTE]
+ | +-value=String[value=$]
+ +-KeyStringValue[key=NULL_STRING]
+ +-value=String[value=NULL]
+==
+
+COPY
+ SELECT SUM(int_col) AS sum_int,
+ AVG(double_col) AS avg_dbl
+ FROM test
+ GROUP BY char_col
+TO 'test.txt' WITH (DELIMITER ',');
+--
+CopyStatement[direction=TO,file=@test.txt]
++-set_operation_query=SetOperation[set_operation_type=Select]
+| +-children=
+| +-Select
+| +-select_clause=SelectList
+| | +-SelectListItem[alias=sum_int]
+| | | +-FunctionCall[name=SUM]
+| | | +-AttributeReference[attribute_name=int_col]
+| | +-SelectListItem[alias=avg_dbl]
+| | +-FunctionCall[name=AVG]
+| | +-AttributeReference[attribute_name=double_col]
+| +-group_by=GroupBy
+| | +-AttributeReference[attribute_name=char_col]
+| +-from_clause=
+| +-TableReference[table=test]
++-params=
+ +-KeyStringValue[key=DELIMITER]
+ +-value=String[value=,]
+==
diff --git a/query_optimizer/CMakeLists.txt b/query_optimizer/CMakeLists.txt
index fdf8796..4ea21b2 100644
--- a/query_optimizer/CMakeLists.txt
+++ b/query_optimizer/CMakeLists.txt
@@ -94,6 +94,7 @@
quickstep_queryoptimizer_expressions_WindowAggregateFunction
quickstep_queryoptimizer_physical_Aggregate
quickstep_queryoptimizer_physical_CopyFrom
+ quickstep_queryoptimizer_physical_CopyTo
quickstep_queryoptimizer_physical_CreateIndex
quickstep_queryoptimizer_physical_CreateTable
quickstep_queryoptimizer_physical_CrossReferenceCoalesceAggregate
@@ -140,6 +141,7 @@
quickstep_relationaloperators_SelectOperator
quickstep_relationaloperators_SortMergeRunOperator
quickstep_relationaloperators_SortRunGenerationOperator
+ quickstep_relationaloperators_TableExportOperator
quickstep_relationaloperators_TableGeneratorOperator
quickstep_relationaloperators_TextScanOperator
quickstep_relationaloperators_UnionAllOperator
diff --git a/query_optimizer/ExecutionGenerator.cpp b/query_optimizer/ExecutionGenerator.cpp
index d82a0c7..372d576 100644
--- a/query_optimizer/ExecutionGenerator.cpp
+++ b/query_optimizer/ExecutionGenerator.cpp
@@ -78,6 +78,7 @@
#include "query_optimizer/expressions/WindowAggregateFunction.hpp"
#include "query_optimizer/physical/Aggregate.hpp"
#include "query_optimizer/physical/CopyFrom.hpp"
+#include "query_optimizer/physical/CopyTo.hpp"
#include "query_optimizer/physical/CreateIndex.hpp"
#include "query_optimizer/physical/CreateTable.hpp"
#include "query_optimizer/physical/CrossReferenceCoalesceAggregate.hpp"
@@ -124,6 +125,7 @@
#include "relational_operators/SelectOperator.hpp"
#include "relational_operators/SortMergeRunOperator.hpp"
#include "relational_operators/SortRunGenerationOperator.hpp"
+#include "relational_operators/TableExportOperator.hpp"
#include "relational_operators/TableGeneratorOperator.hpp"
#include "relational_operators/TextScanOperator.hpp"
#include "relational_operators/UnionAllOperator.hpp"
@@ -409,6 +411,9 @@
case P::PhysicalType::kCopyFrom:
return convertCopyFrom(
std::static_pointer_cast<const P::CopyFrom>(physical_plan));
+ case P::PhysicalType::kCopyTo:
+ return convertCopyTo(
+ std::static_pointer_cast<const P::CopyTo>(physical_plan));
case P::PhysicalType::kCreateIndex:
return convertCreateIndex(
std::static_pointer_cast<const P::CreateIndex>(physical_plan));
@@ -1223,8 +1228,7 @@
new TextScanOperator(
query_handle_->query_id(),
physical_plan->file_name(),
- physical_plan->column_delimiter(),
- physical_plan->escape_strings(),
+ physical_plan->options(),
*output_relation,
insert_destination_index));
insert_destination_proto->set_relational_op_index(scan_operator_index);
@@ -1239,6 +1243,40 @@
false /* is_pipeline_breaker */);
}
+void ExecutionGenerator::convertCopyTo(const P::CopyToPtr &physical_plan) {
+ // CopyTo is converted to a TableExport operator.
+
+ const CatalogRelation *input_relation;
+ bool input_relation_is_stored;
+
+ const P::PhysicalPtr &input = physical_plan->input();
+ P::TableReferencePtr table_reference;
+ const CatalogRelationInfo *input_relation_info = nullptr;
+ if (P::SomeTableReference::MatchesWithConditionalCast(input, &table_reference)) {
+ input_relation = table_reference->relation();
+ input_relation_is_stored = true;
+ } else {
+ input_relation_info = findRelationInfoOutputByPhysical(input);
+ input_relation = input_relation_info->relation;
+ input_relation_is_stored = false;
+ }
+
+ DCHECK(input_relation != nullptr);
+ const QueryPlan::DAGNodeIndex table_export_operator_index =
+ execution_plan_->addRelationalOperator(
+ new TableExportOperator(query_handle_->query_id(),
+ *input_relation,
+ input_relation_is_stored,
+ physical_plan->file_name(),
+ physical_plan->options()));
+ if (!input_relation_is_stored) {
+ DCHECK(input_relation_info != nullptr);
+ execution_plan_->addDirectDependency(table_export_operator_index,
+ input_relation_info->producer_operator_index,
+ false /* is_pipeline_breaker */);
+ }
+}
+
void ExecutionGenerator::convertCreateIndex(
const P::CreateIndexPtr &physical_plan) {
// CreateIndex is converted to a CreateIndex operator.
diff --git a/query_optimizer/ExecutionGenerator.hpp b/query_optimizer/ExecutionGenerator.hpp
index 19e75c1..bc9f88b 100644
--- a/query_optimizer/ExecutionGenerator.hpp
+++ b/query_optimizer/ExecutionGenerator.hpp
@@ -44,6 +44,7 @@
#include "query_optimizer/expressions/Predicate.hpp"
#include "query_optimizer/physical/Aggregate.hpp"
#include "query_optimizer/physical/CopyFrom.hpp"
+#include "query_optimizer/physical/CopyTo.hpp"
#include "query_optimizer/physical/CreateIndex.hpp"
#include "query_optimizer/physical/CreateTable.hpp"
#include "query_optimizer/physical/CrossReferenceCoalesceAggregate.hpp"
@@ -282,6 +283,13 @@
void convertCopyFrom(const physical::CopyFromPtr &physical_plan);
/**
+ * @brief Converts a CopyTo to a TableExport operator.
+ *
+ * @param physical_plan The CopyTo to be converted.
+ */
+ void convertCopyTo(const physical::CopyToPtr &physical_plan);
+
+ /**
* @brief Converts a CreateIndex to a CreateIndex operator.
*
* @param physical_plan The CreateIndex to be converted.
diff --git a/query_optimizer/logical/CMakeLists.txt b/query_optimizer/logical/CMakeLists.txt
index 4480e0b..37e9735 100644
--- a/query_optimizer/logical/CMakeLists.txt
+++ b/query_optimizer/logical/CMakeLists.txt
@@ -19,6 +19,7 @@
add_library(quickstep_queryoptimizer_logical_Aggregate Aggregate.cpp Aggregate.hpp)
add_library(quickstep_queryoptimizer_logical_BinaryJoin BinaryJoin.cpp BinaryJoin.hpp)
add_library(quickstep_queryoptimizer_logical_CopyFrom CopyFrom.cpp CopyFrom.hpp)
+add_library(quickstep_queryoptimizer_logical_CopyTo CopyTo.cpp CopyTo.hpp)
add_library(quickstep_queryoptimizer_logical_CreateIndex CreateIndex.cpp CreateIndex.hpp)
add_library(quickstep_queryoptimizer_logical_CreateTable CreateTable.cpp CreateTable.hpp)
add_library(quickstep_queryoptimizer_logical_DeleteTuples DeleteTuples.cpp DeleteTuples.hpp)
@@ -74,6 +75,16 @@
quickstep_queryoptimizer_expressions_AttributeReference
quickstep_queryoptimizer_logical_Logical
quickstep_queryoptimizer_logical_LogicalType
+ quickstep_utility_BulkIoConfiguration
+ quickstep_utility_Macros
+ quickstep_utility_StringUtil)
+target_link_libraries(quickstep_queryoptimizer_logical_CopyTo
+ glog
+ quickstep_queryoptimizer_OptimizerTree
+ quickstep_queryoptimizer_expressions_AttributeReference
+ quickstep_queryoptimizer_logical_Logical
+ quickstep_queryoptimizer_logical_LogicalType
+ quickstep_utility_BulkIoConfiguration
quickstep_utility_Macros
quickstep_utility_StringUtil)
target_link_libraries(quickstep_queryoptimizer_logical_CreateIndex
@@ -290,6 +301,7 @@
quickstep_queryoptimizer_logical_Aggregate
quickstep_queryoptimizer_logical_BinaryJoin
quickstep_queryoptimizer_logical_CopyFrom
+ quickstep_queryoptimizer_logical_CopyTo
quickstep_queryoptimizer_logical_CreateIndex
quickstep_queryoptimizer_logical_CreateTable
quickstep_queryoptimizer_logical_DeleteTuples
diff --git a/query_optimizer/logical/CopyFrom.cpp b/query_optimizer/logical/CopyFrom.cpp
index b0a1423..a80c701 100644
--- a/query_optimizer/logical/CopyFrom.cpp
+++ b/query_optimizer/logical/CopyFrom.cpp
@@ -44,11 +44,11 @@
inline_field_values->push_back(file_name_);
inline_field_names->push_back("column_delimiter");
- inline_field_values->push_back("\"" + EscapeSpecialChars(std::string(1, column_delimiter_)) +
- "\"");
+ inline_field_values->push_back(
+ "\"" + EscapeSpecialChars(std::string(1, options_->getDelimiter())) + "\"");
inline_field_names->push_back("escape_strings");
- inline_field_values->push_back(escape_strings_ ? "true" : "false");
+ inline_field_values->push_back(options_->escapeStrings() ? "true" : "false");
}
} // namespace logical
diff --git a/query_optimizer/logical/CopyFrom.hpp b/query_optimizer/logical/CopyFrom.hpp
index 7c5907f..6b130a6 100644
--- a/query_optimizer/logical/CopyFrom.hpp
+++ b/query_optimizer/logical/CopyFrom.hpp
@@ -17,8 +17,8 @@
* under the License.
**/
-#ifndef QUICKSTEP_QUERY_OPTIMIZER_LOGICAL_COPYFROM_HPP_
-#define QUICKSTEP_QUERY_OPTIMIZER_LOGICAL_COPYFROM_HPP_
+#ifndef QUICKSTEP_QUERY_OPTIMIZER_LOGICAL_COPY_FROM_HPP_
+#define QUICKSTEP_QUERY_OPTIMIZER_LOGICAL_COPY_FROM_HPP_
#include <memory>
#include <string>
@@ -28,6 +28,7 @@
#include "query_optimizer/expressions/AttributeReference.hpp"
#include "query_optimizer/logical/Logical.hpp"
#include "query_optimizer/logical/LogicalType.hpp"
+#include "utility/BulkIoConfiguration.hpp"
#include "utility/Macros.hpp"
#include "glog/logging.h"
@@ -66,20 +67,14 @@
const std::string& file_name() const { return file_name_; }
/**
- * @return The delimiter used in the text file to separate columns.
+ * @return The options for this COPY FROM statement.
*/
- const char column_delimiter() const { return column_delimiter_; }
-
- /**
- * @return Whether to decode escape sequences in the text file.
- */
- bool escape_strings() const { return escape_strings_; }
+ const BulkIoConfigurationPtr& options() const { return options_; }
LogicalPtr copyWithNewChildren(
const std::vector<LogicalPtr> &new_children) const override {
DCHECK(new_children.empty());
- return Create(catalog_relation_, file_name_, column_delimiter_,
- escape_strings_);
+ return Create(catalog_relation_, file_name_, options_);
}
std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override {
@@ -95,19 +90,13 @@
*
* @param catalog_relation The catalog relation to insert the tuples to.
* @param file_name The name of the file to read the data from.
- * @param column_delimiter The delimiter used in the text file to separate
- * columns.
- * @param escape_strings Whether to decode escape sequences in the text file.
+ * @param options The options for this COPY FROM statement.
* @return An immutable CopyFrom logical node.
*/
static CopyFromPtr Create(const CatalogRelation *catalog_relation,
const std::string &file_name,
- const char column_delimiter,
- bool escape_strings) {
- return CopyFromPtr(new CopyFrom(catalog_relation,
- file_name,
- column_delimiter,
- escape_strings));
+ const BulkIoConfigurationPtr &options) {
+ return CopyFromPtr(new CopyFrom(catalog_relation, file_name, options));
}
protected:
@@ -122,18 +111,14 @@
private:
CopyFrom(const CatalogRelation *catalog_relation,
const std::string &file_name,
- const char column_delimiter,
- bool escape_strings)
+ const BulkIoConfigurationPtr &options)
: catalog_relation_(catalog_relation),
file_name_(file_name),
- column_delimiter_(column_delimiter),
- escape_strings_(escape_strings) {}
+ options_(options) {}
const CatalogRelation *catalog_relation_;
- std::string file_name_;
-
- const char column_delimiter_;
- const bool escape_strings_;
+ const std::string file_name_;
+ const BulkIoConfigurationPtr options_;
DISALLOW_COPY_AND_ASSIGN(CopyFrom);
};
@@ -144,4 +129,4 @@
} // namespace optimizer
} // namespace quickstep
-#endif /* QUICKSTEP_QUERY_OPTIMIZER_LOGICAL_COPYFROM_HPP_ */
+#endif // QUICKSTEP_QUERY_OPTIMIZER_LOGICAL_COPY_FROM_HPP_
diff --git a/query_optimizer/logical/CopyTo.cpp b/query_optimizer/logical/CopyTo.cpp
new file mode 100644
index 0000000..369f732
--- /dev/null
+++ b/query_optimizer/logical/CopyTo.cpp
@@ -0,0 +1,75 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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/CopyTo.hpp"
+
+#include <string>
+#include <vector>
+
+#include "query_optimizer/OptimizerTree.hpp"
+#include "utility/StringUtil.hpp"
+
+namespace quickstep {
+namespace optimizer {
+namespace logical {
+
+void CopyTo::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("file_name");
+ inline_field_values->push_back(file_name_);
+
+ non_container_child_field_names->push_back("input");
+ non_container_child_fields->push_back(input_);
+
+ inline_field_names->push_back("format");
+ inline_field_values->push_back(options_->getFormatName());
+
+ inline_field_names->push_back("column_delimiter");
+ inline_field_values->push_back(
+ "\"" + EscapeSpecialChars(std::string(1, options_->getDelimiter())) + "\"");
+
+ if (options_->escapeStrings()) {
+ inline_field_names->push_back("escape_strings");
+ inline_field_values->push_back("true");
+ }
+
+ if (options_->hasHeader()) {
+ inline_field_names->push_back("header");
+ inline_field_values->push_back("true");
+ }
+
+ if (options_->getQuoteCharacter() != 0) {
+ inline_field_names->push_back("quote");
+ inline_field_values->push_back(std::string(1, options_->getQuoteCharacter()));
+ }
+
+ if (options_->getNullString() != "") {
+ inline_field_names->push_back("null_string");
+ inline_field_values->push_back(options_->getNullString());
+ }
+}
+
+} // namespace logical
+} // namespace optimizer
+} // namespace quickstep
diff --git a/query_optimizer/logical/CopyTo.hpp b/query_optimizer/logical/CopyTo.hpp
new file mode 100644
index 0000000..33060a6
--- /dev/null
+++ b/query_optimizer/logical/CopyTo.hpp
@@ -0,0 +1,141 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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_COPY_TO_HPP_
+#define QUICKSTEP_QUERY_OPTIMIZER_LOGICAL_COPY_TO_HPP_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "query_optimizer/OptimizerTree.hpp"
+#include "query_optimizer/expressions/AttributeReference.hpp"
+#include "query_optimizer/logical/Logical.hpp"
+#include "query_optimizer/logical/LogicalType.hpp"
+#include "utility/BulkIoConfiguration.hpp"
+#include "utility/Macros.hpp"
+
+#include "glog/logging.h"
+
+namespace quickstep {
+namespace optimizer {
+namespace logical {
+
+/** \addtogroup OptimizerLogical
+ * @{
+ */
+
+class CopyTo;
+typedef std::shared_ptr<const CopyTo> CopyToPtr;
+
+/**
+ * @brief Represents an operation that copies data from a relation to a text file.
+ */
+class CopyTo : public Logical {
+ public:
+ LogicalType getLogicalType() const override {
+ return LogicalType::kCopyTo;
+ }
+
+ std::string getName() const override {
+ return "CopyTo";
+ }
+
+ /**
+ * @return The input relation whose data is to be exported.
+ */
+ const LogicalPtr& input() const {
+ return input_;
+ }
+
+ /**
+ * @return The name of the file to write the data to.
+ */
+ const std::string& file_name() const {
+ return file_name_;
+ }
+
+ /**
+ * @return The options for this COPY TO statement.
+ */
+ const BulkIoConfigurationPtr& options() const {
+ return options_;
+ }
+
+ LogicalPtr copyWithNewChildren(
+ const std::vector<LogicalPtr> &new_children) const override {
+ DCHECK_EQ(1u, new_children.size());
+ return Create(new_children.front(), file_name_, options_);
+ }
+
+ std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override {
+ return {};
+ }
+
+ std::vector<expressions::AttributeReferencePtr> getReferencedAttributes() const override {
+ return input_->getOutputAttributes();
+ }
+
+ /**
+ * @brief Creates a CopyTo logical node.
+ *
+ * @param input The input relation whose data is to be exported.
+ * @param file_name The name of the file to write the data to.
+ * @param options The options for this COPY TO statement.
+ * @return An immutable CopyTo logical node.
+ */
+ static CopyToPtr Create(const LogicalPtr &input,
+ const std::string &file_name,
+ const BulkIoConfigurationPtr &options) {
+ return CopyToPtr(new CopyTo(input, file_name, options));
+ }
+
+ 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:
+ CopyTo(const LogicalPtr &input,
+ const std::string &file_name,
+ const BulkIoConfigurationPtr &options)
+ : input_(input),
+ file_name_(file_name),
+ options_(options) {
+ addChild(input);
+ }
+
+ const LogicalPtr input_;
+ const std::string file_name_;
+ const BulkIoConfigurationPtr options_;
+
+ DISALLOW_COPY_AND_ASSIGN(CopyTo);
+};
+
+/** @} */
+
+} // namespace logical
+} // namespace optimizer
+} // namespace quickstep
+
+#endif // QUICKSTEP_QUERY_OPTIMIZER_LOGICAL_COPY_TO_HPP_
diff --git a/query_optimizer/logical/LogicalType.hpp b/query_optimizer/logical/LogicalType.hpp
index 21ffdca..d8b85dd 100644
--- a/query_optimizer/logical/LogicalType.hpp
+++ b/query_optimizer/logical/LogicalType.hpp
@@ -32,8 +32,9 @@
* @brief Optimizer logical node types.
**/
enum class LogicalType {
- kAggregate,
+ kAggregate = 0,
kCopyFrom,
+ kCopyTo,
kCreateIndex,
kCreateTable,
kDeleteTuples,
diff --git a/query_optimizer/physical/CMakeLists.txt b/query_optimizer/physical/CMakeLists.txt
index e510f6b..a1a72f7 100644
--- a/query_optimizer/physical/CMakeLists.txt
+++ b/query_optimizer/physical/CMakeLists.txt
@@ -19,6 +19,7 @@
add_library(quickstep_queryoptimizer_physical_Aggregate Aggregate.cpp Aggregate.hpp)
add_library(quickstep_queryoptimizer_physical_BinaryJoin BinaryJoin.cpp BinaryJoin.hpp)
add_library(quickstep_queryoptimizer_physical_CopyFrom CopyFrom.cpp CopyFrom.hpp)
+add_library(quickstep_queryoptimizer_physical_CopyTo CopyTo.cpp CopyTo.hpp)
add_library(quickstep_queryoptimizer_physical_CreateIndex CreateIndex.cpp CreateIndex.hpp)
add_library(quickstep_queryoptimizer_physical_CreateTable CreateTable.cpp CreateTable.hpp)
add_library(quickstep_queryoptimizer_physical_CrossReferenceCoalesceAggregate
@@ -81,7 +82,18 @@
quickstep_queryoptimizer_expressions_NamedExpression
quickstep_queryoptimizer_physical_Physical
quickstep_queryoptimizer_physical_PhysicalType
- quickstep_utility_Macros)
+ quickstep_utility_BulkIoConfiguration
+ quickstep_utility_Macros
+ quickstep_utility_StringUtil)
+target_link_libraries(quickstep_queryoptimizer_physical_CopyTo
+ glog
+ quickstep_queryoptimizer_OptimizerTree
+ quickstep_queryoptimizer_expressions_AttributeReference
+ quickstep_queryoptimizer_physical_Physical
+ quickstep_queryoptimizer_physical_PhysicalType
+ quickstep_utility_BulkIoConfiguration
+ quickstep_utility_Macros
+ quickstep_utility_StringUtil)
target_link_libraries(quickstep_queryoptimizer_physical_CreateIndex
glog
quickstep_queryoptimizer_OptimizerTree
@@ -327,6 +339,7 @@
quickstep_queryoptimizer_physical_Aggregate
quickstep_queryoptimizer_physical_BinaryJoin
quickstep_queryoptimizer_physical_CopyFrom
+ quickstep_queryoptimizer_physical_CopyTo
quickstep_queryoptimizer_physical_CreateIndex
quickstep_queryoptimizer_physical_CreateTable
quickstep_queryoptimizer_physical_CrossReferenceCoalesceAggregate
diff --git a/query_optimizer/physical/CopyFrom.cpp b/query_optimizer/physical/CopyFrom.cpp
index 8448d4e..65279fe 100644
--- a/query_optimizer/physical/CopyFrom.cpp
+++ b/query_optimizer/physical/CopyFrom.cpp
@@ -24,6 +24,7 @@
#include "catalog/CatalogRelation.hpp"
#include "query_optimizer/OptimizerTree.hpp"
+#include "utility/StringUtil.hpp"
namespace quickstep {
namespace optimizer {
@@ -43,10 +44,11 @@
inline_field_values->push_back(file_name_);
inline_field_names->push_back("column_delimiter");
- inline_field_values->push_back(std::string(1, column_delimiter_));
+ inline_field_values->push_back(
+ "\"" + EscapeSpecialChars(std::string(1, options_->getDelimiter())) + "\"");
inline_field_names->push_back("escape_strings");
- inline_field_values->push_back(escape_strings_ ? "true" : "false");
+ inline_field_values->push_back(options_->escapeStrings() ? "true" : "false");
}
} // namespace physical
diff --git a/query_optimizer/physical/CopyFrom.hpp b/query_optimizer/physical/CopyFrom.hpp
index ecbf318..c9bbcdf 100644
--- a/query_optimizer/physical/CopyFrom.hpp
+++ b/query_optimizer/physical/CopyFrom.hpp
@@ -17,8 +17,8 @@
* under the License.
**/
-#ifndef QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_COPYFROM_HPP_
-#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_COPYFROM_HPP_
+#ifndef QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_COPY_FROM_HPP_
+#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_COPY_FROM_HPP_
#include <memory>
#include <string>
@@ -30,6 +30,7 @@
#include "query_optimizer/expressions/NamedExpression.hpp"
#include "query_optimizer/physical/Physical.hpp"
#include "query_optimizer/physical/PhysicalType.hpp"
+#include "utility/BulkIoConfiguration.hpp"
#include "utility/Macros.hpp"
#include "glog/logging.h"
@@ -68,22 +69,14 @@
const std::string& file_name() const { return file_name_; }
/**
- * @return The delimiter used in the text file to separate columns.
+ * @return The options for this COPY FROM statement.
*/
- const char column_delimiter() const { return column_delimiter_; }
-
- /**
- * @return Whether to decode escape sequences in the text file.
- */
- bool escape_strings() const { return escape_strings_; }
+ const BulkIoConfigurationPtr& options() const { return options_; }
PhysicalPtr copyWithNewChildren(
const std::vector<PhysicalPtr> &new_children) const override {
DCHECK(new_children.empty());
- return Create(catalog_relation_,
- file_name_,
- column_delimiter_,
- escape_strings_);
+ return Create(catalog_relation_, file_name_, options_);
}
std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override {
@@ -112,12 +105,8 @@
*/
static CopyFromPtr Create(const CatalogRelation *catalog_relation,
const std::string &file_name,
- const char &column_delimiter,
- bool escape_strings) {
- return CopyFromPtr(new CopyFrom(catalog_relation,
- file_name,
- column_delimiter,
- escape_strings));
+ const BulkIoConfigurationPtr &options) {
+ return CopyFromPtr(new CopyFrom(catalog_relation, file_name, options));
}
protected:
@@ -132,18 +121,14 @@
private:
CopyFrom(const CatalogRelation *catalog_relation,
const std::string &file_name,
- const char column_delimiter,
- bool escape_strings)
+ const BulkIoConfigurationPtr &options)
: catalog_relation_(catalog_relation),
file_name_(file_name),
- column_delimiter_(column_delimiter),
- escape_strings_(escape_strings) {}
+ options_(options) {}
const CatalogRelation *catalog_relation_;
- std::string file_name_;
-
- const char column_delimiter_;
- const bool escape_strings_;
+ const std::string file_name_;
+ const BulkIoConfigurationPtr options_;
DISALLOW_COPY_AND_ASSIGN(CopyFrom);
};
@@ -154,4 +139,4 @@
} // namespace optimizer
} // namespace quickstep
-#endif /* QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_COPYFROM_HPP_ */
+#endif // QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_COPY_FROM_HPP_
diff --git a/query_optimizer/physical/CopyTo.cpp b/query_optimizer/physical/CopyTo.cpp
new file mode 100644
index 0000000..9cd954e
--- /dev/null
+++ b/query_optimizer/physical/CopyTo.cpp
@@ -0,0 +1,75 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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/physical/CopyTo.hpp"
+
+#include <string>
+#include <vector>
+
+#include "query_optimizer/OptimizerTree.hpp"
+#include "utility/StringUtil.hpp"
+
+namespace quickstep {
+namespace optimizer {
+namespace physical {
+
+void CopyTo::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("file_name");
+ inline_field_values->push_back(file_name_);
+
+ non_container_child_field_names->push_back("input");
+ non_container_child_fields->push_back(input_);
+
+ inline_field_names->push_back("format");
+ inline_field_values->push_back(options_->getFormatName());
+
+ inline_field_names->push_back("column_delimiter");
+ inline_field_values->push_back(
+ "\"" + EscapeSpecialChars(std::string(1, options_->getDelimiter())) + "\"");
+
+ if (options_->escapeStrings()) {
+ inline_field_names->push_back("escape_strings");
+ inline_field_values->push_back("true");
+ }
+
+ if (options_->hasHeader()) {
+ inline_field_names->push_back("header");
+ inline_field_values->push_back("true");
+ }
+
+ if (options_->getQuoteCharacter() != 0) {
+ inline_field_names->push_back("quote");
+ inline_field_values->push_back(std::string(1, options_->getQuoteCharacter()));
+ }
+
+ if (options_->getNullString() != "") {
+ inline_field_names->push_back("null_string");
+ inline_field_values->push_back(options_->getNullString());
+ }
+}
+
+} // namespace physical
+} // namespace optimizer
+} // namespace quickstep
diff --git a/query_optimizer/physical/CopyTo.hpp b/query_optimizer/physical/CopyTo.hpp
new file mode 100644
index 0000000..004d4f8
--- /dev/null
+++ b/query_optimizer/physical/CopyTo.hpp
@@ -0,0 +1,147 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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_PHYSICAL_COPY_TO_HPP_
+#define QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_COPY_TO_HPP_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "query_optimizer/OptimizerTree.hpp"
+#include "query_optimizer/expressions/AttributeReference.hpp"
+#include "query_optimizer/physical/Physical.hpp"
+#include "query_optimizer/physical/PhysicalType.hpp"
+#include "utility/BulkIoConfiguration.hpp"
+#include "utility/Macros.hpp"
+
+#include "glog/logging.h"
+
+namespace quickstep {
+namespace optimizer {
+namespace physical {
+
+/** \addtogroup OptimizerPhysical
+ * @{
+ */
+
+class CopyTo;
+typedef std::shared_ptr<const CopyTo> CopyToPtr;
+
+/**
+ * @brief Represents an operation that copies data from a relation to a text file.
+ */
+class CopyTo : public Physical {
+ public:
+ PhysicalType getPhysicalType() const override {
+ return PhysicalType::kCopyTo;
+ }
+
+ std::string getName() const override {
+ return "CopyTo";
+ }
+
+ /**
+ * @return The input relation whose data is to be exported.
+ */
+ const PhysicalPtr& input() const {
+ return input_;
+ }
+
+ /**
+ * @return The name of the file to write the data to.
+ */
+ const std::string& file_name() const {
+ return file_name_;
+ }
+
+ /**
+ * @return The options for this COPY TO statement.
+ */
+ const BulkIoConfigurationPtr& options() const {
+ return options_;
+ }
+
+ PhysicalPtr copyWithNewChildren(
+ const std::vector<PhysicalPtr> &new_children) const override {
+ DCHECK_EQ(1u, new_children.size());
+ return Create(new_children.front(), file_name_, options_);
+ }
+
+ std::vector<expressions::AttributeReferencePtr> getOutputAttributes() const override {
+ return {};
+ }
+
+ std::vector<expressions::AttributeReferencePtr> getReferencedAttributes() const override {
+ return input_->getOutputAttributes();
+ }
+
+ bool maybeCopyWithPrunedExpressions(
+ const expressions::UnorderedNamedExpressionSet &referenced_expressions,
+ PhysicalPtr *output) const override {
+ return false;
+ }
+
+ /**
+ * @brief Creates a CopyTo physical node.
+ *
+ * @param input The input relation whose data is to be exported.
+ * @param file_name The name of the file to write the data to.
+ * @param options The options for this COPY TO statement.
+ * @return An immutable CopyTo physical node.
+ */
+ static CopyToPtr Create(const PhysicalPtr &input,
+ const std::string &file_name,
+ const BulkIoConfigurationPtr &options) {
+ return CopyToPtr(new CopyTo(input, file_name, options));
+ }
+
+ 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:
+ CopyTo(const PhysicalPtr &input,
+ const std::string &file_name,
+ const BulkIoConfigurationPtr &options)
+ : input_(input),
+ file_name_(file_name),
+ options_(options) {
+ addChild(input);
+ }
+
+ const PhysicalPtr input_;
+ const std::string file_name_;
+ const BulkIoConfigurationPtr options_;
+
+ DISALLOW_COPY_AND_ASSIGN(CopyTo);
+};
+
+/** @} */
+
+} // namespace physical
+} // namespace optimizer
+} // namespace quickstep
+
+#endif // QUICKSTEP_QUERY_OPTIMIZER_PHYSICAL_COPY_TO_HPP_
diff --git a/query_optimizer/physical/PhysicalType.hpp b/query_optimizer/physical/PhysicalType.hpp
index 47db7ec..0a965af 100644
--- a/query_optimizer/physical/PhysicalType.hpp
+++ b/query_optimizer/physical/PhysicalType.hpp
@@ -32,8 +32,9 @@
* @brief Optimizer physical node types.
**/
enum class PhysicalType {
- kAggregate,
+ kAggregate = 0,
kCopyFrom,
+ kCopyTo,
kCreateIndex,
kCreateTable,
kCrossReferenceCoalesceAggregate,
diff --git a/query_optimizer/resolver/CMakeLists.txt b/query_optimizer/resolver/CMakeLists.txt
index 4e364a6..6feb1e8 100644
--- a/query_optimizer/resolver/CMakeLists.txt
+++ b/query_optimizer/resolver/CMakeLists.txt
@@ -97,6 +97,7 @@
quickstep_queryoptimizer_expressions_WindowAggregateFunction
quickstep_queryoptimizer_logical_Aggregate
quickstep_queryoptimizer_logical_CopyFrom
+ quickstep_queryoptimizer_logical_CopyTo
quickstep_queryoptimizer_logical_CreateIndex
quickstep_queryoptimizer_logical_CreateTable
quickstep_queryoptimizer_logical_DeleteTuples
@@ -131,6 +132,7 @@
quickstep_types_operations_unaryoperations_DateExtractOperation
quickstep_types_operations_unaryoperations_SubstringOperation
quickstep_types_operations_unaryoperations_UnaryOperation
+ quickstep_utility_BulkIoConfiguration
quickstep_utility_Macros
quickstep_utility_PtrList
quickstep_utility_PtrVector
diff --git a/query_optimizer/resolver/Resolver.cpp b/query_optimizer/resolver/Resolver.cpp
index 0f65255..935e235 100644
--- a/query_optimizer/resolver/Resolver.cpp
+++ b/query_optimizer/resolver/Resolver.cpp
@@ -93,6 +93,7 @@
#include "query_optimizer/expressions/WindowAggregateFunction.hpp"
#include "query_optimizer/logical/Aggregate.hpp"
#include "query_optimizer/logical/CopyFrom.hpp"
+#include "query_optimizer/logical/CopyTo.hpp"
#include "query_optimizer/logical/CreateIndex.hpp"
#include "query_optimizer/logical/CreateTable.hpp"
#include "query_optimizer/logical/DeleteTuples.hpp"
@@ -126,6 +127,7 @@
#include "types/operations/unary_operations/DateExtractOperation.hpp"
#include "types/operations/unary_operations/SubstringOperation.hpp"
#include "types/operations/unary_operations/UnaryOperation.hpp"
+#include "utility/BulkIoConfiguration.hpp"
#include "utility/PtrList.hpp"
#include "utility/PtrVector.hpp"
#include "utility/SqlError.hpp"
@@ -143,6 +145,45 @@
namespace L = ::quickstep::optimizer::logical;
namespace S = ::quickstep::serialization;
+namespace {
+
+attribute_id GetAttributeIdFromName(
+ const PtrList<ParseAttributeDefinition> &attribute_definition_list,
+ const std::string &attribute_name) {
+ const std::string lower_attribute_name = ToLower(attribute_name);
+
+ attribute_id attr_id = 0;
+ for (const ParseAttributeDefinition &attribute_definition : attribute_definition_list) {
+ if (lower_attribute_name == ToLower(attribute_definition.name()->value())) {
+ return attr_id;
+ }
+
+ ++attr_id;
+ }
+
+ return kInvalidAttributeID;
+}
+
+const ParseString* GetKeyValueString(const ParseKeyValue &key_value) {
+ if (key_value.getKeyValueType() != ParseKeyValue::kStringString) {
+ THROW_SQL_ERROR_AT(&key_value)
+ << "Invalid value type for " << key_value.key()->value()
+ << ", expected a string.";
+ }
+ return static_cast<const ParseKeyStringValue&>(key_value).value();
+}
+
+bool GetKeyValueBool(const ParseKeyValue &key_value) {
+ if (key_value.getKeyValueType() != ParseKeyValue::kStringBool) {
+ THROW_SQL_ERROR_AT(&key_value)
+ << "Invalid value for " << key_value.key()->value()
+ << ", expected true or false.";
+ }
+ return static_cast<const ParseKeyBoolValue&>(key_value).value();
+}
+
+} // namespace
+
struct Resolver::ExpressionResolutionInfo {
/**
* @brief Constructs an ExpressionResolutionInfo that disallows aggregate
@@ -316,11 +357,25 @@
L::LogicalPtr Resolver::resolve(const ParseStatement &parse_query) {
switch (parse_query.getStatementType()) {
- case ParseStatement::kCopyFrom:
- context_->set_is_catalog_changed();
- logical_plan_ = resolveCopyFrom(
- static_cast<const ParseStatementCopyFrom&>(parse_query));
+ case ParseStatement::kCopy: {
+ const ParseStatementCopy ©_statemnt =
+ static_cast<const ParseStatementCopy&>(parse_query);
+ if (copy_statemnt.getCopyDirection() == ParseStatementCopy::kFrom) {
+ context_->set_is_catalog_changed();
+ logical_plan_ = resolveCopyFrom(copy_statemnt);
+ } else {
+ DCHECK(copy_statemnt.getCopyDirection() == ParseStatementCopy::kTo);
+ if (copy_statemnt.with_clause() != nullptr) {
+ resolveWithClause(*copy_statemnt.with_clause());
+ }
+ logical_plan_ = resolveCopyTo(copy_statemnt);
+
+ if (copy_statemnt.with_clause() != nullptr) {
+ reportIfWithClauseUnused(*copy_statemnt.with_clause());
+ }
+ }
break;
+ }
case ParseStatement::kCreateTable:
context_->set_is_catalog_changed();
logical_plan_ = resolveCreateTable(
@@ -359,16 +414,7 @@
logical_plan_ = resolveInsertSelection(insert_selection_statement);
if (insert_selection_statement.with_clause() != nullptr) {
- // Report an error if there is a WITH query that is not actually used.
- if (!with_queries_info_.unreferenced_query_indexes.empty()) {
- int unreferenced_with_query_index = *with_queries_info_.unreferenced_query_indexes.begin();
- const ParseSubqueryTableReference &unreferenced_with_query =
- (*insert_selection_statement.with_clause())[unreferenced_with_query_index];
- THROW_SQL_ERROR_AT(&unreferenced_with_query)
- << "WITH query "
- << unreferenced_with_query.table_reference_signature()->table_alias()->value()
- << " is defined but not used";
- }
+ reportIfWithClauseUnused(*insert_selection_statement.with_clause());
}
}
break;
@@ -385,16 +431,7 @@
nullptr /* type_hints */,
nullptr /* parent_resolver */);
if (set_operation_statement.with_clause() != nullptr) {
- // Report an error if there is a WITH query that is not actually used.
- if (!with_queries_info_.unreferenced_query_indexes.empty()) {
- int unreferenced_with_query_index = *with_queries_info_.unreferenced_query_indexes.begin();
- const ParseSubqueryTableReference &unreferenced_with_query =
- (*set_operation_statement.with_clause())[unreferenced_with_query_index];
- THROW_SQL_ERROR_AT(&unreferenced_with_query)
- << "WITH query "
- << unreferenced_with_query.table_reference_signature()->table_alias()->value()
- << " is defined but not used";
- }
+ reportIfWithClauseUnused(*set_operation_statement.with_clause());
}
break;
}
@@ -418,27 +455,156 @@
}
L::LogicalPtr Resolver::resolveCopyFrom(
- const ParseStatementCopyFrom ©_from_statement) {
- // Default parameters.
- std::string column_delimiter_ = "\t";
- bool escape_strings_ = true;
+ const ParseStatementCopy ©_from_statement) {
+ DCHECK(copy_from_statement.getCopyDirection() == ParseStatementCopy::kFrom);
+ const PtrList<ParseKeyValue> *params = copy_from_statement.params();
- const ParseCopyFromParams *params = copy_from_statement.params();
+ BulkIoFormat file_format = BulkIoFormat::kText;
if (params != nullptr) {
- if (params->delimiter != nullptr) {
- column_delimiter_ = params->delimiter->value();
- if (column_delimiter_.size() != 1) {
- THROW_SQL_ERROR_AT(params->delimiter)
- << "DELIMITER is not a single character";
+ for (const ParseKeyValue ¶m : *params) {
+ const std::string &key = ToLower(param.key()->value());
+ if (key == "format") {
+ const ParseString *parse_format = GetKeyValueString(param);
+ const std::string format = ToLower(parse_format->value());
+ // TODO(jianqiao): Support other bulk load formats such as CSV.
+ if (format != "text") {
+ THROW_SQL_ERROR_AT(parse_format) << "Unsupported file format: " << format;
+ }
+ // Update file_format when other formats get supported.
+ break;
}
}
- escape_strings_ = params->escape_strings;
+ }
+
+ std::unique_ptr<BulkIoConfiguration> options =
+ std::make_unique<BulkIoConfiguration>(file_format);
+ if (params != nullptr) {
+ for (const ParseKeyValue ¶m : *params) {
+ const std::string key = ToLower(param.key()->value());
+ if (key == "delimiter") {
+ const ParseString *parse_delimiter = GetKeyValueString(param);
+ const std::string &delimiter = parse_delimiter->value();
+ if (delimiter.size() != 1u) {
+ THROW_SQL_ERROR_AT(parse_delimiter)
+ << "DELIMITER is not a single character";
+ }
+ options->setDelimiter(delimiter.front());
+ } else if (key == "escape_strings") {
+ options->setEscapeStrings(GetKeyValueBool(param));
+ } else if (key != "format") {
+ THROW_SQL_ERROR_AT(¶m) << "Unsupported copy option: " << key;
+ }
+ }
}
return L::CopyFrom::Create(resolveRelationName(copy_from_statement.relation_name()),
- copy_from_statement.source_filename()->value(),
- column_delimiter_[0],
- escape_strings_);
+ copy_from_statement.file_name()->value(),
+ BulkIoConfigurationPtr(options.release()));
+}
+
+L::LogicalPtr Resolver::resolveCopyTo(
+ const ParseStatementCopy ©_to_statement) {
+ DCHECK(copy_to_statement.getCopyDirection() == ParseStatementCopy::kTo);
+ const PtrList<ParseKeyValue> *params = copy_to_statement.params();
+
+ // Check if copy format is explicitly specified.
+ BulkIoFormat file_format = BulkIoFormat::kText;
+ bool format_specified = false;
+ if (params != nullptr) {
+ for (const ParseKeyValue ¶m : *params) {
+ const std::string &key = ToLower(param.key()->value());
+ if (key == "format") {
+ const ParseString *parse_format = GetKeyValueString(param);
+ const std::string format = ToLower(parse_format->value());
+ if (format == "csv") {
+ file_format = BulkIoFormat::kCsv;
+ } else if (format == "text") {
+ file_format = BulkIoFormat::kText;
+ } else {
+ THROW_SQL_ERROR_AT(parse_format) << "Unsupported file format: " << format;
+ }
+ format_specified = true;
+ break;
+ }
+ }
+ }
+
+ const std::string &file_name = copy_to_statement.file_name()->value();
+ if (file_name.length() <= 1u) {
+ THROW_SQL_ERROR_AT(copy_to_statement.file_name())
+ << "File name can not be empty";
+ }
+
+ // Infer copy format from file name extension.
+ if (!format_specified) {
+ if (file_name.length() > 4u) {
+ if (ToLower(file_name.substr(file_name.length() - 4)) == ".csv") {
+ file_format = BulkIoFormat::kCsv;
+ }
+ }
+ }
+
+ // Resolve the copy options.
+ std::unique_ptr<BulkIoConfiguration> options =
+ std::make_unique<BulkIoConfiguration>(file_format);
+ if (params != nullptr) {
+ for (const ParseKeyValue ¶m : *params) {
+ const std::string key = ToLower(param.key()->value());
+ if (key == "delimiter") {
+ const ParseString *parse_delimiter = GetKeyValueString(param);
+ const std::string &delimiter = parse_delimiter->value();
+ if (delimiter.size() != 1u) {
+ THROW_SQL_ERROR_AT(parse_delimiter)
+ << "DELIMITER is not a single character";
+ }
+ options->setDelimiter(delimiter.front());
+ } else if (file_format == BulkIoFormat::kText && key == "escape_strings") {
+ options->setEscapeStrings(GetKeyValueBool(param));
+ } else if (file_format == BulkIoFormat::kCsv && key == "header") {
+ options->setHeader(GetKeyValueBool(param));
+ } else if (file_format == BulkIoFormat::kCsv && key == "quote") {
+ const ParseString *parse_quote = GetKeyValueString(param);
+ const std::string "e = parse_quote->value();
+ if (quote.size() != 1u) {
+ THROW_SQL_ERROR_AT(parse_quote)
+ << "QUOTE is not a single character";
+ }
+ options->setQuoteCharacter(quote.front());
+ } else if (key == "null_string") {
+ const ParseString *parse_null_string = GetKeyValueString(param);
+ options->setNullString(parse_null_string->value());
+ } else if (key != "format") {
+ THROW_SQL_ERROR_AT(¶m)
+ << "Unsupported copy option \"" << key
+ << "\" for file format " << options->getFormatName();
+ }
+ }
+ }
+
+ // Resolve the source relation.
+ L::LogicalPtr input;
+ if (copy_to_statement.set_operation_query() != nullptr) {
+ input = resolveSetOperation(*copy_to_statement.set_operation_query(),
+ "" /* set_operation_name */,
+ nullptr /* type_hints */,
+ nullptr /* parent_resolver */);
+ } else {
+ const ParseString *relation_name = copy_to_statement.relation_name();
+ DCHECK(relation_name != nullptr);
+ ParseSimpleTableReference table_reference(
+ relation_name->line_number(),
+ relation_name->column_number(),
+ new ParseString(relation_name->line_number(),
+ relation_name->column_number(),
+ relation_name->value()),
+ nullptr /* sample */);
+ NameResolver name_resolver;
+ input = resolveTableReference(table_reference, &name_resolver);
+ }
+
+ return L::CopyTo::Create(input,
+ copy_to_statement.file_name()->value(),
+ BulkIoConfigurationPtr(options.release()));
}
L::LogicalPtr Resolver::resolveCreateTable(
@@ -491,26 +657,6 @@
return L::CreateTable::Create(relation_name, attributes, block_properties, partition_scheme_header_proto);
}
-namespace {
-
-attribute_id GetAttributeIdFromName(const PtrList<ParseAttributeDefinition> &attribute_definition_list,
- const std::string &attribute_name) {
- const std::string lower_attribute_name = ToLower(attribute_name);
-
- attribute_id attr_id = 0;
- for (const ParseAttributeDefinition &attribute_definition : attribute_definition_list) {
- if (lower_attribute_name == ToLower(attribute_definition.name()->value())) {
- return attr_id;
- }
-
- ++attr_id;
- }
-
- return kInvalidAttributeID;
-}
-
-} // namespace
-
StorageBlockLayoutDescription* Resolver::resolveBlockProperties(
const ParseStatementCreateTable &create_table_statement) {
const ParseBlockProperties *block_properties
@@ -1595,6 +1741,20 @@
}
}
+void Resolver::reportIfWithClauseUnused(
+ const PtrVector<ParseSubqueryTableReference> &with_list) const {
+ if (!with_queries_info_.unreferenced_query_indexes.empty()) {
+ const int unreferenced_with_query_index =
+ *with_queries_info_.unreferenced_query_indexes.begin();
+ const ParseSubqueryTableReference &unreferenced_with_query =
+ with_list[unreferenced_with_query_index];
+ THROW_SQL_ERROR_AT(&unreferenced_with_query)
+ << "WITH query "
+ << unreferenced_with_query.table_reference_signature()->table_alias()->value()
+ << " is defined but not used";
+ }
+}
+
void Resolver::validateSelectExpressionsForAggregation(
const ParseSelectionClause &parse_selection,
const std::vector<E::NamedExpressionPtr> &select_list_expressions,
diff --git a/query_optimizer/resolver/Resolver.hpp b/query_optimizer/resolver/Resolver.hpp
index 1ae565a..1784782 100644
--- a/query_optimizer/resolver/Resolver.hpp
+++ b/query_optimizer/resolver/Resolver.hpp
@@ -55,7 +55,7 @@
class ParseSimpleTableReference;
class ParseSubqueryTableReference;
class ParseStatement;
-class ParseStatementCopyFrom;
+class ParseStatementCopy;
class ParseStatementCreateTable;
class ParseStatementCreateIndex;
class ParseStatementDelete;
@@ -283,7 +283,16 @@
* @return A logical plan for the COPY FROM query.
*/
logical::LogicalPtr resolveCopyFrom(
- const ParseStatementCopyFrom ©_from_statement);
+ const ParseStatementCopy ©_from_statement);
+
+ /**
+ * @brief Resolves a COPY TO query and returns a logical plan.
+ *
+ * @param copy_to_statement The COPY TO parse tree.
+ * @return A logical plan for the COPY TO query.
+ */
+ logical::LogicalPtr resolveCopyTo(
+ const ParseStatementCopy ©_to_statement);
/**
* @brief Resolves a UPDATE query and returns a logical plan.
@@ -621,6 +630,14 @@
static std::string GenerateOrderingAttributeAlias(int index);
/**
+ * @brief Reports an error if there is a WITH query that is not actually used.
+ *
+ * @param with_list The list of subqueries in WITH clause.
+ */
+ void reportIfWithClauseUnused(
+ const PtrVector<ParseSubqueryTableReference> &with_list) const;
+
+ /**
* @brief Validates each SELECT-list expression to ensure that it does not
* reference a named expression with an ID not in \p valid_expr_id_set.
*
diff --git a/query_optimizer/strategy/CMakeLists.txt b/query_optimizer/strategy/CMakeLists.txt
index e011126..20a4eb4 100644
--- a/query_optimizer/strategy/CMakeLists.txt
+++ b/query_optimizer/strategy/CMakeLists.txt
@@ -76,6 +76,7 @@
quickstep_queryoptimizer_expressions_AttributeReference
quickstep_queryoptimizer_expressions_ExpressionUtil
quickstep_queryoptimizer_logical_CopyFrom
+ quickstep_queryoptimizer_logical_CopyTo
quickstep_queryoptimizer_logical_CreateIndex
quickstep_queryoptimizer_logical_CreateTable
quickstep_queryoptimizer_logical_DeleteTuples
@@ -95,6 +96,7 @@
quickstep_queryoptimizer_logical_WindowAggregate
quickstep_queryoptimizer_physical_Aggregate
quickstep_queryoptimizer_physical_CopyFrom
+ quickstep_queryoptimizer_physical_CopyTo
quickstep_queryoptimizer_physical_CreateIndex
quickstep_queryoptimizer_physical_CreateTable
quickstep_queryoptimizer_physical_DeleteTuples
diff --git a/query_optimizer/strategy/OneToOne.cpp b/query_optimizer/strategy/OneToOne.cpp
index af4e150..3cfe013 100644
--- a/query_optimizer/strategy/OneToOne.cpp
+++ b/query_optimizer/strategy/OneToOne.cpp
@@ -27,6 +27,7 @@
#include "query_optimizer/expressions/AttributeReference.hpp"
#include "query_optimizer/expressions/ExpressionUtil.hpp"
#include "query_optimizer/logical/CopyFrom.hpp"
+#include "query_optimizer/logical/CopyTo.hpp"
#include "query_optimizer/logical/CreateIndex.hpp"
#include "query_optimizer/logical/CreateTable.hpp"
#include "query_optimizer/logical/DeleteTuples.hpp"
@@ -45,6 +46,7 @@
#include "query_optimizer/logical/WindowAggregate.hpp"
#include "query_optimizer/physical/Aggregate.hpp"
#include "query_optimizer/physical/CopyFrom.hpp"
+#include "query_optimizer/physical/CopyTo.hpp"
#include "query_optimizer/physical/CreateIndex.hpp"
#include "query_optimizer/physical/CreateTable.hpp"
#include "query_optimizer/physical/DeleteTuples.hpp"
@@ -104,19 +106,28 @@
case L::LogicalType::kCopyFrom: {
const L::CopyFromPtr copy_from =
std::static_pointer_cast<const L::CopyFrom>(logical_input);
- *physical_output = P::CopyFrom::Create(
- copy_from->catalog_relation(), copy_from->file_name(),
- copy_from->column_delimiter(), copy_from->escape_strings());
+ *physical_output = P::CopyFrom::Create(copy_from->catalog_relation(),
+ copy_from->file_name(),
+ copy_from->options());
+ return true;
+ }
+ case L::LogicalType::kCopyTo: {
+ const L::CopyToPtr copy_to =
+ std::static_pointer_cast<const L::CopyTo>(logical_input);
+ *physical_output = P::CopyTo::Create(
+ physical_mapper_->createOrGetPhysicalFromLogical(copy_to->input()),
+ copy_to->file_name(),
+ copy_to->options());
return true;
}
case L::LogicalType::kCreateIndex: {
const L::CreateIndexPtr create_index =
std::static_pointer_cast<const L::CreateIndex>(logical_input);
- *physical_output = P::CreateIndex::Create(physical_mapper_->createOrGetPhysicalFromLogical(
- create_index->input()),
- create_index->index_name(),
- create_index->index_attributes(),
- create_index->index_description());
+ *physical_output = P::CreateIndex::Create(
+ physical_mapper_->createOrGetPhysicalFromLogical(create_index->input()),
+ create_index->index_name(),
+ create_index->index_attributes(),
+ create_index->index_description());
return true;
}
case L::LogicalType::kCreateTable: {
diff --git a/query_optimizer/tests/ExecutionGeneratorTestRunner.cpp b/query_optimizer/tests/ExecutionGeneratorTestRunner.cpp
index ee9bee7..050ef0d 100644
--- a/query_optimizer/tests/ExecutionGeneratorTestRunner.cpp
+++ b/query_optimizer/tests/ExecutionGeneratorTestRunner.cpp
@@ -62,6 +62,9 @@
MemStream output_stream;
sql_parser_.feedNextBuffer(new std::string(input));
+ // Redirect stderr to output_stream.
+ stderr = output_stream.file();
+
while (true) {
ParseResult result = sql_parser_.getNextStatement();
if (result.condition != ParseResult::kSuccess) {
@@ -71,8 +74,6 @@
break;
} else {
const ParseStatement &parse_statement = *result.parsed_statement;
- std::printf("%s\n", parse_statement.toString().c_str());
-
const CatalogRelation *query_result_relation = nullptr;
try {
OptimizerContext optimizer_context;
diff --git a/query_optimizer/tests/execution_generator/CMakeLists.txt b/query_optimizer/tests/execution_generator/CMakeLists.txt
index 09a7647..ebcb0b6 100644
--- a/query_optimizer/tests/execution_generator/CMakeLists.txt
+++ b/query_optimizer/tests/execution_generator/CMakeLists.txt
@@ -20,6 +20,11 @@
"${CMAKE_CURRENT_SOURCE_DIR}/CommonSubexpression.test"
"${CMAKE_CURRENT_BINARY_DIR}/CommonSubexpression.test"
"${CMAKE_CURRENT_BINARY_DIR}/CommonSubexpression/")
+add_test(quickstep_queryoptimizer_tests_executiongenerator_copy
+ "../quickstep_queryoptimizer_tests_ExecutionGeneratorTest"
+ "${CMAKE_CURRENT_SOURCE_DIR}/Copy.test"
+ "${CMAKE_CURRENT_BINARY_DIR}/Copy.test"
+ "${CMAKE_CURRENT_BINARY_DIR}/Copy/")
add_test(quickstep_queryoptimizer_tests_executiongenerator_create
"../quickstep_queryoptimizer_tests_ExecutionGeneratorTest"
"${CMAKE_CURRENT_SOURCE_DIR}/Create.test"
@@ -158,6 +163,7 @@
# Create the folders where the unit tests will store their data blocks for the
# duration of their test.
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CommonSubexpression)
+file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Copy)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Create)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Delete)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Distinct)
diff --git a/query_optimizer/tests/execution_generator/Copy.test b/query_optimizer/tests/execution_generator/Copy.test
new file mode 100644
index 0000000..fa892c1
--- /dev/null
+++ b/query_optimizer/tests/execution_generator/Copy.test
@@ -0,0 +1,127 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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.
+
+CREATE TABLE source (
+ int_col INT NULL,
+ date_col DATE NULL,
+ char_col CHAR(16),
+ varchar_col VARCHAR(16)
+);
+
+INSERT INTO source VALUES(1, '2000-01-01', 'aa', 'aaa');
+INSERT INTO source VALUES(2, '2000-02-02', 'bb', 'bbb');
+INSERT INTO source VALUES(3, '2000-03-03', 'cc', 'ccc');
+INSERT INTO source VALUES(4, '2000-04-04', 'aa', 'ddd');
+INSERT INTO source VALUES(5, '2000-05-05', 'bb', 'eee');
+INSERT INTO source VALUES(6, '2000-06-06', 'cc', 'fff');
+
+COPY source TO stderr WITH (DELIMITER '|');
+--
+1|2000-01-01|aa|aaa
+2|2000-02-02|bb|bbb
+3|2000-03-03|cc|ccc
+4|2000-04-04|aa|ddd
+5|2000-05-05|bb|eee
+6|2000-06-06|cc|fff
+==
+
+COPY
+ SELECT char_col, SUM(int_col)
+ FROM source
+ GROUP BY char_col
+TO stderr;
+--
+aa 5
+bb 7
+cc 9
+==
+
+COPY
+ SELECT * FROM (
+ SELECT -int_col * 1000, 'Negative' FROM source
+ UNION ALL
+ SELECT int_col * 1000, 'Positive' FROM source
+ ) AS t(VALUE, SIGN)
+ ORDER BY value
+TO stderr WITH (FORMAT 'CSV', DELIMITER e'\t');
+--
+VALUE SIGN
+-6000 Negative
+-5000 Negative
+-4000 Negative
+-3000 Negative
+-2000 Negative
+-1000 Negative
+1000 Positive
+2000 Positive
+3000 Positive
+4000 Positive
+5000 Positive
+6000 Positive
+==
+
+# WITH clause.
+WITH r(x, y) AS (
+ SELECT i, i + 1
+ FROM generate_series(0, 9) AS g(i)
+)
+COPY
+ SELECT x * y AS value FROM r ORDER BY value
+TO stderr;
+--
+0
+2
+6
+12
+20
+30
+42
+56
+72
+90
+==
+
+
+# Test handling of NULL values and special characters.
+DELETE FROM source;
+INSERT INTO source VALUES(1, '2000-01-01', 'abc', 'def');
+INSERT INTO source VALUES(2, '2000-02-02', e'a\ta', '|,|');
+INSERT INTO source VALUES(NULL, NULL, e'b\nb', '"""');
+
+COPY source TO stderr;
+--
+1 2000-01-01 abc def
+2 2000-02-02 a\ta |,|
+\N \N b\nb """
+==
+
+COPY source TO stderr WITH (FORMAT 'CSV', HEADER FALSE);
+--
+1,2000-01-01,abc,def
+2,2000-02-02,a a,"|,|"
+,,"b
+b",""""""""
+==
+
+COPY source TO stderr WITH (FORMAT 'CSV', DELIMITER '|', NULL_STRING '.na', HEADER TRUE);
+--
+int_col|date_col|char_col|varchar_col
+1|2000-01-01|abc|def
+2|2000-02-02|a a|"|,|"
+.na|.na|"b
+b"|""""""""
+==
diff --git a/query_optimizer/tests/physical_generator/Copy.test b/query_optimizer/tests/physical_generator/Copy.test
index 2f66415..3d76373 100644
--- a/query_optimizer/tests/physical_generator/Copy.test
+++ b/query_optimizer/tests/physical_generator/Copy.test
@@ -26,7 +26,7 @@
+-[]
[Physical Plan]
TopLevelPlan
-+-plan=CopyFrom[relation=Test,file_name=test.txt,column_delimiter= ,
++-plan=CopyFrom[relation=Test,file_name=test.txt,column_delimiter="\t",
| escape_strings=true]
+-output_attributes=
+-[]
@@ -42,7 +42,7 @@
+-[]
[Physical Plan]
TopLevelPlan
-+-plan=CopyFrom[relation=Test,file_name=test.txt,column_delimiter=d,
++-plan=CopyFrom[relation=Test,file_name=test.txt,column_delimiter="d",
| escape_strings=false]
+-output_attributes=
+-[]
diff --git a/query_optimizer/tests/resolver/Copy.test b/query_optimizer/tests/resolver/Copy.test
index c2ae91a..d68e18f 100644
--- a/query_optimizer/tests/resolver/Copy.test
+++ b/query_optimizer/tests/resolver/Copy.test
@@ -16,7 +16,7 @@
# under the License.
[default initial_logical_plan]
-copy test from 'test.txt'
+COPY test FROM 'test.txt'
--
TopLevelPlan
+-plan=CopyFrom[relation=Test,file_name=test.txt,column_delimiter="\t",
@@ -25,14 +25,14 @@
+-[]
==
-copy tESt from 'test.txt' with (delimiter '123')
+COPY tESt FROM 'test.txt' WITH (delimiter '123')
--
ERROR: DELIMITER is not a single character (1 : 43)
-copy tESt from 'test.txt' with (delimiter '123')
+COPY tESt FROM 'test.txt' WITH (delimiter '123')
^
==
-copy tESt from 'test.txt' with (delimiter 'd', escape_strings false)
+COPY tESt FROM 'test.txt' WITH (delimiter 'd', escape_strings false)
--
TopLevelPlan
+-plan=CopyFrom[relation=Test,file_name=test.txt,column_delimiter="d",
@@ -41,8 +41,160 @@
+-[]
==
-copy undefined_table from 'test.txt'
+COPY test TO 'test.txt';
+--
+TopLevelPlan
++-plan=CopyTo[file_name=@test.txt,format=TEXT,column_delimiter="\t",
+| escape_strings=true,null_string=\N]
+| +-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]
++-output_attributes=
+ +-[]
+==
+
+COPY test TO stdout WITH (FORMAT 'CSV');
+--
+TopLevelPlan
++-plan=CopyTo[file_name=$stdout,format=CSV,column_delimiter=",",header=true,
+| quote="]
+| +-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]
++-output_attributes=
+ +-[]
+==
+
+COPY
+ SELECT SUM(int_col) AS sum_int,
+ AVG(double_col) AS avg_dbl
+ FROM test
+ GROUP BY char_col
+ UNION ALL
+ SELECT 1, 2.0
+ FROM generate_series(1, 1)
+TO 'test.txt' WITH (DELIMITER ',');
+--
+TopLevelPlan
++-plan=CopyTo[file_name=@test.txt,format=TEXT,column_delimiter=",",
+| escape_strings=true,null_string=\N]
+| +-input=UnionAll[set_operation_type=UnionAll]
+| +-operands=
+| | +-Project
+| | | +-input=Project
+| | | | +-input=Aggregate
+| | | | | +-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]
+| | | | | +-grouping_expressions=
+| | | | | | +-AttributeReference[id=4,name=char_col,relation=test,
+| | | | | | type=Char(20)]
+| | | | | +-aggregate_expressions=
+| | | | | +-Alias[id=6,name=,alias=$aggregate0,relation=$aggregate,
+| | | | | | type=Long NULL]
+| | | | | | +-AggregateFunction[function=SUM]
+| | | | | | +-AttributeReference[id=0,name=int_col,relation=test,
+| | | | | | type=Int NULL]
+| | | | | +-Alias[id=7,name=,alias=$aggregate1,relation=$aggregate,
+| | | | | type=Double NULL]
+| | | | | +-AggregateFunction[function=AVG]
+| | | | | +-AttributeReference[id=3,name=double_col,relation=test,
+| | | | | type=Double NULL]
+| | | | +-project_list=
+| | | | +-Alias[id=6,name=sum_int,relation=,type=Long NULL]
+| | | | | +-AttributeReference[id=6,name=,alias=$aggregate0,
+| | | | | relation=$aggregate,type=Long NULL]
+| | | | +-Alias[id=7,name=avg_dbl,relation=,type=Double NULL]
+| | | | +-AttributeReference[id=7,name=,alias=$aggregate1,
+| | | | relation=$aggregate,type=Double NULL]
+| | | +-project_list=
+| | | +-AttributeReference[id=6,name=sum_int,relation=,type=Long NULL]
+| | | +-AttributeReference[id=7,name=avg_dbl,relation=,type=Double NULL]
+| | +-Project
+| | +-input=Project
+| | | +-input=TableGenerator[function_name=generate_series]
+| | | | +-AttributeReference[id=8,name=generate_series,
+| | | | relation=generate_series,type=Int]
+| | | +-project_list=
+| | | +-Alias[id=9,name=,alias=1,relation=,type=Int]
+| | | | +-Literal[value=1,type=Int]
+| | | +-Alias[id=10,name=,alias=2.0,relation=,type=Double]
+| | | +-Literal[value=2,type=Double]
+| | +-project_list=
+| | +-Alias[id=11,name=,alias=1,relation=,type=Long NULL]
+| | | +-Cast[target_type=Long NULL]
+| | | +-operand=AttributeReference[id=9,name=,alias=1,relation=,type=Int]
+| | +-Alias[id=12,name=,alias=2.0,relation=,type=Double NULL]
+| | +-Cast[target_type=Double NULL]
+| | +-operand=AttributeReference[id=10,name=,alias=2.0,relation=,
+| | type=Double]
+| +-project_attributes=
+| +-AttributeReference[id=13,name=sum_int,relation=,type=Long NULL]
+| +-AttributeReference[id=14,name=avg_dbl,relation=,type=Double NULL]
++-output_attributes=
+ +-[]
+==
+
+COPY undefined_table FROM 'test.txt'
--
ERROR: Unrecognized relation undefined_table (1 : 6)
-copy undefined_table from 'test.txt...
+COPY undefined_table FROM 'test.txt...
^
+==
+
+COPY test FROM 'test.txt' WITH (FORMAT 'CSV')
+--
+ERROR: Unsupported file format: csv (1 : 40)
+COPY test FROM 'test.txt' WITH (FORMAT 'CSV')
+ ^
+==
+
+COPY test FROM 'test.txt' WITH (XXX 'YY');
+--
+ERROR: Unsupported copy option: xxx (1 : 33)
+COPY test FROM 'test.txt' WITH (XXX 'YY');
+ ^
+==
+
+COPY test TO 'test.txt' WITH (QUOTE '$');
+--
+ERROR: Unsupported copy option "quote" for file format TEXT (1 : 31)
+COPY test TO 'test.txt' WITH (QUOTE '$');
+ ^
+==
+
+COPY test TO 'test.txt' WITH (FORMAT 'CSV', ESCAPE_STRINGS TRUE);
+--
+ERROR: Unsupported copy option "escape_strings" for file format CSV (1 : 45)
+... test TO 'test.txt' WITH (FORMAT 'CSV', ESCAPE_STRINGS TRUE);
+ ^
+==
+
+COPY test TO 'test.txt' WITH (FORMAT CSV, QUOTE '$$');
+--
+ERROR: QUOTE is not a single character (1 : 49)
+...test TO 'test.txt' WITH (FORMAT CSV, QUOTE '$$');
+ ^
+==
+
+COPY test TO 'test.txt' WITH (FORMAT 'TEXT', QUOTE '"');
+--
+ERROR: Unsupported copy option "quote" for file format TEXT (1 : 46)
+...test TO 'test.txt' WITH (FORMAT 'TEXT', QUOTE '"');
+ ^
+==
diff --git a/relational_operators/CMakeLists.txt b/relational_operators/CMakeLists.txt
index 57ba9f9..7b9ed96 100644
--- a/relational_operators/CMakeLists.txt
+++ b/relational_operators/CMakeLists.txt
@@ -71,6 +71,7 @@
SortMergeRunOperatorHelpers.hpp)
add_library(quickstep_relationaloperators_SortRunGenerationOperator SortRunGenerationOperator.cpp
SortRunGenerationOperator.hpp)
+add_library(quickstep_relationaloperators_TableExportOperator TableExportOperator.cpp TableExportOperator.hpp)
add_library(quickstep_relationaloperators_TableGeneratorOperator TableGeneratorOperator.cpp TableGeneratorOperator.hpp)
add_library(quickstep_relationaloperators_TextScanOperator TextScanOperator.cpp TextScanOperator.hpp)
add_library(quickstep_relationaloperators_UnionAllOperator UnionAllOperator.cpp UnionAllOperator.hpp)
@@ -473,6 +474,26 @@
quickstep_utility_Macros
quickstep_utility_SortConfiguration
tmb)
+target_link_libraries(quickstep_relationaloperators_TableExportOperator
+ glog
+ quickstep_catalog_CatalogAttribute
+ quickstep_catalog_CatalogRelation
+ quickstep_catalog_CatalogTypedefs
+ quickstep_queryexecution_QueryContext
+ quickstep_queryexecution_WorkOrderProtosContainer
+ quickstep_queryexecution_WorkOrdersContainer
+ quickstep_relationaloperators_RelationalOperator
+ quickstep_relationaloperators_WorkOrder
+ quickstep_relationaloperators_WorkOrder_proto
+ quickstep_storage_StorageBlockInfo
+ quickstep_storage_StorageConstants
+ quickstep_storage_ValueAccessor
+ quickstep_threading_SpinMutex
+ quickstep_types_TypedValue
+ quickstep_types_containers_Tuple
+ quickstep_utility_BulkIoConfiguration
+ quickstep_utility_Macros
+ quickstep_utility_StringUtil)
target_link_libraries(quickstep_relationaloperators_TableGeneratorOperator
glog
quickstep_catalog_CatalogRelation
@@ -508,6 +529,7 @@
quickstep_types_containers_ColumnVector
quickstep_types_containers_ColumnVectorsValueAccessor
quickstep_types_containers_Tuple
+ quickstep_utility_BulkIoConfiguration
quickstep_utility_Glob
quickstep_utility_Macros
tmb)
@@ -637,6 +659,7 @@
quickstep_relationaloperators_SortMergeRunOperatorHelpers
quickstep_relationaloperators_SortMergeRunOperator_proto
quickstep_relationaloperators_SortRunGenerationOperator
+ quickstep_relationaloperators_TableExportOperator
quickstep_relationaloperators_TableGeneratorOperator
quickstep_relationaloperators_TextScanOperator
quickstep_relationaloperators_UnionAllOperator
diff --git a/relational_operators/RelationalOperator.hpp b/relational_operators/RelationalOperator.hpp
index 8035685..8eb59f0 100644
--- a/relational_operators/RelationalOperator.hpp
+++ b/relational_operators/RelationalOperator.hpp
@@ -86,6 +86,7 @@
kSelect,
kSortMergeRun,
kSortRunGeneration,
+ kTableExport,
kTableGenerator,
kTextScan,
kUnionAll,
diff --git a/relational_operators/TableExportOperator.cpp b/relational_operators/TableExportOperator.cpp
new file mode 100644
index 0000000..f6a73bf
--- /dev/null
+++ b/relational_operators/TableExportOperator.cpp
@@ -0,0 +1,336 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 "relational_operators/TableExportOperator.hpp"
+
+#include <cstdio>
+#include <exception>
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "catalog/CatalogAttribute.hpp"
+#include "query_execution/QueryContext.hpp"
+#include "query_execution/WorkOrderProtosContainer.hpp"
+#include "query_execution/WorkOrdersContainer.hpp"
+#include "relational_operators/WorkOrder.pb.h"
+#include "storage/StorageBlockInfo.hpp"
+#include "storage/ValueAccessor.hpp"
+#include "threading/SpinMutex.hpp"
+#include "types/TypedValue.hpp"
+#include "types/containers/Tuple.hpp"
+#include "utility/BulkIoConfiguration.hpp"
+#include "utility/StringUtil.hpp"
+
+#include "glog/logging.h"
+
+#include "tmb/id_typedefs.h"
+
+namespace quickstep {
+
+TableExportOperator::~TableExportOperator() {
+ if (file_ != nullptr && file_ != stdout && file_ != stderr) {
+ std::fclose(file_);
+ }
+ file_ = nullptr;
+}
+
+bool TableExportOperator::getAllWorkOrders(
+ WorkOrdersContainer *container,
+ QueryContext *query_context,
+ StorageManager *storage_manager,
+ const tmb::client_id scheduler_client_id,
+ tmb::MessageBus *bus) {
+ const auto add_work_order =
+ [&](const block_id input_block_id, // NOLINT(build/c++11)
+ const bool is_first_work_order) -> void {
+ std::unique_ptr<std::string> output_buffer = std::make_unique<std::string>();
+ container->addNormalWorkOrder(
+ new TableExportToStringWorkOrder(query_id_,
+ input_relation_,
+ input_block_id,
+ options_->getFormat(),
+ is_first_work_order && options_->hasHeader(),
+ options_->getDelimiter(),
+ options_->escapeStrings(),
+ options_->getQuoteCharacter(),
+ options_->getNullString(),
+ output_buffer.get(),
+ op_index_,
+ scheduler_client_id,
+ storage_manager,
+ bus),
+ op_index_);
+
+ SpinMutexLock lock(output_buffers_mutex_);
+ output_buffers_.emplace(input_block_id, BlockBuffer(output_buffer.release()));
+ };
+
+ if (input_relation_is_stored_) {
+ if (!started_) {
+ for (std::size_t i = 0; i < input_relation_block_ids_.size(); ++i) {
+ add_work_order(input_relation_block_ids_[i], i == 0);
+ }
+ num_workorders_generated_ = input_relation_block_ids_.size();
+ started_ = true;
+ }
+ return true;
+ } else {
+ while (num_workorders_generated_ < input_relation_block_ids_.size()) {
+ add_work_order(input_relation_block_ids_[num_workorders_generated_],
+ num_workorders_generated_ == 0);
+ ++num_workorders_generated_;
+ }
+ return done_feeding_input_relation_;
+ }
+}
+
+bool TableExportOperator::getAllWorkOrderProtos(
+ WorkOrderProtosContainer *container) {
+ // TODO(quickstep-team): Implement TextExportOperator for the distributed case.
+ LOG(FATAL) << "TableExportOperator::getAllWorkOrderProtos() is not supported";
+}
+
+void TableExportOperator::receiveFeedbackMessage(
+ const WorkOrder::FeedbackMessage &msg) {
+ DCHECK(TableExportOperator::kBlockOutputMessage == msg.type());
+ DCHECK(msg.payload_size() == sizeof(block_id));
+
+ if (file_ == nullptr) {
+ const std::string lo_file_name = ToLower(file_name_);
+ if (lo_file_name == "$stdout") {
+ file_ = stdout;
+ } else if (lo_file_name == "$stderr") {
+ file_ = stderr;
+ } else {
+ file_ = std::fopen(file_name_.substr(1).c_str(), "wb");
+ // TODO(quickstep-team): Decent handling of exceptions at query runtime.
+ if (file_ == nullptr) {
+ throw std::runtime_error("Can not open file " + file_name_ + " for writing");
+ }
+ }
+ }
+
+ // Mark block done.
+ const block_id done_block_id = *static_cast<const block_id*>(msg.payload());
+ {
+ SpinMutexLock lock(output_buffers_mutex_);
+ DCHECK(output_buffers_.find(done_block_id) != output_buffers_.end());
+ output_buffers_.at(done_block_id).done = true;
+ }
+
+ // FIXME(jianqiao): Use work orders to perform the "write to file" operation
+ // instead of doing it here inside this thread -- as it may stall the scheduler.
+ while (num_blocks_written_ < num_workorders_generated_) {
+ // Write block exported strings to file in the same order as the blocks are
+ // in \p input_relation_block_ids_.
+ block_id next_block_id;
+ {
+ SpinMutexLock lock(block_ids_mutex_);
+ next_block_id = input_relation_block_ids_[num_blocks_written_];
+ }
+ std::unique_ptr<std::string> output_buffer;
+ {
+ SpinMutexLock lock(output_buffers_mutex_);
+ auto it = output_buffers_.find(next_block_id);
+ if (it == output_buffers_.end() || !it->second.done) {
+ break;
+ }
+ output_buffer = std::move(it->second.buffer);
+ output_buffers_.erase(it);
+ }
+ std::fwrite(output_buffer->c_str(), 1, output_buffer->length(), file_);
+ ++num_blocks_written_;
+ }
+}
+
+void TableExportToStringWorkOrder::execute() {
+ BlockReference block(
+ storage_manager_->getBlock(input_block_id_, input_relation_));
+ std::unique_ptr<ValueAccessor> accessor(
+ block->getTupleStorageSubBlock().createValueAccessor());
+
+ switch (format_) {
+ case BulkIoFormat::kCsv:
+ writeToString<&TableExportToStringWorkOrder::quoteCSVField>(
+ accessor.get(), output_buffer_);
+ break;
+ case BulkIoFormat::kText:
+ writeToString<&TableExportToStringWorkOrder::escapeTextField>(
+ accessor.get(), output_buffer_);
+ break;
+ default:
+ LOG(FATAL) << "Unsupported export format in TableExportWorkOrder::execute()";
+ }
+
+ // Send completion message to operator.
+ FeedbackMessage msg(TableExportOperator::kBlockOutputMessage,
+ getQueryID(),
+ operator_index_,
+ new block_id(input_block_id_),
+ sizeof(input_block_id_));
+ SendFeedbackMessage(
+ bus_, ClientIDMap::Instance()->getValue(), scheduler_client_id_, msg);
+}
+
+inline std::string TableExportToStringWorkOrder::quoteCSVField(
+ std::string &&field) const { // NOLINT(whitespace/operators)x
+ bool need_quote = false;
+ for (const char c : field) {
+ if (c == field_terminator_ || c == quote_character_ || c == '\n') {
+ need_quote = true;
+ break;
+ }
+ }
+ if (!need_quote) {
+ return std::move(field);
+ }
+
+ std::string quoted;
+ quoted.push_back(quote_character_);
+ for (const char c : field) {
+ if (c == quote_character_) {
+ quoted.push_back(c);
+ }
+ quoted.push_back(c);
+ }
+ quoted.push_back(quote_character_);
+ return quoted;
+}
+
+
+inline std::string TableExportToStringWorkOrder::escapeTextField(
+ std::string &&field) const { // NOLINT(whitespace/operators)
+ if (escape_strings_ == false || field == "\\N") {
+ return std::move(field);
+ }
+ bool need_escape = false;
+ for (const unsigned char c : field) {
+ if (c < ' ' || c == '\\' || c == field_terminator_) {
+ need_escape = true;
+ break;
+ }
+ }
+ if (!need_escape) {
+ return std::move(field);
+ }
+
+ std::string escaped;
+ for (const unsigned char c : field) {
+ if (c < 32) {
+ switch (c) {
+ case '\b':
+ // Backspace.
+ escaped.append("\\b");
+ break;
+ case '\f':
+ // Form-feed.
+ escaped.append("\\f");
+ break;
+ case '\n':
+ // Newline.
+ escaped.append("\\n");
+ break;
+ case '\r':
+ // Carriage return.
+ escaped.append("\\r");
+ break;
+ case '\t':
+ // Tab.
+ escaped.append("\\t");
+ break;
+ case '\v':
+ // Vertical tab
+ escaped.append("\\v");
+ break;
+ default: {
+ // Use hexidecimal representation.
+ static const std::string digits = "0123456789ABCDEF";
+ escaped.append("\\x");
+ escaped.push_back(digits.at(c >> 4));
+ escaped.push_back(digits.at(c & 0xF));
+ break;
+ }
+ }
+ } else {
+ if (c == '\\' || c == field_terminator_) {
+ escaped.push_back('\\');
+ }
+ escaped.push_back(c);
+ }
+ }
+ return escaped;
+}
+
+template <std::string (TableExportToStringWorkOrder::*transform)(std::string&&) const, // NOLINT
+ typename Container, typename Functor>
+inline void TableExportToStringWorkOrder::writeEachToString(const Container &container,
+ std::string *output,
+ const Functor &functor) const {
+ auto it = container.begin();
+ if (it != container.end()) {
+ std::size_t idx = 0;
+ output->append((this->*transform)(functor(*it, idx++)));
+ while ((++it) != container.end()) {
+ output->push_back(field_terminator_);
+ output->append((this->*transform)(functor(*it, idx++)));
+ }
+ }
+}
+
+template <std::string (TableExportToStringWorkOrder::*transform)(std::string&&) const> // NOLINT
+void TableExportToStringWorkOrder::writeToString(ValueAccessor *accessor,
+ std::string *output) const {
+ std::vector<const Type*> value_types;
+ value_types.reserve(input_relation_.size());
+ for (const CatalogAttribute &attribute : input_relation_) {
+ value_types.emplace_back(&attribute.getType());
+ }
+
+ // Write table header to the output buffer.
+ if (print_header_) {
+ writeEachToString<transform>(
+ input_relation_, output,
+ [&](const CatalogAttribute &attr, // NOLINT(build/c++11)
+ const std::size_t idx) -> std::string {
+ return attr.getDisplayName();
+ });
+ output->push_back('\n');
+ }
+
+ // Write table rows to the output buffer.
+ accessor->beginIterationVirtual();
+ while (accessor->nextVirtual()) {
+ std::unique_ptr<Tuple> tuple(accessor->getTupleVirtual());
+ writeEachToString<transform>(
+ *tuple, output,
+ [&](const TypedValue &value, // NOLINT(build/c++11)
+ const std::size_t idx) -> std::string {
+ if (value.isNull()) {
+ return null_string_;
+ } else {
+ return value_types[idx]->printValueToString(value);
+ }
+ });
+ output->push_back('\n');
+ }
+}
+
+} // namespace quickstep
diff --git a/relational_operators/TableExportOperator.hpp b/relational_operators/TableExportOperator.hpp
new file mode 100644
index 0000000..29a07d1
--- /dev/null
+++ b/relational_operators/TableExportOperator.hpp
@@ -0,0 +1,267 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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_RELATIONAL_OPERATORS_TABLE_EXPORT_OPERATOR_HPP_
+#define QUICKSTEP_RELATIONAL_OPERATORS_TABLE_EXPORT_OPERATOR_HPP_
+
+#include <cstddef>
+#include <cstdio>
+#include <memory>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+#include "catalog/CatalogRelation.hpp"
+#include "catalog/CatalogTypedefs.hpp"
+#include "query_execution/QueryContext.hpp"
+#include "relational_operators/RelationalOperator.hpp"
+#include "relational_operators/WorkOrder.hpp"
+#include "storage/StorageBlockInfo.hpp"
+#include "storage/StorageConstants.hpp"
+#include "threading/SpinMutex.hpp"
+#include "utility/BulkIoConfiguration.hpp"
+#include "utility/Macros.hpp"
+
+#include "glog/logging.h"
+
+#include "tmb/id_typedefs.h"
+
+namespace tmb { class MessageBus; }
+
+namespace quickstep {
+
+class CatalogRelationSchema;
+class StorageManager;
+class ValueAccessor;
+class WorkOrderProtosContainer;
+class WorkOrdersContainer;
+
+namespace serialization { class WorkOrder; }
+
+/** \addtogroup RelationalOperators
+ * @{
+ */
+
+class TableExportOperator : public RelationalOperator {
+ public:
+ /**
+ * @brief Feedback message to Foreman when a TableExportToStringWorkOrder has
+ * completed writing a block to the string buffer.
+ */
+ enum FeedbackMessageType : WorkOrder::FeedbackMessageType {
+ kBlockOutputMessage,
+ };
+
+ /**
+ * @brief Constructor.
+ *
+ * @param query_id The ID of the query to which this operator belongs.
+ * @param input_relation The relation to export.
+ * @param input_relation_is_stored If input_relation is a stored relation and
+ * is fully available to the operator before it can start generating
+ * workorders.
+ * @param file_name The name of the file to export the relation to.
+ * @param options The options that specify the detailed format of the output
+ * file.
+ */
+ TableExportOperator(const std::size_t query_id,
+ const CatalogRelation &input_relation,
+ const bool input_relation_is_stored,
+ const std::string &file_name,
+ const BulkIoConfigurationPtr &options)
+ : RelationalOperator(query_id),
+ input_relation_(input_relation),
+ input_relation_is_stored_(input_relation_is_stored),
+ file_name_(file_name),
+ options_(options),
+ input_relation_block_ids_(input_relation_is_stored
+ ? input_relation.getBlocksSnapshot()
+ : std::vector<block_id>()),
+ num_workorders_generated_(0),
+ started_(false),
+ num_blocks_written_(0),
+ file_(nullptr) {}
+
+ ~TableExportOperator() override;
+
+ OperatorType getOperatorType() const override {
+ return kTableExport;
+ }
+
+ std::string getName() const override {
+ return "TableExportOperator";
+ }
+
+ /**
+ * @return The relation to export.
+ */
+ const CatalogRelation& input_relation() const {
+ return input_relation_;
+ }
+
+ bool getAllWorkOrders(WorkOrdersContainer *container,
+ QueryContext *query_context,
+ StorageManager *storage_manager,
+ const tmb::client_id scheduler_client_id,
+ tmb::MessageBus *bus) override;
+
+ bool getAllWorkOrderProtos(WorkOrderProtosContainer *container) override;
+
+ void feedInputBlock(const block_id input_block_id,
+ const relation_id input_relation_id,
+ const partition_id part_id) override {
+ if (input_relation_id == input_relation_.getID()) {
+ SpinMutexLock lock(block_ids_mutex_);
+ input_relation_block_ids_.emplace_back(input_block_id);
+ }
+ }
+
+ void receiveFeedbackMessage(const WorkOrder::FeedbackMessage &msg) override;
+
+ private:
+ // Buffer for storing a block's exported string.
+ struct BlockBuffer {
+ explicit BlockBuffer(std::string *buffer_in)
+ : done(false),
+ buffer(buffer_in) {}
+ bool done;
+ std::unique_ptr<std::string> buffer;
+ };
+
+ const CatalogRelation &input_relation_;
+ const bool input_relation_is_stored_;
+ const std::string file_name_;
+ const BulkIoConfigurationPtr options_;
+
+ std::vector<block_id> input_relation_block_ids_;
+ std::size_t num_workorders_generated_;
+ alignas(kCacheLineBytes) SpinMutex block_ids_mutex_;
+
+ bool started_;
+
+ std::size_t num_blocks_written_;
+ std::unordered_map<block_id, BlockBuffer> output_buffers_;
+ alignas(kCacheLineBytes) SpinMutex output_buffers_mutex_;
+
+ FILE *file_;
+
+ DISALLOW_COPY_AND_ASSIGN(TableExportOperator);
+};
+
+class TableExportToStringWorkOrder : public WorkOrder {
+ public:
+ /**
+ * @brief Constructor.
+ *
+ * @param query_id The ID of the query to which this work order belongs.
+ * @param input_relation The relation to export.
+ * @param input_block_id The block id.
+ * @param format The output file format.
+ * @param print_header Whether to write table headers.
+ * @param field_terminator The character that separates attribute values in
+ * each output row.
+ * @param escape_strings Whether to encode special characters as escape
+ * sequences. NOTE: This options is for TEXT format only and is ignored
+ * otherwiae.
+ * @param quote_character The quote character. NOTE: This options is for CSV
+ * format only and is ignored otherwiae.
+ * @param null_string The string that represents a null value.
+ * @param output_buffer The string buffer for writing the output to.
+ * @param operator_index TableExportOperator index to send feedback messages
+ * to.
+ * @param scheduler_client_id The TMB client ID of the scheduler thread.
+ * @param storage_manager The StorageManager to use.
+ * @param bus TMB to send the feedback message on.
+ */
+ TableExportToStringWorkOrder(const std::size_t query_id,
+ const CatalogRelationSchema &input_relation,
+ const block_id input_block_id,
+ const BulkIoFormat format,
+ const bool print_header,
+ const char field_terminator,
+ const bool escape_strings,
+ const char quote_character,
+ const std::string null_string,
+ std::string *output_buffer,
+ const std::size_t operator_index,
+ const tmb::client_id scheduler_client_id,
+ StorageManager *storage_manager,
+ MessageBus *bus)
+ : WorkOrder(query_id),
+ input_relation_(input_relation),
+ input_block_id_(input_block_id),
+ format_(format),
+ print_header_(print_header),
+ field_terminator_(field_terminator),
+ escape_strings_(escape_strings),
+ quote_character_(quote_character),
+ null_string_(null_string),
+ operator_index_(operator_index),
+ scheduler_client_id_(scheduler_client_id),
+ storage_manager_(storage_manager),
+ bus_(bus),
+ output_buffer_(output_buffer) {
+ }
+
+ ~TableExportToStringWorkOrder() override {}
+
+ void execute() override;
+
+ private:
+ inline std::string quoteCSVField(std::string &&field) const; // NOLINT(whitespace/operators)
+ inline std::string escapeTextField(std::string &&field) const; // NOLINT(whitespace/operators)
+
+ // Helper method for writing each entry from a table row to the output string
+ // buffer, with proper transformations (separated by delimiter character,
+ // escape special characters, add quotes, etc.).
+ template <std::string (TableExportToStringWorkOrder::*transform)(std::string&&) const, // NOLINT
+ typename Container, typename Functor>
+ inline void writeEachToString(const Container &container,
+ std::string *output,
+ const Functor &functor) const;
+
+ // Write all the rows from a value accessor to the output string buffer.
+ template <std::string (TableExportToStringWorkOrder::*transform)(std::string&&) const> // NOLINT
+ void writeToString(ValueAccessor *accessor, std::string *output) const;
+
+ const CatalogRelationSchema &input_relation_;
+ const block_id input_block_id_;
+
+ const BulkIoFormat format_;
+ const bool print_header_;
+ const char field_terminator_;
+ const bool escape_strings_;
+ const char quote_character_;
+ const std::string null_string_;
+
+ const std::size_t operator_index_;
+ const tmb::client_id scheduler_client_id_;
+ StorageManager *storage_manager_;
+ MessageBus *bus_;
+
+ std::string *output_buffer_;
+
+ DISALLOW_COPY_AND_ASSIGN(TableExportToStringWorkOrder);
+};
+
+/** @} */
+
+} // namespace quickstep
+
+#endif // QUICKSTEP_RELATIONAL_OPERATORS_TABLE_EXPORT_OPERATOR_HPP_
diff --git a/relational_operators/TextScanOperator.cpp b/relational_operators/TextScanOperator.cpp
index 3ca3af4..66137d8 100644
--- a/relational_operators/TextScanOperator.cpp
+++ b/relational_operators/TextScanOperator.cpp
@@ -31,6 +31,7 @@
#include <cstdint>
#include <cstdio>
#include <cstdlib>
+#include <exception>
#include <memory>
#include <string>
#include <utility>
@@ -54,6 +55,7 @@
#include "types/containers/ColumnVector.hpp"
#include "types/containers/ColumnVectorsValueAccessor.hpp"
#include "types/containers/Tuple.hpp"
+#include "utility/BulkIoConfiguration.hpp"
#include "utility/Glob.hpp"
#include "gflags/gflags.h"
@@ -61,9 +63,6 @@
#include "tmb/id_typedefs.h"
-using std::size_t;
-using std::string;
-
namespace quickstep {
// Text segment size set to 256KB.
@@ -82,14 +81,19 @@
return true;
}
-static const volatile bool text_scan_text_segment_size_dummy = gflags::RegisterFlagValidator(
- &FLAGS_textscan_text_segment_size, &ValidateTextScanTextSegmentSize);
+static const volatile bool text_scan_text_segment_size_dummy =
+ gflags::RegisterFlagValidator(
+ &FLAGS_textscan_text_segment_size, &ValidateTextScanTextSegmentSize);
namespace {
-size_t getFileSize(const string &file_name) {
+std::size_t GetFileSize(const std::string &file_name) {
// Use standard C libary to retrieve the file size.
FILE *fp = std::fopen(file_name.c_str(), "rb");
+ // TODO(quickstep-team): Decent handling of exceptions at query runtime.
+ if (fp == nullptr) {
+ throw std::runtime_error("Can not open file " + file_name + " for reading");
+ }
std::fseek(fp, 0, SEEK_END);
const std::size_t file_size = std::ftell(fp);
std::fclose(fp);
@@ -127,7 +131,7 @@
<< "File " << file << " is not readable due to permission issues.";
#endif // QUICKSTEP_HAVE_UNISTD
- const std::size_t file_size = getFileSize(file);
+ const std::size_t file_size = GetFileSize(file);
std::size_t text_offset = 0;
for (size_t num_full_segments = file_size / FLAGS_textscan_text_segment_size;
@@ -138,8 +142,8 @@
file,
text_offset,
FLAGS_textscan_text_segment_size,
- field_terminator_,
- process_escape_sequences_,
+ options_->getDelimiter(),
+ options_->escapeStrings(),
output_destination),
op_index_);
}
@@ -152,8 +156,8 @@
file,
text_offset,
file_size - text_offset,
- field_terminator_,
- process_escape_sequences_,
+ options_->getDelimiter(),
+ options_->escapeStrings(),
output_destination),
op_index_);
}
@@ -169,22 +173,25 @@
return true;
}
- for (const string &file : files) {
- const std::size_t file_size = getFileSize(file);
+ for (const std::string &file : files) {
+ const std::size_t file_size = GetFileSize(file);
size_t text_offset = 0;
for (size_t num_full_segments = file_size / FLAGS_textscan_text_segment_size;
num_full_segments > 0;
--num_full_segments, text_offset += FLAGS_textscan_text_segment_size) {
- container->addWorkOrderProto(createWorkOrderProto(file, text_offset, FLAGS_textscan_text_segment_size),
- op_index_);
+ container->addWorkOrderProto(
+ createWorkOrderProto(file, text_offset,
+ FLAGS_textscan_text_segment_size),
+ op_index_);
}
// Deal with the residual partial segment whose size is less than
// 'FLAGS_textscan_text_segment_size'.
if (text_offset < file_size) {
- container->addWorkOrderProto(createWorkOrderProto(file, text_offset, file_size - text_offset),
- op_index_);
+ container->addWorkOrderProto(
+ createWorkOrderProto(file, text_offset, file_size - text_offset),
+ op_index_);
}
}
@@ -192,9 +199,10 @@
return true;
}
-serialization::WorkOrder* TextScanOperator::createWorkOrderProto(const string &filename,
- const size_t text_offset,
- const size_t text_segment_size) {
+serialization::WorkOrder* TextScanOperator::createWorkOrderProto(
+ const std::string &filename,
+ const std::size_t text_offset,
+ const std::size_t text_segment_size) {
serialization::WorkOrder *proto = new serialization::WorkOrder;
proto->set_work_order_type(serialization::TEXT_SCAN);
proto->set_query_id(query_id_);
@@ -202,9 +210,10 @@
proto->SetExtension(serialization::TextScanWorkOrder::filename, filename);
proto->SetExtension(serialization::TextScanWorkOrder::text_offset, text_offset);
proto->SetExtension(serialization::TextScanWorkOrder::text_segment_size, text_segment_size);
- proto->SetExtension(serialization::TextScanWorkOrder::field_terminator, field_terminator_);
+ proto->SetExtension(serialization::TextScanWorkOrder::field_terminator,
+ options_->getDelimiter());
proto->SetExtension(serialization::TextScanWorkOrder::process_escape_sequences,
- process_escape_sequences_);
+ options_->escapeStrings());
proto->SetExtension(serialization::TextScanWorkOrder::insert_destination_index,
output_destination_index_);
@@ -235,12 +244,14 @@
file_handle = hdfsOpenFile(hdfs, filename_.c_str(), O_RDONLY, buffer_size,
0 /* default replication */, 0 /* default block size */);
if (file_handle == nullptr) {
- LOG(ERROR) << "Failed to open file " << filename_ << " with error: " << strerror(errno);
+ LOG(ERROR) << "Failed to open file " << filename_
+ << " with error: " << strerror(errno);
return;
}
if (hdfsSeek(hdfs, file_handle, text_offset_)) {
- LOG(ERROR) << "Failed to seek in file " << filename_ << " with error: " << strerror(errno);
+ LOG(ERROR) << "Failed to seek in file " << filename_
+ << " with error: " << strerror(errno);
hdfsCloseFile(hdfs, file_handle);
return;
@@ -248,7 +259,9 @@
bytes_read = hdfsRead(hdfs, file_handle, buffer, text_segment_size_);
while (bytes_read != text_segment_size_) {
- bytes_read += hdfsRead(hdfs, file_handle, buffer + bytes_read, text_segment_size_ - bytes_read);
+ bytes_read += hdfsRead(hdfs, file_handle,
+ buffer + bytes_read,
+ text_segment_size_ - bytes_read);
}
}
#endif // QUICKSTEP_HAVE_FILE_MANAGER_HDFS
@@ -325,7 +338,8 @@
if (use_hdfs) {
#ifdef QUICKSTEP_HAVE_FILE_MANAGER_HDFS
if (hdfsSeek(hdfs, file_handle, dynamic_read_offset)) {
- LOG(ERROR) << "Failed to seek in file " << filename_ << " with error: " << strerror(errno);
+ LOG(ERROR) << "Failed to seek in file " << filename_
+ << " with error: " << strerror(errno);
hdfsCloseFile(hdfs, file_handle);
return;
@@ -343,7 +357,9 @@
// Read again when acrossing the HDFS block boundary.
if (bytes_read != dynamic_read_size) {
- bytes_read += hdfsRead(hdfs, file_handle, buffer + bytes_read, dynamic_read_size - bytes_read);
+ bytes_read += hdfsRead(hdfs, file_handle,
+ buffer + bytes_read,
+ dynamic_read_size - bytes_read);
}
#endif // QUICKSTEP_HAVE_FILE_MANAGER_HDFS
} else {
diff --git a/relational_operators/TextScanOperator.hpp b/relational_operators/TextScanOperator.hpp
index 4dbeb92..01c559c 100644
--- a/relational_operators/TextScanOperator.hpp
+++ b/relational_operators/TextScanOperator.hpp
@@ -32,6 +32,7 @@
#include "relational_operators/RelationalOperator.hpp"
#include "relational_operators/WorkOrder.hpp"
#include "types/containers/Tuple.hpp"
+#include "utility/BulkIoConfiguration.hpp"
#include "utility/Macros.hpp"
#include "glog/logging.h"
@@ -104,32 +105,28 @@
class TextScanOperator : public RelationalOperator {
public:
/**
- * @brief Constructor
+ * @brief Constructor.
*
* @param query_id The ID of the query to which this operator belongs.
* @param file_pattern The glob-like file pattern of the sources to load. The
* pattern could include * (wildcard for multiple chars) and ?
* (wildcard for single char). It defaults to single file load, if a
* file is specified.
- * @param field_terminator The string which separates attribute values in
- * the text file.
- * @param process_escape_sequences Whether to decode escape sequences in the
- * text file.
+ * @param options The options that specify the detailed format of the input
+ file(s).
* @param output_relation The output relation.
* @param output_destination_index The index of the InsertDestination in the
* QueryContext to insert tuples.
**/
TextScanOperator(const std::size_t query_id,
const std::string &file_pattern,
- const char field_terminator,
- const bool process_escape_sequences,
+ const BulkIoConfigurationPtr &options,
const CatalogRelation &output_relation,
const QueryContext::insert_destination_id output_destination_index)
: RelationalOperator(query_id, 1u, output_relation.getNumPartitions() != 1u /* has_repartition */,
output_relation.getNumPartitions()),
file_pattern_(file_pattern),
- field_terminator_(field_terminator),
- process_escape_sequences_(process_escape_sequences),
+ options_(options),
output_relation_(output_relation),
output_destination_index_(output_destination_index),
work_generated_(false) {}
@@ -166,8 +163,7 @@
const std::size_t text_segment_size);
const std::string file_pattern_;
- const char field_terminator_;
- const bool process_escape_sequences_;
+ const BulkIoConfigurationPtr options_;
const CatalogRelation &output_relation_;
const QueryContext::insert_destination_id output_destination_index_;
diff --git a/relational_operators/WorkOrder.proto b/relational_operators/WorkOrder.proto
index 6dafbe0..aaf7929 100644
--- a/relational_operators/WorkOrder.proto
+++ b/relational_operators/WorkOrder.proto
@@ -21,7 +21,7 @@
import "relational_operators/SortMergeRunOperator.proto";
-// Next tag: 26.
+// Next tag: 27.
enum WorkOrderType {
AGGREGATION = 1;
BUILD_AGGREGATION_EXISTENCE_MAP = 23;
@@ -43,6 +43,7 @@
SELECT = 15;
SORT_MERGE_RUN = 16;
SORT_RUN_GENERATION = 17;
+ TABLE_EXPORT_TO_STRING = 26;
TABLE_GENERATOR = 18;
TEXT_SCAN = 19;
UNION_ALL = 24;
diff --git a/relational_operators/tests/TextScanOperator_unittest.cpp b/relational_operators/tests/TextScanOperator_unittest.cpp
index c92a3dd..9664fda 100644
--- a/relational_operators/tests/TextScanOperator_unittest.cpp
+++ b/relational_operators/tests/TextScanOperator_unittest.cpp
@@ -40,6 +40,7 @@
#include "threading/ThreadIDBasedMap.hpp"
#include "types/TypeFactory.hpp"
#include "types/TypeID.hpp"
+#include "utility/BulkIoConfiguration.hpp"
#include "utility/MemStream.hpp"
#include "gflags/gflags.h"
@@ -191,11 +192,15 @@
output_destination_proto->set_relation_id(relation_->getID());
output_destination_proto->set_relational_op_index(kOpIndex);
+ std::unique_ptr<BulkIoConfiguration> options =
+ std::make_unique<BulkIoConfiguration>(BulkIoFormat::kText);
+ options->setDelimiter('\t');
+ options->setEscapeStrings(true);
+
std::unique_ptr<TextScanOperator> text_scan_op(
new TextScanOperator(kQueryId,
input_filename,
- '\t',
- true,
+ BulkIoConfigurationPtr(options.release()),
*relation_,
output_destination_index));
diff --git a/utility/BulkIoConfiguration.cpp b/utility/BulkIoConfiguration.cpp
new file mode 100644
index 0000000..ce5ade5
--- /dev/null
+++ b/utility/BulkIoConfiguration.cpp
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 "utility/BulkIoConfiguration.hpp"
+
+#include "glog/logging.h"
+
+namespace quickstep {
+
+void BulkIoConfiguration::initializeDefaultParameters(const BulkIoFormat format) {
+ switch (format) {
+ case BulkIoFormat::kCsv: {
+ delimiter_ = ',';
+ escape_strings_ = false;
+ header_ = true;
+ quote_ = '"';
+ null_string_ = "";
+ break;
+ }
+ case BulkIoFormat::kText: {
+ delimiter_ = '\t';
+ escape_strings_ = true;
+ header_ = false;
+ quote_ = 0;
+ null_string_ = "\\N";
+ break;
+ }
+ default:
+ LOG(FATAL) << "Unexpected format in "
+ << "BulkIoConfiguration::initializeDefaultParameters()";
+ }
+}
+
+} // namespace quickstep
diff --git a/utility/BulkIoConfiguration.hpp b/utility/BulkIoConfiguration.hpp
new file mode 100644
index 0000000..ae8ccd2
--- /dev/null
+++ b/utility/BulkIoConfiguration.hpp
@@ -0,0 +1,198 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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_UTILITY_BULK_IO_CONFIGURATION_HPP_
+#define QUICKSTEP_UTILITY_BULK_IO_CONFIGURATION_HPP_
+
+#include <memory>
+#include <string>
+
+#include "utility/Macros.hpp"
+
+#include "glog/logging.h"
+
+namespace quickstep {
+
+/**
+ * @brief External file format for bulk I/O.
+ */
+enum class BulkIoFormat {
+ kCsv = 0,
+ kText
+};
+
+class BulkIoConfiguration;
+typedef std::shared_ptr<const BulkIoConfiguration> BulkIoConfigurationPtr;
+
+/**
+ * @brief Detailed file format configuration for bulk I/O (i.e. COPY operations)
+ * that moves data between Quickstep tables and external files.
+ */
+class BulkIoConfiguration {
+ public:
+ /**
+ * @brief Constructor.
+ *
+ * @param format External file format.
+ */
+ explicit BulkIoConfiguration(const BulkIoFormat format)
+ : format_(format) {
+ initializeDefaultParameters(format);
+ }
+
+ /**
+ * @brief Get the external file format.
+ *
+ * @return The external file format.
+ */
+ inline BulkIoFormat getFormat() const {
+ return format_;
+ }
+
+ /**
+ * @brief Get the external file format's name.
+ *
+ * @return The external file format's name.
+ */
+ inline std::string getFormatName() const {
+ switch (format_) {
+ case BulkIoFormat::kCsv:
+ return "CSV";
+ case BulkIoFormat::kText:
+ return "TEXT";
+ default:
+ break;
+ }
+ LOG(FATAL) << "Unexpected format in BulkIoConfiguration::getFormatName()";
+ }
+
+ /**
+ * @brief Get the delimiter character (which is the character that separates
+ * attribute values in external files).
+ *
+ * @return The delimiter character.
+ */
+ inline char getDelimiter() const {
+ return delimiter_;
+ }
+
+ /**
+ * @brief Set the delimiter character.
+ *
+ * @param delimiter The delimiter character to set.
+ */
+ inline void setDelimiter(const char delimiter) {
+ delimiter_ = delimiter;
+ }
+
+ /**
+ * @brief Check whether to encode/decode between special characters and escape
+ * sequences.
+ *
+ * @return Whether to encode/decode between special characters and escape
+ * sequences.
+ */
+ inline bool escapeStrings() const {
+ return escape_strings_;
+ }
+
+ /**
+ * @brief Set whether to encode/decode between special characters and escape
+ * sequences.
+ *
+ * @param escape_strings A bool value to set that indicates whether to
+ * encode/decode between special characters and escape sequences.
+ */
+ inline void setEscapeStrings(const bool escape_strings) {
+ escape_strings_ = escape_strings;
+ }
+
+ /**
+ * @brief Check whether the external files contain headers (for CSV format only).
+ *
+ * @return Whether the external files contain headers.
+ */
+ inline bool hasHeader() const {
+ return header_;
+ }
+
+ /**
+ * @brief Set whether the external files contain headers (for CSV format only).
+ *
+ * @param header A bool value to set that indicates whether the external files
+ * contain headers.
+ */
+ inline void setHeader(const bool header) {
+ header_ = header;
+ }
+
+ /**
+ * @brief Get the quote character (for CSV format only).
+ *
+ * @return The quote character.
+ */
+ inline char getQuoteCharacter() const {
+ return quote_;
+ }
+
+ /**
+ * @brief Set the quote character (for CSV format only).
+ *
+ * @param quote The quote character to set.
+ */
+ inline void setQuoteCharacter(const char quote) {
+ quote_ = quote;
+ }
+
+ /**
+ * @brief Get the string that represents a null value.
+ *
+ * @return The string that represents a null value.
+ */
+ inline const std::string& getNullString() const {
+ return null_string_;
+ }
+
+ /**
+ * @brief Set the string that represents a null value.
+ *
+ * @param null_string The string to set that represents a null value.
+ */
+ inline void setNullString(const std::string &null_string) {
+ null_string_ = null_string;
+ }
+
+ private:
+ // Initialize default options for CSV and TEXT formats.
+ void initializeDefaultParameters(const BulkIoFormat format);
+
+ const BulkIoFormat format_;
+
+ char delimiter_;
+ bool escape_strings_;
+ bool header_;
+ char quote_;
+ std::string null_string_;
+
+ DISALLOW_COPY_AND_ASSIGN(BulkIoConfiguration);
+};
+
+} // namespace quickstep
+
+#endif // QUICKSTEP_UTILITY_BULK_IO_CONFIGURATION_HPP_
diff --git a/utility/CMakeLists.txt b/utility/CMakeLists.txt
index b7a08f4..a832404 100644
--- a/utility/CMakeLists.txt
+++ b/utility/CMakeLists.txt
@@ -168,6 +168,7 @@
add_library(quickstep_utility_BloomFilter_proto
${quickstep_utility_BloomFilter_proto_srcs}
${quickstep_utility_BloomFilter_proto_hdrs})
+add_library(quickstep_utility_BulkIoConfiguration BulkIoConfiguration.cpp BulkIoConfiguration.hpp)
add_library(quickstep_utility_CalculateInstalledMemory CalculateInstalledMemory.cpp CalculateInstalledMemory.hpp)
add_library(quickstep_utility_Cast ../empty_src.cpp Cast.hpp)
add_library(quickstep_utility_CheckSnprintf ../empty_src.cpp CheckSnprintf.hpp)
@@ -249,6 +250,8 @@
target_link_libraries(quickstep_utility_BarrieredReadWriteConcurrentBitVector
quickstep_utility_BitManipulation
quickstep_utility_Macros)
+target_link_libraries(quickstep_utility_BulkIoConfiguration
+ quickstep_utility_Macros)
target_link_libraries(quickstep_utility_DAG
glog
quickstep_utility_Macros)
@@ -353,6 +356,7 @@
quickstep_utility_BitVector
quickstep_utility_BloomFilter
quickstep_utility_BloomFilter_proto
+ quickstep_utility_BulkIoConfiguration
quickstep_utility_CalculateInstalledMemory
quickstep_utility_Cast
quickstep_utility_CheckSnprintf
diff --git a/utility/ExecutionDAGVisualizer.cpp b/utility/ExecutionDAGVisualizer.cpp
index 7c319f5..8059ef3 100644
--- a/utility/ExecutionDAGVisualizer.cpp
+++ b/utility/ExecutionDAGVisualizer.cpp
@@ -55,12 +55,15 @@
namespace quickstep {
DEFINE_bool(visualize_execution_dag_partition_info, false,
- "If true, display the operator partition info in the visualized execution plan DAG."
- "Valid iif 'visualize_execution_dag' turns on.");
+ "If true, display the operator partition info in the visualized "
+ "execution plan DAG. Valid iff 'visualize_execution_dag' turns on.");
ExecutionDAGVisualizer::ExecutionDAGVisualizer(const QueryPlan &plan) {
+ using ROEnumType =
+ typename std::underlying_type<RelationalOperator::OperatorType>::type;
+
// Do not display these relational operators in the graph.
- const std::unordered_set<typename std::underlying_type<RelationalOperator::OperatorType>::type> no_display_op_types =
+ const std::unordered_set<ROEnumType> no_display_op_types =
{ RelationalOperator::kDestroyAggregationState,
RelationalOperator::kDestroyHash,
RelationalOperator::kDropTable };