You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by hb...@apache.org on 2016/06/17 21:03:20 UTC

[1/4] incubator-quickstep git commit: Added PRIORITY clause in parser.

Repository: incubator-quickstep
Updated Branches:
  refs/heads/parser-priority-clause [created] 604ed99b7


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/parser/preprocessed/SqlParser_gen.hpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlParser_gen.hpp b/parser/preprocessed/SqlParser_gen.hpp
index 71e4332..13c425b 100644
--- a/parser/preprocessed/SqlParser_gen.hpp
+++ b/parser/preprocessed/SqlParser_gen.hpp
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* A Bison parser, made by GNU Bison 2.7.  */
 
 /* Bison interface for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
-
+   
+      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+   
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -26,13 +26,13 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
 #ifndef YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED
 # define YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED
-/* Debug traces.  */
+/* Enabling traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
 #endif
@@ -40,142 +40,144 @@
 extern int quickstep_yydebug;
 #endif
 
-/* Token type.  */
+/* Tokens.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-  enum yytokentype
-  {
-    TOKEN_COMMAND = 258,
-    TOKEN_NAME = 259,
-    TOKEN_STRING_SINGLE_QUOTED = 260,
-    TOKEN_STRING_DOUBLE_QUOTED = 261,
-    TOKEN_UNSIGNED_NUMVAL = 262,
-    TOKEN_OR = 263,
-    TOKEN_AND = 264,
-    TOKEN_NOT = 265,
-    TOKEN_EQ = 266,
-    TOKEN_LT = 267,
-    TOKEN_LEQ = 268,
-    TOKEN_GT = 269,
-    TOKEN_GEQ = 270,
-    TOKEN_NEQ = 271,
-    TOKEN_LIKE = 272,
-    TOKEN_REGEXP = 273,
-    TOKEN_BETWEEN = 274,
-    TOKEN_IS = 275,
-    UNARY_PLUS = 276,
-    UNARY_MINUS = 277,
-    TOKEN_ADD = 278,
-    TOKEN_ALL = 279,
-    TOKEN_ALTER = 280,
-    TOKEN_AS = 281,
-    TOKEN_ASC = 282,
-    TOKEN_BIGINT = 283,
-    TOKEN_BIT = 284,
-    TOKEN_BITWEAVING = 285,
-    TOKEN_BLOCKPROPERTIES = 286,
-    TOKEN_BLOCKSAMPLE = 287,
-    TOKEN_BLOOM_FILTER = 288,
-    TOKEN_CSB_TREE = 289,
-    TOKEN_BY = 290,
-    TOKEN_CASE = 291,
-    TOKEN_CHARACTER = 292,
-    TOKEN_CHECK = 293,
-    TOKEN_COLUMN = 294,
-    TOKEN_CONSTRAINT = 295,
-    TOKEN_COPY = 296,
-    TOKEN_CREATE = 297,
-    TOKEN_DATE = 298,
-    TOKEN_DATETIME = 299,
-    TOKEN_DAY = 300,
-    TOKEN_DECIMAL = 301,
-    TOKEN_DEFAULT = 302,
-    TOKEN_DELETE = 303,
-    TOKEN_DELIMITER = 304,
-    TOKEN_DESC = 305,
-    TOKEN_DISTINCT = 306,
-    TOKEN_DOUBLE = 307,
-    TOKEN_DROP = 308,
-    TOKEN_ELSE = 309,
-    TOKEN_END = 310,
-    TOKEN_ESCAPE_STRINGS = 311,
-    TOKEN_EXISTS = 312,
-    TOKEN_EXTRACT = 313,
-    TOKEN_FALSE = 314,
-    TOKEN_FIRST = 315,
-    TOKEN_FLOAT = 316,
-    TOKEN_FOR = 317,
-    TOKEN_FOREIGN = 318,
-    TOKEN_FROM = 319,
-    TOKEN_FULL = 320,
-    TOKEN_GROUP = 321,
-    TOKEN_HASH = 322,
-    TOKEN_HAVING = 323,
-    TOKEN_HOUR = 324,
-    TOKEN_IN = 325,
-    TOKEN_INDEX = 326,
-    TOKEN_INNER = 327,
-    TOKEN_INSERT = 328,
-    TOKEN_INTEGER = 329,
-    TOKEN_INTERVAL = 330,
-    TOKEN_INTO = 331,
-    TOKEN_JOIN = 332,
-    TOKEN_KEY = 333,
-    TOKEN_LAST = 334,
-    TOKEN_LEFT = 335,
-    TOKEN_LIMIT = 336,
-    TOKEN_LONG = 337,
-    TOKEN_MINUTE = 338,
-    TOKEN_MONTH = 339,
-    TOKEN_NULL = 340,
-    TOKEN_NULLS = 341,
-    TOKEN_OFF = 342,
-    TOKEN_ON = 343,
-    TOKEN_ORDER = 344,
-    TOKEN_OUTER = 345,
-    TOKEN_PARTITION = 346,
-    TOKEN_PARTITIONS = 347,
-    TOKEN_PERCENT = 348,
-    TOKEN_PRIMARY = 349,
-    TOKEN_QUIT = 350,
-    TOKEN_RANGE = 351,
-    TOKEN_REAL = 352,
-    TOKEN_REFERENCES = 353,
-    TOKEN_RIGHT = 354,
-    TOKEN_ROW_DELIMITER = 355,
-    TOKEN_SECOND = 356,
-    TOKEN_SELECT = 357,
-    TOKEN_SET = 358,
-    TOKEN_SMA = 359,
-    TOKEN_SMALLINT = 360,
-    TOKEN_SUBSTRING = 361,
-    TOKEN_TABLE = 362,
-    TOKEN_THEN = 363,
-    TOKEN_TIME = 364,
-    TOKEN_TIMESTAMP = 365,
-    TOKEN_TRUE = 366,
-    TOKEN_TUPLESAMPLE = 367,
-    TOKEN_UNIQUE = 368,
-    TOKEN_UPDATE = 369,
-    TOKEN_USING = 370,
-    TOKEN_VALUES = 371,
-    TOKEN_VARCHAR = 372,
-    TOKEN_WHEN = 373,
-    TOKEN_WHERE = 374,
-    TOKEN_WITH = 375,
-    TOKEN_YEAR = 376,
-    TOKEN_YEARMONTH = 377,
-    TOKEN_EOF = 378,
-    TOKEN_LEX_ERROR = 379
-  };
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     TOKEN_COMMAND = 258,
+     TOKEN_NAME = 259,
+     TOKEN_STRING_SINGLE_QUOTED = 260,
+     TOKEN_STRING_DOUBLE_QUOTED = 261,
+     TOKEN_UNSIGNED_NUMVAL = 262,
+     TOKEN_OR = 263,
+     TOKEN_AND = 264,
+     TOKEN_NOT = 265,
+     TOKEN_EQ = 266,
+     TOKEN_NEQ = 267,
+     TOKEN_GEQ = 268,
+     TOKEN_GT = 269,
+     TOKEN_LEQ = 270,
+     TOKEN_LT = 271,
+     TOKEN_REGEXP = 272,
+     TOKEN_LIKE = 273,
+     TOKEN_BETWEEN = 274,
+     TOKEN_IS = 275,
+     UNARY_MINUS = 276,
+     UNARY_PLUS = 277,
+     TOKEN_ADD = 278,
+     TOKEN_ALL = 279,
+     TOKEN_ALTER = 280,
+     TOKEN_AS = 281,
+     TOKEN_ASC = 282,
+     TOKEN_BIGINT = 283,
+     TOKEN_BIT = 284,
+     TOKEN_BITWEAVING = 285,
+     TOKEN_BLOCKPROPERTIES = 286,
+     TOKEN_BLOCKSAMPLE = 287,
+     TOKEN_BLOOM_FILTER = 288,
+     TOKEN_CSB_TREE = 289,
+     TOKEN_BY = 290,
+     TOKEN_CASE = 291,
+     TOKEN_CHARACTER = 292,
+     TOKEN_CHECK = 293,
+     TOKEN_COLUMN = 294,
+     TOKEN_CONSTRAINT = 295,
+     TOKEN_COPY = 296,
+     TOKEN_CREATE = 297,
+     TOKEN_DATE = 298,
+     TOKEN_DATETIME = 299,
+     TOKEN_DAY = 300,
+     TOKEN_DECIMAL = 301,
+     TOKEN_DEFAULT = 302,
+     TOKEN_DELETE = 303,
+     TOKEN_DELIMITER = 304,
+     TOKEN_DESC = 305,
+     TOKEN_DISTINCT = 306,
+     TOKEN_DOUBLE = 307,
+     TOKEN_DROP = 308,
+     TOKEN_ELSE = 309,
+     TOKEN_END = 310,
+     TOKEN_ESCAPE_STRINGS = 311,
+     TOKEN_EXISTS = 312,
+     TOKEN_EXTRACT = 313,
+     TOKEN_FALSE = 314,
+     TOKEN_FIRST = 315,
+     TOKEN_FLOAT = 316,
+     TOKEN_FOR = 317,
+     TOKEN_FOREIGN = 318,
+     TOKEN_FROM = 319,
+     TOKEN_FULL = 320,
+     TOKEN_GROUP = 321,
+     TOKEN_HASH = 322,
+     TOKEN_HAVING = 323,
+     TOKEN_HOUR = 324,
+     TOKEN_IN = 325,
+     TOKEN_INDEX = 326,
+     TOKEN_INNER = 327,
+     TOKEN_INSERT = 328,
+     TOKEN_INTEGER = 329,
+     TOKEN_INTERVAL = 330,
+     TOKEN_INTO = 331,
+     TOKEN_JOIN = 332,
+     TOKEN_KEY = 333,
+     TOKEN_LAST = 334,
+     TOKEN_LEFT = 335,
+     TOKEN_LIMIT = 336,
+     TOKEN_LONG = 337,
+     TOKEN_MINUTE = 338,
+     TOKEN_MONTH = 339,
+     TOKEN_NULL = 340,
+     TOKEN_NULLS = 341,
+     TOKEN_OFF = 342,
+     TOKEN_ON = 343,
+     TOKEN_ORDER = 344,
+     TOKEN_OUTER = 345,
+     TOKEN_PARTITION = 346,
+     TOKEN_PARTITIONS = 347,
+     TOKEN_PERCENT = 348,
+     TOKEN_PRIMARY = 349,
+     TOKEN_PRIORITY = 350,
+     TOKEN_QUIT = 351,
+     TOKEN_RANGE = 352,
+     TOKEN_REAL = 353,
+     TOKEN_REFERENCES = 354,
+     TOKEN_RIGHT = 355,
+     TOKEN_ROW_DELIMITER = 356,
+     TOKEN_SECOND = 357,
+     TOKEN_SELECT = 358,
+     TOKEN_SET = 359,
+     TOKEN_SMA = 360,
+     TOKEN_SMALLINT = 361,
+     TOKEN_SUBSTRING = 362,
+     TOKEN_TABLE = 363,
+     TOKEN_THEN = 364,
+     TOKEN_TIME = 365,
+     TOKEN_TIMESTAMP = 366,
+     TOKEN_TRUE = 367,
+     TOKEN_TUPLESAMPLE = 368,
+     TOKEN_UNIQUE = 369,
+     TOKEN_UPDATE = 370,
+     TOKEN_USING = 371,
+     TOKEN_VALUES = 372,
+     TOKEN_VARCHAR = 373,
+     TOKEN_WHEN = 374,
+     TOKEN_WHERE = 375,
+     TOKEN_WITH = 376,
+     TOKEN_YEAR = 377,
+     TOKEN_YEARMONTH = 378,
+     TOKEN_EOF = 379,
+     TOKEN_LEX_ERROR = 380
+   };
 #endif
 
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 
-union YYSTYPE
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
 {
-#line 118 "../SqlParser.ypp" /* yacc.c:1915  */
+/* Line 2058 of yacc.c  */
+#line 119 "../SqlParser.ypp"
 
   quickstep::ParseString *string_value_;
 
@@ -267,30 +269,43 @@ union YYSTYPE
   quickstep::PtrVector<quickstep::ParseSubqueryTableReference> *with_list_;
   quickstep::ParseSubqueryTableReference *with_list_element_;
 
-#line 271 "SqlParser_gen.hpp" /* yacc.c:1915  */
-};
+  quickstep::ParsePriority *opt_priority_clause_;
+
 
-typedef union YYSTYPE YYSTYPE;
+/* Line 2058 of yacc.c  */
+#line 277 "SqlParser_gen.hpp"
+} YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
-/* Location type.  */
 #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
-typedef struct YYLTYPE YYLTYPE;
-struct YYLTYPE
+typedef struct YYLTYPE
 {
   int first_line;
   int first_column;
   int last_line;
   int last_column;
-};
+} YYLTYPE;
+# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
 # define YYLTYPE_IS_DECLARED 1
 # define YYLTYPE_IS_TRIVIAL 1
 #endif
 
 
-
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int quickstep_yyparse (void *YYPARSE_PARAM);
+#else
+int quickstep_yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
 int quickstep_yyparse (yyscan_t yyscanner, quickstep::ParseStatement **parsedStatement);
+#else
+int quickstep_yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
 
 #endif /* !YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED  */

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/parser/tests/Select.test
----------------------------------------------------------------------
diff --git a/parser/tests/Select.test b/parser/tests/Select.test
index e70ee5c..cbab3bc 100644
--- a/parser/tests/Select.test
+++ b/parser/tests/Select.test
@@ -478,6 +478,49 @@ SELECT 1 FROM test LIMIT abc
                          ^
 ==
 
+# Priority
+SELECT 1 FROM test WITH PRIORITY 1
+--
+SelectStatement
++-select_query=Select
+| +-select_clause=SelectList
+| | +-SelectListItem
+| |   +-Literal
+| |     +-NumericLiteral[numeric_string=1,float_like=false]
+| +-from_clause=
+|   +-TableReference[table=test]
++-priority=PRIORITY
+  +-NumericLiteral[numeric_string=1,float_like=false]
+==
+
+SELECT 1 FROM test WITH PRIORITY 1.1
+--
+ERROR: PRIORITY value must be an integer (1 : 34)
+SELECT 1 FROM test WITH PRIORITY 1.1
+                                 ^
+==
+
+SELECT 1 FROM test WITH PRIORITY 0
+--
+ERROR: PRIORITY value must be positive (1 : 34)
+SELECT 1 FROM test WITH PRIORITY 0
+                                 ^
+==
+
+SELECT 1 FROM test WITH PRIORITY -1
+--
+ERROR: syntax error (1 : 34)
+SELECT 1 FROM test WITH PRIORITY -1
+                                 ^
+==
+
+SELECT 1 FROM test WITH PRIORITY abc
+--
+ERROR: syntax error (1 : 34)
+SELECT 1 FROM test WITH PRIORITY abc
+                                 ^
+==
+
 #
 # Subqueries
 #

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/query_optimizer/QueryHandle.hpp
----------------------------------------------------------------------
diff --git a/query_optimizer/QueryHandle.hpp b/query_optimizer/QueryHandle.hpp
index a17d3e8..8822976 100644
--- a/query_optimizer/QueryHandle.hpp
+++ b/query_optimizer/QueryHandle.hpp
@@ -44,8 +44,9 @@ class QueryHandle {
    *
    * @param query_id The given query id.
    */
-  explicit QueryHandle(const std::size_t query_id)
+  explicit QueryHandle(const std::size_t query_id, const std::size_t query_priority = 1)
       : query_id_(query_id),
+        query_priority_(query_priority),
         query_plan_(new QueryPlan()),
         query_result_relation_(nullptr) {}
 
@@ -61,6 +62,13 @@ class QueryHandle {
   }
 
   /**
+   * @brief Get the query priority.
+   **/
+  const std::size_t query_priority() const {
+    return query_priority_;
+  }
+
+  /**
    * @return The mutable query plan.
    */
   QueryPlan* getQueryPlanMutable() {
@@ -111,6 +119,7 @@ class QueryHandle {
 
  private:
   const std::size_t query_id_;
+  const std::size_t query_priority_;
 
   std::unique_ptr<QueryPlan> query_plan_;
 

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/query_optimizer/QueryProcessor.cpp
----------------------------------------------------------------------
diff --git a/query_optimizer/QueryProcessor.cpp b/query_optimizer/QueryProcessor.cpp
index b6fa3e0..74b1f69 100644
--- a/query_optimizer/QueryProcessor.cpp
+++ b/query_optimizer/QueryProcessor.cpp
@@ -17,6 +17,7 @@
 
 #include "query_optimizer/QueryProcessor.hpp"
 
+#include <cstdint>
 #include <cstdlib>
 #include <fstream>
 #include <memory>
@@ -37,7 +38,8 @@ using std::ofstream;
 namespace quickstep {
 
 QueryHandle* QueryProcessor::generateQueryHandle(const ParseStatement &statement) {
-  std::unique_ptr<QueryHandle> query_handle(new QueryHandle(query_id_));
+  std::unique_ptr<QueryHandle> query_handle(new QueryHandle(
+      query_id_, static_cast<std::size_t>(statement.getPriority())));
 
   optimizer::Optimizer optimizer(query_id_, getDefaultDatabase(), storage_manager_.get());
   optimizer.generateQueryHandle(statement, query_handle.get());


[3/4] incubator-quickstep git commit: Added PRIORITY clause in parser.

Posted by hb...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/parser/preprocessed/SqlLexer_gen.cpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlLexer_gen.cpp b/parser/preprocessed/SqlLexer_gen.cpp
index db20491..a2cbea7 100644
--- a/parser/preprocessed/SqlLexer_gen.cpp
+++ b/parser/preprocessed/SqlLexer_gen.cpp
@@ -8,8 +8,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 0
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -159,15 +159,7 @@ typedef void* yyscan_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -202,13 +194,6 @@ typedef size_t yy_size_t;
                     if ( yytext[yyl] == '\n' )\
                         --yylineno;\
             }while(0)
-    #define YY_LINENO_REWIND_TO(dst) \
-            do {\
-                const char *p;\
-                for ( p = yy_cp-1; p >= (dst); --p)\
-                    if ( *p == '\n' )\
-                        --yylineno;\
-            }while(0)
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
@@ -354,7 +339,7 @@ void quickstep_yyfree (void * ,yyscan_t yyscanner );
 
 /* Begin user sect3 */
 
-#define quickstep_yywrap(yyscanner) (/*CONSTCOND*/1)
+#define quickstep_yywrap(yyscanner) 1
 #define YY_SKIP_YYWRAP
 
 typedef unsigned char YY_CHAR;
@@ -366,9 +351,6 @@ typedef int yy_state_type;
 static yy_state_type yy_get_previous_state (yyscan_t yyscanner );
 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  ,yyscan_t yyscanner);
 static int yy_get_next_buffer (yyscan_t yyscanner );
-#if defined(__GNUC__) && __GNUC__ >= 3
-__attribute__((__noreturn__))
-#endif
 static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
 
 /* Done after the current pattern has been matched and before the
@@ -381,8 +363,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 152
-#define YY_END_OF_BUFFER 153
+#define YY_NUM_RULES 153
+#define YY_END_OF_BUFFER 154
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -390,72 +372,72 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[553] =
+static yyconst flex_int16_t yy_accept[558] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  153,    2,    2,  151,  151,  150,  149,  151,
-      128,  124,  127,  124,  124,  147,  120,  117,  121,  146,
-      146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
-      146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
-      146,  146,  146,  146,  125,    4,    5,    5,    3,  143,
-      143,  140,  144,  144,  138,  145,  145,  142,    1,  150,
-      118,  148,  147,  147,  147,    0,  122,  119,  123,  146,
-      146,  146,  146,   10,  146,  146,  146,   22,  146,  146,
-      146,  146,  146,  146,  146,  146,  146,  146,  126,  146,
-
-      146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
-      146,  146,   58,   66,  146,  146,  146,  146,  146,  146,
-      146,  146,  146,  146,  146,   80,   81,  146,  146,  146,
-      146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
-      146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
-      146,    4,    5,    3,  143,  139,  144,  137,  137,  129,
-      131,  132,  133,  134,  135,  136,  137,  145,  141,  148,
-      147,    0,  147,    6,    7,  146,    9,   11,  146,  146,
-       15,  146,  146,  146,  146,  146,  146,  146,  146,  146,
-      146,   32,  146,  146,  146,  146,  146,  146,  146,  146,
-
-       43,  146,  146,  146,  146,  146,  146,   50,  146,  146,
-      146,  146,  146,  146,  146,  146,  146,   62,  146,   68,
-      146,  146,  146,  146,  146,  146,  146,   76,  146,   79,
-      146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
-      146,  146,  146,  146,   97,   98,  146,  146,  146,  146,
-      146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
-      129,  131,  130,  146,  146,  146,  146,  146,  146,  146,
-       20,   23,  146,  146,  146,   28,  146,  146,   30,  146,
-      146,  146,  146,   37,  146,  146,   41,   42,  146,  146,
-      146,  146,  146,  146,  146,   52,   53,  146,   55,  146,
-
-       57,  146,  146,  146,  146,   65,   67,   69,   70,   71,
-      146,   73,  146,  146,   77,  146,  146,  146,  146,  146,
-       88,  146,   90,  146,  146,  146,  146,  146,  146,  146,
-      146,  146,  102,  103,  105,  146,  146,  146,  146,  146,
-      146,  112,  146,  114,  115,  129,  130,    8,  146,  146,
-      146,  146,  146,  146,  146,   25,  146,  146,  146,  146,
-      146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
-      146,   47,   48,   49,  146,   54,  146,   59,   60,  146,
-      146,  146,   72,  146,   75,   78,   82,   83,  146,  146,
-      146,   89,  146,  146,   93,  146,  146,  146,  146,  146,
-
-      101,  146,  146,  146,  146,  109,  146,  146,  113,  146,
-      146,  146,   14,  146,  146,  146,  146,  146,   26,  146,
-       29,  146,  146,  146,  146,   35,  146,  146,  146,   40,
-      146,   45,  146,  146,   56,   61,  146,  146,   74,  146,
-      146,  146,  146,   92,  146,   95,   96,  146,  146,  146,
-      146,  107,  108,  110,  146,  146,  146,   13,  146,  146,
-      146,  146,  146,  146,   21,  146,   33,   34,  146,  146,
-      146,  146,   46,   51,   63,  146,  146,   86,   87,  146,
-      146,  146,  146,  146,  146,  111,  146,  146,  146,  146,
-      146,  146,  146,  146,   31,  146,  146,   39,  146,   64,
-
-      146,  146,  146,   99,  146,  146,  146,  146,   12,  146,
-      146,  146,  146,   24,  146,   36,  146,  146,   84,  146,
-      146,  100,  104,  146,  116,   16,  146,  146,  146,   27,
-       38,  146,   85,   91,  146,  146,  146,   18,   19,  146,
-      146,  106,  146,  146,  146,  146,  146,   94,  146,   44,
-       17,    0
+        0,    0,  154,    2,    2,  152,  152,  151,  150,  152,
+      129,  125,  128,  125,  125,  148,  121,  118,  122,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  126,    4,    5,    5,    3,  144,
+      144,  141,  145,  145,  139,  146,  146,  143,    1,  151,
+      119,  149,  148,  148,  148,    0,  123,  120,  124,  147,
+      147,  147,  147,   10,  147,  147,  147,   22,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  127,  147,
+
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,   58,   66,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,   80,   81,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,    4,    5,    3,  144,  140,  145,  138,  138,  130,
+      132,  133,  134,  135,  136,  137,  138,  146,  142,  149,
+      148,    0,  148,    6,    7,  147,    9,   11,  147,  147,
+       15,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,   32,  147,  147,  147,  147,  147,  147,  147,  147,
+
+       43,  147,  147,  147,  147,  147,  147,   50,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,   62,  147,   68,
+      147,  147,  147,  147,  147,  147,  147,   76,  147,   79,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  147,   98,   99,  147,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      130,  132,  131,  147,  147,  147,  147,  147,  147,  147,
+       20,   23,  147,  147,  147,   28,  147,  147,   30,  147,
+      147,  147,  147,   37,  147,  147,   41,   42,  147,  147,
+      147,  147,  147,  147,  147,   52,   53,  147,   55,  147,
+
+       57,  147,  147,  147,  147,   65,   67,   69,   70,   71,
+      147,   73,  147,  147,   77,  147,  147,  147,  147,  147,
+      147,   89,  147,   91,  147,  147,  147,  147,  147,  147,
+      147,  147,  147,  103,  104,  106,  147,  147,  147,  147,
+      147,  147,  113,  147,  115,  116,  130,  131,    8,  147,
+      147,  147,  147,  147,  147,  147,   25,  147,  147,  147,
+      147,  147,  147,  147,  147,  147,  147,  147,  147,  147,
+      147,  147,   47,   48,   49,  147,   54,  147,   59,   60,
+      147,  147,  147,   72,  147,   75,   78,   82,   83,  147,
+      147,  147,  147,   90,  147,  147,   94,  147,  147,  147,
+
+      147,  147,  102,  147,  147,  147,  147,  110,  147,  147,
+      114,  147,  147,  147,   14,  147,  147,  147,  147,  147,
+       26,  147,   29,  147,  147,  147,  147,   35,  147,  147,
+      147,   40,  147,   45,  147,  147,   56,   61,  147,  147,
+       74,  147,  147,  147,  147,  147,   93,  147,   96,   97,
+      147,  147,  147,  147,  108,  109,  111,  147,  147,  147,
+       13,  147,  147,  147,  147,  147,  147,   21,  147,   33,
+       34,  147,  147,  147,  147,   46,   51,   63,  147,  147,
+       86,   87,  147,  147,  147,  147,  147,  147,  147,  112,
+      147,  147,  147,  147,  147,  147,  147,  147,   31,  147,
+
+      147,   39,  147,   64,  147,   88,  147,  147,  100,  147,
+      147,  147,  147,   12,  147,  147,  147,  147,   24,  147,
+       36,  147,  147,   84,  147,  147,  101,  105,  147,  117,
+       16,  147,  147,  147,   27,   38,  147,   85,   92,  147,
+      147,  147,   18,   19,  147,  147,  107,  147,  147,  147,
+      147,  147,   95,  147,   44,   17,    0
     } ;
 
-static yyconst YY_CHAR yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
         1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
@@ -487,7 +469,7 @@ static yyconst YY_CHAR yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst YY_CHAR yy_meta[72] =
+static yyconst flex_int32_t yy_meta[72] =
     {   0,
         1,    1,    2,    1,    1,    3,    1,    4,    1,    5,
         5,    6,    6,    5,    1,    1,    1,    7,    7,    7,
@@ -499,26 +481,26 @@ static yyconst YY_CHAR yy_meta[72] =
         8
     } ;
 
-static yyconst flex_uint16_t yy_base[568] =
+static yyconst flex_int16_t yy_base[573] =
     {   0,
         0,    1,   46,    0,  117,  163,    2,    3,  128,  132,
-        6,   10,  257, 1219, 1219,    0, 1219,   13, 1219,  233,
-     1219, 1219, 1219,  208,    6,  130,    4, 1219,  195,  124,
+        6,   10,  257, 1225, 1225,    0, 1225,   13, 1225,  233,
+     1225, 1225, 1225,  208,    6,  130,    4, 1225,  195,  124,
       161,  170,  178,  207,  260,   92,  167,  161,   96,  107,
       219,  214,  212,  224,  236,   92,  279,  272,  278,  281,
-      128,  168,    0,  125, 1219,  184,    4,   19,    0,    0,
+      128,  168,    0,  125, 1225,  184,    4,   19,    0,    0,
         0,  146,    0,    0,  343,    0,    0,  145,    0,   22,
-     1219,    0,  307,  337,  341,   18, 1219, 1219, 1219,    0,
+     1225,    0,  307,  337,  341,   18, 1225, 1225, 1225,    0,
       170,  224,  177,  181,  215,  269,  224,    0,  263,  326,
-      336,  286,  290,  333,  382,  321,  322,  329, 1219,  328,
+      336,  286,  290,  333,  382,  321,  322,  329, 1225,  328,
 
       347,  351,  346,  350,  346,  353,  352,  374,  386,  385,
       383,  382,  402,    0,  395,  382,  389,  403,  399,  397,
       399,  401,  399,  408,  418,    0,  421,  406,  410,  425,
       437,  438,  438,  455,  451,  436,  457,  462,  462,  463,
       461,  454,  447,  454,  462,  469,  465,  466,  474,  460,
-      481,  148,   29,    0,    0, 1219,    0, 1219, 1219,   22,
-       24, 1219, 1219, 1219, 1219, 1219,    0,    0, 1219,    0,
+      481,  148,   29,    0,    0, 1225,    0, 1225, 1225,   22,
+       24, 1225, 1225, 1225, 1225, 1225,    0,    0, 1225,    0,
       509,   26,   28,    0,    0,  478,    0,  481,  478,  501,
       493,  514,  513,  501,  517,  500,  503,  498,  523,  505,
       521,    0,  518,  527,  526,  529,  513,  532,  520,  532,
@@ -526,118 +508,120 @@ static yyconst flex_uint16_t yy_base[568] =
         0,  537,  521,  523,  523,  525,  558,  563,  559,  562,
       554,  568,  568,  560,  574,  575,  576,  577,  569,    0,
       564,  565,  581,  578,  582,  569,  571,    0,  581,    0,
-      589,  590,  576,  595,  586,  580,  595,  605,  621,  625,
-      624,   98,  618,  629,    0,  623,  617,  625,  624,  634,
-      635,  629,  625,  642,  630,  624,  644,  634,  641,  632,
-       30,  125,    0,  633,  639,  649,  642,  652,  647,  647,
-        0,  674,  673,  675,  670,    0,  671,  674,  673,  681,
-      674,  676,  684,  693,  690,  688,    0,    0,  685,  682,
-      702,  700,  686,  687,  699,    0,    0,  693,    0,  696,
-
-        0,  687,  694,  696,  726,    0,    0,    0,    0,    0,
-      696,    0,  698,  734,  727,  730,  731,  741,  746,  751,
-        0,  748,    0,  736,  731,  736,  753,  744,  756,  748,
-      741,  758,    0,  745,    0,  760,  745,  747,  761,  764,
-      762,    0,  767,    0,  761,  136, 1219,    0,  772,  786,
-      780,  801,  788,  800,  805,    0,  795,  792,  806,  807,
-      804,  813,  803,  811,  808,  804,  805,  816,  817,  804,
-      821,    0,    0,    0,  818,    0,  819,    0,    0,  807,
-      823,  808,    0,  827,    0,    0,    0,    0,  814,  835,
-      840,    0,  855,  846,    0,  859,  861,  846,  858,  850,
-
-        0,  849,  851,  866,  867,    0,  854,  873,    0,  860,
-      867,  863,    0,  857,  862,  880,  873,  863,    0,  883,
-        0,  880,  873,  876,  870,    0,  872,  903,  913,    0,
-       93,    0,  898,  906,    0,    0,  904,  922,    0,  915,
-      905,  901,  913,    0,  916,    0,    0,  915,  921,  930,
-      931,    0,    0,    0,  915,  920,  921,    0,  928,  923,
-      926,  928,  936,  933,    0,  938,    0,    0,  939,  937,
-      928,  931,    0,    0,    0,  953,  959,    0,    0,  973,
-      969,  960,  967,  969,  970,    0,  964,  978,  972,  971,
-      972,  969,  972,  977,    0,  974,  979,    0,  975,    0,
-
-      982,  992,  985,    0,  992,  984,  985,  994,    0,  997,
-     1001,  996, 1018,    0, 1012,    0, 1027, 1018, 1019, 1020,
-     1031,    0,    0, 1029,    0,    0, 1024, 1038, 1026,    0,
-        0, 1036,    0,    0, 1026, 1042, 1028,    0,    0, 1035,
-     1045,    0, 1042, 1046, 1036, 1050, 1037,    0, 1038,    0,
-        0, 1219, 1103, 1113, 1123, 1133, 1143, 1147, 1150, 1156,
-     1164, 1174, 1184, 1194, 1204, 1209, 1211
+      589,  590,  576,  595,  587,  579,  610,  614,  625,  627,
+      625,   98,  619,  630,    0,  624,  618,  626,  625,  635,
+      636,  630,  626,  643,  631,  626,  645,  635,  642,  633,
+       30,  125,    0,  634,  640,  651,  643,  653,  649,  662,
+        0,  683,  677,  677,  671,    0,  672,  675,  674,  682,
+      675,  677,  685,  694,  691,  689,    0,    0,  686,  683,
+      704,  701,  687,  688,  700,    0,    0,  694,    0,  697,
+
+        0,  688,  696,  697,  735,    0,    0,    0,    0,    0,
+      696,    0,  698,  725,  727,  730,  731,  741,  746,  751,
+      736,    0,  750,    0,  738,  733,  738,  755,  746,  758,
+      751,  744,  760,    0,  747,    0,  762,  747,  749,  763,
+      767,  765,    0,  769,    0,  763,  136, 1225,    0,  787,
+      795,  784,  805,  791,  802,  806,    0,  797,  794,  808,
+      809,  806,  815,  805,  813,  810,  807,  808,  818,  819,
+      806,  823,    0,    0,    0,  820,    0,  821,    0,    0,
+      810,  826,  810,    0,  829,    0,    0,    0,    0,  829,
+      844,  844,  855,    0,  860,  850,    0,  862,  864,  849,
+
+      861,  853,    0,  852,  854,  869,  870,    0,  857,  876,
+        0,  864,  871,  867,    0,  860,  865,  883,  876,  866,
+        0,  887,    0,  884,  877,  880,  887,    0,  896,  916,
+      919,    0,   93,    0,  903,  910,    0,    0,  907,  925,
+        0,  918,  908,  904,  910,  917,    0,  920,    0,    0,
+      919,  925,  934,  936,    0,    0,    0,  920,  925,  926,
+        0,  932,  927,  930,  932,  941,  938,    0,  943,    0,
+        0,  945,  956,  954,  959,    0,    0,    0,  968,  966,
+        0,    0,  957,  980,  975,  965,  972,  974,  975,    0,
+      969,  983,  977,  976,  977,  975,  978,  983,    0,  980,
+
+      985,    0,  980,    0,  987,    0,  997,  991,    0,  998,
+      990,  992, 1015,    0, 1025, 1031, 1026, 1034,    0, 1020,
+        0, 1034, 1024, 1024, 1025, 1036,    0,    0, 1034,    0,
+        0, 1029, 1043, 1031,    0,    0, 1041,    0,    0, 1031,
+     1048, 1034,    0,    0, 1041, 1051,    0, 1048, 1051, 1041,
+     1055, 1043,    0, 1044,    0,    0, 1225, 1109, 1119, 1129,
+     1139, 1149, 1153, 1156, 1162, 1170, 1180, 1190, 1200, 1210,
+     1215, 1217
     } ;
 
-static yyconst flex_int16_t yy_def[568] =
+static yyconst flex_int16_t yy_def[573] =
     {   0,
-      553,  553,  552,    3,  554,  554,  555,  555,  556,  556,
-      557,  557,  552,  552,  552,  558,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  552,  552,  552,  552,  560,  561,
-      561,  552,  562,  562,  563,  564,  564,  552,  558,  552,
-      552,  565,  552,  552,  552,  552,  552,  552,  552,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  552,  559,
-
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  552,  552,  560,  561,  552,  562,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  566,  564,  552,  565,
-      552,  552,  552,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      552,  552,  567,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  552,  552,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,    0,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552
+      558,  558,  557,    3,  559,  559,  560,  560,  561,  561,
+      562,  562,  557,  557,  557,  563,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  557,  557,  557,  557,  565,  566,
+      566,  557,  567,  567,  568,  569,  569,  557,  563,  557,
+      557,  570,  557,  557,  557,  557,  557,  557,  557,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  557,  564,
+
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  557,  557,  565,  566,  557,  567,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  571,  569,  557,  570,
+      557,  557,  557,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      557,  557,  572,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  557,  557,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,  564,  564,  564,  564,
+      564,  564,  564,  564,  564,  564,    0,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557
     } ;
 
-static yyconst flex_uint16_t yy_nxt[1291] =
+static yyconst flex_int16_t yy_nxt[1297] =
     {   0,
-      552,  552,   15,   15,   61,   61,  153,  153,   67,   62,
-       62,   68,   67,  552,   70,   68,   70,   73,   73,   77,
-       78,  153,  153,   70,  552,   70,  172,  172,  552,  173,
+      557,  557,   15,   15,   61,   61,  153,  153,   67,   62,
+       62,   68,   67,  557,   70,   68,   70,   73,   73,   77,
+       78,  153,  153,   70,  557,   70,  172,  172,  557,  173,
       173,  153,  153,  261,  262,  262,  262,  173,  173,  173,
-      173,  346,  262,  552,   16,   16,   17,   18,   19,   18,
+      173,  347,  262,  557,   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,
@@ -647,8 +631,8 @@ static yyconst flex_uint16_t yy_nxt[1291] =
        38,   39,   40,   41,   42,   43,   44,   45,   46,   47,
        48,   49,   50,   51,   52,   53,   54,   17,   56,   57,
        58,   17,   17,   17,   17,   17,  110,  115,  116,  132,
-       64,   17,   17,   17,   64,   62,  262,  262,  472,   62,
-       74,   75,   75,  327,   81,  148,  151,  262,  262,  152,
+       64,   17,   17,   17,   64,   62,  262,  262,  475,   62,
+       74,   75,   75,  328,   81,  148,  151,  262,  262,  152,
       169,   76,   82,  156,   83,  110,  115,  116,  132,   84,
        17,   17,   17,   17,   56,   57,   58,   17,   17,   17,
        17,   17,   65,   81,  148,  151,   65,   17,   17,   17,
@@ -660,8 +644,8 @@ static yyconst flex_uint16_t yy_nxt[1291] =
       113,  149,  150,   90,   94,  114,  177,  112,   95,  178,
        91,   88,   96,   92,   93,  100,  117,  101,   97,  121,
       118,   98,  102,  123,  119,  122,  125,  103,   71,  124,
-      120,  179,  175,  129,  126,  182,  552,  130,  127,  552,
-      176,  128,  552,  552,  100,  117,  101,  552,  121,  118,
+      120,  179,  175,  129,  126,  182,  557,  130,  127,  557,
+      176,  128,  557,  557,  100,  117,  101,  557,  121,  118,
       131,  102,  123,  119,  122,  125,  103,  104,  124,  120,
       179,  175,  129,  126,  182,  105,  130,  127,  106,  176,
       128,  107,  180,  137,  108,  140,  133,  109,  183,  131,
@@ -669,12 +653,12 @@ static yyconst flex_uint16_t yy_nxt[1291] =
       134,  138,  141,  142,  135,  181,  104,  189,  190,  139,
       136,  145,  143,  146,  105,  144,  147,  106,   73,   73,
       107,  180,  137,  108,  140,  133,  109,  183,   76,  134,
-      138,  141,  142,  135,  181,  552,  189,  190,  139,  136,
+      138,  141,  142,  135,  181,  557,  189,  190,  139,  136,
       145,  143,  146,  184,  144,  147,  159,  185,  171,  171,
-      552,   74,   75,   75,  160,  161,  197,   76,   76,  198,
+      557,   74,   75,   75,  160,  161,  197,   76,   76,  198,
       199,  162,   76,  200,  186,  163,  187,  201,  188,  191,
-      202,  203,  184,  164,  192,  552,  185,  165,  205,  166,
-      206,  552,  204,  167,  207,  197,  208,   76,  198,  199,
+      202,  203,  184,  164,  192,  557,  185,  165,  205,  166,
+      206,  557,  204,  167,  207,  197,  208,   76,  198,  199,
       162,   76,  200,  186,  163,  187,  201,  188,  191,  202,
 
       203,  193,  164,  192,  194,  209,  165,  205,  166,  206,
@@ -700,83 +684,85 @@ static yyconst flex_uint16_t yy_nxt[1291] =
       297,  298,  299,  300,  301,  302,  303,  304,  305,  307,
 
       308,  309,  310,  311,  294,  312,  313,  314,  306,  315,
-      316,  317,  318,  295,  319,  320,  321,  296,  322,  297,
+      316,  317,  318,  295,  319,  322,  320,  296,  321,  297,
       298,  299,  300,  301,  302,  303,  304,  305,  307,  308,
       309,  310,  311,  323,  312,  313,  314,  306,  315,  316,
-      317,  318,  324,  319,  320,  321,  325,  322,  326,  328,
+      317,  318,  324,  319,  322,  320,  325,  321,  326,  327,
       329,  330,  331,  332,  333,  334,  335,  336,  337,  338,
-      339,  340,  323,  341,  342,  344,  345,  348,  343,  349,
-      350,  324,  351,  352,  353,  325,  354,  326,  328,  329,
+      339,  340,  323,  341,  342,  343,  345,  346,  349,  344,
+      350,  324,  351,  352,  353,  325,  354,  326,  327,  329,
       330,  331,  332,  333,  334,  335,  336,  337,  338,  339,
-      340,  355,  341,  342,  344,  345,  348,  343,  349,  350,
+      340,  355,  341,  342,  343,  345,  346,  349,  344,  350,
 
       356,  351,  352,  353,  357,  354,  358,  359,  360,  361,
       362,  363,  364,  365,  366,  367,  368,  369,  370,  371,
       355,  372,  373,  374,  375,  376,  377,  378,  379,  356,
-      380,  552,  383,  357,  384,  358,  359,  360,  361,  362,
-      363,  364,  365,  366,  367,  368,  369,  370,  371,  381,
-      372,  373,  374,  375,  376,  377,  378,  379,  385,  380,
-      382,  383,  386,  384,  387,  388,  389,  390,  391,  392,
-      393,  394,  395,  396,  397,  398,  399,  400,  381,  401,
-      402,  403,  404,  405,  406,  407,  408,  385,  409,  382,
-      410,  386,  411,  387,  388,  389,  390,  391,  392,  393,
-
-      394,  395,  396,  397,  398,  399,  400,  412,  401,  402,
-      403,  404,  405,  406,  407,  408,  413,  409,  414,  410,
-      415,  411,  417,  416,  418,  419,  420,  421,  422,  423,
-      424,  425,  426,  427,  428,  429,  412,  430,  431,  432,
-      433,  434,  435,  436,  437,  413,  438,  414,  439,  415,
-      440,  417,  416,  418,  419,  420,  421,  422,  423,  424,
-      425,  426,  427,  428,  429,  441,  430,  431,  432,  433,
-      434,  435,  436,  437,  442,  438,  443,  439,  444,  440,
+      380,  381,  384,  357,  385,  358,  359,  360,  361,  362,
+      363,  364,  365,  366,  367,  368,  369,  370,  371,  386,
+      372,  373,  374,  375,  376,  377,  378,  379,  382,  380,
+      381,  384,  387,  385,  388,  389,  390,  391,  392,  383,
+      393,  394,  395,  396,  397,  398,  399,  400,  386,  401,
+      402,  403,  404,  405,  406,  407,  408,  382,  409,  410,
+      411,  387,  412,  388,  389,  390,  391,  392,  383,  393,
+
+      394,  395,  396,  397,  398,  399,  400,  413,  401,  402,
+      403,  404,  405,  406,  407,  408,  414,  409,  410,  411,
+      415,  412,  416,  417,  419,  420,  418,  421,  422,  423,
+      424,  425,  426,  427,  428,  429,  413,  430,  431,  432,
+      433,  434,  435,  436,  437,  414,  438,  439,  440,  415,
+      441,  416,  417,  419,  420,  418,  421,  422,  423,  424,
+      425,  426,  427,  428,  429,  442,  430,  431,  432,  433,
+      434,  435,  436,  437,  443,  438,  439,  440,  444,  441,
       445,  446,  447,  448,  449,  450,  451,  452,  453,  454,
-      455,  456,  457,  458,  441,  459,  460,  461,  462,  463,
+      455,  456,  457,  458,  442,  459,  460,  461,  462,  463,
 
-      464,  465,  466,  442,  467,  443,  468,  444,  469,  445,
+      464,  465,  466,  443,  467,  468,  469,  444,  470,  445,
       446,  447,  448,  449,  450,  451,  452,  453,  454,  455,
-      456,  457,  458,  470,  459,  460,  461,  462,  463,  464,
-      465,  466,  471,  467,  473,  468,  474,  469,  475,  476,
+      456,  457,  458,  471,  459,  460,  461,  462,  463,  464,
+      465,  466,  472,  467,  468,  469,  473,  470,  474,  476,
       477,  478,  479,  480,  481,  482,  483,  484,  485,  486,
-      487,  488,  470,  489,  490,  491,  492,  493,  494,  495,
-      496,  471,  497,  473,  498,  474,  499,  475,  476,  477,
+      487,  488,  471,  489,  490,  491,  492,  493,  494,  495,
+      496,  472,  497,  498,  499,  473,  500,  474,  476,  477,
       478,  479,  480,  481,  482,  483,  484,  485,  486,  487,
-      488,  500,  489,  490,  491,  492,  493,  494,  495,  496,
-      501,  497,  502,  498,  503,  499,  504,  505,  506,  507,
+      488,  501,  489,  490,  491,  492,  493,  494,  495,  496,
+      502,  497,  498,  499,  503,  500,  504,  505,  506,  507,
 
       508,  509,  510,  511,  512,  513,  514,  515,  516,  517,
-      500,  518,  519,  520,  521,  522,  523,  524,  525,  501,
-      526,  502,  527,  503,  528,  504,  505,  506,  507,  508,
-      509,  510,  511,  512,  513,  514,  515,  516,  517,  529,
-      518,  519,  520,  521,  522,  523,  524,  525,  530,  526,
-      531,  527,  532,  528,  533,  534,  535,  536,  537,  538,
-      539,  540,  541,  542,  543,  544,  545,  546,  529,  547,
-      548,  549,  550,  551,  552,  552,  552,  530,  552,  531,
-      552,  532,  552,  533,  534,  535,  536,  537,  538,  539,
-      540,  541,  542,  543,  544,  545,  546,  552,  547,  548,
-
-      549,  550,  551,   14,   14,   14,   14,   14,   14,   14,
-       14,   14,   14,   59,   59,   59,   59,   59,   59,   59,
-       59,   59,   59,   60,   60,   60,   60,   60,   60,   60,
-       60,   60,   60,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   66,   66,   66,   66,   66,   66,   66,
-       66,   66,   66,   69,   69,   80,   80,   80,  552,   80,
-      154,  154,  154,  154,  155,  155,  155,  552,  155,  155,
-      155,  155,  155,  155,  157,  157,  157,  552,  157,  157,
-      157,  157,  552,  157,  158,  158,  158,  158,  158,  158,
-      158,  158,  158,  158,  168,  168,  552,  168,  168,  168,
-
-      168,  168,  168,  168,  170,  552,  170,  170,  170,  170,
-      170,  170,  170,  170,  263,  263,  347,  347,   13,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552
+      501,  518,  519,  520,  521,  522,  523,  524,  525,  502,
+      526,  527,  528,  503,  529,  504,  505,  506,  507,  508,
+      509,  510,  511,  512,  513,  514,  515,  516,  517,  530,
+      518,  519,  520,  521,  522,  523,  524,  525,  531,  526,
+      527,  528,  532,  529,  533,  534,  535,  536,  537,  538,
+      539,  540,  541,  542,  543,  544,  545,  546,  530,  547,
+      548,  549,  550,  551,  552,  553,  554,  531,  555,  556,
+      557,  532,  557,  533,  534,  535,  536,  537,  538,  539,
+      540,  541,  542,  543,  544,  545,  546,  557,  547,  548,
+
+      549,  550,  551,  552,  553,  554,  557,  555,  556,   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,  557,   80,  154,  154,  154,  154,
+      155,  155,  155,  557,  155,  155,  155,  155,  155,  155,
+      157,  157,  157,  557,  157,  157,  157,  157,  557,  157,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+
+      168,  168,  557,  168,  168,  168,  168,  168,  168,  168,
+      170,  557,  170,  170,  170,  170,  170,  170,  170,  170,
+      263,  263,  348,  348,   13,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557
+
     } ;
 
-static yyconst flex_int16_t yy_chk[1291] =
+static yyconst flex_int16_t yy_chk[1297] =
     {   0,
         0,    0,    1,    2,    7,    8,   57,   57,   11,    7,
         8,   11,   12,    0,   18,   12,   18,   25,   25,   27,
@@ -792,8 +778,8 @@ static yyconst flex_int16_t yy_chk[1291] =
         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
         3,    3,    3,    3,    3,    3,    3,    5,    5,    5,
         5,    5,    5,    5,    5,    5,   36,   39,   40,   46,
-        9,    5,    5,    5,   10,    9,  262,  262,  431,   10,
-       26,   26,   26,  242,   30,   51,   54,  346,  346,  152,
+        9,    5,    5,    5,   10,    9,  262,  262,  433,   10,
+       26,   26,   26,  242,   30,   51,   54,  347,  347,  152,
        68,   26,   30,   62,   30,   36,   39,   40,   46,   30,
         5,    5,    5,    6,    6,    6,    6,    6,    6,    6,
         6,    6,    9,   30,   51,   54,   10,    6,    6,    6,
@@ -845,84 +831,86 @@ static yyconst flex_int16_t yy_chk[1291] =
       210,  211,  212,  213,  214,  215,  216,  217,  218,  219,
 
       221,  222,  223,  224,  207,  225,  226,  227,  218,  229,
-      231,  232,  233,  208,  234,  235,  236,  209,  237,  210,
+      231,  232,  233,  208,  234,  236,  235,  209,  235,  210,
       211,  212,  213,  214,  215,  216,  217,  218,  219,  221,
-      222,  223,  224,  238,  225,  226,  227,  218,  229,  231,
-      232,  233,  239,  234,  235,  236,  240,  237,  241,  243,
+      222,  223,  224,  237,  225,  226,  227,  218,  229,  231,
+      232,  233,  238,  234,  236,  235,  239,  235,  240,  241,
+      243,  244,  246,  247,  248,  249,  250,  251,  252,  253,
+      254,  255,  237,  256,  257,  258,  259,  260,  264,  258,
+      265,  238,  266,  267,  268,  239,  269,  240,  241,  243,
       244,  246,  247,  248,  249,  250,  251,  252,  253,  254,
-      255,  256,  238,  257,  258,  259,  260,  264,  258,  265,
-      266,  239,  267,  268,  269,  240,  270,  241,  243,  244,
-      246,  247,  248,  249,  250,  251,  252,  253,  254,  255,
-      256,  272,  257,  258,  259,  260,  264,  258,  265,  266,
-
-      273,  267,  268,  269,  274,  270,  275,  277,  278,  279,
-      280,  281,  282,  283,  284,  285,  286,  289,  290,  291,
-      272,  292,  293,  294,  295,  298,  300,  302,  303,  273,
-      304,    0,  311,  274,  313,  275,  277,  278,  279,  280,
-      281,  282,  283,  284,  285,  286,  289,  290,  291,  305,
-      292,  293,  294,  295,  298,  300,  302,  303,  314,  304,
-      305,  311,  315,  313,  316,  317,  318,  319,  320,  322,
-      324,  325,  326,  327,  328,  329,  330,  331,  305,  332,
-      334,  336,  337,  338,  339,  340,  341,  314,  343,  305,
-      345,  315,  349,  316,  317,  318,  319,  320,  322,  324,
-
-      325,  326,  327,  328,  329,  330,  331,  350,  332,  334,
-      336,  337,  338,  339,  340,  341,  351,  343,  352,  345,
-      353,  349,  354,  353,  355,  357,  358,  359,  360,  361,
-      362,  363,  364,  365,  366,  367,  350,  368,  369,  370,
-      371,  375,  377,  380,  381,  351,  382,  352,  384,  353,
-      389,  354,  353,  355,  357,  358,  359,  360,  361,  362,
-      363,  364,  365,  366,  367,  390,  368,  369,  370,  371,
-      375,  377,  380,  381,  391,  382,  393,  384,  394,  389,
-      396,  397,  398,  399,  400,  402,  403,  404,  405,  407,
-      408,  410,  411,  412,  390,  414,  415,  416,  417,  418,
-
-      420,  422,  423,  391,  424,  393,  425,  394,  427,  396,
-      397,  398,  399,  400,  402,  403,  404,  405,  407,  408,
-      410,  411,  412,  428,  414,  415,  416,  417,  418,  420,
-      422,  423,  429,  424,  433,  425,  434,  427,  437,  438,
-      440,  441,  442,  443,  445,  448,  449,  450,  451,  455,
-      456,  457,  428,  459,  460,  461,  462,  463,  464,  466,
-      469,  429,  470,  433,  471,  434,  472,  437,  438,  440,
-      441,  442,  443,  445,  448,  449,  450,  451,  455,  456,
-      457,  476,  459,  460,  461,  462,  463,  464,  466,  469,
-      477,  470,  480,  471,  481,  472,  482,  483,  484,  485,
-
-      487,  488,  489,  490,  491,  492,  493,  494,  496,  497,
-      476,  499,  501,  502,  503,  505,  506,  507,  508,  477,
-      510,  480,  511,  481,  512,  482,  483,  484,  485,  487,
-      488,  489,  490,  491,  492,  493,  494,  496,  497,  513,
-      499,  501,  502,  503,  505,  506,  507,  508,  515,  510,
-      517,  511,  518,  512,  519,  520,  521,  524,  527,  528,
-      529,  532,  535,  536,  537,  540,  541,  543,  513,  544,
-      545,  546,  547,  549,    0,    0,    0,  515,    0,  517,
-        0,  518,    0,  519,  520,  521,  524,  527,  528,  529,
-      532,  535,  536,  537,  540,  541,  543,    0,  544,  545,
-
-      546,  547,  549,  553,  553,  553,  553,  553,  553,  553,
-      553,  553,  553,  554,  554,  554,  554,  554,  554,  554,
-      554,  554,  554,  555,  555,  555,  555,  555,  555,  555,
-      555,  555,  555,  556,  556,  556,  556,  556,  556,  556,
-      556,  556,  556,  557,  557,  557,  557,  557,  557,  557,
-      557,  557,  557,  558,  558,  559,  559,  559,    0,  559,
-      560,  560,  560,  560,  561,  561,  561,    0,  561,  561,
-      561,  561,  561,  561,  562,  562,  562,    0,  562,  562,
-      562,  562,    0,  562,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  564,  564,    0,  564,  564,  564,
-
-      564,  564,  564,  564,  565,    0,  565,  565,  565,  565,
-      565,  565,  565,  565,  566,  566,  567,  567,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
-      552,  552,  552,  552,  552,  552,  552,  552,  552,  552
+      255,  270,  256,  257,  258,  259,  260,  264,  258,  265,
+
+      272,  266,  267,  268,  273,  269,  274,  275,  277,  278,
+      279,  280,  281,  282,  283,  284,  285,  286,  289,  290,
+      270,  291,  292,  293,  294,  295,  298,  300,  302,  272,
+      303,  304,  311,  273,  313,  274,  275,  277,  278,  279,
+      280,  281,  282,  283,  284,  285,  286,  289,  290,  314,
+      291,  292,  293,  294,  295,  298,  300,  302,  305,  303,
+      304,  311,  315,  313,  316,  317,  318,  319,  320,  305,
+      321,  323,  325,  326,  327,  328,  329,  330,  314,  331,
+      332,  333,  335,  337,  338,  339,  340,  305,  341,  342,
+      344,  315,  346,  316,  317,  318,  319,  320,  305,  321,
+
+      323,  325,  326,  327,  328,  329,  330,  350,  331,  332,
+      333,  335,  337,  338,  339,  340,  351,  341,  342,  344,
+      352,  346,  353,  354,  355,  356,  354,  358,  359,  360,
+      361,  362,  363,  364,  365,  366,  350,  367,  368,  369,
+      370,  371,  372,  376,  378,  351,  381,  382,  383,  352,
+      385,  353,  354,  355,  356,  354,  358,  359,  360,  361,
+      362,  363,  364,  365,  366,  390,  367,  368,  369,  370,
+      371,  372,  376,  378,  391,  381,  382,  383,  392,  385,
+      393,  395,  396,  398,  399,  400,  401,  402,  404,  405,
+      406,  407,  409,  410,  390,  412,  413,  414,  416,  417,
+
+      418,  419,  420,  391,  422,  424,  425,  392,  426,  393,
+      395,  396,  398,  399,  400,  401,  402,  404,  405,  406,
+      407,  409,  410,  427,  412,  413,  414,  416,  417,  418,
+      419,  420,  429,  422,  424,  425,  430,  426,  431,  435,
+      436,  439,  440,  442,  443,  444,  445,  446,  448,  451,
+      452,  453,  427,  454,  458,  459,  460,  462,  463,  464,
+      465,  429,  466,  467,  469,  430,  472,  431,  435,  436,
+      439,  440,  442,  443,  444,  445,  446,  448,  451,  452,
+      453,  473,  454,  458,  459,  460,  462,  463,  464,  465,
+      474,  466,  467,  469,  475,  472,  479,  480,  483,  484,
+
+      485,  486,  487,  488,  489,  491,  492,  493,  494,  495,
+      473,  496,  497,  498,  500,  501,  503,  505,  507,  474,
+      508,  510,  511,  475,  512,  479,  480,  483,  484,  485,
+      486,  487,  488,  489,  491,  492,  493,  494,  495,  513,
+      496,  497,  498,  500,  501,  503,  505,  507,  515,  508,
+      510,  511,  516,  512,  517,  518,  520,  522,  523,  524,
+      525,  526,  529,  532,  533,  534,  537,  540,  513,  541,
+      542,  545,  546,  548,  549,  550,  551,  515,  552,  554,
+        0,  516,    0,  517,  518,  520,  522,  523,  524,  525,
+      526,  529,  532,  533,  534,  537,  540,    0,  541,  542,
+
+      545,  546,  548,  549,  550,  551,    0,  552,  554,  558,
+      558,  558,  558,  558,  558,  558,  558,  558,  558,  559,
+      559,  559,  559,  559,  559,  559,  559,  559,  559,  560,
+      560,  560,  560,  560,  560,  560,  560,  560,  560,  561,
+      561,  561,  561,  561,  561,  561,  561,  561,  561,  562,
+      562,  562,  562,  562,  562,  562,  562,  562,  562,  563,
+      563,  564,  564,  564,    0,  564,  565,  565,  565,  565,
+      566,  566,  566,    0,  566,  566,  566,  566,  566,  566,
+      567,  567,  567,    0,  567,  567,  567,  567,    0,  567,
+      568,  568,  568,  568,  568,  568,  568,  568,  568,  568,
+
+      569,  569,    0,  569,  569,  569,  569,  569,  569,  569,
+      570,    0,  570,  570,  570,  570,  570,  570,  570,  570,
+      571,  571,  572,  572,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557,  557,  557,  557,  557,
+      557,  557,  557,  557,  557,  557
+
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[153] =
+static yyconst flex_int32_t yy_rule_can_match_eol[154] =
     {   0,
 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -930,8 +918,8 @@ static yyconst flex_int32_t yy_rule_can_match_eol[153] =
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
-    0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0,     };
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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.
@@ -996,6 +984,7 @@ class ParseOrderBy;
 class ParseOrderByItem;
 class ParsePartitionClause;
 class ParsePredicate;
+class ParsePriority;
 class ParseSample;
 class ParseScalarLiteral;
 class ParseSearchedWhenClause;
@@ -1048,7 +1037,7 @@ class UnaryOperation;
 
 
 
-#line 1052 "SqlLexer_gen.cpp"
+#line 1041 "SqlLexer_gen.cpp"
 
 #define INITIAL 0
 #define CONDITION_SQL 1
@@ -1134,11 +1123,11 @@ void quickstep_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
 
 FILE *quickstep_yyget_in (yyscan_t yyscanner );
 
-void quickstep_yyset_in  (FILE * _in_str ,yyscan_t yyscanner );
+void quickstep_yyset_in  (FILE * in_str ,yyscan_t yyscanner );
 
 FILE *quickstep_yyget_out (yyscan_t yyscanner );
 
-void quickstep_yyset_out  (FILE * _out_str ,yyscan_t yyscanner );
+void quickstep_yyset_out  (FILE * out_str ,yyscan_t yyscanner );
 
 yy_size_t quickstep_yyget_leng (yyscan_t yyscanner );
 
@@ -1146,11 +1135,11 @@ char *quickstep_yyget_text (yyscan_t yyscanner );
 
 int quickstep_yyget_lineno (yyscan_t yyscanner );
 
-void quickstep_yyset_lineno (int _line_number ,yyscan_t yyscanner );
+void quickstep_yyset_lineno (int line_number ,yyscan_t yyscanner );
 
 int quickstep_yyget_column  (yyscan_t yyscanner );
 
-void quickstep_yyset_column (int _column_no ,yyscan_t yyscanner );
+void quickstep_yyset_column (int column_no ,yyscan_t yyscanner );
 
 YYSTYPE * quickstep_yyget_lval (yyscan_t yyscanner );
 
@@ -1172,10 +1161,6 @@ extern int quickstep_yywrap (yyscan_t yyscanner );
 #endif
 #endif
 
-#ifndef YY_NO_UNPUT
-    
-#endif
-
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner);
 #endif
@@ -1196,12 +1181,7 @@ static int input (yyscan_t yyscanner );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1290,7 +1270,7 @@ extern int quickstep_yylex \
 
 /* Code executed at the end of each rule. */
 #ifndef YY_BREAK
-#define YY_BREAK /*LINTED*/break;
+#define YY_BREAK break;
 #endif
 
 #define YY_RULE_SETUP \
@@ -1300,11 +1280,16 @@ extern int quickstep_yylex \
  */
 YY_DECL
 {
-	yy_state_type yy_current_state;
-	char *yy_cp, *yy_bp;
-	int yy_act;
+	register yy_state_type yy_current_state;
+	register char *yy_cp, *yy_bp;
+	register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
+#line 129 "../SqlLexer.lpp"
+
+
+#line 1292 "SqlLexer_gen.cpp"
+
     yylval = yylval_param;
 
     yylloc = yylloc_param;
@@ -1335,13 +1320,7 @@ YY_DECL
 		quickstep_yy_load_buffer_state(yyscanner );
 		}
 
-	{
-#line 128 "../SqlLexer.lpp"
-
-
-#line 1343 "SqlLexer_gen.cpp"
-
-	while ( /*CONSTCOND*/1 )		/* loops until end-of-file is reached */
+	while ( 1 )		/* loops until end-of-file is reached */
 		{
 		yy_cp = yyg->yy_c_buf_p;
 
@@ -1357,7 +1336,7 @@ YY_DECL
 yy_match:
 		do
 			{
-			YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
 			if ( yy_accept[yy_current_state] )
 				{
 				yyg->yy_last_accepting_state = yy_current_state;
@@ -1366,13 +1345,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 553 )
+				if ( yy_current_state >= 558 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 552 );
+		while ( yy_current_state != 557 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1383,7 +1362,7 @@ yy_find_action:
 
 		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
 			{
-			yy_size_t yyl;
+			int yyl;
 			for ( yyl = 0; yyl < yyleng; ++yyl )
 				if ( yytext[yyl] == '\n' )
 					   
@@ -1406,7 +1385,7 @@ do_action:	/* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 131 "../SqlLexer.lpp"
+#line 132 "../SqlLexer.lpp"
 {
     /* A forward slash character represents a system command. */
     BEGIN(CONDITION_COMMAND);
@@ -1418,7 +1397,7 @@ YY_RULE_SETUP
 case 2:
 /* rule 2 can match eol */
 YY_RULE_SETUP
-#line 139 "../SqlLexer.lpp"
+#line 140 "../SqlLexer.lpp"
 {
     /* This is a SQL command. Place the char back and process normally. */
     yyless(0);
@@ -1430,7 +1409,7 @@ YY_RULE_SETUP
 
 case 3:
 YY_RULE_SETUP
-#line 148 "../SqlLexer.lpp"
+#line 149 "../SqlLexer.lpp"
 {
     /* This is a command argument. */
     yylval->string_value_ = new quickstep::ParseString(
@@ -1440,7 +1419,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 155 "../SqlLexer.lpp"
+#line 156 "../SqlLexer.lpp"
 {
     /* Ignore whitespace. */
   }
@@ -1448,7 +1427,7 @@ YY_RULE_SETUP
 case 5:
 /* rule 5 can match eol */
 YY_RULE_SETUP
-#line 159 "../SqlLexer.lpp"
+#line 160 "../SqlLexer.lpp"
 {
     /* Newline reverts the lexer to the initial state. */
     yycolumn = 0;
@@ -1460,627 +1439,632 @@ YY_RULE_SETUP
 
 case 6:
 YY_RULE_SETUP
-#line 168 "../SqlLexer.lpp"
+#line 169 "../SqlLexer.lpp"
 return TOKEN_ADD;
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 169 "../SqlLexer.lpp"
+#line 170 "../SqlLexer.lpp"
 return TOKEN_ALL;
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 170 "../SqlLexer.lpp"
+#line 171 "../SqlLexer.lpp"
 return TOKEN_ALTER;
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 171 "../SqlLexer.lpp"
+#line 172 "../SqlLexer.lpp"
 return TOKEN_AND;
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 172 "../SqlLexer.lpp"
+#line 173 "../SqlLexer.lpp"
 return TOKEN_AS;
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 173 "../SqlLexer.lpp"
+#line 174 "../SqlLexer.lpp"
 return TOKEN_ASC;
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 174 "../SqlLexer.lpp"
+#line 175 "../SqlLexer.lpp"
 return TOKEN_ASC;
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 175 "../SqlLexer.lpp"
+#line 176 "../SqlLexer.lpp"
 return TOKEN_BETWEEN;
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 176 "../SqlLexer.lpp"
+#line 177 "../SqlLexer.lpp"
 return TOKEN_BIGINT;
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 177 "../SqlLexer.lpp"
+#line 178 "../SqlLexer.lpp"
 return TOKEN_BIT;
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 178 "../SqlLexer.lpp"
+#line 179 "../SqlLexer.lpp"
 return TOKEN_BITWEAVING;
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 179 "../SqlLexer.lpp"
+#line 180 "../SqlLexer.lpp"
 return TOKEN_BLOCKPROPERTIES;
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 180 "../SqlLexer.lpp"
+#line 181 "../SqlLexer.lpp"
 return TOKEN_BLOCKSAMPLE;
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 181 "../SqlLexer.lpp"
+#line 182 "../SqlLexer.lpp"
 return TOKEN_BLOOM_FILTER;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 182 "../SqlLexer.lpp"
+#line 183 "../SqlLexer.lpp"
 return TOKEN_CASE;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 183 "../SqlLexer.lpp"
+#line 184 "../SqlLexer.lpp"
 return TOKEN_CSB_TREE;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 184 "../SqlLexer.lpp"
+#line 185 "../SqlLexer.lpp"
 return TOKEN_BY;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 185 "../SqlLexer.lpp"
+#line 186 "../SqlLexer.lpp"
 return TOKEN_CHARACTER;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 186 "../SqlLexer.lpp"
+#line 187 "../SqlLexer.lpp"
 return TOKEN_CHARACTER;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 187 "../SqlLexer.lpp"
+#line 188 "../SqlLexer.lpp"
 return TOKEN_CHECK;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 188 "../SqlLexer.lpp"
+#line 189 "../SqlLexer.lpp"
 return TOKEN_COLUMN;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 189 "../SqlLexer.lpp"
+#line 190 "../SqlLexer.lpp"
 return TOKEN_CONSTRAINT;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 190 "../SqlLexer.lpp"
+#line 191 "../SqlLexer.lpp"
 return TOKEN_COPY;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 191 "../SqlLexer.lpp"
+#line 192 "../SqlLexer.lpp"
 return TOKEN_CREATE;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 192 "../SqlLexer.lpp"
+#line 193 "../SqlLexer.lpp"
 return TOKEN_DATE;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 193 "../SqlLexer.lpp"
+#line 194 "../SqlLexer.lpp"
 return TOKEN_DATETIME;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 194 "../SqlLexer.lpp"
+#line 195 "../SqlLexer.lpp"
 return TOKEN_DAY;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 195 "../SqlLexer.lpp"
+#line 196 "../SqlLexer.lpp"
 return TOKEN_DECIMAL;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 196 "../SqlLexer.lpp"
+#line 197 "../SqlLexer.lpp"
 return TOKEN_DEFAULT;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 197 "../SqlLexer.lpp"
+#line 198 "../SqlLexer.lpp"
 return TOKEN_DELETE;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 198 "../SqlLexer.lpp"
+#line 199 "../SqlLexer.lpp"
 return TOKEN_DELIMITER;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 199 "../SqlLexer.lpp"
+#line 200 "../SqlLexer.lpp"
 return TOKEN_DESC;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 200 "../SqlLexer.lpp"
+#line 201 "../SqlLexer.lpp"
 return TOKEN_DESC;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 201 "../SqlLexer.lpp"
+#line 202 "../SqlLexer.lpp"
 return TOKEN_DISTINCT;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 202 "../SqlLexer.lpp"
+#line 203 "../SqlLexer.lpp"
 return TOKEN_DOUBLE;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 203 "../SqlLexer.lpp"
+#line 204 "../SqlLexer.lpp"
 return TOKEN_DROP;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 204 "../SqlLexer.lpp"
+#line 205 "../SqlLexer.lpp"
 return TOKEN_ELSE;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 205 "../SqlLexer.lpp"
+#line 206 "../SqlLexer.lpp"
 return TOKEN_END;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 206 "../SqlLexer.lpp"
+#line 207 "../SqlLexer.lpp"
 return TOKEN_ESCAPE_STRINGS;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 207 "../SqlLexer.lpp"
+#line 208 "../SqlLexer.lpp"
 return TOKEN_EXISTS;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 208 "../SqlLexer.lpp"
+#line 209 "../SqlLexer.lpp"
 return TOKEN_EXTRACT;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 209 "../SqlLexer.lpp"
+#line 210 "../SqlLexer.lpp"
 return TOKEN_FALSE;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 210 "../SqlLexer.lpp"
+#line 211 "../SqlLexer.lpp"
 return TOKEN_FIRST;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 211 "../SqlLexer.lpp"
+#line 212 "../SqlLexer.lpp"
 return TOKEN_FLOAT;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 212 "../SqlLexer.lpp"
+#line 213 "../SqlLexer.lpp"
 return TOKEN_FOR;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 213 "../SqlLexer.lpp"
+#line 214 "../SqlLexer.lpp"
 return TOKEN_FOREIGN;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 214 "../SqlLexer.lpp"
+#line 215 "../SqlLexer.lpp"
 return TOKEN_FROM;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 215 "../SqlLexer.lpp"
+#line 216 "../SqlLexer.lpp"
 return TOKEN_FULL;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 216 "../SqlLexer.lpp"
+#line 217 "../SqlLexer.lpp"
 return TOKEN_GROUP;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 217 "../SqlLexer.lpp"
+#line 218 "../SqlLexer.lpp"
 return TOKEN_HASH;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 218 "../SqlLexer.lpp"
+#line 219 "../SqlLexer.lpp"
 return TOKEN_HAVING;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 219 "../SqlLexer.lpp"
+#line 220 "../SqlLexer.lpp"
 return TOKEN_HOUR;
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 220 "../SqlLexer.lpp"
+#line 221 "../SqlLexer.lpp"
 return TOKEN_IN;
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 221 "../SqlLexer.lpp"
+#line 222 "../SqlLexer.lpp"
 return TOKEN_INDEX;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 222 "../SqlLexer.lpp"
+#line 223 "../SqlLexer.lpp"
 return TOKEN_INNER;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 223 "../SqlLexer.lpp"
+#line 224 "../SqlLexer.lpp"
 return TOKEN_INSERT;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 224 "../SqlLexer.lpp"
+#line 225 "../SqlLexer.lpp"
 return TOKEN_INTEGER;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 225 "../SqlLexer.lpp"
+#line 226 "../SqlLexer.lpp"
 return TOKEN_INTEGER;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 226 "../SqlLexer.lpp"
+#line 227 "../SqlLexer.lpp"
 return TOKEN_INTERVAL;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 227 "../SqlLexer.lpp"
+#line 228 "../SqlLexer.lpp"
 return TOKEN_INTO;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 228 "../SqlLexer.lpp"
+#line 229 "../SqlLexer.lpp"
 return TOKEN_IS;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 229 "../SqlLexer.lpp"
+#line 230 "../SqlLexer.lpp"
 return TOKEN_JOIN;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 230 "../SqlLexer.lpp"
+#line 231 "../SqlLexer.lpp"
 return TOKEN_KEY;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 231 "../SqlLexer.lpp"
+#line 232 "../SqlLexer.lpp"
 return TOKEN_LAST;
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 232 "../SqlLexer.lpp"
+#line 233 "../SqlLexer.lpp"
 return TOKEN_LEFT;
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 233 "../SqlLexer.lpp"
+#line 234 "../SqlLexer.lpp"
 return TOKEN_LIKE;
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 234 "../SqlLexer.lpp"
+#line 235 "../SqlLexer.lpp"
 return TOKEN_LIMIT;
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 235 "../SqlLexer.lpp"
+#line 236 "../SqlLexer.lpp"
 return TOKEN_LONG;
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 236 "../SqlLexer.lpp"
+#line 237 "../SqlLexer.lpp"
 return TOKEN_MINUTE;
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 237 "../SqlLexer.lpp"
+#line 238 "../SqlLexer.lpp"
 return TOKEN_MONTH;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 238 "../SqlLexer.lpp"
+#line 239 "../SqlLexer.lpp"
 return TOKEN_NOT;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 239 "../SqlLexer.lpp"
+#line 240 "../SqlLexer.lpp"
 return TOKEN_NULL;
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 240 "../SqlLexer.lpp"
+#line 241 "../SqlLexer.lpp"
 return TOKEN_NULLS;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 241 "../SqlLexer.lpp"
+#line 242 "../SqlLexer.lpp"
 return TOKEN_OFF;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 242 "../SqlLexer.lpp"
+#line 243 "../SqlLexer.lpp"
 return TOKEN_ON;
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 243 "../SqlLexer.lpp"
+#line 244 "../SqlLexer.lpp"
 return TOKEN_OR;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 244 "../SqlLexer.lpp"
+#line 245 "../SqlLexer.lpp"
 return TOKEN_ORDER;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 245 "../SqlLexer.lpp"
+#line 246 "../SqlLexer.lpp"
 return TOKEN_OUTER;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 246 "../SqlLexer.lpp"
+#line 247 "../SqlLexer.lpp"
 return TOKEN_PARTITION;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 247 "../SqlLexer.lpp"
+#line 248 "../SqlLexer.lpp"
 return TOKEN_PARTITIONS;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 248 "../SqlLexer.lpp"
+#line 249 "../SqlLexer.lpp"
 return TOKEN_PERCENT;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 249 "../SqlLexer.lpp"
+#line 250 "../SqlLexer.lpp"
 return TOKEN_PRIMARY;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 250 "../SqlLexer.lpp"
-return TOKEN_QUIT;
+#line 251 "../SqlLexer.lpp"
+return TOKEN_PRIORITY;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 251 "../SqlLexer.lpp"
-return TOKEN_RANGE;
+#line 252 "../SqlLexer.lpp"
+return TOKEN_QUIT;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 252 "../SqlLexer.lpp"
-return TOKEN_REAL;
+#line 253 "../SqlLexer.lpp"
+return TOKEN_RANGE;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 253 "../SqlLexer.lpp"
-return TOKEN_REFERENCES;
+#line 254 "../SqlLexer.lpp"
+return TOKEN_REAL;
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 254 "../SqlLexer.lpp"
-return TOKEN_REGEXP;
+#line 255 "../SqlLexer.lpp"
+return TOKEN_REFERENCES;
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 255 "../SqlLexer.lpp"
-return TOKEN_RIGHT;
+#line 256 "../SqlLexer.lpp"
+return TOKEN_REGEXP;
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 256 "../SqlLexer.lpp"
-return TOKEN_ROW_DELIMITER;
+#line 257 "../SqlLexer.lpp"
+return TOKEN_RIGHT;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 257 "../SqlLexer.lpp"
-return TOKEN_SECOND;
+#line 258 "../SqlLexer.lpp"
+return TOKEN_ROW_DELIMITER;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 258 "../SqlLexer.lpp"
-return TOKEN_SELECT;
+#line 259 "../SqlLexer.lpp"
+return TOKEN_SECOND;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 259 "../SqlLexer.lpp"
-return TOKEN_SET;
+#line 260 "../SqlLexer.lpp"
+return TOKEN_SELECT;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 260 "../SqlLexer.lpp"
-return TOKEN_SMA;
+#line 261 "../SqlLexer.lpp"
+return TOKEN_SET;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 261 "../SqlLexer.lpp"
-return TOKEN_SMALLINT;
+#line 262 "../SqlLexer.lpp"
+return TOKEN_SMA;
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 262 "../SqlLexer.lpp"
-return TOKEN_SUBSTRING;
+#line 263 "../SqlLexer.lpp"
+return TOKEN_SMALLINT;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 263 "../SqlLexer.lpp"
-return TOKEN_TABLE;
+#line 264 "../SqlLexer.lpp"
+return TOKEN_SUBSTRING;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 264 "../SqlLexer.lpp"
-return TOKEN_THEN;
+#line 265 "../SqlLexer.lpp"
+return TOKEN_TABLE;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 265 "../SqlLexer.lpp"
-return TOKEN_TIME;
+#line 266 "../SqlLexer.lpp"
+return TOKEN_THEN;
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 266 "../SqlLexer.lpp"
-return TOKEN_TIMESTAMP;
+#line 267 "../SqlLexer.lpp"
+return TOKEN_TIME;
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 267 "../SqlLexer.lpp"
-return TOKEN_TRUE;
+#line 268 "../SqlLexer.lpp"
+return TOKEN_TIMESTAMP;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 268 "../SqlLexer.lpp"
-return TOKEN_TUPLESAMPLE;
+#line 269 "../SqlLexer.lpp"
+return TOKEN_TRUE;
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 269 "../SqlLexer.lpp"
-return TOKEN_UNIQUE;
+#line 270 "../SqlLexer.lpp"
+return TOKEN_TUPLESAMPLE;
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 270 "../SqlLexer.lpp"
-return TOKEN_UPDATE;
+#line 271 "../SqlLexer.lpp"
+return TOKEN_UNIQUE;
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 271 "../SqlLexer.lpp"
-return TOKEN_USING;
+#line 272 "../SqlLexer.lpp"
+return TOKEN_UPDATE;
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 272 "../SqlLexer.lpp"
-return TOKEN_VALUES;
+#line 273 "../SqlLexer.lpp"
+return TOKEN_USING;
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 273 "../SqlLexer.lpp"
-return TOKEN_VARCHAR;
+#line 274 "../SqlLexer.lpp"
+return TOKEN_VALUES;
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 274 "../SqlLexer.lpp"
-return TOKEN_WHEN;
+#line 275 "../SqlLexer.lpp"
+return TOKEN_VARCHAR;
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 275 "../SqlLexer.lpp"
-return TOKEN_WHERE;
+#line 276 "../SqlLexer.lpp"
+return TOKEN_WHEN;
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 276 "../SqlLexer.lpp"
-return TOKEN_WITH;
+#line 277 "../SqlLexer.lpp"
+return TOKEN_WHERE;
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 277 "../SqlLexer.lpp"
-return TOKEN_YEAR;
+#line 278 "../SqlLexer.lpp"
+return TOKEN_WITH;
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 278 "../SqlLexer.lpp"
-return TOKEN_YEARMONTH;
+#line 279 "../SqlLexer.lpp"
+return TOKEN_YEAR;
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
 #line 280 "../SqlLexer.lpp"
-return TOKEN_EQ;
+return TOKEN_YEARMONTH;
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 281 "../SqlLexer.lpp"
-return TOKEN_NEQ;
+#line 282 "../SqlLexer.lpp"
+return TOKEN_EQ;
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 282 "../SqlLexer.lpp"
+#line 283 "../SqlLexer.lpp"
 return TOKEN_NEQ;
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 283 "../SqlLexer.lpp"
-return TOKEN_LT;
+#line 284 "../SqlLexer.lpp"
+return TOKEN_NEQ;
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 284 "../SqlLexer.lpp"
-return TOKEN_GT;
+#line 285 "../SqlLexer.lpp"
+return TOKEN_LT;
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 285 "../SqlLexer.lpp"
-return TOKEN_LEQ;
+#line 286 "../SqlLexer.lpp"
+return TOKEN_GT;
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 286 "../SqlLexer.lpp"
-return TOKEN_GEQ;
+#line 287 "../SqlLexer.lpp"
+return TOKEN_LEQ;
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
 #line 288 "../SqlLexer.lpp"
-return yytext[0];
+return TOKEN_GEQ;
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 289 "../SqlLexer.lpp"
+#line 290 "../SqlLexer.lpp"
+return yytext[0];
+	YY_BREAK
+case 126:
+YY_RULE_SETUP
+#line 291 "../SqlLexer.lpp"
 return yytext[0];
 	YY_BREAK
 /**
     * Quoted strings. Prefacing a string with an 'e' or 'E' causes escape
     * sequences to be processed (as in PostgreSQL).
     **/
-case 126:
+case 127:
 YY_RULE_SETUP
-#line 295 "../SqlLexer.lpp"
+#line 297 "../SqlLexer.lpp"
 {
     yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
     BEGIN(CONDITION_STRING_SINGLE_QUOTED_ESCAPED);
   }
 	YY_BREAK
-case 127:
+case 128:
 YY_RULE_SETUP
-#line 300 "../SqlLexer.lpp"
+#line 302 "../SqlLexer.lpp"
 {
     yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
     BEGIN(CONDITION_STRING_SINGLE_QUOTED);
   }
 	YY_BREAK
-case 128:
+case 129:
 YY_RULE_SETUP
-#line 305 "../SqlLexer.lpp"
+#line 307 "../SqlLexer.lpp"
 {
     yylval->string_value_ = new quickstep::ParseString(yylloc->first_line, yylloc->first_column);
     BEGIN(CONDITION_STRING_DOUBLE_QUOTED);
@@ -2092,7 +2076,7 @@ YY_RULE_SETUP
 case YY_STATE_EOF(CONDITION_STRING_SINGLE_QUOTED):
 case YY_STATE_EOF(CONDITION_STRING_SINGLE_QUOTED_ESCAPED):
 case YY_STATE_EOF(CONDITION_STRING_DOUBLE_QUOTED):
-#line 314 "../SqlLexer.lpp"
+#line 316 "../SqlLexer.lpp"
 {
     delete yylval->string_value_;
     BEGIN(INITIAL);
@@ -2103,9 +2087,9 @@ case YY_STATE_EOF(CONDITION_STRING_DOUBLE_QUOTED):
 
 /* Process escape sequences. */
 
-case 129:
+case 130:
 YY_RULE_SETUP
-#line 324 "../SqlLexer.lpp"
+#line 326 "../SqlLexer.lpp"
 {
     /* Octal code */
     unsigned int code;
@@ -2119,9 +2103,9 @@ YY_RULE_SETUP
     yylval->string_value_->push_back(code);
   }
 	YY_BREAK
-case 130:
+case 131:
 YY_RULE_SETUP
-#line 336 "../SqlLexer.lpp"
+#line 338 "../SqlLexer.lpp"
 {
     /* Hexadecimal code */
     unsigned int code;
@@ -2129,9 +2113,9 @@ YY_RULE_SETUP
     yylval->string_value_->push_back(code);
   }
 	YY_BREAK
-case 131:
+case 132:
 YY_RULE_SETUP
-#line 342 "../SqlLexer.lpp"
+#line 344 "../SqlLexer.lpp"
 {
     /* A numeric escape sequence that isn't correctly specified. */
     delete yylval->string_value_;
@@ -2140,58 +2124,58 @@ YY_RULE_SETUP
     return TOKEN_LEX_ERROR;
   }
 	YY_BREAK
-case 132:
+case 133:
 YY_RULE_SETUP
-#line 349 "../SqlLexer.lpp"
+#line 351 "../SqlLexer.lpp"
 {
     /* Backspace */
     yylval->string_value_->push_back('\b');
   }
 	YY_BREAK
-case 133:
+case 134:
 YY_RULE_SETUP
-#line 353 "../SqlLexer.lpp"
+#line 355 "../SqlLexer.lpp"
 {
     /* Form-feed */
     yylval->string_value_->push_back('\f');
   }
 	YY_BREAK
-case 134:
+case 135:
 YY_RULE_SETUP
-#line 357 "../SqlLexer.lpp"
+#line 359 "../SqlLexer.lpp"
 {
     /* Newline */
     yylval->string_value_->push_back('\n');
   }
 	YY_BREAK
-case 135:
+case 136:
 YY_RULE_SETUP
-#line 361 "../SqlLexer.lpp"
+#line 363 "../SqlLexer.lpp"
 {
     /* Carriage-return */
     yylval->string_value_->push_back('\r');
   }
 	YY_BREAK
-case 136:
+case 137:
 YY_RULE_SETUP
-#line 365 "../SqlLexer.lpp"
+#line 367 "../SqlLexer.lpp"
 {
     /* Horizontal Tab */
     yylval->string_value_->push_back('\t');
   }
 	YY_BREAK
-case 137:
-/* rule 137 can match eol */
+case 138:
+/* rule 138 can match eol */
 YY_RULE_SETUP
-#line 369 "../SqlLexer.lpp"
+#line 371 "../SqlLexer.lpp"
 {
     /* Any other character (including actual newline or carriage return) */
     yylval->string_value_->push_back(yytext[1]);
   }
 	YY_BREAK
-case 138:
+case 139:
 YY_RULE_SETUP
-#line 373 "../SqlLexer.lpp"
+#line 375 "../SqlLexer.lpp"
 {
     /* This should only be encountered right before an EOF. */
     delete yylval->string_value_;
@@ -2202,17 +2186,17 @@ YY_RULE_SETUP
 	YY_BREAK
 
 
-case 139:
+case 140:
 YY_RULE_SETUP
-#line 383 "../SqlLexer.lpp"
+#line 385 "../SqlLexer.lpp"
 {
     /* Two quotes in a row become a single quote (this is specified by the SQL standard). */
     yylval->string_value_->push_back('\'');
   }
 	YY_BREAK
-case 140:
+case 141:
 YY_RULE_SETUP
-#line 387 "../SqlLexer.lpp"
+#line 389 "../SqlLexer.lpp"
 {
     /* End string */
     BEGIN(CONDITION_SQL);
@@ -2221,17 +2205,17 @@ YY_RULE_SETUP
 	YY_BREAK
 
 
-case 141:
+case 142:
 YY_RULE_SETUP
-#line 395 "../SqlLexer.lpp"
+#line 397 "../SqlLexer.lpp"
 {
     /* Two quotes in a row become a single quote (this is specified by the SQL standard). */
     yylval->string_value_->push_back('"');
   }
 	YY_BREAK
-case 142:
+case 143:
 YY_RULE_SETUP
-#line 399 "../SqlLexer.lpp"
+#line 401 "../SqlLexer.lpp"
 {
     /* End string */
     BEGIN(CONDITION_SQL);
@@ -2239,94 +2223,94 @@ YY_RULE_SETUP
   }
 	YY_BREAK
 
-case 143:
-/* rule 143 can match eol */
+case 144:
+/* rule 144 can match eol */
 YY_RULE_SETUP
-#line 406 "../SqlLexer.lpp"
+#line 408 "../SqlLexer.lpp"
 {
   /* Scan up to a quote. */
   yylval->string_value_->append(yytext, yyleng);
 }
 	YY_BREAK
-case 144:
-/* rule 144 can match eol */
+case 145:
+/* rule 145 can match eol */
 YY_RULE_SETUP
-#line 411 "../SqlLexer.lpp"
+#line 413 "../SqlLexer.lpp"
 {
   /* Scan up to a quote or escape sequence. */
   yylval->string_value_->append(yytext, yyleng);
 }
 	YY_BREAK
-case 145:
-/* rule 145 can match eol */
+case 146:
+/* rule 146 can match eol */
 YY_RULE_SETUP
-#line 416 "../SqlLexer.lpp"
+#line 418 "../SqlLexer.lpp"
 {
   /* Scan up to a quote. */
   yylval->string_value_->append(yytext, yyleng);
 }
 	YY_BREAK
 
-case 146:
+case 147:
 YY_RULE_SETUP
-#line 422 "../SqlLexer.lpp"
+#line 424 "../SqlLexer.lpp"
 {
     yylval->string_value_ = new quickstep::ParseString(
         yylloc->first_line, yylloc->first_column, std::string(yytext, yyleng));
     return TOKEN_NAME;
   }
 	YY_BREAK
-case 147:
+case 148:
 YY_RULE_SETUP
-#line 428 "../SqlLexer.lpp"
+#line 430 "../SqlLexer.lpp"
 {
     yylval->numeric_literal_value_ = new quickstep::NumericParseLiteralValue(
         yylloc->first_line, yylloc->first_column, yytext);
     return TOKEN_UNSIGNED_NUMVAL;
   }
 	YY_BREAK
-case 148:
-YY_RULE_SETUP
-#line 434 "../SqlLexer.lpp"
-/* comment */
-	YY_BREAK
 case 149:
-/* rule 149 can match eol */
 YY_RULE_SETUP
 #line 436 "../SqlLexer.lpp"
-{ yycolumn = 0; }
+/* comment */
 	YY_BREAK
 case 150:
+/* rule 150 can match eol */
 YY_RULE_SETUP
 #line 438 "../SqlLexer.lpp"
+{ yycolumn = 0; }
+	YY_BREAK
+case 151:
+YY_RULE_SETUP
+#line 440 "../SqlLexer.lpp"
 ; /* ignore white space */
 	YY_BREAK
 /* CONDITION_SQL */
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(CONDITION_COMMAND):
 case YY_STATE_EOF(CONDITION_SQL):
-#line 442 "../SqlLexer.lpp"
+#line 444 "../SqlLexer.lpp"
 {
   /* All conditions except for mutli-state string extracting conditions. */
   BEGIN(INITIAL);
   return TOKEN_EOF;
 }
 	YY_BREAK
-case 151:
+case 152:
 YY_RULE_SETUP
-#line 448 "../SqlLexer.lpp"
+#line 450 "../SqlLexer.lpp"
 {
   BEGIN(INITIAL);
   quickstep_yyerror(NULL, yyscanner, NULL, "illegal character");
   return TOKEN_LEX_ERROR;
 }
 	YY_BREAK
-case 152:
+case 153:
 YY_RULE_SETUP
-#line 454 "../SqlLexer.lpp"
+#line 456 "../SqlLexer.lpp"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 2330 "SqlLexer_gen.cpp"
+#line 2314 "SqlLexer_gen.cpp"
 
 	case YY_END_OF_BUFFER:
 		{
@@ -2456,7 +2440,6 @@ YY_FATAL_ERROR( "flex scanner jammed" );
 			"fatal flex scanner internal error--no action found" );
 	} /* end of action switch */
 		} /* end of scanning one token */
-	} /* end of user's declarations */
 } /* end of quickstep_yylex */
 
 /* yy_get_next_buffer - try to read in a new buffer
@@ -2469,9 +2452,9 @@ YY_FATAL_ERROR( "flex scanner jammed" );
 static int yy_get_next_buffer (yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-	char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	char *source = yyg->yytext_ptr;
-	yy_size_t number_to_move, i;
+	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+	register char *source = yyg->yytext_ptr;
+	register int number_to_move, i;
 	int ret_val;
 
 	if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] )
@@ -2500,7 +2483,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
 	/* Try to read more data. */
 
 	/* First move last chars to start of buffer. */
-	number_to_move = (yy_size_t) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
+	number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1;
 
 	for ( i = 0; i < number_to_move; ++i )
 		*(dest++) = *(source++);
@@ -2603,15 +2586,15 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
 
     static yy_state_type yy_get_previous_state (yyscan_t yyscanner)
 {
-	yy_state_type yy_current_state;
-	char *yy_cp;
+	register yy_state_type yy_current_state;
+	register char *yy_cp;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
 	yy_current_state = yyg->yy_start;
 
 	for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp )
 		{
-		YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
 		if ( yy_accept[yy_current_state] )
 			{
 			yyg->yy_last_accepting_state = yy_current_state;
@@ -2620,7 +2603,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 553 )
+			if ( yy_current_state >= 558 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2636,11 +2619,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
  */
     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state , yyscan_t yyscanner)
 {
-	int yy_is_jam;
+	register int yy_is_jam;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */
-	char *yy_cp = yyg->yy_c_buf_p;
+	register char *yy_cp = yyg->yy_c_buf_p;
 
-	YY_CHAR yy_c = 1;
+	register YY_CHAR yy_c = 1;
 	if ( yy_accept[yy_current_state] )
 		{
 		yyg->yy_last_accepting_state = yy_current_state;
@@ -2649,20 +2632,16 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 553 )
+		if ( yy_current_state >= 558 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 552);
+	yy_is_jam = (yy_current_state == 557);
 
 	(void)yyg;
 	return yy_is_jam ? 0 : yy_current_state;
 }
 
-#ifndef YY_NO_UNPUT
-
-#endif
-
 #ifndef YY_NO_INPUT
 #ifdef __cplusplus
     static int yyinput (yyscan_t yyscanner)
@@ -2823,7 +2802,7 @@ static void quickstep_yy_load_buffer_state  (yyscan_t yyscanner)
 	if ( ! b )
 		YY_FATAL_ERROR( "out of dynamic memory in quickstep_yy_create_buffer()" );
 
-	b->yy_buf_size = (yy_size_t)size;
+	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.
@@ -2984,7 +2963,7 @@ static void quickstep_yyensure_buffer_stack (yyscan_t yyscanner)
 		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
 		 * immediate realloc on the next call.
          */
-		num_to_alloc = 1; // After all that talk, this was set to 1 anyways...
+		num_to_alloc = 1;
 		yyg->yy_buffer_stack = (struct yy_buffer_state**)quickstep_yyalloc
 								(num_to_alloc * sizeof(struct yy_buffer_state*)
 								, yyscanner);
@@ -3001,7 +2980,7 @@ static void quickstep_yyensure_buffer_stack (yyscan_t yyscanner)
 	if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){
 
 		/* Increase the buffer to prepare for a possible push. */
-		yy_size_t grow_size = 8 /* arbitrary grow size */;
+		int 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
@@ -3078,7 +3057,7 @@ YY_BUFFER_STATE quickstep_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yy
 	YY_BUFFER_STATE b;
 	char *buf;
 	yy_size_t n;
-	yy_size_t i;
+	int i;
     
 	/* Get memory for full buffer, including space for trailing EOB's. */
 	n = _yybytes_len + 2;
@@ -3109,9 +3088,7 @@ YY_BUFFER_STATE quickstep_yy_scan_bytes  (yyconst char * yybytes, yy_size_t  _yy
 
 static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner)
 {
-	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-	(void)yyg;
-	(void) fprintf( stderr, "%s\n", msg );
+    	(void) fprintf( stderr, "%s\n", msg );
 	exit( YY_EXIT_FAILURE );
 }
 
@@ -3217,10 +3194,10 @@ void quickstep_yyset_extra (YY_EXTRA_TYPE  user_defined , yyscan_t yyscanner)
 }
 
 /** Set the current line number.
- * @param _line_number line number
+ * @param line_number
  * @param yyscanner The scanner object.
  */
-void quickstep_yyset_lineno (int  _line_number , yyscan_t yyscanner)
+void quickstep_yyset_lineno (int  line_number , yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
@@ -3228,14 +3205,14 @@ void quickstep_yyset_lineno (int  _line_number , yyscan_t yyscanner)
         if (! YY_CURRENT_BUFFER )
            YY_FATAL_ERROR( "quickstep_yyset_lineno called with no buffer" );
     
-    yylineno = _line_number;
+    yylineno = line_number;
 }
 
 /** Set the current column.
- * @param _column_no column number
+ * @param line_number
  * @param yyscanner The scanner object.
  */
-void quickstep_yyset_column (int  _column_no , yyscan_t yyscanner)
+void quickstep_yyset_column (int  column_no , yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
@@ -3243,25 +3220,25 @@ void quickstep_yyset_column (int  _column_no , yyscan_t yyscanner)
         if (! YY_CURRENT_BUFFER )
            YY_FATAL_ERROR( "quickstep_yyset_column called with no buffer" );
     
-    yycolumn = _column_no;
+    yycolumn = column_no;
 }
 
 /** Set the input stream. This does not discard the current
  * input buffer.
- * @param _in_str A readable stream.
+ * @param in_str A readable stream.
  * @param yyscanner The scanner object.
  * @see quickstep_yy_switch_to_buffer
  */
-void quickstep_yyset_in (FILE *  _in_str , yyscan_t yyscanner)
+void quickstep_yyset_in (FILE *  in_str , yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-    yyin = _in_str ;
+    yyin = in_str ;
 }
 
-void quickstep_yyset_out (FILE *  _out_str , yyscan_t yyscanner)
+void quickstep_yyset_out (FILE *  out_str , yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-    yyout = _out_str ;
+    yyout = out_str ;
 }
 
 int quickstep_yyget_debug  (yyscan_t yyscanner)
@@ -3270,10 +3247,10 @@ int quickstep_yyget_debug  (yyscan_t yyscanner)
     return yy_flex_debug;
 }
 
-void quickstep_yyset_debug (int  _bdebug , yyscan_t yyscanner)
+void quickstep_yyset_debug (int  bdebug , yyscan_t yyscanner)
 {
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-    yy_flex_debug = _bdebug ;
+    yy_flex_debug = bdebug ;
 }
 
 /* Accessor methods for yylval and yylloc */
@@ -3436,10 +3413,7 @@ int quickstep_yylex_destroy  (yyscan_t yyscanner)
 #ifndef yytext_ptr
 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner)
 {
-	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-	(void)yyg;
-
-	int i;
+	register int i;
 	for ( i = 0; i < n; ++i )
 		s1[i] = s2[i];
 }
@@ -3448,7 +3422,7 @@ static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yysca
 #ifdef YY_NEED_STRLEN
 static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
 {
-	int n;
+	register int n;
 	for ( n = 0; s[n]; ++n )
 		;
 
@@ -3458,16 +3432,11 @@ static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner)
 
 void *quickstep_yyalloc (yy_size_t  size , yyscan_t yyscanner)
 {
-	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-	(void)yyg;
 	return (void *) malloc( size );
 }
 
 void *quickstep_yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
 {
-	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-	(void)yyg;
-
 	/* The cast to (char *) in the following accommodates both
 	 * implementations that use char* generic pointers, and those
 	 * that use void* generic pointers.  It works with the latter
@@ -3480,14 +3449,12 @@ void *quickstep_yyrealloc  (void * ptr, yy_size_t  size , yyscan_t yyscanner)
 
 void quickstep_yyfree (void * ptr , yyscan_t yyscanner)
 {
-	struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-	(void)yyg;
 	free( (char *) ptr );	/* see quickstep_yyrealloc() for (char *) cast */
 }
 
 #define YYTABLES_NAME "yytables"
 
-#line 454 "../SqlLexer.lpp"
+#line 456 "../SqlLexer.lpp"
 
 
 

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/parser/preprocessed/SqlLexer_gen.hpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlLexer_gen.hpp b/parser/preprocessed/SqlLexer_gen.hpp
index c14559b..e1a9b28 100644
--- a/parser/preprocessed/SqlLexer_gen.hpp
+++ b/parser/preprocessed/SqlLexer_gen.hpp
@@ -12,8 +12,8 @@
 
 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 6
-#define YY_FLEX_SUBMINOR_VERSION 0
+#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
 #if YY_FLEX_SUBMINOR_VERSION > 0
 #define FLEX_BETA
 #endif
@@ -132,15 +132,7 @@ typedef void* yyscan_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
@@ -222,7 +214,7 @@ void quickstep_yyfree (void * ,yyscan_t yyscanner );
 
 /* Begin user sect3 */
 
-#define quickstep_yywrap(yyscanner) (/*CONSTCOND*/1)
+#define quickstep_yywrap(yyscanner) 1
 #define YY_SKIP_YYWRAP
 
 #define yytext_ptr yytext_r
@@ -268,11 +260,11 @@ void quickstep_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner );
 
 FILE *quickstep_yyget_in (yyscan_t yyscanner );
 
-void quickstep_yyset_in  (FILE * _in_str ,yyscan_t yyscanner );
+void quickstep_yyset_in  (FILE * in_str ,yyscan_t yyscanner );
 
 FILE *quickstep_yyget_out (yyscan_t yyscanner );
 
-void quickstep_yyset_out  (FILE * _out_str ,yyscan_t yyscanner );
+void quickstep_yyset_out  (FILE * out_str ,yyscan_t yyscanner );
 
 yy_size_t quickstep_yyget_leng (yyscan_t yyscanner );
 
@@ -280,11 +272,11 @@ char *quickstep_yyget_text (yyscan_t yyscanner );
 
 int quickstep_yyget_lineno (yyscan_t yyscanner );
 
-void quickstep_yyset_lineno (int _line_number ,yyscan_t yyscanner );
+void quickstep_yyset_lineno (int line_number ,yyscan_t yyscanner );
 
 int quickstep_yyget_column  (yyscan_t yyscanner );
 
-void quickstep_yyset_column (int _column_no ,yyscan_t yyscanner );
+void quickstep_yyset_column (int column_no ,yyscan_t yyscanner );
 
 YYSTYPE * quickstep_yyget_lval (yyscan_t yyscanner );
 
@@ -320,12 +312,7 @@ static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Number of entries by which start-condition stack grows. */
@@ -360,9 +347,9 @@ extern int quickstep_yylex \
 #undef YY_DECL
 #endif
 
-#line 454 "../SqlLexer.lpp"
+#line 456 "../SqlLexer.lpp"
 
 
-#line 367 "SqlLexer_gen.hpp"
+#line 354 "SqlLexer_gen.hpp"
 #undef quickstep_yyIN_HEADER
 #endif /* quickstep_yyHEADER_H */


[2/4] incubator-quickstep git commit: Added PRIORITY clause in parser.

Posted by hb...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/parser/preprocessed/SqlParser_gen.cpp
----------------------------------------------------------------------
diff --git a/parser/preprocessed/SqlParser_gen.cpp b/parser/preprocessed/SqlParser_gen.cpp
index 038db14..232b702 100644
--- a/parser/preprocessed/SqlParser_gen.cpp
+++ b/parser/preprocessed/SqlParser_gen.cpp
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 3.0.4.  */
+/* A Bison parser, made by GNU Bison 2.7.  */
 
 /* Bison implementation for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
-
+   
+      Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+   
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
-
+   
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-
+   
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
@@ -26,7 +26,7 @@
    special exception, which will cause the skeleton and the resulting
    Bison output files to be licensed under the GNU General Public
    License without this special exception.
-
+   
    This special exception was added by the Free Software Foundation in
    version 2.2 of Bison.  */
 
@@ -44,7 +44,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.0.4"
+#define YYBISON_VERSION "2.7"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -63,12 +63,15 @@
 #define yyparse         quickstep_yyparse
 #define yylex           quickstep_yylex
 #define yyerror         quickstep_yyerror
+#define yylval          quickstep_yylval
+#define yychar          quickstep_yychar
 #define yydebug         quickstep_yydebug
 #define yynerrs         quickstep_yynerrs
-
+#define yylloc          quickstep_yylloc
 
 /* Copy the first part of user declarations.  */
-#line 35 "../SqlParser.ypp" /* yacc.c:339  */
+/* Line 371 of yacc.c  */
+#line 35 "../SqlParser.ypp"
 
 
 /* Override the default definition, as we only need <first_line> and <first_column>. */
@@ -96,7 +99,8 @@ typedef struct YYLTYPE {
     }                                                           \
   } while (0)
 
-#line 64 "../SqlParser.ypp" /* yacc.c:339  */
+/* Line 371 of yacc.c  */
+#line 64 "../SqlParser.ypp"
 
 #include <cstdlib>
 #include <string>
@@ -121,6 +125,7 @@ typedef struct YYLTYPE {
 #include "parser/ParsePredicate.hpp"
 #include "parser/ParsePredicateExists.hpp"
 #include "parser/ParsePredicateInTableQuery.hpp"
+#include "parser/ParsePriority.hpp"
 #include "parser/ParserUtil.hpp"
 #include "parser/ParseSample.hpp"
 #include "parser/ParseSelect.hpp"
@@ -150,13 +155,14 @@ typedef struct YYLTYPE {
 // Needed for Bison 2.6 and higher, which do not automatically provide this typedef.
 typedef void* yyscan_t;
 
-#line 154 "SqlParser_gen.cpp" /* yacc.c:339  */
+/* Line 371 of yacc.c  */
+#line 160 "SqlParser_gen.cpp"
 
-# ifndef YY_NULLPTR
+# ifndef YY_NULL
 #  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+#   define YY_NULL nullptr
 #  else
-#   define YY_NULLPTR 0
+#   define YY_NULL 0
 #  endif
 # endif
 
@@ -172,7 +178,7 @@ typedef void* yyscan_t;
    by #include "SqlParser_gen.hpp".  */
 #ifndef YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED
 # define YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED
-/* Debug traces.  */
+/* Enabling traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
 #endif
@@ -180,142 +186,144 @@ typedef void* yyscan_t;
 extern int quickstep_yydebug;
 #endif
 
-/* Token type.  */
+/* Tokens.  */
 #ifndef YYTOKENTYPE
 # define YYTOKENTYPE
-  enum yytokentype
-  {
-    TOKEN_COMMAND = 258,
-    TOKEN_NAME = 259,
-    TOKEN_STRING_SINGLE_QUOTED = 260,
-    TOKEN_STRING_DOUBLE_QUOTED = 261,
-    TOKEN_UNSIGNED_NUMVAL = 262,
-    TOKEN_OR = 263,
-    TOKEN_AND = 264,
-    TOKEN_NOT = 265,
-    TOKEN_EQ = 266,
-    TOKEN_LT = 267,
-    TOKEN_LEQ = 268,
-    TOKEN_GT = 269,
-    TOKEN_GEQ = 270,
-    TOKEN_NEQ = 271,
-    TOKEN_LIKE = 272,
-    TOKEN_REGEXP = 273,
-    TOKEN_BETWEEN = 274,
-    TOKEN_IS = 275,
-    UNARY_PLUS = 276,
-    UNARY_MINUS = 277,
-    TOKEN_ADD = 278,
-    TOKEN_ALL = 279,
-    TOKEN_ALTER = 280,
-    TOKEN_AS = 281,
-    TOKEN_ASC = 282,
-    TOKEN_BIGINT = 283,
-    TOKEN_BIT = 284,
-    TOKEN_BITWEAVING = 285,
-    TOKEN_BLOCKPROPERTIES = 286,
-    TOKEN_BLOCKSAMPLE = 287,
-    TOKEN_BLOOM_FILTER = 288,
-    TOKEN_CSB_TREE = 289,
-    TOKEN_BY = 290,
-    TOKEN_CASE = 291,
-    TOKEN_CHARACTER = 292,
-    TOKEN_CHECK = 293,
-    TOKEN_COLUMN = 294,
-    TOKEN_CONSTRAINT = 295,
-    TOKEN_COPY = 296,
-    TOKEN_CREATE = 297,
-    TOKEN_DATE = 298,
-    TOKEN_DATETIME = 299,
-    TOKEN_DAY = 300,
-    TOKEN_DECIMAL = 301,
-    TOKEN_DEFAULT = 302,
-    TOKEN_DELETE = 303,
-    TOKEN_DELIMITER = 304,
-    TOKEN_DESC = 305,
-    TOKEN_DISTINCT = 306,
-    TOKEN_DOUBLE = 307,
-    TOKEN_DROP = 308,
-    TOKEN_ELSE = 309,
-    TOKEN_END = 310,
-    TOKEN_ESCAPE_STRINGS = 311,
-    TOKEN_EXISTS = 312,
-    TOKEN_EXTRACT = 313,
-    TOKEN_FALSE = 314,
-    TOKEN_FIRST = 315,
-    TOKEN_FLOAT = 316,
-    TOKEN_FOR = 317,
-    TOKEN_FOREIGN = 318,
-    TOKEN_FROM = 319,
-    TOKEN_FULL = 320,
-    TOKEN_GROUP = 321,
-    TOKEN_HASH = 322,
-    TOKEN_HAVING = 323,
-    TOKEN_HOUR = 324,
-    TOKEN_IN = 325,
-    TOKEN_INDEX = 326,
-    TOKEN_INNER = 327,
-    TOKEN_INSERT = 328,
-    TOKEN_INTEGER = 329,
-    TOKEN_INTERVAL = 330,
-    TOKEN_INTO = 331,
-    TOKEN_JOIN = 332,
-    TOKEN_KEY = 333,
-    TOKEN_LAST = 334,
-    TOKEN_LEFT = 335,
-    TOKEN_LIMIT = 336,
-    TOKEN_LONG = 337,
-    TOKEN_MINUTE = 338,
-    TOKEN_MONTH = 339,
-    TOKEN_NULL = 340,
-    TOKEN_NULLS = 341,
-    TOKEN_OFF = 342,
-    TOKEN_ON = 343,
-    TOKEN_ORDER = 344,
-    TOKEN_OUTER = 345,
-    TOKEN_PARTITION = 346,
-    TOKEN_PARTITIONS = 347,
-    TOKEN_PERCENT = 348,
-    TOKEN_PRIMARY = 349,
-    TOKEN_QUIT = 350,
-    TOKEN_RANGE = 351,
-    TOKEN_REAL = 352,
-    TOKEN_REFERENCES = 353,
-    TOKEN_RIGHT = 354,
-    TOKEN_ROW_DELIMITER = 355,
-    TOKEN_SECOND = 356,
-    TOKEN_SELECT = 357,
-    TOKEN_SET = 358,
-    TOKEN_SMA = 359,
-    TOKEN_SMALLINT = 360,
-    TOKEN_SUBSTRING = 361,
-    TOKEN_TABLE = 362,
-    TOKEN_THEN = 363,
-    TOKEN_TIME = 364,
-    TOKEN_TIMESTAMP = 365,
-    TOKEN_TRUE = 366,
-    TOKEN_TUPLESAMPLE = 367,
-    TOKEN_UNIQUE = 368,
-    TOKEN_UPDATE = 369,
-    TOKEN_USING = 370,
-    TOKEN_VALUES = 371,
-    TOKEN_VARCHAR = 372,
-    TOKEN_WHEN = 373,
-    TOKEN_WHERE = 374,
-    TOKEN_WITH = 375,
-    TOKEN_YEAR = 376,
-    TOKEN_YEARMONTH = 377,
-    TOKEN_EOF = 378,
-    TOKEN_LEX_ERROR = 379
-  };
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     TOKEN_COMMAND = 258,
+     TOKEN_NAME = 259,
+     TOKEN_STRING_SINGLE_QUOTED = 260,
+     TOKEN_STRING_DOUBLE_QUOTED = 261,
+     TOKEN_UNSIGNED_NUMVAL = 262,
+     TOKEN_OR = 263,
+     TOKEN_AND = 264,
+     TOKEN_NOT = 265,
+     TOKEN_EQ = 266,
+     TOKEN_NEQ = 267,
+     TOKEN_GEQ = 268,
+     TOKEN_GT = 269,
+     TOKEN_LEQ = 270,
+     TOKEN_LT = 271,
+     TOKEN_REGEXP = 272,
+     TOKEN_LIKE = 273,
+     TOKEN_BETWEEN = 274,
+     TOKEN_IS = 275,
+     UNARY_MINUS = 276,
+     UNARY_PLUS = 277,
+     TOKEN_ADD = 278,
+     TOKEN_ALL = 279,
+     TOKEN_ALTER = 280,
+     TOKEN_AS = 281,
+     TOKEN_ASC = 282,
+     TOKEN_BIGINT = 283,
+     TOKEN_BIT = 284,
+     TOKEN_BITWEAVING = 285,
+     TOKEN_BLOCKPROPERTIES = 286,
+     TOKEN_BLOCKSAMPLE = 287,
+     TOKEN_BLOOM_FILTER = 288,
+     TOKEN_CSB_TREE = 289,
+     TOKEN_BY = 290,
+     TOKEN_CASE = 291,
+     TOKEN_CHARACTER = 292,
+     TOKEN_CHECK = 293,
+     TOKEN_COLUMN = 294,
+     TOKEN_CONSTRAINT = 295,
+     TOKEN_COPY = 296,
+     TOKEN_CREATE = 297,
+     TOKEN_DATE = 298,
+     TOKEN_DATETIME = 299,
+     TOKEN_DAY = 300,
+     TOKEN_DECIMAL = 301,
+     TOKEN_DEFAULT = 302,
+     TOKEN_DELETE = 303,
+     TOKEN_DELIMITER = 304,
+     TOKEN_DESC = 305,
+     TOKEN_DISTINCT = 306,
+     TOKEN_DOUBLE = 307,
+     TOKEN_DROP = 308,
+     TOKEN_ELSE = 309,
+     TOKEN_END = 310,
+     TOKEN_ESCAPE_STRINGS = 311,
+     TOKEN_EXISTS = 312,
+     TOKEN_EXTRACT = 313,
+     TOKEN_FALSE = 314,
+     TOKEN_FIRST = 315,
+     TOKEN_FLOAT = 316,
+     TOKEN_FOR = 317,
+     TOKEN_FOREIGN = 318,
+     TOKEN_FROM = 319,
+     TOKEN_FULL = 320,
+     TOKEN_GROUP = 321,
+     TOKEN_HASH = 322,
+     TOKEN_HAVING = 323,
+     TOKEN_HOUR = 324,
+     TOKEN_IN = 325,
+     TOKEN_INDEX = 326,
+     TOKEN_INNER = 327,
+     TOKEN_INSERT = 328,
+     TOKEN_INTEGER = 329,
+     TOKEN_INTERVAL = 330,
+     TOKEN_INTO = 331,
+     TOKEN_JOIN = 332,
+     TOKEN_KEY = 333,
+     TOKEN_LAST = 334,
+     TOKEN_LEFT = 335,
+     TOKEN_LIMIT = 336,
+     TOKEN_LONG = 337,
+     TOKEN_MINUTE = 338,
+     TOKEN_MONTH = 339,
+     TOKEN_NULL = 340,
+     TOKEN_NULLS = 341,
+     TOKEN_OFF = 342,
+     TOKEN_ON = 343,
+     TOKEN_ORDER = 344,
+     TOKEN_OUTER = 345,
+     TOKEN_PARTITION = 346,
+     TOKEN_PARTITIONS = 347,
+     TOKEN_PERCENT = 348,
+     TOKEN_PRIMARY = 349,
+     TOKEN_PRIORITY = 350,
+     TOKEN_QUIT = 351,
+     TOKEN_RANGE = 352,
+     TOKEN_REAL = 353,
+     TOKEN_REFERENCES = 354,
+     TOKEN_RIGHT = 355,
+     TOKEN_ROW_DELIMITER = 356,
+     TOKEN_SECOND = 357,
+     TOKEN_SELECT = 358,
+     TOKEN_SET = 359,
+     TOKEN_SMA = 360,
+     TOKEN_SMALLINT = 361,
+     TOKEN_SUBSTRING = 362,
+     TOKEN_TABLE = 363,
+     TOKEN_THEN = 364,
+     TOKEN_TIME = 365,
+     TOKEN_TIMESTAMP = 366,
+     TOKEN_TRUE = 367,
+     TOKEN_TUPLESAMPLE = 368,
+     TOKEN_UNIQUE = 369,
+     TOKEN_UPDATE = 370,
+     TOKEN_USING = 371,
+     TOKEN_VALUES = 372,
+     TOKEN_VARCHAR = 373,
+     TOKEN_WHEN = 374,
+     TOKEN_WHERE = 375,
+     TOKEN_WITH = 376,
+     TOKEN_YEAR = 377,
+     TOKEN_YEARMONTH = 378,
+     TOKEN_EOF = 379,
+     TOKEN_LEX_ERROR = 380
+   };
 #endif
 
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 
-union YYSTYPE
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
 {
-#line 118 "../SqlParser.ypp" /* yacc.c:355  */
+/* Line 387 of yacc.c  */
+#line 119 "../SqlParser.ypp"
 
   quickstep::ParseString *string_value_;
 
@@ -407,42 +415,57 @@ union YYSTYPE
   quickstep::PtrVector<quickstep::ParseSubqueryTableReference> *with_list_;
   quickstep::ParseSubqueryTableReference *with_list_element_;
 
-#line 411 "SqlParser_gen.cpp" /* yacc.c:355  */
-};
+  quickstep::ParsePriority *opt_priority_clause_;
 
-typedef union YYSTYPE YYSTYPE;
+
+/* Line 387 of yacc.c  */
+#line 423 "SqlParser_gen.cpp"
+} YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 #endif
 
-/* Location type.  */
 #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
-typedef struct YYLTYPE YYLTYPE;
-struct YYLTYPE
+typedef struct YYLTYPE
 {
   int first_line;
   int first_column;
   int last_line;
   int last_column;
-};
+} YYLTYPE;
+# define yyltype YYLTYPE /* obsolescent; will be withdrawn */
 # define YYLTYPE_IS_DECLARED 1
 # define YYLTYPE_IS_TRIVIAL 1
 #endif
 
 
-
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int quickstep_yyparse (void *YYPARSE_PARAM);
+#else
+int quickstep_yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
 int quickstep_yyparse (yyscan_t yyscanner, quickstep::ParseStatement **parsedStatement);
+#else
+int quickstep_yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
 
 #endif /* !YY_QUICKSTEP_YY_SQLPARSER_GEN_HPP_INCLUDED  */
 
 /* Copy the second part of user declarations.  */
-#line 210 "../SqlParser.ypp" /* yacc.c:358  */
+/* Line 390 of yacc.c  */
+#line 213 "../SqlParser.ypp"
 
 /* This header needs YYSTYPE, which is defined by the %union directive above */
 #include "SqlLexer_gen.hpp"
 void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string &feature);
 
-#line 446 "SqlParser_gen.cpp" /* yacc.c:358  */
+/* Line 390 of yacc.c  */
+#line 469 "SqlParser_gen.cpp"
 
 #ifdef short
 # undef short
@@ -456,8 +479,11 @@ typedef unsigned char yytype_uint8;
 
 #ifdef YYTYPE_INT8
 typedef YYTYPE_INT8 yytype_int8;
-#else
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
 #endif
 
 #ifdef YYTYPE_UINT16
@@ -477,7 +503,8 @@ typedef short int yytype_int16;
 #  define YYSIZE_T __SIZE_TYPE__
 # elif defined size_t
 #  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
@@ -499,33 +526,6 @@ typedef short int yytype_int16;
 # endif
 #endif
 
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__                                               \
-      && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \
-     || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-#  define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-#  define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
-# endif
-#endif
-
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
 # define YYUSE(E) ((void) (E))
@@ -533,26 +533,24 @@ typedef short int yytype_int16;
 # define YYUSE(E) /* empty */
 #endif
 
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
-    _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
-    _Pragma ("GCC diagnostic pop")
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(N) (N)
 #else
-# define YY_INITIAL_VALUE(Value) Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
 #endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
+{
+  return yyi;
+}
 #endif
 
-
 #if ! defined yyoverflow || YYERROR_VERBOSE
 
 /* The parser invokes alloca or malloc; define the necessary symbols.  */
@@ -570,7 +568,8 @@ typedef short int yytype_int16;
 #    define alloca _alloca
 #   else
 #    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
+#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */
 #     ifndef EXIT_SUCCESS
@@ -582,8 +581,8 @@ typedef short int yytype_int16;
 # endif
 
 # ifdef YYSTACK_ALLOC
-   /* Pacify GCC's 'empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
 #  ifndef YYSTACK_ALLOC_MAXIMUM
     /* The OS might guarantee only one guard page at the bottom of the stack,
        and a page size can be as small as 4096 bytes.  So we cannot safely
@@ -599,7 +598,7 @@ typedef short int yytype_int16;
 #  endif
 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
        && ! ((defined YYMALLOC || defined malloc) \
-             && (defined YYFREE || defined free)))
+	     && (defined YYFREE || defined free)))
 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
 #   ifndef EXIT_SUCCESS
 #    define EXIT_SUCCESS 0
@@ -607,13 +606,15 @@ typedef short int yytype_int16;
 #  endif
 #  ifndef YYMALLOC
 #   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS
+#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
 #  ifndef YYFREE
 #   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS
+#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
 void free (void *); /* INFRINGES ON USER NAME SPACE */
 #   endif
 #  endif
@@ -623,8 +624,8 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
 
 #if (! defined yyoverflow \
      && (! defined __cplusplus \
-         || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
-             && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+	 || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
+	     && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
 
 /* A type that is properly aligned for any stack member.  */
 union yyalloc
@@ -650,16 +651,16 @@ union yyalloc
    elements in the stack, and YYPTR gives the new location of the
    stack.  Advance YYPTR to a properly aligned location for the next
    stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
-    do                                                                  \
-      {                                                                 \
-        YYSIZE_T yynewbytes;                                            \
-        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
-        Stack = &yyptr->Stack_alloc;                                    \
-        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-        yyptr += yynewbytes / sizeof (*yyptr);                          \
-      }                                                                 \
-    while (0)
+# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
+	Stack = &yyptr->Stack_alloc;					\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
 
 #endif
 
@@ -678,7 +679,7 @@ union yyalloc
           for (yyi = 0; yyi < (Count); yyi++)   \
             (Dst)[yyi] = (Src)[yyi];            \
         }                                       \
-      while (0)
+      while (YYID (0))
 #  endif
 # endif
 #endif /* !YYCOPY_NEEDED */
@@ -686,35 +687,33 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  47
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1215
+#define YYLAST   1345
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  136
+#define YYNTOKENS  137
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  96
+#define YYNNTS  97
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  265
-/* YYNSTATES -- Number of states.  */
-#define YYNSTATES  488
+#define YYNRULES  267
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  493
 
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
-   by yylex, with out-of-bounds checking.  */
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   379
+#define YYMAXUTOK   380
 
-#define YYTRANSLATE(YYX)                                                \
+#define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
-/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
-   as returned by yylex, without out-of-bounds checking.  */
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     131,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+     132,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,   135,     2,     2,
-     132,   133,    23,    21,   134,    22,    27,    24,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,   130,
+       2,     2,     2,     2,     2,     2,     2,   136,     2,     2,
+     133,   134,    23,    21,   135,    22,    27,    24,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,   131,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -746,40 +745,164 @@ static const yytype_uint8 yytranslate[] =
       90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
      100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
      110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130
 };
 
 #if YYDEBUG
-  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint16 yyprhs[] =
+{
+       0,     0,     3,     6,     9,    12,    15,    17,    19,    21,
+      23,    25,    27,    29,    31,    33,    35,    37,    39,    41,
+      48,    55,    62,    69,    79,    89,    93,    97,    99,   103,
+     105,   107,   109,   111,   113,   115,   117,   119,   121,   123,
+     125,   127,   129,   131,   134,   137,   142,   147,   149,   152,
+     154,   157,   160,   165,   171,   174,   176,   177,   179,   184,
+     190,   201,   206,   210,   212,   213,   215,   216,   220,   221,
+     227,   228,   237,   239,   241,   243,   247,   249,   251,   253,
+     256,   259,   264,   267,   269,   271,   273,   275,   276,   280,
+     291,   299,   304,   310,   316,   317,   322,   325,   328,   333,
+     338,   344,   349,   353,   355,   359,   362,   366,   367,   371,
+     374,   376,   380,   384,   394,   395,   397,   399,   401,   403,
+     405,   409,   413,   416,   418,   421,   425,   426,   430,   434,
+     435,   437,   439,   442,   444,   447,   449,   452,   459,   461,
+     464,   468,   471,   474,   476,   480,   482,   485,   487,   492,
+     494,   498,   499,   503,   504,   507,   508,   512,   513,   516,
+     518,   522,   526,   527,   529,   531,   532,   535,   538,   539,
+     541,   544,   548,   550,   554,   556,   559,   561,   567,   574,
+     579,   583,   587,   591,   594,   598,   604,   609,   616,   620,
+     622,   626,   628,   631,   633,   635,   637,   639,   641,   643,
+     645,   649,   651,   655,   660,   665,   671,   678,   685,   694,
+     700,   705,   707,   710,   715,   717,   720,   725,   726,   729,
+     731,   735,   737,   739,   742,   745,   747,   750,   754,   757,
+     759,   761,   763,   765,   767,   769,   771,   775,   777,   781,
+     783,   787,   789,   791,   793,   795,   797,   799,   801,   804,
+     806,   809,   811,   813,   815,   817,   819,   821,   823,   827,
+     829,   831,   833,   835,   837,   839,   842,   845
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int16 yyrhs[] =
+{
+     138,     0,    -1,   139,   131,    -1,   139,   129,    -1,   232,
+     132,    -1,   232,   129,    -1,     1,    -1,   129,    -1,   141,
+      -1,   166,    -1,   142,    -1,   143,    -1,   170,    -1,   144,
+      -1,   165,    -1,   140,    -1,   173,    -1,   169,    -1,   101,
+      -1,    30,   113,   230,    28,    44,   145,    -1,    30,   113,
+     230,    28,    45,   151,    -1,    30,   113,   230,    58,    44,
+     230,    -1,    30,   113,   230,    58,    45,   230,    -1,    47,
+     113,   230,   133,   146,   134,   153,   155,   156,    -1,    47,
+      76,   230,    93,   230,   154,   121,   163,   164,    -1,    58,
+     113,   230,    -1,   230,   147,   150,    -1,   145,    -1,   146,
+     135,   145,    -1,    34,    -1,    48,    -1,    49,    -1,   115,
+      -1,   116,    -1,    51,    -1,   103,    -1,    57,    -1,    66,
+      -1,   111,    -1,    79,    -1,    33,    -1,    87,    -1,    80,
+      -1,    49,    80,    -1,   128,    80,    -1,    42,   133,     7,
+     134,    -1,   123,   133,     7,   134,    -1,    90,    -1,    10,
+      90,    -1,   119,    -1,    99,    83,    -1,    52,   220,    -1,
+      43,   133,   202,   134,    -1,   104,   230,   133,   230,   134,
+      -1,   149,   148,    -1,   148,    -1,    -1,   149,    -1,   119,
+     133,   229,   134,    -1,    99,    83,   133,   229,   134,    -1,
+      68,    83,   133,   229,   134,   104,   230,   133,   229,   134,
+      -1,    43,   133,   202,   134,    -1,   152,   135,   151,    -1,
+     151,    -1,    -1,   152,    -1,    -1,   133,   224,   134,    -1,
+      -1,   126,    36,   133,   158,   134,    -1,    -1,    96,    40,
+     157,   133,   229,   134,    97,     7,    -1,    72,    -1,   102,
+      -1,   159,    -1,   158,   135,   159,    -1,   160,    -1,   161,
+      -1,   162,    -1,   230,   230,    -1,   230,    29,    -1,   230,
+     133,   229,   134,    -1,   230,     7,    -1,    35,    -1,    38,
+      -1,    39,    -1,   110,    -1,    -1,   133,   158,   134,    -1,
+      78,    81,   230,   133,   229,   134,   122,   133,   222,   134,
+      -1,    78,    81,   230,   122,   133,   222,   134,    -1,    78,
+      81,   230,   178,    -1,   175,    78,    81,   230,   178,    -1,
+      46,   230,    69,     5,   167,    -1,    -1,   126,   133,   168,
+     134,    -1,    54,     5,    -1,    61,   231,    -1,   168,   135,
+      54,     5,    -1,   168,   135,    61,   231,    -1,   120,   230,
+     109,   171,   200,    -1,    53,    69,   230,   200,    -1,   171,
+     135,   172,    -1,   172,    -1,   230,    11,   206,    -1,   178,
+     174,    -1,   175,   178,   174,    -1,    -1,   126,   100,     7,
+      -1,   126,   176,    -1,   177,    -1,   176,   135,   177,    -1,
+     190,    31,   184,    -1,   108,   179,   180,   183,   200,   192,
+     193,   194,   195,    -1,    -1,    29,    -1,    56,    -1,    23,
+      -1,   181,    -1,   182,    -1,   181,   135,   182,    -1,   206,
+      31,   230,    -1,   206,   230,    -1,   206,    -1,    69,   191,
+      -1,   133,   178,   134,    -1,    -1,    37,     7,    98,    -1,
+     118,     7,    98,    -1,    -1,    77,    -1,    85,    -1,    85,
+      95,    -1,   105,    -1,   105,    95,    -1,    70,    -1,    70,
+      95,    -1,   187,   186,    82,   188,    93,   202,    -1,   188,
+      -1,   184,   189,    -1,   230,   185,   189,    -1,   230,   185,
+      -1,   210,   189,    -1,   210,    -1,   133,   187,   134,    -1,
+     190,    -1,    31,   190,    -1,   230,    -1,   230,   133,   229,
+     134,    -1,   187,    -1,   191,   135,   187,    -1,    -1,    71,
+      40,   219,    -1,    -1,    73,   202,    -1,    -1,    94,    40,
+     196,    -1,    -1,    86,     7,    -1,   197,    -1,   196,   135,
+     197,    -1,   206,   198,   199,    -1,    -1,    32,    -1,    55,
+      -1,    -1,    91,    65,    -1,    91,    84,    -1,    -1,   201,
+      -1,   125,   202,    -1,   202,     8,   203,    -1,   203,    -1,
+     203,     9,   204,    -1,   204,    -1,    10,   205,    -1,   205,
+      -1,   206,    19,   206,     9,   206,    -1,   206,    10,    19,
+     206,     9,   206,    -1,   223,    20,    10,    90,    -1,   223,
+      20,    90,    -1,   206,   225,   206,    -1,   133,   202,   134,
+      -1,    62,   184,    -1,   206,    75,   184,    -1,   206,    75,
+     133,   219,   134,    -1,   206,    10,    75,   184,    -1,   206,
+      10,    75,   133,   219,   134,    -1,   206,   227,   207,    -1,
+     207,    -1,   207,   228,   208,    -1,   208,    -1,   226,   209,
+      -1,   209,    -1,   223,    -1,   220,    -1,   210,    -1,   211,
+      -1,   212,    -1,   213,    -1,   133,   206,   134,    -1,   184,
+      -1,   230,   133,   134,    -1,   230,   133,    23,   134,    -1,
+     230,   133,   219,   134,    -1,   230,   133,    56,   219,   134,
+      -1,    63,   133,   221,    69,   206,   134,    -1,   112,   133,
+     206,    69,     7,   134,    -1,   112,   133,   206,    69,     7,
+      67,     7,   134,    -1,    41,   206,   214,   218,    60,    -1,
+      41,   216,   218,    60,    -1,   215,    -1,   214,   215,    -1,
+     124,   206,   114,   206,    -1,   217,    -1,   216,   217,    -1,
+     124,   202,   114,   206,    -1,    -1,    59,   206,    -1,   206,
+      -1,   219,   135,   206,    -1,    90,    -1,     7,    -1,    21,
+       7,    -1,    22,     7,    -1,     5,    -1,    80,     5,    -1,
+      80,     5,   221,    -1,   147,     5,    -1,   127,    -1,    89,
+      -1,    50,    -1,    74,    -1,    88,    -1,   107,    -1,   220,
+      -1,   222,   135,   220,    -1,   230,    -1,   230,    27,   230,
+      -1,   223,    -1,   224,   135,   223,    -1,    11,    -1,    12,
+      -1,    16,    -1,    15,    -1,    14,    -1,    13,    -1,    18,
+      -1,    10,    18,    -1,    17,    -1,    10,    17,    -1,    22,
+      -1,    21,    -1,    22,    -1,   136,    -1,    23,    -1,    24,
+      -1,   230,    -1,   229,   135,   230,    -1,     4,    -1,     6,
+      -1,   117,    -1,    93,    -1,    64,    -1,    92,    -1,     3,
+     233,    -1,   233,     3,    -1,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   585,   585,   589,   593,   597,   601,   604,   611,   614,
-     617,   620,   623,   626,   629,   632,   635,   638,   644,   650,
-     657,   663,   670,   679,   684,   693,   698,   703,   707,   713,
-     718,   721,   724,   729,   732,   735,   738,   741,   744,   747,
-     750,   753,   756,   768,   771,   774,   792,   812,   815,   818,
-     823,   828,   834,   840,   849,   853,   859,   862,   867,   872,
-     877,   884,   891,   895,   901,   904,   909,   912,   917,   920,
-     925,   928,   947,   951,   957,   961,   967,   970,   973,   978,
-     981,   988,   993,  1004,  1009,  1013,  1017,  1023,  1026,  1032,
-    1040,  1043,  1046,  1052,  1057,  1060,  1065,  1069,  1073,  1077,
-    1083,  1088,  1093,  1097,  1103,  1109,  1112,  1117,  1122,  1126,
-    1132,  1138,  1144,  1147,  1151,  1157,  1160,  1165,  1169,  1175,
-    1178,  1181,  1186,  1191,  1196,  1199,  1202,  1207,  1210,  1213,
-    1216,  1219,  1222,  1225,  1228,  1233,  1236,  1241,  1245,  1249,
-    1252,  1256,  1259,  1264,  1267,  1272,  1275,  1280,  1284,  1290,
-    1293,  1298,  1301,  1306,  1309,  1314,  1317,  1336,  1340,  1346,
-    1353,  1356,  1359,  1364,  1367,  1370,  1376,  1379,  1384,  1389,
-    1398,  1403,  1412,  1417,  1420,  1425,  1428,  1433,  1439,  1445,
-    1448,  1451,  1454,  1457,  1460,  1466,  1475,  1478,  1483,  1486,
-    1491,  1494,  1499,  1502,  1505,  1508,  1511,  1514,  1517,  1520,
-    1525,  1529,  1533,  1536,  1541,  1546,  1550,  1556,  1559,  1564,
-    1568,  1574,  1579,  1583,  1589,  1594,  1597,  1602,  1606,  1612,
-    1615,  1618,  1621,  1633,  1637,  1656,  1669,  1684,  1687,  1690,
-    1693,  1696,  1699,  1704,  1708,  1714,  1717,  1722,  1726,  1733,
-    1736,  1739,  1742,  1745,  1748,  1751,  1754,  1757,  1760,  1765,
-    1776,  1779,  1784,  1787,  1790,  1796,  1800,  1806,  1809,  1817,
-    1820,  1823,  1826,  1832,  1837,  1842
+       0,   592,   592,   596,   600,   604,   608,   611,   618,   621,
+     624,   627,   630,   633,   636,   639,   642,   645,   651,   657,
+     664,   670,   677,   686,   691,   700,   705,   710,   714,   720,
+     725,   728,   731,   736,   739,   742,   745,   748,   751,   754,
+     757,   760,   763,   775,   778,   781,   799,   819,   822,   825,
+     830,   835,   841,   847,   856,   860,   866,   869,   874,   879,
+     884,   891,   898,   902,   908,   911,   916,   919,   924,   927,
+     932,   935,   954,   958,   964,   968,   974,   977,   980,   985,
+     988,   995,  1000,  1011,  1016,  1020,  1024,  1030,  1033,  1039,
+    1047,  1050,  1053,  1059,  1064,  1067,  1072,  1076,  1080,  1084,
+    1090,  1095,  1100,  1104,  1110,  1116,  1119,  1124,  1127,  1146,
+    1151,  1155,  1161,  1167,  1173,  1176,  1180,  1186,  1189,  1194,
+    1198,  1204,  1207,  1210,  1215,  1220,  1225,  1228,  1231,  1236,
+    1239,  1242,  1245,  1248,  1251,  1254,  1257,  1262,  1265,  1270,
+    1274,  1278,  1281,  1285,  1288,  1293,  1296,  1301,  1304,  1309,
+    1313,  1319,  1322,  1327,  1330,  1335,  1338,  1343,  1346,  1365,
+    1369,  1375,  1382,  1385,  1388,  1393,  1396,  1399,  1405,  1408,
+    1413,  1418,  1427,  1432,  1441,  1446,  1449,  1454,  1457,  1462,
+    1468,  1474,  1477,  1480,  1483,  1486,  1489,  1495,  1504,  1507,
+    1512,  1515,  1520,  1523,  1528,  1531,  1534,  1537,  1540,  1543,
+    1546,  1549,  1554,  1558,  1562,  1565,  1570,  1575,  1579,  1585,
+    1588,  1593,  1597,  1603,  1608,  1612,  1618,  1623,  1626,  1631,
+    1635,  1641,  1644,  1647,  1650,  1662,  1666,  1685,  1698,  1713,
+    1716,  1719,  1722,  1725,  1728,  1733,  1737,  1743,  1746,  1751,
+    1755,  1762,  1765,  1768,  1771,  1774,  1777,  1780,  1783,  1786,
+    1789,  1794,  1805,  1808,  1813,  1816,  1819,  1825,  1829,  1835,
+    1838,  1846,  1849,  1852,  1855,  1861,  1866,  1871
 };
 #endif
 
@@ -791,9 +914,9 @@ static const char *const yytname[] =
   "$end", "error", "$undefined", "TOKEN_COMMAND", "TOKEN_NAME",
   "TOKEN_STRING_SINGLE_QUOTED", "TOKEN_STRING_DOUBLE_QUOTED",
   "TOKEN_UNSIGNED_NUMVAL", "TOKEN_OR", "TOKEN_AND", "TOKEN_NOT",
-  "TOKEN_EQ", "TOKEN_LT", "TOKEN_LEQ", "TOKEN_GT", "TOKEN_GEQ",
-  "TOKEN_NEQ", "TOKEN_LIKE", "TOKEN_REGEXP", "TOKEN_BETWEEN", "TOKEN_IS",
-  "'+'", "'-'", "'*'", "'/'", "UNARY_PLUS", "UNARY_MINUS", "'.'",
+  "TOKEN_EQ", "TOKEN_NEQ", "TOKEN_GEQ", "TOKEN_GT", "TOKEN_LEQ",
+  "TOKEN_LT", "TOKEN_REGEXP", "TOKEN_LIKE", "TOKEN_BETWEEN", "TOKEN_IS",
+  "'+'", "'-'", "'*'", "'/'", "UNARY_MINUS", "UNARY_PLUS", "'.'",
   "TOKEN_ADD", "TOKEN_ALL", "TOKEN_ALTER", "TOKEN_AS", "TOKEN_ASC",
   "TOKEN_BIGINT", "TOKEN_BIT", "TOKEN_BITWEAVING", "TOKEN_BLOCKPROPERTIES",
   "TOKEN_BLOCKSAMPLE", "TOKEN_BLOOM_FILTER", "TOKEN_CSB_TREE", "TOKEN_BY",
@@ -810,28 +933,29 @@ static const char *const yytname[] =
   "TOKEN_KEY", "TOKEN_LAST", "TOKEN_LEFT", "TOKEN_LIMIT", "TOKEN_LONG",
   "TOKEN_MINUTE", "TOKEN_MONTH", "TOKEN_NULL", "TOKEN_NULLS", "TOKEN_OFF",
   "TOKEN_ON", "TOKEN_ORDER", "TOKEN_OUTER", "TOKEN_PARTITION",
-  "TOKEN_PARTITIONS", "TOKEN_PERCENT", "TOKEN_PRIMARY", "TOKEN_QUIT",
-  "TOKEN_RANGE", "TOKEN_REAL", "TOKEN_REFERENCES", "TOKEN_RIGHT",
-  "TOKEN_ROW_DELIMITER", "TOKEN_SECOND", "TOKEN_SELECT", "TOKEN_SET",
-  "TOKEN_SMA", "TOKEN_SMALLINT", "TOKEN_SUBSTRING", "TOKEN_TABLE",
-  "TOKEN_THEN", "TOKEN_TIME", "TOKEN_TIMESTAMP", "TOKEN_TRUE",
-  "TOKEN_TUPLESAMPLE", "TOKEN_UNIQUE", "TOKEN_UPDATE", "TOKEN_USING",
-  "TOKEN_VALUES", "TOKEN_VARCHAR", "TOKEN_WHEN", "TOKEN_WHERE",
-  "TOKEN_WITH", "TOKEN_YEAR", "TOKEN_YEARMONTH", "TOKEN_EOF",
-  "TOKEN_LEX_ERROR", "';'", "'\\n'", "'('", "')'", "','", "'%'", "$accept",
-  "start", "sql_statement", "quit_statement", "alter_table_statement",
-  "create_table_statement", "create_index_statement",
-  "drop_table_statement", "column_def", "column_def_commalist",
-  "data_type", "column_constraint_def", "column_constraint_def_list",
-  "opt_column_constraint_def_list", "table_constraint_def",
-  "table_constraint_def_commalist", "opt_table_constraint_def_commalist",
-  "opt_column_list", "opt_block_properties", "opt_partition_clause",
-  "partition_type", "key_value_list", "key_value", "key_string_value",
-  "key_string_list", "key_integer_value", "index_type",
-  "opt_index_properties", "insert_statement", "copy_from_statement",
-  "opt_copy_from_params", "copy_from_params", "update_statement",
-  "delete_statement", "assignment_list", "assignment_item",
-  "select_statement", "with_clause", "with_list", "with_list_element",
+  "TOKEN_PARTITIONS", "TOKEN_PERCENT", "TOKEN_PRIMARY", "TOKEN_PRIORITY",
+  "TOKEN_QUIT", "TOKEN_RANGE", "TOKEN_REAL", "TOKEN_REFERENCES",
+  "TOKEN_RIGHT", "TOKEN_ROW_DELIMITER", "TOKEN_SECOND", "TOKEN_SELECT",
+  "TOKEN_SET", "TOKEN_SMA", "TOKEN_SMALLINT", "TOKEN_SUBSTRING",
+  "TOKEN_TABLE", "TOKEN_THEN", "TOKEN_TIME", "TOKEN_TIMESTAMP",
+  "TOKEN_TRUE", "TOKEN_TUPLESAMPLE", "TOKEN_UNIQUE", "TOKEN_UPDATE",
+  "TOKEN_USING", "TOKEN_VALUES", "TOKEN_VARCHAR", "TOKEN_WHEN",
+  "TOKEN_WHERE", "TOKEN_WITH", "TOKEN_YEAR", "TOKEN_YEARMONTH",
+  "TOKEN_EOF", "TOKEN_LEX_ERROR", "';'", "'\\n'", "'('", "')'", "','",
+  "'%'", "$accept", "start", "sql_statement", "quit_statement",
+  "alter_table_statement", "create_table_statement",
+  "create_index_statement", "drop_table_statement", "column_def",
+  "column_def_commalist", "data_type", "column_constraint_def",
+  "column_constraint_def_list", "opt_column_constraint_def_list",
+  "table_constraint_def", "table_constraint_def_commalist",
+  "opt_table_constraint_def_commalist", "opt_column_list",
+  "opt_block_properties", "opt_partition_clause", "partition_type",
+  "key_value_list", "key_value", "key_string_value", "key_string_list",
+  "key_integer_value", "index_type", "opt_index_properties",
+  "insert_statement", "copy_from_statement", "opt_copy_from_params",
+  "copy_from_params", "update_statement", "delete_statement",
+  "assignment_list", "assignment_item", "select_statement",
+  "opt_priority_clause", "with_clause", "with_list", "with_list_element",
   "select_query", "opt_all_distinct", "selection",
   "selection_item_commalist", "selection_item", "from_clause",
   "subquery_expression", "opt_sample_clause", "join_type",
@@ -850,13 +974,13 @@ static const char *const yytname[] =
   "literal_value_commalist", "attribute_ref", "attribute_ref_list",
   "comparison_operation", "unary_operation", "add_operation",
   "multiply_operation", "name_commalist", "any_name", "boolean_value",
-  "command", "command_argument_list", YY_NULLPTR
+  "command", "command_argument_list", YY_NULL
 };
 #endif
 
 # ifdef YYPRINT
-/* YYTOKNUM[NUM] -- (External) token number corresponding to the
-   (internal) symbol number NUM (which must be that of a token).  */
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
 static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
@@ -872,545 +996,586 @@ static const yytype_uint16 yytoknum[] =
      350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
      360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
      370,   371,   372,   373,   374,   375,   376,   377,   378,   379,
-      59,    10,    40,    41,    44,    37
+     380,    59,    10,    40,    41,    44,    37
 };
 # endif
 
-#define YYPACT_NINF -230
-
-#define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-230)))
-
-#define YYTABLE_NINF -128
-
-#define yytable_value_is_error(Yytable_value) \
-  0
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,   137,   138,   138,   138,   138,   138,   138,   139,   139,
+     139,   139,   139,   139,   139,   139,   139,   139,   140,   141,
+     141,   141,   141,   142,   143,   144,   145,   146,   146,   147,
+     147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
+     147,   147,   147,   147,   147,   147,   147,   148,   148,   148,
+     148,   148,   148,   148,   149,   149,   150,   150,   151,   151,
+     151,   151,   152,   152,   153,   153,   154,   154,   155,   155,
+     156,   156,   157,   157,   158,   158,   159,   159,   159,   160,
+     160,   161,   162,   163,   163,   163,   163,   164,   164,   165,
+     165,   165,   165,   166,   167,   167,   168,   168,   168,   168,
+     169,   170,   171,   171,   172,   173,   173,   174,   174,   175,
+     176,   176,   177,   178,   179,   179,   179,   180,   180,   181,
+     181,   182,   182,   182,   183,   184,   185,   185,   185,   186,
+     186,   186,   186,   186,   186,   186,   186,   187,   187,   188,
+     188,   188,   188,   188,   188,   189,   189,   190,   190,   191,
+     191,   192,   192,   193,   193,   194,   194,   195,   195,   196,
+     196,   197,   198,   198,   198,   199,   199,   199,   200,   200,
+     201,   202,   202,   203,   203,   204,   204,   205,   205,   205,
+     205,   205,   205,   205,   205,   205,   205,   205,   206,   206,
+     207,   207,   208,   208,   209,   209,   209,   209,   209,   209,
+     209,   209,   210,   210,   210,   210,   211,   212,   212,   213,
+     213,   214,   214,   215,   216,   216,   217,   218,   218,   219,
+     219,   220,   220,   220,   220,   220,   220,   220,   220,   221,
+     221,   221,   221,   221,   221,   222,   222,   223,   223,   224,
+     224,   225,   225,   225,   225,   225,   225,   225,   225,   225,
+     225,   226,   227,   227,   228,   228,   228,   229,   229,   230,
+     230,   231,   231,   231,   231,   232,   233,   233
+};
 
-  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-     STATE-NUM.  */
-static const yytype_int16 yypact[] =
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
 {
-     162,  -230,  -230,   -75,   181,     7,    17,    23,    19,  -230,
-      41,   181,   181,  -230,   151,   129,  -230,  -230,  -230,  -230,
-    -230,  -230,  -230,  -230,  -230,  -230,   -38,  -230,   -36,   166,
-     181,  -230,  -230,   138,   181,   181,   181,   181,   181,  -230,
-    -230,   644,   111,    93,  -230,   220,   128,  -230,  -230,  -230,
-     202,  -230,  -230,  -230,  -230,    65,   273,   192,   163,   172,
-    -230,    11,  -230,  -230,   295,   300,  -230,  -230,  -230,   699,
-     207,  -230,   233,  -230,  -230,   218,  -230,  -230,   310,  -230,
-    -230,  -230,  -230,   219,  -230,  -230,   229,   245,   786,   322,
-     261,   224,  -230,  -230,   182,    35,  -230,  -230,  -230,  -230,
-    -230,  -230,  -230,  -230,   928,   -12,   181,   181,   235,   181,
-     181,   194,   226,   238,   181,   181,   542,  -230,  -230,   237,
-     181,  -230,  -230,  -230,   542,    53,   -34,  -230,   359,  -230,
-     105,   105,   983,   363,  -230,   241,    40,  -230,    18,   172,
-     983,  -230,  -230,   181,   983,  -230,  -230,  -230,  -230,   983,
-     300,  -230,   181,   331,    82,  -230,   360,  -230,   268,  -230,
-      -7,  -230,   268,   181,   146,   181,   181,   244,  -230,   246,
-    -230,   143,  1088,   841,   235,   455,   369,   372,  -230,  -230,
-     624,   364,  1069,   155,    15,   983,     8,  -230,   983,  -230,
-     323,   252,  -230,  -230,  -230,  -230,  -230,  -230,   317,  -230,
-      60,   256,  -230,  -230,    10,    90,   197,  -230,   257,    90,
-     -10,   319,  -230,  -230,    35,  -230,  -230,   259,   983,  -230,
-     270,   160,   181,  -230,   983,  -230,   181,  -230,  -230,   263,
-     313,   315,   267,  -230,  -230,  -230,   174,   181,   281,   146,
-     181,  -230,    81,  -230,  -230,    20,    34,   542,   542,    61,
-    -230,  -230,  -230,  -230,  -230,  -230,  -230,  -230,   983,   271,
-     983,    47,  -230,   165,   283,   983,    55,  -230,   342,   270,
-    -230,  -230,   983,   398,  -230,   125,   181,  -230,  -230,   311,
-    -230,   312,   318,   326,    18,  -230,   405,   407,    90,   375,
-     344,  -230,   171,  -230,   983,  -230,   270,  -230,   542,   287,
-     288,   181,   417,   157,   175,  -230,   177,   396,    49,  -230,
-     290,   301,  -230,   335,   296,  1069,  -230,   346,   181,  -230,
-    -230,    81,  -230,  -230,   372,  -230,  -230,  -230,   983,   298,
-     203,   786,  -230,   270,   337,  -230,  -230,  1069,   299,   270,
-     983,  -230,    42,   -25,  -230,  -230,  -230,  -230,  -230,    18,
-     197,   334,   336,  -230,   983,   542,   341,  -230,   270,    21,
-     181,   181,   183,  -230,  -230,  -230,  -230,  -230,  -230,  -230,
-     193,  -230,   181,  -230,  -230,  -230,  -230,   307,   146,   404,
-     347,  -230,   542,  -230,  -230,   316,  -230,   234,   786,  -230,
-     983,   185,  -230,  -230,  1069,   270,  -230,   437,  -230,   354,
-    -230,  -230,   320,   369,   409,   365,  -230,   188,   190,  -230,
-     451,   157,  -230,   181,  -230,  -230,   325,   426,  -230,    31,
-     181,   983,   195,   270,  -230,   198,   338,   542,   983,   460,
-    -230,   366,  -230,  -230,  -230,   200,  -230,  -230,  -230,  -230,
-      14,   181,    13,  -230,   339,   270,  -230,  -230,  -230,   369,
-     345,  -230,   231,  -230,   181,  -230,   181,  -230,  -230,   181,
-    -230,   208,  -230,  -230,   343,  -230,   983,  -230,  -230,   377,
-     348,  -230,   210,  -230,   181,  -230,   113,  -230,   181,  -230,
-     213,  -230,  -230,   215,   376,  -230,   471,  -230
+       0,     2,     2,     2,     2,     2,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     6,
+       6,     6,     6,     9,     9,     3,     3,     1,     3,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     2,     4,     4,     1,     2,     1,
+       2,     2,     4,     5,     2,     1,     0,     1,     4,     5,
+      10,     4,     3,     1,     0,     1,     0,     3,     0,     5,
+       0,     8,     1,     1,     1,     3,     1,     1,     1,     2,
+       2,     4,     2,     1,     1,     1,     1,     0,     3,    10,
+       7,     4,     5,     5,     0,     4,     2,     2,     4,     4,
+       5,     4,     3,     1,     3,     2,     3,     0,     3,     2,
+       1,     3,     3,     9,     0,     1,     1,     1,     1,     1,
+       3,     3,     2,     1,     2,     3,     0,     3,     3,     0,
+       1,     1,     2,     1,     2,     1,     2,     6,     1,     2,
+       3,     2,     2,     1,     3,     1,     2,     1,     4,     1,
+       3,     0,     3,     0,     2,     0,     3,     0,     2,     1,
+       3,     3,     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,     1,     1,     1,
+       3,     1,     3,     4,     4,     5,     6,     6,     8,     5,
+       4,     1,     2,     4,     1,     2,     4,     0,     2,     1,
+       3,     1,     1,     2,     2,     1,     2,     3,     2,     1,
+       1,     1,     1,     1,     1,     1,     3,     1,     3,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     2,     1,
+       2,     1,     1,     1,     1,     1,     1,     1,     3,     1,
+       1,     1,     1,     1,     1,     2,     2,     0
 };
 
-  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-     Performed when YYTABLE does not specify something else to do.  Zero
-     means the default is an error.  */
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     6,   265,     0,     0,     0,     0,     0,     0,    18,
-     112,     0,     0,     7,     0,     0,    15,     8,    10,    11,
-      13,    14,     9,    17,    12,    16,     0,   105,     0,   263,
-       0,   257,   258,     0,     0,     0,     0,     0,     0,   113,
-     114,     0,     0,   107,   108,     0,   145,     1,     3,     2,
-       0,   106,     5,     4,   264,     0,     0,     0,     0,   166,
-      25,     0,   223,   220,     0,   249,   115,    40,    29,     0,
-       0,    30,    31,    34,    36,     0,    37,    39,     0,    41,
-     219,    35,    38,     0,    32,    33,     0,     0,     0,     0,
-       0,   116,   117,   199,   121,   187,   189,   191,   194,   195,
-     196,   197,   193,   192,     0,   235,     0,     0,     0,     0,
-       0,     0,     0,    94,     0,     0,     0,   101,   167,     0,
-       0,    91,   221,   222,     0,     0,   215,   212,     0,    43,
-       0,   224,     0,     0,    44,     0,     0,   226,     0,   166,
-       0,   250,   251,     0,     0,   120,   253,   254,   252,     0,
-       0,   190,     0,     0,   166,   103,     0,   109,     0,   110,
-       0,   255,     0,     0,     0,     0,     0,     0,    93,    66,
-      27,     0,     0,     0,     0,     0,   168,   170,   172,   174,
-       0,   192,     0,     0,     0,     0,   215,   209,     0,   213,
-       0,     0,   229,   230,   231,   228,   232,   227,     0,   225,
-       0,     0,   123,   198,     0,     0,   147,   136,   122,   141,
-     124,   149,   118,   119,   186,   188,   236,     0,     0,   200,
-     217,     0,     0,   100,     0,   146,     0,    92,    19,     0,
-       0,     0,     0,    20,    21,    22,     0,     0,     0,    64,
-       0,    42,    56,   173,   181,     0,     0,     0,     0,     0,
-     239,   241,   242,   243,   244,   240,   245,   247,     0,     0,
-       0,     0,   233,     0,     0,     0,     0,   210,     0,   216,
-     208,    45,     0,     0,    46,   127,     0,   137,   143,   133,
-     128,   129,   131,     0,     0,   140,     0,     0,   139,     0,
-     151,   201,     0,   202,     0,   102,   104,   256,     0,     0,
-       0,     0,     0,     0,     0,   237,     0,   235,     0,    63,
-      65,    68,    28,     0,     0,     0,    47,     0,     0,    49,
-      55,    57,    26,   180,   169,   171,   246,   248,     0,     0,
-       0,     0,   182,   179,     0,   178,    90,     0,     0,   214,
-       0,   207,     0,     0,   142,   144,   134,   130,   132,     0,
-     148,     0,     0,   138,     0,     0,   153,   203,   218,     0,
-       0,     0,     0,    96,   261,   262,   260,   259,    97,    95,
-       0,    67,     0,    83,    84,    85,    86,    87,     0,     0,
-      70,    48,     0,    51,    50,     0,    54,     0,     0,   184,
-       0,     0,   177,   234,     0,   211,   204,     0,   205,     0,
-     125,   126,   150,   152,     0,   155,    61,     0,     0,    58,
-       0,     0,   238,     0,    24,    62,     0,     0,    23,     0,
-       0,     0,     0,   175,   183,     0,     0,     0,     0,     0,
-     111,     0,    59,    98,    99,     0,    74,    76,    77,    78,
-       0,     0,     0,    52,     0,   176,   185,    89,   206,   135,
-     154,   157,   160,   156,     0,    88,     0,    82,    80,     0,
-      79,     0,    72,    73,     0,    53,     0,   161,   162,   163,
-       0,    75,     0,    69,     0,   158,     0,   159,     0,    81,
-       0,   164,   165,     0,     0,    60,     0,    71
+       0,     6,   267,     0,     0,     0,     0,     0,     0,    18,
+     114,     0,     0,     7,     0,     0,    15,     8,    10,    11,
+      13,    14,     9,    17,    12,    16,     0,   107,     0,   265,
+       0,   259,   260,     0,     0,     0,     0,     0,     0,   115,
+     116,     0,     0,   109,   110,     0,   147,     1,     3,     2,
+       0,   107,     0,   105,     5,     4,   266,     0,     0,     0,
+       0,   168,    25,     0,   225,   222,     0,   251,   117,    40,
+      29,     0,     0,    30,    31,    34,    36,     0,    37,    39,
+       0,    41,   221,    35,    38,     0,    32,    33,     0,     0,
+       0,     0,     0,   118,   119,   201,   123,   189,   191,   193,
+     196,   197,   198,   199,   195,   194,     0,   237,     0,     0,
+       0,     0,     0,   106,     0,     0,     0,    94,     0,     0,
+       0,   101,   169,     0,     0,    91,   223,   224,     0,     0,
+     217,   214,     0,    43,     0,   226,     0,     0,    44,     0,
+       0,   228,     0,   168,     0,   252,   253,     0,     0,   122,
+     255,   256,   254,     0,     0,   192,     0,     0,   168,   103,
+       0,   111,     0,   112,     0,   257,     0,   108,     0,     0,
+       0,     0,     0,    93,    66,    27,     0,     0,     0,     0,
+       0,   170,   172,   174,   176,     0,   194,     0,     0,     0,
+       0,   217,   211,     0,   215,     0,     0,   231,   232,   233,
+     230,   234,   229,     0,   227,     0,     0,   125,   200,     0,
+       0,   149,   138,   124,   143,   126,   151,   120,   121,   188,
+     190,   238,     0,     0,   202,   219,     0,     0,   100,     0,
+     148,     0,    92,    19,     0,     0,     0,     0,    20,    21,
+      22,     0,     0,     0,    64,     0,    42,    56,   175,   183,
+       0,     0,     0,     0,     0,   241,   242,   246,   245,   244,
+     243,   249,   247,     0,     0,     0,     0,   235,     0,     0,
+       0,     0,   212,     0,   218,   210,    45,     0,     0,    46,
+     129,     0,   139,   145,   135,   130,   131,   133,     0,     0,
+     142,     0,     0,   141,     0,   153,   203,     0,   204,     0,
+     102,   104,   258,     0,     0,     0,     0,     0,     0,     0,
+     239,     0,   237,     0,    63,    65,    68,    28,     0,     0,
+       0,    47,     0,     0,    49,    55,    57,    26,   182,   171,
+     173,   250,   248,     0,     0,     0,     0,   184,   181,     0,
+     180,    90,     0,     0,   216,     0,   209,     0,     0,   144,
+     146,   136,   132,   134,     0,   150,     0,     0,   140,     0,
+       0,   155,   205,   220,     0,     0,     0,     0,    96,   263,
+     264,   262,   261,    97,    95,     0,    67,     0,    83,    84,
+      85,    86,    87,     0,     0,    70,    48,     0,    51,    50,
+       0,    54,     0,     0,   186,     0,     0,   179,   236,     0,
+     213,   206,     0,   207,     0,   127,   128,   152,   154,     0,
+     157,    61,     0,     0,    58,     0,     0,   240,     0,    24,
+      62,     0,     0,    23,     0,     0,     0,     0,   177,   185,
+       0,     0,     0,     0,     0,   113,     0,    59,    98,    99,
+       0,    74,    76,    77,    78,     0,     0,     0,    52,     0,
+     178,   187,    89,   208,   137,   156,   159,   162,   158,     0,
+      88,     0,    82,    80,     0,    79,     0,    72,    73,     0,
+      53,     0,   163,   164,   165,     0,    75,     0,    69,     0,
+     160,     0,   161,     0,    81,     0,   166,   167,     0,     0,
+      60,     0,    71
 };
 
-  /* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int16 yydefgoto[] =
 {
-    -230,  -230,  -230,  -230,  -230,  -230,  -230,  -230,  -127,  -230,
-     309,   161,  -230,  -230,  -229,  -230,  -230,  -230,  -230,  -230,
-    -230,    43,    27,  -230,  -230,  -230,  -230,  -230,  -230,  -230,
-    -230,  -230,  -230,  -230,  -230,   264,  -230,  -230,  -230,   378,
-      12,  -230,  -230,  -230,   350,  -230,  -103,  -230,  -230,  -139,
-     142,  -190,    -8,  -230,  -230,  -230,  -230,  -230,  -230,    26,
-    -230,  -230,    44,  -230,  -121,   240,   247,   321,   -28,   349,
-     351,   394,  -132,  -230,  -230,  -230,  -230,   324,  -230,   373,
-     327,  -216,  -171,   370,   108,  -107,  -230,  -230,  -230,  -230,
-    -230,  -119,    -4,    94,  -230,  -230
+      -1,    14,    15,    16,    17,    18,    19,    20,   175,   176,
+      91,   325,   326,   327,   238,   315,   316,   243,   385,   423,
+     469,   440,   441,   442,   443,   444,   382,   419,    21,    22,
+     173,   309,    23,    24,   158,   159,    25,    53,    26,    43,
+      44,   139,    41,    92,    93,    94,   143,    95,   293,   288,
+     211,   212,   282,   283,   213,   295,   361,   410,   435,   455,
+     456,   474,   482,   121,   122,   181,   182,   183,   184,   185,
+      97,    98,    99,   100,   101,   102,   103,   191,   192,   130,
+     131,   195,   226,   104,   203,   268,   105,   311,   265,   106,
+     148,   153,   164,   107,   373,    28,    29
 };
 
-  /* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -240
+static const yytype_int16 yypact[] =
+{
+     228,  -240,  -240,   -63,   131,   -28,     4,   -33,    30,  -240,
+      33,   131,   131,  -240,    97,    88,  -240,  -240,  -240,  -240,
+    -240,  -240,  -240,  -240,  -240,  -240,   -22,    37,    82,   150,
+     131,  -240,  -240,   102,   131,   131,   131,   131,   131,  -240,
+    -240,   650,    42,    40,  -240,   172,    74,  -240,  -240,  -240,
+     137,    37,   121,  -240,  -240,  -240,  -240,    29,   221,   139,
+     101,   115,  -240,    52,  -240,  -240,   237,   243,  -240,  -240,
+    -240,   738,   126,  -240,   185,  -240,  -240,   176,  -240,  -240,
+     273,  -240,  -240,  -240,  -240,   187,  -240,  -240,   195,   202,
+     826,   320,   261,   196,  -240,  -240,   191,    -8,  -240,  -240,
+    -240,  -240,  -240,  -240,  -240,  -240,  1002,    -6,   131,   131,
+     199,   131,   131,  -240,   326,   203,   210,   208,   131,   131,
+     547,  -240,  -240,   204,   131,  -240,  -240,  -240,   547,    38,
+     -30,  -240,   328,  -240,   -11,   -11,  1090,   331,  -240,   205,
+      22,  -240,    36,   115,  1090,  -240,  -240,   131,  1090,  -240,
+    -240,  -240,  -240,  1090,   243,  -240,   131,   371,   -51,  -240,
+     329,  -240,   233,  -240,   122,  -240,   233,  -240,   131,    11,
+     131,   131,   209,  -240,   212,  -240,   133,  1192,   914,   199,
+     459,   335,   337,  -240,  -240,  1270,   327,  1141,   135,    20,
+    1090,   -18,  -240,  1090,  -240,   289,   217,  -240,  -240,  -240,
+    -240,  -240,  -240,   283,  -240,    50,   219,  -240,  -240,    21,
+      62,    95,  -240,   220,    62,    15,   285,  -240,  -240,    -8,
+    -240,  -240,   231,  1090,  -240,   251,   145,   131,  -240,  1090,
+    -240,   131,  -240,  -240,   234,   281,   286,   235,  -240,  -240,
+    -240,    41,   131,   245,    11,   131,  -240,    80,  -240,  -240,
+       2,   630,   547,   547,    64,  -240,  -240,  -240,  -240,  -240,
+    -240,  -240,  -240,  1090,   238,  1090,     8,  -240,   149,   248,
+    1090,    43,  -240,   312,   251,  -240,  -240,  1090,   367,  -240,
+     119,   131,  -240,  -240,   284,  -240,   287,   288,   298,    36,
+    -240,   374,   377,    62,   345,   313,  -240,   153,  -240,  1090,
+    -240,   251,  -240,   547,   254,   255,   131,   384,   144,   156,
+    -240,   158,   363,   152,  -240,   260,   270,  -240,   307,   266,
+    1141,  -240,   317,   131,  -240,  -240,    80,  -240,  -240,   337,
+    -240,  -240,  -240,  1090,   268,    91,   826,  -240,   251,   316,
+    -240,  -240,  1141,   269,   251,  1090,  -240,    25,    -9,  -240,
+    -240,  -240,  -240,  -240,    36,    95,   305,   309,  -240,  1090,
+     547,   314,  -240,   251,     6,   131,   131,   160,  -240,  -240,
+    -240,  -240,  -240,  -240,  -240,   148,  -240,   131,  -240,  -240,
+    -240,  -240,   276,    11,   375,   319,  -240,   547,  -240,  -240,
+     277,  -240,   230,   826,  -240,  1090,   162,  -240,  -240,  1141,
+     251,  -240,   409,  -240,   324,  -240,  -240,   290,   335,   378,
+     338,  -240,   165,   169,  -240,   418,   144,  -240,   131,  -240,
+    -240,   293,   389,  -240,    27,   131,  1090,   173,   251,  -240,
+     177,   296,   547,  1090,   424,  -240,   334,  -240,  -240,  -240,
+     179,  -240,  -240,  -240,  -240,    16,   131,    19,  -240,   299,
+     251,  -240,  -240,  -240,   335,   297,  -240,   161,  -240,   131,
+    -240,   131,  -240,  -240,   131,  -240,   181,  -240,  -240,   302,
+    -240,  1090,  -240,  -240,   348,   310,  -240,   183,  -240,   131,
+    -240,   136,  -240,   131,  -240,   188,  -240,  -240,   192,   343,
+    -240,   437,  -240
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int16 yypgoto[] =
 {
-      -1,    14,    15,    16,    17,    18,    19,    20,   170,   171,
-      89,   320,   321,   322,   233,   310,   311,   238,   380,   418,
-     464,   435,   436,   437,   438,   439,   377,   414,    21,    22,
-     168,   304,    23,    24,   154,   155,    25,    26,    43,    44,
-     135,    41,    90,    91,    92,   139,    93,   288,   283,   206,
-     207,   277,   278,   208,   290,   356,   405,   430,   450,   451,
-     469,   477,   117,   118,   176,   177,   178,   179,   180,    95,
-      96,    97,    98,    99,   100,   101,   186,   187,   126,   127,
-     190,   221,   102,   198,   263,   103,   306,   260,   104,   144,
-     149,   160,   105,   368,    28,    29
+    -240,  -240,  -240,  -240,  -240,  -240,  -240,  -240,  -119,  -240,
+     271,   120,  -240,  -240,  -239,  -240,  -240,  -240,  -240,  -240,
+    -240,    -1,   -14,  -240,  -240,  -240,  -240,  -240,  -240,  -240,
+    -240,  -240,  -240,  -240,  -240,   222,  -240,   401,  -240,  -240,
+     344,    12,  -240,  -240,  -240,   315,  -240,   -91,  -240,  -240,
+    -172,   100,  -190,   -10,  -240,  -240,  -240,  -240,  -240,  -240,
+     -15,  -240,  -240,   -82,  -240,  -127,   215,   218,   292,   -35,
+     325,   323,   356,  -139,  -240,  -240,  -240,  -240,   294,  -240,
+     342,   300,  -212,  -174,   333,    78,  -111,  -240,  -240,  -240,
+    -240,  -240,  -120,    -4,    68,  -240,  -240
 };
 
-  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-     positive, shift that token.  If negative, reduce the rule whose
-     number is the opposite.  If YYTABLE_NINF, syntax error.  */
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -130
 static const yytype_int16 yytable[] =
 {
-      33,   183,   292,   184,    45,   159,   209,    42,    46,   181,
-     309,   262,    27,    94,    31,   152,    32,   181,    31,   285,
-      32,   457,    31,   247,    32,   188,    55,   286,   247,   247,
-      57,    58,    59,    60,    61,   205,   228,    30,    51,   247,
-      50,   125,   397,   458,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   245,   141,   142,   334,   146,   147,
-     136,   141,   142,   141,   142,   275,   181,   188,   181,    10,
-      39,   244,   209,   121,   141,   142,   141,   142,   326,   327,
-     328,   141,   142,    34,   373,   462,    36,   374,   375,   124,
-     145,   313,    52,   111,    31,    53,    32,    40,   353,    45,
-      38,   205,   156,    46,   200,   161,   162,   287,   398,   259,
-     169,   172,    94,   312,   463,   391,   161,    10,    10,    35,
-     153,   276,   153,   112,   314,   220,   225,   226,   265,   273,
-     305,   185,   119,   315,   210,    37,   329,   335,   402,   213,
-     181,   181,   204,   120,   383,   350,   459,   246,   216,   415,
-     204,    47,   209,   323,   406,   192,   332,   266,   376,   172,
-     269,   234,   235,     1,   443,     2,   393,   203,   340,    54,
-     148,   316,   422,   203,   227,   396,   185,   359,   481,   193,
-     317,   205,   362,   211,   318,    31,    31,    32,    32,   229,
-     220,   181,     3,   194,   195,   279,   296,   482,   223,   319,
-     210,    46,   280,   141,   142,    46,   116,    56,     4,     5,
-     281,   196,   390,   143,   230,     6,   222,   209,   156,   106,
-       7,   364,   297,   262,   141,   142,   389,   107,   302,   282,
-     330,   197,   333,   307,   403,   303,   172,   339,   163,   164,
-       8,   407,   408,   421,   342,   231,   205,   410,   181,   365,
-     366,   108,   141,   142,   411,   141,   142,    48,   344,    49,
-     109,   419,     9,   467,   232,   412,   358,   279,   345,    10,
-     165,   166,    46,   367,   280,   181,   239,   240,   113,  -127,
-     210,    11,   281,   110,    46,   114,   468,    12,   264,   226,
-      13,   141,   142,   293,   294,   115,   116,   161,   336,   337,
-     387,   282,   122,   220,   357,   294,   449,   123,   369,   370,
-     371,   372,   395,   129,   385,   131,   409,   226,   424,   294,
-     181,   431,   226,   432,   226,   134,   220,   137,   446,   294,
-     138,   447,   337,   455,   456,    31,    62,    32,    63,   128,
-     472,   473,   456,   479,   226,   210,   484,   226,   485,   226,
-     130,   132,    64,    65,   217,   480,   161,   161,   140,   483,
-     220,   133,   423,   167,    67,    68,   191,   158,   307,   182,
-     201,   224,    69,    70,   202,    10,   236,   247,   237,    71,
-      72,   248,    73,   270,   261,   271,   272,   218,    74,   274,
-     289,   284,   291,   445,    75,   298,   299,    76,   300,   301,
-     452,   308,   341,   331,   338,   343,   346,   347,   349,   440,
-      77,    78,   351,   348,   352,   354,   444,   355,    79,   360,
-     361,    80,   363,   152,   378,   381,   379,   392,   382,   384,
-     388,   394,   400,    81,   401,   404,   460,   440,   452,   413,
-     416,    82,    83,   417,   426,    84,    85,   427,   420,   428,
-     470,   429,   440,    86,   294,   161,   433,   441,    87,    31,
-      62,    32,    63,    88,   219,   173,   442,   453,   476,   454,
-     161,   448,   465,   486,   161,   474,    64,    65,   487,   466,
-     478,   242,   386,   471,   461,   157,   295,   324,    67,    68,
-     212,   399,   475,   214,   243,   325,    69,    70,   151,   189,
-     215,   199,   425,    71,    72,   434,    73,     0,     0,     0,
-     267,     0,    74,   268,     0,     0,     0,   174,    75,     0,
-       0,    76,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    77,    78,     0,     0,     0,     0,
-       0,     0,    79,     0,     0,    80,    31,    62,    32,    63,
-       0,     0,   173,     0,     0,     0,     0,    81,     0,     0,
-       0,     0,    10,    64,    65,    82,    83,     0,     0,    84,
-      85,     0,     0,     0,     0,    67,    68,    86,     0,     0,
-       0,     0,    87,    69,    70,     0,     0,   175,     0,     0,
-      71,    72,     0,    73,     0,     0,     0,     0,     0,    74,
-       0,     0,     0,     0,   174,    75,     0,     0,    76,     0,
+      33,   189,    45,   214,   188,   314,    96,    42,    46,   186,
+     252,   297,    27,   267,   252,   150,   151,   186,   339,   163,
+      31,   156,    32,   462,   290,    31,    57,    32,   252,   193,
+      59,    60,    61,    62,    63,   252,   129,   280,    51,   197,
+      31,   193,    32,   145,   146,   463,   145,   146,    34,   233,
+      30,   210,   291,   250,   234,   140,    50,   115,   402,   145,
+     146,   216,    39,   198,   145,   146,    31,   186,    32,   186,
+     214,   145,   146,    36,   120,   125,   228,   199,   200,   235,
+      37,   331,   332,   333,   227,    35,    10,   116,   249,    40,
+     318,   467,   149,   281,   128,   307,   201,    47,   340,    45,
+     395,   205,   308,   358,   160,    46,   190,   165,   166,    96,
+     236,    38,   145,   146,   174,   177,   202,   355,   210,   278,
+     165,   468,   225,   319,   396,   403,   317,   157,   152,    10,
+     237,   310,   320,   292,   270,    31,   328,    32,   215,   334,
+     411,   186,   186,   218,   420,   251,   388,   407,   157,   464,
+     214,   108,   221,    56,   209,   271,   208,   345,   274,   401,
+      10,   448,   190,    52,   177,   284,   239,   240,   398,   209,
+     321,    58,   285,   337,   123,   109,   364,  -129,   232,   322,
+     286,   427,   145,   146,   323,   124,   367,   378,   225,   284,
+     379,   380,   186,   472,   301,    31,   285,    32,   210,   324,
+     287,   486,   415,   110,   286,   215,    46,   111,   369,   416,
+      46,    54,   145,   146,    55,   214,   473,    48,   112,    49,
+     487,   114,   147,   160,   287,   267,   117,   302,   335,     1,
+     338,     2,   118,   408,   119,   344,   370,   371,   312,   426,
+     120,   177,   347,   394,   126,   412,   413,   168,   169,   186,
+     127,   145,   146,   349,   170,   171,   230,   231,     3,   132,
+     424,   372,   381,   210,   363,   133,   417,   244,   245,   269,
+     231,   350,   145,   146,     4,     5,   186,    46,   135,   298,
+     299,     6,   138,   341,   342,   215,     7,   362,   299,    46,
+     374,   375,   376,   377,   414,   231,   429,   299,   392,   436,
+     231,   225,   165,   437,   231,   454,     8,   451,   299,   134,
+     400,   452,   342,   460,   461,   478,   461,   484,   231,   390,
+     136,   186,   489,   231,   225,   141,   490,   231,   137,     9,
+     142,   144,   162,   167,   172,   196,    10,   187,   206,   207,
+     229,    10,   241,   252,   477,   242,   253,   266,    11,   275,
+     215,   276,   277,   279,    12,   289,   294,    13,   225,   485,
+     428,   165,   165,   488,   304,   296,   313,   303,   306,   305,
+     343,   336,   346,   312,   348,    31,    64,    32,    65,   351,
+     354,   356,   352,   353,   357,   359,   360,   365,   366,   368,
+     156,   450,    66,    67,   222,   383,   384,   386,   457,   387,
+     389,   393,   399,   405,    69,    70,   397,   406,   409,   418,
+     425,   421,    71,    72,   445,   422,   431,   432,   433,    73,
+      74,   449,    75,   438,   434,   299,   446,   223,    76,   447,
+     453,   458,   471,   470,    77,   479,   457,    78,   459,   481,
+     491,   465,   445,   483,   492,   466,   391,   476,   247,   300,
+      79,    80,   113,   161,   404,   475,   480,   445,    81,   217,
+     165,    82,   155,    31,    64,    32,    65,   329,   204,   178,
+     248,   330,   194,   219,    83,   165,   220,   430,     0,   165,
+      66,    67,    84,    85,   439,   272,    86,    87,     0,     0,
+       0,   273,    69,    70,    88,     0,     0,     0,     0,    89,
+      71,    72,     0,     0,    90,   224,     0,    73,    74,     0,
+      75,     0,     0,     0,     0,     0,    76,     0,     0,     0,
+       0,   179,    77,     0,     0,    78,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    79,    80,
+       0,     0,     0,     0,     0,     0,    81,     0,     0,    82,
+       0,    31,    64,    32,    65,     0,     0,   178,     0,     0,
+       0,     0,    83,     0,     0,     0,     0,    10,    66,    67,
+      84,    85,     0,     0,    86,    87,     0,     0,     0,     0,
+      69,    70,    88,     0,     0,     0,     0,    89,    71,    72,
+       0,     0,   180,     0,     0,    73,    74,     0,    75,     0,
+       0,     0,     0,     0,    76,     0,     0,     0,     0,   179,
+      77,     0,     0,    78,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    79,    80,     0,     0,
+       0,     0,     0,     0,    81,     0,     0,    82,     0,     0,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+      83,   145,   146,     0,    31,    64,    32,    65,    84,    85,
+       0,     0,    86,    87,     0,     0,     0,     0,     0,     0,
+      88,    66,    67,    68,     0,    89,     0,     0,     0,     0,
+     180,     0,     0,    69,    70,     0,     0,     0,     0,     0,
+       0,    71,    72,     0,     0,     0,     0,     0,    73,    74,
+       0,    75,     0,     0,     0,   264,     0,    76,     0,     0,
+       0,     0,     0,    77,     0,     0,    78,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    79,
+      80,     0,     0,     0,     0,     0,     0,    81,     0,     0,
+      82,     0,    31,    64,    32,    65,     0,     0,     0,     0,
+       0,     0,     0,    83,     0,     0,     0,     0,     0,    66,
+      67,    84,    85,     0,   208,    86,    87,     0,     0,     0,
+       0,    69,    70,    88,     0,     0,     0,     0,    89,    71,
+      72,     0,     0,    90,     0,     0,    73,    74,     0,    75,
+       0,     0,     0,     0,     0,    76,     0,     0,     0,     0,
+       0,    77,     0,     0,    78,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    79,    80,     0,
+       0,     0,     0,     0,     0,    81,     0,     0,    82,     0,
+      31,    64,    32,    65,     0,     0,     0,     0,     0,     0,
+       0,    83,     0,     0,     0,     0,     0,    66,    67,    84,
+      85,     0,     0,    86,    87,     0,     0,     0,     0,    69,
+      70,    88,   128,     0,     0,     0,    89,    71,    72,     0,
+       0,    90,     0,     0,    73,    74,     0,    75,     0,     0,
+       0,     0,     0,    76,     0,     0,     0,     0,     0,    77,
+       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    79,    80,     0,     0,     0,
+       0,     0,     0,    81,     0,     0,    82,     0,    31,    64,
+      32,    65,     0,     0,     0,     0,     0,     0,     0,    83,
+       0,     0,     0,     0,    10,    66,    67,    84,    85,     0,
+       0,    86,    87,     0,     0,     0,     0,    69,    70,    88,
+       0,     0,     0,     0,    89,    71,    72,     0,     0,    90,
+       0,     0,    73,    74,     0,    75,     0,     0,     0,     0,
+       0,    76,     0,     0,     0,     0,   179,    77,     0,     0,
+      78,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    79,    80,     0,     0,     0,     0,     0,
+       0,    81,     0,     0,    82,     0,    31,    64,    32,    65,
+       0,     0,     0,     0,     0,     0,     0,    83,     0,     0,
+       0,     0,     0,    66,   154,    84,    85,     0,     0,    86,
+      87,     0,     0,     0,     0,    69,    70,    88,     0,     0,
+       0,     0,    89,    71,    72,     0,     0,   180,     0,     0,
+      73,    74,     0,    75,     0,     0,     0,     0,     0,    76,
+       0,     0,     0,     0,     0,    77,     0,     0,    78,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    77,    78,     0,     0,     0,     0,     0,     0,    79,
-       0,     0,    80,     0,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,    81,   141,   142,     0,    31,    62,
-      32,    63,    82,    83,     0,     0,    84,    85,     0,     0,
-       0,     0,     0,     0,    86,    64,    65,    66,     0,    87,
-       0,     0,     0,     0,   175,     0,     0,    67,    68,     0,
-       0,     0,     0,     0,     0,    69,    70,     0,     0,     0,
-       0,     0,    71,    72,     0,    73,     0,     0,     0,   259,
-       0,    74,     0,    31,    62,    32,    63,    75,     0,     0,
-      76,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      64,    65,     0,    77,    78,     0,     0,     0,     0,     0,
-       0,    79,    67,    68,    80,     0,     0,     0,     0,     0,
-      69,    70,     0,     0,     0,     0,    81,    71,    72,     0,
-      73,     0,     0,     0,    82,    83,    74,     0,    84,    85,
-       0,     0,    75,     0,     0,    76,    86,     0,     0,     0,
-       0,    87,     0,     0,     0,     0,    88,     0,    77,    78,
-       0,     0,     0,     0,     0,     0,    79,     0,     0,    80,
-      31,    62,    32,    63,     0,     0,     0,     0,     0,     0,
-       0,    81,     0,     0,     0,     0,     0,    64,    65,    82,
-      83,     0,     0,    84,    85,     0,     0,     0,     0,    67,
-      68,    86,   124,     0,     0,     0,    87,    69,    70,     0,
-       0,    88,     0,     0,    71,    72,     0,    73,     0,     0,
-       0,     0,     0,    74,     0,    31,    62,    32,    63,    75,
-       0,     0,    76,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    64,    65,     0,    77,    78,     0,     0,     0,
-       0,     0,     0,    79,    67,    68,    80,     0,     0,     0,
-       0,     0,    69,    70,     0,     0,     0,     0,    81,    71,
-      72,     0,    73,    10,     0,     0,    82,    83,    74,     0,
-      84,    85,     0,   174,    75,     0,     0,    76,    86,     0,
-       0,     0,     0,    87,     0,     0,     0,     0,    88,     0,
-      77,    78,     0,     0,     0,     0,     0,     0,    79,     0,
-       0,    80,    31,    62,    32,    63,     0,     0,     0,     0,
-       0,     0,     0,    81,     0,     0,     0,     0,     0,    64,
-     150,    82,    83,     0,     0,    84,    85,     0,     0,     0,
-       0,    67,    68,    86,     0,     0,     0,     0,    87,    69,
-      70,     0,     0,   175,     0,     0,    71,    72,     0,    73,
-       0,     0,     0,     0,     0,    74,     0,    31,    62,    32,
-      63,    75,     0,     0,    76,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    64,    65,     0,    77,    78,     0,
-       0,     0,     0,     0,     0,    79,    67,    68,    80,     0,
-       0,     0,     0,     0,    69,    70,     0,     0,     0,     0,
-      81,    71,    72,     0,    73,     0,     0,     0,    82,    83,
-      74,     0,    84,    85,     0,     0,    75,     0,     0,    76,
-      86,     0,     0,     0,     0,    87,     0,     0,     0,     0,
-      88,     0,    77,    78,     0,     0,     0,     0,     0,     0,
-      79,     0,     0,    80,    62,     0,    63,     0,     0,     0,
-       0,     0,     0,     0,     0,    81,     0,     0,     0,     0,
-      64,   150,     0,    82,    83,     0,     0,    84,    85,     0,
-       0,     0,    67,    68,     0,    86,     0,     0,     0,     0,
-      87,    70,     0,     0,     0,    88,     0,    71,    72,     0,
-      73,    67,    68,     0,     0,     0,    74,     0,     0,     0,
-      70,     0,     0,     0,     0,    76,    71,    72,     0,    73,
-       0,     0,     0,     0,     0,    74,     0,     0,    77,    78,
-       0,     0,     0,     0,    76,     0,    79,     0,     0,    80,
-       0,     0,     0,     0,     0,     0,     0,    77,   241,     0,
-       0,    81,     0,     0,     0,    79,     0,     0,     0,    82,
-       0,     0,     0,    84,    85,     0,     0,     0,     0,     0,
-      81,    86,     0,     0,     0,     0,    87,     0,    82,     0,
-       0,     0,    84,    85,     0,     0,     0,     0,     0,     0,
-      86,     0,     0,     0,     0,    87
+       0,    79,    80,     0,     0,     0,     0,     0,     0,    81,
+       0,     0,    82,     0,    31,    64,    32,    65,     0,     0,
+       0,     0,     0,     0,     0,    83,     0,     0,     0,     0,
+       0,    66,    67,    84,    85,     0,     0,    86,    87,     0,
+       0,     0,     0,    69,    70,    88,     0,     0,     0,     0,
+      89,    71,    72,     0,     0,    90,     0,     0,    73,    74,
+       0,    75,     0,     0,     0,     0,    64,    76,    65,     0,
+       0,     0,     0,    77,     0,     0,    78,     0,     0,     0,
+       0,     0,    66,   154,     0,     0,     0,     0,     0,    79,
+      80,     0,     0,     0,    69,    70,     0,    81,     0,     0,
+      82,     0,     0,    72,     0,     0,     0,     0,     0,    73,
+      74,     0,    75,    83,     0,     0,     0,     0,    76,     0,
+       0,    84,    85,     0,     0,    86,    87,    78,     0,     0,
+       0,     0,     0,    88,     0,     0,     0,     0,    89,     0,
+      79,    80,     0,    90,     0,    69,    70,     0,    81,     0,
+       0,    82,     0,     0,    72,     0,     0,     0,     0,     0,
+      73,    74,     0,    75,    83,     0,     0,     0,     0,    76,
+       0,     0,    84,     0,     0,     0,    86,    87,    78,     0,
+       0,     0,     0,     0,    88,     0,     0,     0,     0,    89,
+       0,    79,   246,     0,     0,     0,     0,     0,     0,    81,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+       0,   145,   146,     0,     0,    83,     0,     0,     0,     0,
+       0,     0,     0,    84,     0,     0,     0,    86,    87,     0,
+       0,     0,     0,     0,     0,    88,     0,     0,     0,     0,
+      89,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   264
 };
 
+#define yypact_value_is_default(Yystate) \
+  (!!((Yystate) == (-240)))
+
+#define yytable_value_is_error(Yytable_value) \
+  YYID (0)
+
 static const yytype_int16 yycheck[] =
 {
-       4,   120,   218,   124,    12,   108,   138,    11,    12,   116,
-     239,   182,     0,    41,     4,    27,     6,   124,     4,   209,
-       6,     7,     4,     8,     6,    59,    30,    37,     8,     8,
-      34,    35,    36,    37,    38,   138,   163,   112,    26,     8,
-      78,    69,    67,    29,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,   175,    21,    22,    10,    23,    24,
-      88,    21,    22,    21,    22,   204,   173,    59,   175,   107,
-      29,   174,   204,    61,    21,    22,    21,    22,    17,    18,
-      19,    21,    22,    76,    35,    72,    69,    38,    39,   123,
-      94,    10,   128,    28,     4,   131,     6,    56,   288,   107,
-      81,   204,   106,   107,   132,   109,   110,   117,   133,    75,
-     114,   115,   140,   240,   101,   331,   120,   107,   107,   112,
-     132,    31,   132,    58,    43,   153,   133,   134,   113,    69,
-     237,   123,   121,    52,   138,   112,    75,    90,   354,   143,
-     247,   248,   132,   132,   315,   284,   132,   175,   152,   378,
-     132,     0,   284,   133,   133,    50,   259,   185,   109,   163,
-     188,   165,   166,     1,   133,     3,   337,   133,   113,     3,
-     135,    90,   388,   133,   162,   133,   123,   298,    65,    74,
-      99,   284,   301,   139,   103,     4,     4,     6,     6,    43,
-     218,   298,    30,    88,    89,    70,   224,    84,   154,   118,
-     204,   205,    77,    21,    22,   209,   124,    69,    46,    47,
-      85,   106,     9,    31,    68,    53,   134,   349,   222,   108,
-      58,    64,   226,   394,    21,    22,   329,   134,    54,   104,
-     258,   126,   260,   237,   355,    61,   240,   265,    44,    45,
-      78,   360,   361,     9,   272,    99,   349,    54,   355,    92,
-      93,    31,    21,    22,    61,    21,    22,   128,   133,   130,
-     132,   382,   100,    32,   118,   372,   294,    70,   276,   107,
-      44,    45,   276,   116,    77,   382,   133,   134,     5,    82,
-     284,   119,    85,    81,   288,    93,    55,   125,   133,   134,
-     128,    21,    22,   133,   134,   132,   124,   301,   133,   134,
-     328,   104,     7,   331,   133,   134,   427,     7,   133,   134,
-     133,   134,   340,    80,   318,     5,   133,   134,   133,   134,
-     427,   133,   134,   133,   134,    80,   354,     5,   133,   134,
-      69,   133,   134,   133,   134,     4,     5,     6,     7,   132,
-     459,   133,   134,   133,   134,   349,   133,   134,   133,   134,
-     132,   132,    21,    22,    23,   474,   360,   361,   134,   478,
-     388,   132,   390,   125,    33,    34,     7,   132,   372,   132,
-       7,    11,    41,    42,   133,   107,   132,     8,   132,    48,
-      49,     9,    51,    60,    20,   133,    69,    56,    57,   133,
-      71,   134,   133,   421,    63,   132,    83,    66,    83,   132,
-     428,   120,    60,   132,   121,     7,    95,    95,    82,   413,
-      79,    80,     7,    95,     7,    40,   420,    73,    87,   132,
-     132,    90,     5,    27,   134,    90,   125,    90,   132,    83,
-     132,   132,    98,   102,    98,    94,   440,   441,   466,   132,
-      36,   110,   111,    96,     7,   114,   115,    93,   132,    40,
-     454,    86,   456,   122,   134,   459,     5,   132,   127,     4,
-       5,     6,     7,   132,   133,    10,    40,     7,    91,   103,
-     474,   133,   133,    97,   478,   132,    21,    22,     7,   134,
-     132,   172,   321,   456,   441,   107,   222,   247,    33,    34,
-     140,   349,   466,   144,   173,   248,    41,    42,   104,   126,
-     149,   131,   394,    48,    49,   411,    51,    -1,    -1,    -1,
-     186,    -1,    57,   186,    -1,    -1,    -1,    62,    63,    -1,
-      -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    79,    80,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    -1,    -1,    90,     4,     5,     6,     7,
-      -1,    -1,    10,    -1,    -1,    -1,    -1,   102,    -1,    -1,
-      -1,    -1,   107,    21,    22,   110,   111,    -1,    -1,   114,
-     115,    -1,    -1,    -1,    -1,    33,    34,   122,    -1,    -1,
-      -1,    -1,   127,    41,    42,    -1,    -1,   132,    -1,    -1,
-      48,    49,    -1,    51,    -1,    -1,    -1,    -1,    -1,    57,
-      -1,    -1,    -1,    -1,    62,    63,    -1,    -1,    66,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    87,
-      -1,    -1,    90,    -1,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,   102,    21,    22,    -1,     4,     5,
-       6,     7,   110,   111,    -1,    -1,   114,   115,    -1,    -1,
-      -1,    -1,    -1,    -1,   122,    21,    22,    23,    -1,   127,
-      -1,    -1,    -1,    -1,   132,    -1,    -1,    33,    34,    -1,
-      -1,    -1,    -1,    -1,    -1,    41,    42,    -1,    -1,    -1,
-      -1,    -1,    48,    49,    -1,    51,    -1,    -1,    -1,    75,
-      -1,    57,    -1,     4,     5,     6,     7,    63,    -1,    -1,
-      66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      21,    22,    -1,    79,    80,    -1,    -1,    -1,    -1,    -1,
-      -1,    87,    33,    34,    90,    -1,    -1,    -1,    -1,    -1,
-      41,    42,    -1,    -1,    -1,    -1,   102,    48,    49,    -1,
-      51,    -1,    -1,    -1,   110,   111,    57,    -1,   114,   115,
-      -1,    -1,    63,    -1,    -1,    66,   122,    -1,    -1,    -1,
-      -1,   127,    -1,    -1,    -1,    -1,   132,    -1,    79,    80,
+       4,   128,    12,   142,   124,   244,    41,    11,    12,   120,
+       8,   223,     0,   187,     8,    23,    24,   128,    10,   110,
+       4,    27,     6,     7,   214,     4,    30,     6,     8,    59,
+      34,    35,    36,    37,    38,     8,    71,   209,    26,    50,
+       4,    59,     6,    21,    22,    29,    21,    22,    76,   168,
+     113,   142,    37,   180,    43,    90,    78,    28,    67,    21,
+      22,   143,    29,    74,    21,    22,     4,   178,     6,   180,
+     209,    21,    22,    69,   125,    63,   158,    88,    89,    68,
+     113,    17,    18,    19,   135,   113,   108,    58,   179,    56,
+      10,    72,    96,    31,   124,    54,   107,     0,    90,   109,
+       9,   136,    61,   293,   108,   109,   124,   111,   112,   144,
+      99,    81,    21,    22,   118,   119,   127,   289,   209,    69,
+     124,   102,   157,    43,   336,   134,   245,   133,  

<TRUNCATED>


[4/4] incubator-quickstep git commit: Added PRIORITY clause in parser.

Posted by hb...@apache.org.
Added PRIORITY clause in parser.

- SQL statements (right now only SELECT statements) support "WITH
  PRIORITY N" clause.
- The priority value should be a non-zero positive integer.
- The priority value is a part of the QueryHandle class.


Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/604ed99b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/604ed99b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/604ed99b

Branch: refs/heads/parser-priority-clause
Commit: 604ed99b7e82a0dbb1840cc2db3c5771600de0ab
Parents: 8e825f1
Author: Harshad Deshmukh <hb...@apache.org>
Authored: Fri Jun 17 16:01:19 2016 -0500
Committer: Harshad Deshmukh <hb...@apache.org>
Committed: Fri Jun 17 16:01:19 2016 -0500

----------------------------------------------------------------------
 parser/CMakeLists.txt                 |    8 +
 parser/ParsePriority.hpp              |   94 +
 parser/ParseStatement.hpp             |   27 +-
 parser/SqlLexer.lpp                   |    2 +
 parser/SqlParser.ypp                  |   37 +-
 parser/preprocessed/SqlLexer_gen.cpp  | 1257 ++++---
 parser/preprocessed/SqlLexer_gen.hpp  |   31 +-
 parser/preprocessed/SqlParser_gen.cpp | 5342 +++++++++++++++-------------
 parser/preprocessed/SqlParser_gen.hpp |  307 +-
 parser/tests/Select.test              |   43 +
 query_optimizer/QueryHandle.hpp       |   11 +-
 query_optimizer/QueryProcessor.cpp    |    4 +-
 12 files changed, 3892 insertions(+), 3271 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/parser/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/parser/CMakeLists.txt b/parser/CMakeLists.txt
index 2488d30..607926a 100644
--- a/parser/CMakeLists.txt
+++ b/parser/CMakeLists.txt
@@ -103,6 +103,7 @@ add_library(quickstep_parser_ParsePartitionClause ../empty_src.cpp ParsePartitio
 add_library(quickstep_parser_ParsePredicate ParsePredicate.cpp ParsePredicate.hpp)
 add_library(quickstep_parser_ParsePredicateExists ../empty_src.cpp ParsePredicateExists.hpp)
 add_library(quickstep_parser_ParsePredicateInTableQuery ../empty_src.cpp ParsePredicateInTableQuery.hpp)
+add_library(quickstep_parser_ParsePriority ../empty_src.cpp ParsePriority.hpp)
 add_library(quickstep_parser_ParseSample ParseSample.cpp ParseSample.hpp)
 add_library(quickstep_parser_ParseSelect ../empty_src.cpp ParseSelect.hpp)
 add_library(quickstep_parser_ParseSelectionClause ParseSelectionClause.cpp ParseSelectionClause.hpp)
@@ -227,6 +228,10 @@ target_link_libraries(quickstep_parser_ParsePredicateInTableQuery
                       quickstep_parser_ParsePredicate
                       quickstep_parser_ParseSubqueryExpression
                       quickstep_utility_Macros)
+target_link_libraries(quickstep_parser_ParsePriority
+                      quickstep_parser_ParseLiteralValue
+                      quickstep_parser_ParseTreeNode
+                      quickstep_utility_Macros)
 target_link_libraries(quickstep_parser_ParseSample
                       quickstep_parser_ParseLiteralValue
                       quickstep_parser_ParseTreeNode
@@ -264,6 +269,7 @@ target_link_libraries(quickstep_parser_ParseStatement
                       quickstep_parser_ParseKeyValue
                       quickstep_parser_ParsePartitionClause
                       quickstep_parser_ParsePredicate
+                      quickstep_parser_ParsePriority
                       quickstep_parser_ParseSelect
                       quickstep_parser_ParseString
                       quickstep_parser_ParseSubqueryTableReference
@@ -328,6 +334,7 @@ target_link_libraries(quickstep_parser_SqlParser
                       quickstep_parser_ParsePredicate
                       quickstep_parser_ParsePredicateExists
                       quickstep_parser_ParsePredicateInTableQuery
+                      quickstep_parser_ParsePriority
                       quickstep_parser_ParseSample
                       quickstep_parser_ParseSelect
                       quickstep_parser_ParseSelectionClause
@@ -407,6 +414,7 @@ target_link_libraries(quickstep_parser
                       quickstep_parser_ParsePredicate
                       quickstep_parser_ParsePredicateExists
                       quickstep_parser_ParsePredicateInTableQuery
+                      quickstep_parser_ParsePriority
                       quickstep_parser_ParserUtil
                       quickstep_parser_ParseSample
                       quickstep_parser_ParseSelect

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/parser/ParsePriority.hpp
----------------------------------------------------------------------
diff --git a/parser/ParsePriority.hpp b/parser/ParsePriority.hpp
new file mode 100644
index 0000000..89806d4
--- /dev/null
+++ b/parser/ParsePriority.hpp
@@ -0,0 +1,94 @@
+/**
+ *   Copyright 2016, Quickstep Research Group, Computer Sciences Department,
+ *     University of Wisconsin\u2014Madison.
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ **/
+
+#ifndef QUICKSTEP_PARSER_PARSE_PRIORITY_HPP_
+#define QUICKSTEP_PARSER_PARSE_PRIORITY_HPP_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "parser/ParseLiteralValue.hpp"
+#include "parser/ParseTreeNode.hpp"
+#include "utility/Macros.hpp"
+
+namespace quickstep {
+
+/** \addtogroup Parser
+ *  @{
+ */
+
+/**
+ * @brief A parsed representation of PRIORITY.
+ **/
+class ParsePriority : public ParseTreeNode {
+ public:
+  /**
+   * @brief Constructor.
+   *
+   * @param line_number The line number of "PRIORITY" in the SQL statement.
+   * @param column_number The column number of "PRIORITY" in the SQL statement.
+   * @param priority_expression The PRIORITY value expression.
+   **/
+  ParsePriority(const int line_number,
+                const int column_number,
+                NumericParseLiteralValue *priority_expression)
+      : ParseTreeNode(line_number, column_number),
+        priority_expression_(priority_expression) {}
+
+  /**
+   * @brief Destructor.
+   */
+  ~ParsePriority() override {}
+
+  /**
+   * @brief Gets the PRIORITY expression.
+   *
+   * @return PRIORITY expression
+   */
+  const NumericParseLiteralValue* priority_expression() const {
+    return priority_expression_.get();
+  }
+
+  std::string getName() const override {
+    return "PRIORITY";
+  }
+
+ protected:
+  void getFieldStringItems(
+      std::vector<std::string> *inline_field_names,
+      std::vector<std::string> *inline_field_values,
+      std::vector<std::string> *non_container_child_field_names,
+      std::vector<const ParseTreeNode *> *non_container_child_fields,
+      std::vector<std::string> *container_child_field_names,
+      std::vector<std::vector<const ParseTreeNode *>> *container_child_fields)
+      const override {
+    non_container_child_field_names->push_back("");
+    non_container_child_fields->push_back(priority_expression_.get());
+  }
+
+ private:
+  std::unique_ptr<NumericParseLiteralValue> priority_expression_;
+
+  DISALLOW_COPY_AND_ASSIGN(ParsePriority);
+};
+
+/** @} */
+
+}  // namespace quickstep
+
+#endif  // QUICKSTEP_PARSER_PARSE_PRIORITY_HPP_

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/parser/ParseStatement.hpp
----------------------------------------------------------------------
diff --git a/parser/ParseStatement.hpp b/parser/ParseStatement.hpp
index 65acc68..fd6673d 100644
--- a/parser/ParseStatement.hpp
+++ b/parser/ParseStatement.hpp
@@ -32,6 +32,7 @@
 #include "parser/ParseKeyValue.hpp"
 #include "parser/ParsePartitionClause.hpp"
 #include "parser/ParsePredicate.hpp"
+#include "parser/ParsePriority.hpp"
 #include "parser/ParseSelect.hpp"
 #include "parser/ParseString.hpp"
 #include "parser/ParseSubqueryTableReference.hpp"
@@ -83,6 +84,10 @@ class ParseStatement : public ParseTreeNode {
    **/
   virtual StatementType getStatementType() const = 0;
 
+  virtual const std::int64_t getPriority() const {
+    return 1;
+  }
+
  protected:
   ParseStatement(const int line_number, const int column_number)
       : ParseTreeNode(line_number, column_number) {
@@ -480,14 +485,18 @@ class ParseStatementSelect : public ParseStatement {
    * @param column_number Column number of the first token of this node in the SQL statement.
    * @param select_query The top-level SELECT query.
    * @param with_clause The WITH clause of common table query expressions.
+   * @param priority_clause The PRIORITY clause of this query. If not valid or
+   *        not present, this is NULL.
    **/
   ParseStatementSelect(const int line_number,
                        const int column_number,
                        ParseSelect *select_query,
-                       PtrVector<ParseSubqueryTableReference> *with_clause)
+                       PtrVector<ParseSubqueryTableReference> *with_clause,
+                       ParsePriority *priority_clause)
       : ParseStatement(line_number, column_number),
         select_query_(select_query),
-        with_clause_(with_clause) {
+        with_clause_(with_clause),
+        priority_clause_(priority_clause) {
   }
 
   /**
@@ -518,6 +527,14 @@ class ParseStatementSelect : public ParseStatement {
     return with_clause_.get();
   }
 
+  const std::int64_t getPriority() const override {
+    if (priority_clause_ != nullptr) {
+      DCHECK(priority_clause_->priority_expression() != nullptr);
+      return priority_clause_->priority_expression()->long_value();
+    }
+    return 1;
+  }
+
  protected:
   void getFieldStringItems(
       std::vector<std::string> *inline_field_names,
@@ -536,11 +553,17 @@ class ParseStatementSelect : public ParseStatement {
         container_child_fields->back().push_back(&common_subquery);
       }
     }
+
+    if (priority_clause_ != nullptr) {
+      non_container_child_field_names->push_back("priority");
+      non_container_child_fields->push_back(priority_clause_.get());
+    }
   }
 
  private:
   std::unique_ptr<ParseSelect> select_query_;
   std::unique_ptr<PtrVector<ParseSubqueryTableReference>> with_clause_;
+  std::unique_ptr<ParsePriority> priority_clause_;
 
   DISALLOW_COPY_AND_ASSIGN(ParseStatementSelect);
 };

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/parser/SqlLexer.lpp
----------------------------------------------------------------------
diff --git a/parser/SqlLexer.lpp b/parser/SqlLexer.lpp
index ac1c708..677e41a 100644
--- a/parser/SqlLexer.lpp
+++ b/parser/SqlLexer.lpp
@@ -60,6 +60,7 @@ class ParseOrderBy;
 class ParseOrderByItem;
 class ParsePartitionClause;
 class ParsePredicate;
+class ParsePriority;
 class ParseSample;
 class ParseScalarLiteral;
 class ParseSearchedWhenClause;
@@ -247,6 +248,7 @@ unsigned_numeric_literal {exact_numeric_literal}|{approximate_numeric_literal}
   "partitions"       return TOKEN_PARTITIONS;
   "percent"          return TOKEN_PERCENT;
   "primary"          return TOKEN_PRIMARY;
+  "priority"         return TOKEN_PRIORITY;
   "quit"             return TOKEN_QUIT;
   "range"            return TOKEN_RANGE;
   "real"             return TOKEN_REAL;

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/604ed99b/parser/SqlParser.ypp
----------------------------------------------------------------------
diff --git a/parser/SqlParser.ypp b/parser/SqlParser.ypp
index b07c48e..0318104 100644
--- a/parser/SqlParser.ypp
+++ b/parser/SqlParser.ypp
@@ -85,6 +85,7 @@ typedef struct YYLTYPE {
 #include "parser/ParsePredicate.hpp"
 #include "parser/ParsePredicateExists.hpp"
 #include "parser/ParsePredicateInTableQuery.hpp"
+#include "parser/ParsePriority.hpp"
 #include "parser/ParserUtil.hpp"
 #include "parser/ParseSample.hpp"
 #include "parser/ParseSelect.hpp"
@@ -205,6 +206,8 @@ typedef void* yyscan_t;
 
   quickstep::PtrVector<quickstep::ParseSubqueryTableReference> *with_list_;
   quickstep::ParseSubqueryTableReference *with_list_element_;
+
+  quickstep::ParsePriority *opt_priority_clause_;
 }
 
 %{
@@ -308,6 +311,7 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
 %token TOKEN_PARTITIONS;
 %token TOKEN_PERCENT;
 %token TOKEN_PRIMARY;
+%token TOKEN_PRIORITY;
 %token TOKEN_QUIT;
 %token TOKEN_RANGE;
 %token TOKEN_REAL;
@@ -546,6 +550,9 @@ void NotSupported(const YYLTYPE *location, yyscan_t yyscanner, const std::string
 %type <opt_sample_clause_>
   opt_sample_clause
 
+%type <opt_priority_clause_>
+  opt_priority_clause
+
 %type <with_list_>
   with_clause
   with_list
@@ -1106,13 +1113,35 @@ assignment_item:
 
 /* Select Queries */
 select_statement:
-  select_query {
-    $$ = new quickstep::ParseStatementSelect(@1.first_line, @1.first_column, $1, nullptr);
+  select_query opt_priority_clause {
+    $$ = new quickstep::ParseStatementSelect(@1.first_line, @1.first_column, $1, nullptr, $2);
   }
-  | with_clause select_query {
-    $$ = new quickstep::ParseStatementSelect(@1.first_line, @1.first_column, $2, $1);
+  | with_clause select_query opt_priority_clause {
+    $$ = new quickstep::ParseStatementSelect(@1.first_line, @1.first_column, $2, $1, $3);
   };
 
+opt_priority_clause:
+  {
+    $$ = nullptr;
+  }
+  | TOKEN_WITH TOKEN_PRIORITY TOKEN_UNSIGNED_NUMVAL {
+    if ($3->float_like()) {
+      delete $3;
+      $$ = nullptr;
+      quickstep_yyerror(&@3, yyscanner, nullptr, "PRIORITY value must be an integer");
+      YYERROR;
+    } else {
+      if ($3->long_value() <= 0) {
+        delete $3;
+        $$ = nullptr;
+        quickstep_yyerror(&@3, yyscanner, nullptr, "PRIORITY value must be positive");
+        YYERROR;
+      } else {
+        $$ = new quickstep::ParsePriority(@1.first_line, @1.first_column, $3);
+      }
+    }
+  };
+  
 with_clause:
   TOKEN_WITH with_list {
     $$ = $2;