diff options
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/parser')
22 files changed, 834 insertions, 512 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.cpp index 16cec8f..fdbadf8 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.cpp @@ -14,11 +14,10 @@ SqliteCreateIndex::SqliteCreateIndex(const SqliteCreateIndex& other) : SqliteQuery(other), uniqueKw(other.uniqueKw), ifNotExistsKw(other.ifNotExistsKw), database(other.database), index(other.index), table(other.table) { - DEEP_COPY_COLLECTION(SqliteIndexedColumn, indexedColumns); + DEEP_COPY_COLLECTION(SqliteOrderBy, indexedColumns); } -SqliteCreateIndex::SqliteCreateIndex(bool unique, bool ifNotExists, const QString &name1, const QString &name2, const QString &name3, - const QList<SqliteIndexedColumn *> &columns, SqliteConflictAlgo onConflict) +SqliteCreateIndex::SqliteCreateIndex(bool unique, bool ifNotExists, const QString& name1, const QString& name2, const QString& name3, const QList<SqliteIndexedColumn*>& columns, SqliteConflictAlgo onConflict) : SqliteCreateIndex() { // Constructor for SQLite 2 @@ -36,14 +35,11 @@ SqliteCreateIndex::SqliteCreateIndex(bool unique, bool ifNotExists, const QStrin table = name2; this->onConflict = onConflict; - this->indexedColumns = columns; - - foreach (SqliteIndexedColumn* idxCol, columns) - idxCol->setParent(this); + this->indexedColumns = toOrderColumns(columns); } SqliteCreateIndex::SqliteCreateIndex(bool unique, bool ifNotExists, const QString& name1, const QString& name2, const QString& name3, - const QList<SqliteIndexedColumn*>& columns, SqliteExpr* where) + const QList<SqliteOrderBy*>& columns, SqliteExpr* where) : SqliteCreateIndex() { // Constructor for SQLite 3 @@ -61,7 +57,7 @@ SqliteCreateIndex::SqliteCreateIndex(bool unique, bool ifNotExists, const QStrin table = name3; this->indexedColumns = columns; - foreach (SqliteIndexedColumn* idxCol, columns) + foreach (SqliteOrderBy* idxCol, columns) idxCol->setParent(this); this->where = where; @@ -189,3 +185,44 @@ TokenList SqliteCreateIndex::rebuildTokensFromContents() return builder.build(); } + +QList<SqliteOrderBy*> SqliteCreateIndex::toOrderColumns(const QList<SqliteIndexedColumn*>& columns) +{ + QList<SqliteOrderBy*> result; + SqliteOrderBy* orderBy = nullptr; + SqliteExpr* expr = nullptr; + for (SqliteIndexedColumn* idxCol : columns) + { + orderBy = new SqliteOrderBy(); + orderBy->setParent(this); + orderBy->expr = new SqliteExpr(); + orderBy->expr->setParent(orderBy); + + if (!idxCol->collate.isNull()) + { + expr = new SqliteExpr(); + expr->initId(idxCol->name); + expr->setParent(orderBy->expr); + + orderBy->expr->initCollate(expr, idxCol->collate); + } + else + { + orderBy->expr->initId(idxCol->name); + } + + result << orderBy; + delete idxCol; + } + return result; +} + +QString SqliteCreateIndex::getTargetDatabase() const +{ + return database; +} + +void SqliteCreateIndex::setTargetDatabase(const QString& database) +{ + this->database = database; +} diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.h index 9251b18..033a663 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.h +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.h @@ -5,12 +5,14 @@ #include "sqlitetablerelatedddl.h" #include "sqliteconflictalgo.h" #include "sqliteexpr.h" +#include "sqliteddlwithdbcontext.h" +#include "sqliteorderby.h" #include <QString> #include <QList> class SqliteIndexedColumn; -class API_EXPORT SqliteCreateIndex : public SqliteQuery, public SqliteTableRelatedDdl +class API_EXPORT SqliteCreateIndex : public SqliteQuery, public SqliteTableRelatedDdl, public SqliteDdlWithDbContext { public: SqliteCreateIndex(); @@ -19,16 +21,18 @@ class API_EXPORT SqliteCreateIndex : public SqliteQuery, public SqliteTableRelat const QString& name3, const QList<SqliteIndexedColumn*>& columns, SqliteConflictAlgo onConflict = SqliteConflictAlgo::null); SqliteCreateIndex(bool unique, bool ifNotExists, const QString& name1, const QString& name2, - const QString& name3, const QList<SqliteIndexedColumn*>& columns, + const QString& name3, const QList<SqliteOrderBy*>& columns, SqliteExpr* where); ~SqliteCreateIndex(); SqliteStatement* clone(); QString getTargetTable() const; + QString getTargetDatabase() const; + void setTargetDatabase(const QString& database); bool uniqueKw = false; bool ifNotExistsKw = false; - QList<SqliteIndexedColumn*> indexedColumns; + QList<SqliteOrderBy*> indexedColumns; // The database refers to index name in Sqlite3, but in Sqlite2 it refers to the table. QString database = QString::null; QString index = QString::null; @@ -43,6 +47,9 @@ class API_EXPORT SqliteCreateIndex : public SqliteQuery, public SqliteTableRelat TokenList getDatabaseTokensInStatement(); QList<FullObject> getFullObjectsInStatement(); TokenList rebuildTokensFromContents(); + + private: + QList<SqliteOrderBy*> toOrderColumns(const QList<SqliteIndexedColumn*>& columns); }; typedef QSharedPointer<SqliteCreateIndex> SqliteCreateIndexPtr; diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.cpp index d21578e..2ac6c04 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.cpp @@ -669,13 +669,23 @@ bool SqliteCreateTable::Column::hasConstraint(SqliteCreateTable::Column::Constra SqliteCreateTable::Column::Constraint* SqliteCreateTable::Column::getConstraint(SqliteCreateTable::Column::Constraint::Type type) const { - foreach (Constraint* constr, constraints) + for (Constraint* constr : constraints) if (constr->type == type) return constr; return nullptr; } +QList<SqliteCreateTable::Column::Constraint*> SqliteCreateTable::Column::getConstraints(SqliteCreateTable::Column::Constraint::Type type) const +{ + QList<Constraint*> list; + for (Constraint* constr : constraints) + if (constr->type == type) + list << constr; + + return list; +} + QList<SqliteCreateTable::Column::Constraint*> SqliteCreateTable::Column::getForeignKeysByTable(const QString& foreignTable) const { QList<Constraint*> results; @@ -768,3 +778,13 @@ TokenList SqliteCreateTable::Column::Constraint::rebuildTokensFromContents() return builder.build(); } + +QString SqliteCreateTable::getTargetDatabase() const +{ + return database; +} + +void SqliteCreateTable::setTargetDatabase(const QString& database) +{ + this->database = database; +} diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.h index 877d0fa..74f4fce 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.h +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.h @@ -10,10 +10,11 @@ #include "sqlitecolumntype.h" #include "sqlitesortorder.h" #include "sqlitedeferrable.h" +#include "sqliteddlwithdbcontext.h" #include <QVariant> #include <QList> -class API_EXPORT SqliteCreateTable : public SqliteQuery +class API_EXPORT SqliteCreateTable : public SqliteQuery, public SqliteDdlWithDbContext { public: class API_EXPORT Column : public SqliteStatement @@ -93,6 +94,7 @@ class API_EXPORT SqliteCreateTable : public SqliteQuery bool hasConstraint(Constraint::Type type) const; Constraint* getConstraint(Constraint::Type type) const; + QList<Constraint*> getConstraints(Constraint::Type type) const; QList<Constraint*> getForeignKeysByTable(const QString& foreignTable) const; QString name = QString::null; @@ -181,6 +183,8 @@ class API_EXPORT SqliteCreateTable : public SqliteQuery QList<Column::Constraint*> getColumnForeignKeysByTable(const QString& foreignTable) const; QStringList getColumnNames() const; QHash<QString,QString> getModifiedColumnsMap(bool lowercaseKeys = false, Qt::CaseSensitivity cs = Qt::CaseInsensitive) const; + QString getTargetDatabase() const; + void setTargetDatabase(const QString& database); bool ifNotExistsKw = false; bool tempKw = false; @@ -202,7 +206,6 @@ class API_EXPORT SqliteCreateTable : public SqliteQuery private: void init(bool ifNotExistsKw, int temp, const QString& name1, const QString& name2); - }; typedef QSharedPointer<SqliteCreateTable> SqliteCreateTablePtr; diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.cpp index 8f67aea..e15ddd6 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.cpp @@ -379,3 +379,13 @@ TokenList SqliteCreateTrigger::rebuildTokensFromContents() return builder.build(); } + +QString SqliteCreateTrigger::getTargetDatabase() const +{ + return database; +} + +void SqliteCreateTrigger::setTargetDatabase(const QString& database) +{ + this->database = database; +} diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.h index 2fb8ae4..2ccf876 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.h +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.h @@ -1,6 +1,7 @@ #ifndef SQLITECREATETRIGGER_H #define SQLITECREATETRIGGER_H +#include "sqliteddlwithdbcontext.h" #include "sqlitequery.h" #include "sqlitetablerelatedddl.h" @@ -9,7 +10,7 @@ class SqliteExpr; -class API_EXPORT SqliteCreateTrigger : public SqliteQuery, public SqliteTableRelatedDdl +class API_EXPORT SqliteCreateTrigger : public SqliteQuery, public SqliteTableRelatedDdl, public SqliteDdlWithDbContext { public: enum class Time @@ -63,6 +64,8 @@ class API_EXPORT SqliteCreateTrigger : public SqliteQuery, public SqliteTableRel SqliteStatement* clone(); QString getTargetTable() const; + QString getTargetDatabase() const; + void setTargetDatabase(const QString& database); bool tempKw = false; bool temporaryKw = false; diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.cpp index d1a8961..fe638db 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.cpp @@ -3,6 +3,7 @@ #include "sqlitequerytype.h" #include "parser/statementtokenbuilder.h" #include "common/global.h" +#include "sqliteindexedcolumn.h" SqliteCreateView::SqliteCreateView() { @@ -14,7 +15,7 @@ SqliteCreateView::SqliteCreateView(const SqliteCreateView& other) : database(other.database), view(other.view) { DEEP_COPY_FIELD(SqliteSelect, select); - + DEEP_COPY_COLLECTION(SqliteIndexedColumn, columns); } SqliteCreateView::SqliteCreateView(int temp, bool ifNotExists, const QString &name1, const QString &name2, SqliteSelect *select) : @@ -41,6 +42,15 @@ SqliteCreateView::SqliteCreateView(int temp, bool ifNotExists, const QString &na select->setParent(this); } +SqliteCreateView::SqliteCreateView(int temp, bool ifNotExists, const QString& name1, const QString& name2, SqliteSelect* select, const QList<SqliteIndexedColumn*>& columns) + : SqliteCreateView(temp, ifNotExists, name1, name2, select) +{ + this->columns = columns; + + for (SqliteIndexedColumn* col : columns) + col->setParent(this); +} + SqliteCreateView::~SqliteCreateView() { } @@ -112,9 +122,24 @@ TokenList SqliteCreateView::rebuildTokensFromContents() if (dialect == Dialect::Sqlite3 && !database.isNull()) builder.withOther(database, dialect).withOperator("."); - builder.withOther(view, dialect).withSpace().withKeyword("AS").withStatement(select); + builder.withOther(view, dialect).withSpace(); + + if (columns.size() > 0) + builder.withParLeft().withStatementList<SqliteIndexedColumn>(columns).withParRight().withSpace(); + + builder.withKeyword("AS").withStatement(select); builder.withOperator(";"); return builder.build(); } + +QString SqliteCreateView::getTargetDatabase() const +{ + return database; +} + +void SqliteCreateView::setTargetDatabase(const QString& database) +{ + this->database = database; +} diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.h index 4858227..1f46d5e 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.h +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.h @@ -1,20 +1,26 @@ #ifndef SQLITECREATEVIEW_H #define SQLITECREATEVIEW_H +#include "sqliteddlwithdbcontext.h" #include "sqlitequery.h" +#include <QList> #include <QString> class SqliteSelect; +class SqliteIndexedColumn; -class API_EXPORT SqliteCreateView : public SqliteQuery +class API_EXPORT SqliteCreateView : public SqliteQuery, public SqliteDdlWithDbContext { public: SqliteCreateView(); SqliteCreateView(const SqliteCreateView& other); SqliteCreateView(int temp, bool ifNotExists, const QString& name1, const QString& name2, SqliteSelect* select); + SqliteCreateView(int temp, bool ifNotExists, const QString& name1, const QString& name2, SqliteSelect* select, const QList<SqliteIndexedColumn*>& columns); ~SqliteCreateView(); SqliteStatement* clone(); + QString getTargetDatabase() const; + void setTargetDatabase(const QString& database); bool tempKw = false; bool temporaryKw = false; @@ -22,6 +28,7 @@ class API_EXPORT SqliteCreateView : public SqliteQuery QString database = QString::null; QString view = QString::null; SqliteSelect* select = nullptr; + QList<SqliteIndexedColumn*> columns; protected: QStringList getDatabasesInStatement(); diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteddlwithdbcontext.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteddlwithdbcontext.h new file mode 100644 index 0000000..cb64986 --- /dev/null +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteddlwithdbcontext.h @@ -0,0 +1,16 @@ +#ifndef SQLITEDDLWITHDBCONTEXT_H +#define SQLITEDDLWITHDBCONTEXT_H + +#include "coreSQLiteStudio_global.h" +#include <QSharedPointer> + +class API_EXPORT SqliteDdlWithDbContext +{ + public: + virtual QString getTargetDatabase() const = 0; + virtual void setTargetDatabase(const QString& database) = 0; +}; + +typedef QSharedPointer<SqliteDdlWithDbContext> SqliteDdlWithDbContextPtr; + +#endif // SQLITEDDLWITHDBCONTEXT_H diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp index b84a818..3009b4b 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp @@ -91,7 +91,7 @@ QString SqliteExpr::notNullOp(SqliteExpr::NotNull value) } } -SqliteStatement*SqliteExpr::clone() +SqliteStatement* SqliteExpr::clone() { return new SqliteExpr(*this); } @@ -462,7 +462,11 @@ TokenList SqliteExpr::rebuildTokensFromContents() if (distinctKw) builder.withKeyword("DISTINCT"); - builder.withStatementList(exprList).withParRight(); + if (star) + builder.withOperator("*").withParRight(); + else + builder.withStatementList(exprList).withParRight(); + break; case SqliteExpr::Mode::SUB_EXPR: builder.withParLeft().withStatement(expr1).withParRight(); diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteextendedindexedcolumn.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteextendedindexedcolumn.h new file mode 100644 index 0000000..1ea6119 --- /dev/null +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteextendedindexedcolumn.h @@ -0,0 +1,19 @@ +#ifndef SQLITEEXTENDEDINDEXEDCOLUMN_H +#define SQLITEEXTENDEDINDEXEDCOLUMN_H + +#include "coreSQLiteStudio_global.h" +#include <QSharedPointer> + +class API_EXPORT SqliteExtendedIndexedColumn +{ + public: + virtual QString getColumnName() const = 0; + virtual void setColumnName(const QString& name) = 0; + virtual QString getCollation() const = 0; + virtual void setCollation(const QString& name) = 0; + virtual void clearCollation() = 0; +}; + +typedef QSharedPointer<SqliteExtendedIndexedColumn> SqliteExtendedIndexedColumnPtr; + +#endif // SQLITEEXTENDEDINDEXEDCOLUMN_H diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteindexedcolumn.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteindexedcolumn.cpp index 5e65eab..142af06 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteindexedcolumn.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteindexedcolumn.cpp @@ -24,11 +24,26 @@ SqliteIndexedColumn::SqliteIndexedColumn(const QString& name) this->name = name; } -SqliteStatement*SqliteIndexedColumn::clone() +SqliteStatement* SqliteIndexedColumn::clone() { return new SqliteIndexedColumn(*this); } +QString SqliteIndexedColumn::getColumnName() const +{ + return name; +} + +void SqliteIndexedColumn::setColumnName(const QString& name) +{ + this->name = name; +} + +void SqliteIndexedColumn::setCollation(const QString& name) +{ + this->collate = name; +} + QStringList SqliteIndexedColumn::getColumnsInStatement() { return getStrListFromValue(name); @@ -50,3 +65,13 @@ TokenList SqliteIndexedColumn::rebuildTokensFromContents() builder.withSortOrder(sortOrder); return builder.build(); } + +QString SqliteIndexedColumn::getCollation() const +{ + return collate; +} + +void SqliteIndexedColumn::clearCollation() +{ + collate.clear(); +} diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteindexedcolumn.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteindexedcolumn.h index c013d17..c0fe680 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteindexedcolumn.h +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteindexedcolumn.h @@ -3,9 +3,10 @@ #include "sqlitestatement.h" #include "sqlitesortorder.h" +#include "sqliteextendedindexedcolumn.h" #include <QString> -class API_EXPORT SqliteIndexedColumn : public SqliteStatement +class API_EXPORT SqliteIndexedColumn : public SqliteStatement, public SqliteExtendedIndexedColumn { public: SqliteIndexedColumn(); @@ -14,6 +15,11 @@ class API_EXPORT SqliteIndexedColumn : public SqliteStatement explicit SqliteIndexedColumn(const QString& name); SqliteStatement* clone(); + QString getColumnName() const; + void setColumnName(const QString& name); + void setCollation(const QString& name); + QString getCollation() const; + void clearCollation(); QString name = QString::null; SqliteSortOrder sortOrder = SqliteSortOrder::null; diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.cpp index 3bb1b44..8eb7b46 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.cpp @@ -30,6 +30,76 @@ SqliteStatement*SqliteOrderBy::clone() return new SqliteOrderBy(*this); } +bool SqliteOrderBy::isSimpleColumn() const +{ + return !getColumnName().isEmpty(); +} + +QString SqliteOrderBy::getColumnName() const +{ + if (!expr) + return QString(); + + if (expr->mode == SqliteExpr::Mode::ID) + return expr->column; + + if (expr->mode == SqliteExpr::Mode::COLLATE && expr->expr1 && expr->expr1->mode == SqliteExpr::Mode::ID) + return expr->expr1->literalValue.toString(); + + return QString(); +} + +QString SqliteOrderBy::getCollation() const +{ + if (expr->mode == SqliteExpr::Mode::COLLATE) + return expr->collation; + + return QString(); +} + +QString SqliteOrderBy::getColumnString() const +{ + QString res = getColumnName(); + if (res.isNull()) + return expr->detokenize(); + + return res; +} + +void SqliteOrderBy::setColumnName(const QString& name) +{ + if (expr && expr->mode == SqliteExpr::Mode::COLLATE) + { + safe_delete(expr->expr1); + expr->expr1 = new SqliteExpr(); + expr->expr1->setParent(expr); + expr->expr1->initId(name); + } + else + { + safe_delete(expr); + expr = new SqliteExpr(); + expr->setParent(this); + expr->initId(name); + } +} + +void SqliteOrderBy::setCollation(const QString& name) +{ + if (expr && expr->mode == SqliteExpr::Mode::COLLATE) + { + expr->collation = name; + } + else + { + SqliteExpr* theExpr = expr; + SqliteExpr* collationExpr = new SqliteExpr(); + collationExpr->initCollate(theExpr, name); + theExpr->setParent(collationExpr); + collationExpr->setParent(this); + } +} + TokenList SqliteOrderBy::rebuildTokensFromContents() { StatementTokenBuilder builder; @@ -39,3 +109,15 @@ TokenList SqliteOrderBy::rebuildTokensFromContents() return builder.build(); } + + +void SqliteOrderBy::clearCollation() +{ + if (expr->mode != SqliteExpr::Mode::COLLATE) + return; + + SqliteExpr* tmpExpr = expr; + expr = tmpExpr->expr1; + expr->setParent(this); + delete tmpExpr; +} diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.h index 598423d..4f75c78 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.h +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.h @@ -3,10 +3,11 @@ #include "sqlitestatement.h" #include "sqlitesortorder.h" +#include "sqliteextendedindexedcolumn.h" class SqliteExpr; -class API_EXPORT SqliteOrderBy : public SqliteStatement +class API_EXPORT SqliteOrderBy : public SqliteStatement, public SqliteExtendedIndexedColumn { public: SqliteOrderBy(); @@ -15,9 +16,16 @@ class API_EXPORT SqliteOrderBy : public SqliteStatement ~SqliteOrderBy(); SqliteStatement* clone(); + bool isSimpleColumn() const; + QString getColumnName() const; + QString getCollation() const; + QString getColumnString() const; + void setColumnName(const QString& name); + void setCollation(const QString& name); + void clearCollation(); SqliteExpr* expr = nullptr; - SqliteSortOrder order; + SqliteSortOrder order = SqliteSortOrder::null; protected: TokenList rebuildTokensFromContents(); diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitetablerelatedddl.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitetablerelatedddl.h index 599849a..9de9be7 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitetablerelatedddl.h +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitetablerelatedddl.h @@ -2,6 +2,7 @@ #define SQLITETABLERELATEDDDL_H #include "coreSQLiteStudio_global.h" +#include <QSharedPointer> class API_EXPORT SqliteTableRelatedDdl { diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitevacuum.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitevacuum.cpp index 96ff7a4..9d595ed 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitevacuum.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitevacuum.cpp @@ -32,6 +32,9 @@ QStringList SqliteVacuum::getDatabasesInStatement() TokenList SqliteVacuum::getDatabaseTokensInStatement() { + if (!tokensMap.contains("nm")) + return TokenList(); + return getTokenListFromNamedKey("nm"); } diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/lexer.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/lexer.cpp index c85b3ba..6be7528 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/lexer.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/lexer.cpp @@ -3,6 +3,7 @@ #include "lexer_low_lev.h" #include "sqlite2_parse.h" #include "sqlite3_parse.h" +#include "common/utils_sql.h" #include <QString> #include <QMultiHash> #include <QDebug> @@ -281,11 +282,41 @@ QString Lexer::detokenize(const TokenList& tokens) QString str; foreach (TokenPtr token, tokens) - str += token->value; + str += detokenize(token); return str; } +QString Lexer::detokenize(const TokenPtr& token) +{ + switch (token->type) { + case Token::OTHER: + case Token::CTX_ALIAS: + case Token::CTX_COLLATION: + case Token::CTX_COLUMN: + case Token::CTX_COLUMN_NEW: + case Token::CTX_COLUMN_TYPE: + case Token::CTX_CONSTRAINT: + case Token::CTX_DATABASE: + case Token::CTX_INDEX: + case Token::CTX_INDEX_NEW: + case Token::CTX_TABLE: + case Token::CTX_TABLE_NEW: + case Token::CTX_TRANSACTION: + case Token::CTX_TRIGGER: + case Token::CTX_TRIGGER_NEW: + case Token::CTX_VIEW: + case Token::CTX_VIEW_NEW: + return token->value.isEmpty() ? wrapObjName(token->value, Dialect::Sqlite3, NameWrapper::DOUBLE_QUOTE) : token->value; + case Token::CTX_ERROR_MESSAGE: + case Token::STRING: + return token->value.isEmpty() ? wrapString(token->value) : token->value; + default: + break; + } + return token->value; +} + TokenList Lexer::tokenize(const QString& sql, Dialect dialect) { Lexer lexer(dialect); diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/lexer.h b/SQLiteStudio3/coreSQLiteStudio/parser/lexer.h index b21639e..8473844 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/lexer.h +++ b/SQLiteStudio3/coreSQLiteStudio/parser/lexer.h @@ -129,6 +129,15 @@ class API_EXPORT Lexer static QString detokenize(const TokenList& tokens); /** + * @brief Translates token to string propert representation. + * @param token Token to translate. + * @return Translated string. + * + * This method applies wrappers where needed (for strings and ids). + */ + static QString detokenize(const TokenPtr& token); + + /** * @brief Tokenizes given SQL query with given dialect. * @param sql SQL query to tokenize. * @param dialect SQLite dialect to use when tokenizing. diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp index 9ff6487..43cc4a0 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp @@ -170,7 +170,7 @@ typedef union { #define sqlite3_parseARG_PDECL ,ParserContext* parserContext #define sqlite3_parseARG_FETCH ParserContext* parserContext = yypParser->parserContext #define sqlite3_parseARG_STORE yypParser->parserContext = parserContext -#define YYNSTATE 724 +#define YYNSTATE 725 #define YYNRULE 424 #define YYFALLBACK 1 #define YY_NO_ACTION (YYNSTATE+YYNRULE+2) @@ -243,235 +243,237 @@ static const YYMINORTYPE yyzerominor = { 0 }; ** shifting non-terminals after a reduce. ** yy_default[] Default action for each state. */ -#define YY_ACTTAB_COUNT (2263) +#define YY_ACTTAB_COUNT (2285) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 431, 48, 48, 47, 47, 47, 46, 216, 716, 339, - /* 10 */ 643, 425, 51, 51, 51, 51, 44, 49, 49, 49, - /* 20 */ 49, 48, 48, 47, 47, 47, 46, 216, 721, 1026, - /* 30 */ 1026, 643, 131, 580, 51, 51, 51, 51, 411, 49, - /* 40 */ 49, 49, 49, 48, 48, 47, 47, 47, 46, 216, - /* 50 */ 579, 81, 58, 643, 157, 685, 301, 282, 1026, 1026, - /* 60 */ 41, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, - /* 70 */ 1026, 1026, 563, 1026, 1026, 1026, 1026, 38, 39, 1026, - /* 80 */ 1026, 1026, 1026, 1026, 40, 431, 528, 385, 716, 595, - /* 90 */ 594, 280, 4, 377, 716, 630, 425, 642, 608, 422, - /* 100 */ 12, 134, 687, 429, 562, 609, 483, 690, 331, 279, - /* 110 */ 714, 713, 564, 565, 642, 689, 688, 687, 235, 506, - /* 120 */ 60, 320, 610, 411, 47, 47, 47, 46, 216, 122, - /* 130 */ 243, 213, 247, 59, 1142, 1142, 486, 609, 607, 603, - /* 140 */ 685, 306, 485, 584, 716, 41, 507, 509, 642, 508, - /* 150 */ 676, 9, 642, 144, 95, 281, 379, 276, 378, 132, - /* 160 */ 297, 716, 38, 39, 601, 200, 199, 7, 355, 40, - /* 170 */ 884, 307, 1134, 274, 249, 716, 17, 4, 884, 1134, - /* 180 */ 56, 717, 642, 431, 422, 884, 329, 687, 429, 716, - /* 190 */ 687, 643, 690, 687, 425, 690, 714, 713, 690, 642, - /* 200 */ 689, 688, 687, 689, 688, 687, 689, 688, 687, 98, - /* 210 */ 682, 240, 643, 218, 410, 884, 486, 884, 884, 483, - /* 220 */ 716, 411, 239, 884, 303, 582, 512, 581, 884, 884, - /* 230 */ 884, 884, 884, 642, 643, 676, 9, 642, 685, 217, - /* 240 */ 245, 673, 102, 41, 287, 300, 714, 713, 67, 302, - /* 250 */ 148, 307, 1133, 151, 306, 484, 81, 715, 97, 1133, - /* 260 */ 38, 39, 551, 714, 713, 771, 130, 40, 946, 376, - /* 270 */ 373, 372, 447, 46, 216, 4, 946, 714, 713, 334, - /* 280 */ 642, 682, 422, 946, 606, 687, 429, 371, 448, 447, - /* 290 */ 690, 714, 713, 304, 265, 146, 267, 642, 689, 688, - /* 300 */ 687, 287, 68, 677, 691, 255, 362, 259, 359, 692, - /* 310 */ 1027, 1027, 682, 946, 715, 946, 946, 447, 698, 234, - /* 320 */ 386, 715, 714, 713, 773, 651, 946, 946, 946, 946, - /* 330 */ 110, 642, 317, 676, 9, 642, 222, 677, 299, 52, - /* 340 */ 53, 426, 289, 1027, 1027, 675, 675, 50, 50, 51, - /* 350 */ 51, 51, 51, 716, 49, 49, 49, 49, 48, 48, - /* 360 */ 47, 47, 47, 46, 216, 431, 428, 340, 716, 335, - /* 370 */ 671, 670, 287, 283, 716, 138, 425, 209, 219, 430, - /* 380 */ 268, 395, 651, 682, 336, 715, 715, 686, 187, 52, - /* 390 */ 53, 426, 289, 715, 452, 675, 675, 50, 50, 51, - /* 400 */ 51, 51, 51, 411, 49, 49, 49, 49, 48, 48, - /* 410 */ 47, 47, 47, 46, 216, 91, 953, 716, 619, 712, - /* 420 */ 685, 403, 382, 130, 710, 41, 376, 373, 372, 711, - /* 430 */ 233, 953, 394, 311, 210, 593, 666, 384, 428, 16, - /* 440 */ 316, 659, 38, 39, 371, 231, 230, 716, 89, 40, - /* 450 */ 931, 430, 716, 658, 716, 714, 713, 4, 931, 686, - /* 460 */ 92, 143, 642, 358, 422, 931, 674, 687, 429, 14, - /* 470 */ 714, 713, 690, 131, 456, 551, 714, 713, 953, 642, - /* 480 */ 689, 688, 687, 668, 667, 210, 593, 458, 384, 457, - /* 490 */ 576, 88, 1027, 1027, 13, 931, 672, 931, 931, 54, - /* 500 */ 575, 678, 42, 368, 37, 401, 35, 381, 931, 1, - /* 510 */ 931, 931, 641, 642, 634, 676, 9, 642, 661, 714, - /* 520 */ 713, 52, 53, 426, 289, 1027, 1027, 675, 675, 50, - /* 530 */ 50, 51, 51, 51, 51, 660, 49, 49, 49, 49, - /* 540 */ 48, 48, 47, 47, 47, 46, 216, 657, 648, 714, - /* 550 */ 713, 496, 542, 569, 714, 713, 714, 713, 656, 691, - /* 560 */ 543, 614, 320, 30, 692, 27, 716, 585, 274, 682, - /* 570 */ 160, 1027, 1027, 426, 289, 693, 613, 675, 675, 50, - /* 580 */ 50, 51, 51, 51, 51, 398, 49, 49, 49, 49, - /* 590 */ 48, 48, 47, 47, 47, 46, 216, 1025, 1025, 81, - /* 600 */ 52, 53, 426, 289, 1027, 1027, 675, 675, 50, 50, - /* 610 */ 51, 51, 51, 51, 496, 49, 49, 49, 49, 48, - /* 620 */ 48, 47, 47, 47, 46, 216, 1025, 1025, 1025, 1025, - /* 630 */ 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, - /* 640 */ 716, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, - /* 650 */ 1025, 1025, 1027, 1027, 357, 49, 49, 49, 49, 48, - /* 660 */ 48, 47, 47, 47, 46, 216, 288, 552, 714, 713, - /* 670 */ 495, 682, 298, 662, 346, 153, 538, 69, 694, 715, - /* 680 */ 715, 52, 53, 426, 289, 1027, 1027, 675, 675, 50, - /* 690 */ 50, 51, 51, 51, 51, 1094, 49, 49, 49, 49, - /* 700 */ 48, 48, 47, 47, 47, 46, 216, 52, 53, 426, - /* 710 */ 289, 418, 511, 675, 675, 50, 50, 51, 51, 51, - /* 720 */ 51, 159, 49, 49, 49, 49, 48, 48, 47, 47, - /* 730 */ 47, 46, 216, 490, 954, 315, 482, 482, 663, 553, - /* 740 */ 215, 650, 714, 713, 81, 52, 53, 426, 289, 954, - /* 750 */ 414, 675, 675, 50, 50, 51, 51, 51, 51, 397, - /* 760 */ 49, 49, 49, 49, 48, 48, 47, 47, 47, 46, - /* 770 */ 216, 158, 1094, 21, 716, 627, 459, 716, 1079, 716, - /* 780 */ 647, 1045, 140, 89, 716, 1149, 154, 435, 2, 715, - /* 790 */ 424, 671, 670, 396, 460, 461, 954, 52, 53, 426, - /* 800 */ 289, 573, 716, 675, 675, 50, 50, 51, 51, 51, - /* 810 */ 51, 321, 49, 49, 49, 49, 48, 48, 47, 47, - /* 820 */ 47, 46, 216, 431, 1108, 81, 206, 205, 204, 52, - /* 830 */ 53, 426, 289, 716, 425, 675, 675, 50, 50, 51, - /* 840 */ 51, 51, 51, 344, 49, 49, 49, 49, 48, 48, - /* 850 */ 47, 47, 47, 46, 216, 597, 715, 666, 600, 462, - /* 860 */ 666, 411, 31, 716, 657, 90, 12, 894, 720, 668, - /* 870 */ 667, 609, 724, 434, 81, 656, 714, 713, 685, 714, - /* 880 */ 713, 714, 713, 41, 528, 272, 714, 713, 610, 349, - /* 890 */ 528, 450, 89, 677, 12, 633, 633, 338, 636, 609, - /* 900 */ 38, 39, 649, 609, 714, 713, 716, 40, 1142, 1142, - /* 910 */ 716, 524, 682, 581, 716, 4, 610, 468, 60, 450, - /* 920 */ 642, 208, 422, 506, 60, 687, 429, 677, 32, 109, - /* 930 */ 690, 609, 500, 501, 352, 714, 713, 642, 689, 688, - /* 940 */ 687, 428, 900, 900, 467, 466, 552, 465, 421, 383, - /* 950 */ 507, 509, 142, 508, 430, 440, 69, 1142, 1142, 715, - /* 960 */ 444, 722, 686, 182, 646, 714, 713, 645, 231, 230, - /* 970 */ 437, 642, 356, 676, 9, 642, 417, 444, 52, 53, - /* 980 */ 426, 289, 91, 91, 675, 675, 50, 50, 51, 51, - /* 990 */ 51, 51, 644, 49, 49, 49, 49, 48, 48, 47, - /* 1000 */ 47, 47, 46, 216, 1034, 444, 668, 667, 714, 713, - /* 1010 */ 91, 453, 714, 713, 682, 641, 714, 713, 324, 202, - /* 1020 */ 52, 53, 426, 289, 446, 680, 675, 675, 50, 50, - /* 1030 */ 51, 51, 51, 51, 639, 49, 49, 49, 49, 48, - /* 1040 */ 48, 47, 47, 47, 46, 216, 605, 52, 53, 426, - /* 1050 */ 289, 716, 446, 675, 675, 50, 50, 51, 51, 51, - /* 1060 */ 51, 459, 49, 49, 49, 49, 48, 48, 47, 47, - /* 1070 */ 47, 46, 216, 453, 715, 36, 663, 423, 215, 460, - /* 1080 */ 341, 369, 592, 52, 53, 426, 289, 638, 89, 675, - /* 1090 */ 675, 50, 50, 51, 51, 51, 51, 31, 49, 49, - /* 1100 */ 49, 49, 48, 48, 47, 47, 47, 46, 216, 413, - /* 1110 */ 723, 2, 11, 52, 53, 426, 289, 33, 588, 675, - /* 1120 */ 675, 50, 50, 51, 51, 51, 51, 624, 49, 49, - /* 1130 */ 49, 49, 48, 48, 47, 47, 47, 46, 216, 515, - /* 1140 */ 715, 537, 29, 91, 342, 666, 140, 136, 571, 52, - /* 1150 */ 53, 426, 289, 714, 713, 675, 675, 50, 50, 51, - /* 1160 */ 51, 51, 51, 548, 49, 49, 49, 49, 48, 48, - /* 1170 */ 47, 47, 47, 46, 216, 91, 716, 234, 386, 52, - /* 1180 */ 53, 426, 289, 338, 271, 675, 675, 50, 50, 51, - /* 1190 */ 51, 51, 51, 333, 49, 49, 49, 49, 48, 48, - /* 1200 */ 47, 47, 47, 46, 216, 532, 8, 517, 696, 87, - /* 1210 */ 137, 52, 53, 426, 289, 22, 557, 675, 675, 50, - /* 1220 */ 50, 51, 51, 51, 51, 135, 49, 49, 49, 49, - /* 1230 */ 48, 48, 47, 47, 47, 46, 216, 81, 1109, 91, - /* 1240 */ 716, 91, 52, 53, 426, 289, 615, 722, 675, 675, - /* 1250 */ 50, 50, 51, 51, 51, 51, 620, 49, 49, 49, - /* 1260 */ 49, 48, 48, 47, 47, 47, 46, 216, 604, 1107, - /* 1270 */ 99, 504, 390, 491, 52, 53, 426, 289, 714, 713, - /* 1280 */ 675, 675, 50, 50, 51, 51, 51, 51, 682, 49, - /* 1290 */ 49, 49, 49, 48, 48, 47, 47, 47, 46, 216, - /* 1300 */ 226, 52, 57, 426, 289, 599, 388, 675, 675, 50, - /* 1310 */ 50, 51, 51, 51, 51, 428, 49, 49, 49, 49, - /* 1320 */ 48, 48, 47, 47, 47, 46, 216, 431, 430, 5, - /* 1330 */ 10, 620, 620, 632, 491, 631, 686, 187, 425, 53, - /* 1340 */ 426, 289, 714, 713, 675, 675, 50, 50, 51, 51, - /* 1350 */ 51, 51, 716, 49, 49, 49, 49, 48, 48, 47, - /* 1360 */ 47, 47, 46, 216, 552, 411, 598, 107, 464, 591, - /* 1370 */ 403, 387, 428, 697, 69, 612, 611, 715, 428, 716, - /* 1380 */ 404, 715, 685, 716, 209, 430, 209, 41, 625, 316, - /* 1390 */ 682, 430, 596, 686, 187, 428, 223, 590, 539, 686, - /* 1400 */ 187, 653, 287, 716, 38, 39, 589, 225, 430, 718, - /* 1410 */ 431, 40, 620, 716, 91, 715, 686, 187, 252, 4, - /* 1420 */ 570, 425, 715, 19, 642, 89, 422, 403, 405, 687, - /* 1430 */ 429, 716, 624, 332, 690, 716, 428, 328, 716, 705, - /* 1440 */ 716, 642, 689, 688, 687, 715, 316, 266, 411, 430, - /* 1450 */ 561, 365, 316, 716, 714, 713, 602, 686, 187, 488, - /* 1460 */ 715, 829, 716, 375, 65, 685, 308, 682, 540, 406, - /* 1470 */ 41, 706, 285, 209, 273, 642, 475, 676, 9, 642, - /* 1480 */ 530, 714, 713, 651, 715, 714, 713, 38, 39, 64, - /* 1490 */ 18, 399, 370, 431, 40, 129, 716, 366, 326, 534, - /* 1500 */ 534, 63, 4, 270, 425, 714, 713, 642, 475, 422, - /* 1510 */ 316, 530, 687, 429, 716, 714, 713, 690, 279, 716, - /* 1520 */ 533, 716, 156, 624, 642, 689, 688, 687, 525, 716, - /* 1530 */ 125, 411, 519, 714, 713, 514, 715, 714, 713, 3, - /* 1540 */ 714, 713, 714, 713, 79, 525, 682, 85, 685, 519, - /* 1550 */ 479, 26, 514, 41, 25, 714, 713, 516, 642, 472, - /* 1560 */ 676, 9, 642, 716, 714, 713, 407, 479, 716, 682, - /* 1570 */ 38, 39, 353, 77, 286, 431, 510, 40, 283, 505, - /* 1580 */ 555, 428, 616, 503, 83, 4, 425, 715, 140, 351, - /* 1590 */ 642, 715, 422, 469, 430, 687, 429, 716, 714, 713, - /* 1600 */ 690, 716, 686, 192, 472, 428, 703, 642, 689, 688, - /* 1610 */ 687, 438, 428, 411, 497, 62, 714, 713, 430, 119, - /* 1620 */ 254, 714, 713, 714, 713, 430, 686, 181, 438, 704, - /* 1630 */ 685, 714, 713, 686, 163, 41, 251, 629, 311, 161, - /* 1640 */ 138, 642, 715, 676, 9, 642, 455, 1035, 682, 531, - /* 1650 */ 701, 702, 38, 39, 152, 641, 498, 469, 431, 40, - /* 1660 */ 499, 478, 699, 428, 715, 714, 713, 4, 1037, 425, - /* 1670 */ 714, 713, 642, 416, 422, 715, 430, 687, 429, 641, - /* 1680 */ 428, 350, 690, 619, 686, 172, 641, 494, 454, 642, - /* 1690 */ 689, 688, 687, 430, 111, 428, 411, 716, 72, 714, - /* 1700 */ 713, 686, 190, 714, 713, 621, 287, 337, 430, 428, - /* 1710 */ 436, 428, 96, 685, 209, 558, 686, 188, 41, 715, - /* 1720 */ 567, 287, 430, 642, 430, 676, 9, 642, 716, 207, - /* 1730 */ 686, 196, 686, 195, 715, 38, 39, 641, 716, 286, - /* 1740 */ 431, 327, 40, 224, 86, 428, 695, 319, 203, 428, - /* 1750 */ 4, 425, 715, 318, 641, 642, 325, 422, 430, 715, - /* 1760 */ 687, 429, 430, 150, 261, 690, 686, 197, 221, 641, - /* 1770 */ 686, 201, 642, 689, 688, 687, 428, 715, 411, 716, - /* 1780 */ 719, 709, 708, 641, 433, 641, 707, 651, 258, 430, - /* 1790 */ 428, 283, 220, 536, 428, 685, 149, 686, 232, 714, - /* 1800 */ 713, 715, 651, 430, 715, 147, 642, 430, 676, 9, - /* 1810 */ 642, 686, 290, 428, 82, 686, 191, 38, 39, 641, - /* 1820 */ 679, 367, 432, 641, 40, 15, 430, 145, 700, 234, - /* 1830 */ 714, 713, 4, 715, 686, 194, 408, 642, 420, 422, - /* 1840 */ 714, 713, 687, 429, 716, 428, 684, 690, 637, 715, - /* 1850 */ 641, 227, 428, 294, 642, 689, 688, 687, 430, 716, - /* 1860 */ 293, 715, 428, 17, 641, 430, 686, 193, 641, 292, - /* 1870 */ 400, 291, 402, 686, 185, 430, 521, 28, 683, 55, - /* 1880 */ 428, 714, 713, 686, 189, 43, 428, 641, 642, 640, - /* 1890 */ 676, 9, 642, 430, 216, 419, 428, 66, 529, 430, - /* 1900 */ 428, 686, 314, 428, 229, 214, 228, 686, 313, 430, - /* 1910 */ 428, 415, 34, 430, 141, 626, 430, 686, 312, 641, - /* 1920 */ 428, 686, 184, 430, 686, 171, 641, 428, 715, 635, - /* 1930 */ 139, 686, 170, 430, 108, 386, 641, 716, 463, 622, - /* 1940 */ 430, 686, 183, 428, 617, 428, 714, 713, 686, 169, - /* 1950 */ 428, 716, 715, 389, 641, 583, 430, 715, 430, 380, - /* 1960 */ 641, 714, 713, 430, 686, 186, 686, 168, 428, 716, - /* 1970 */ 641, 686, 167, 541, 641, 428, 578, 641, 716, 257, - /* 1980 */ 133, 430, 577, 256, 641, 428, 474, 428, 430, 686, - /* 1990 */ 93, 428, 715, 715, 641, 716, 686, 166, 430, 716, - /* 2000 */ 430, 641, 330, 716, 430, 716, 686, 164, 686, 174, - /* 2010 */ 428, 277, 686, 173, 393, 428, 275, 641, 716, 641, - /* 2020 */ 716, 568, 574, 430, 641, 428, 573, 715, 430, 715, - /* 2030 */ 428, 686, 175, 489, 715, 428, 686, 178, 430, 714, - /* 2040 */ 713, 572, 641, 430, 716, 428, 686, 94, 430, 641, - /* 2050 */ 310, 686, 177, 714, 713, 128, 686, 176, 430, 641, - /* 2060 */ 554, 641, 549, 716, 428, 641, 686, 180, 716, 428, - /* 2070 */ 716, 714, 713, 716, 392, 715, 547, 430, 546, 545, - /* 2080 */ 714, 713, 430, 502, 641, 686, 179, 430, 544, 641, - /* 2090 */ 686, 165, 527, 309, 80, 686, 70, 714, 713, 641, - /* 2100 */ 535, 714, 713, 269, 641, 714, 713, 714, 713, 641, - /* 2110 */ 127, 106, 471, 523, 248, 263, 715, 518, 481, 641, - /* 2120 */ 714, 713, 714, 713, 476, 212, 246, 715, 715, 244, - /* 2130 */ 477, 126, 492, 473, 480, 262, 242, 354, 641, 715, - /* 2140 */ 470, 236, 715, 641, 360, 322, 714, 713, 641, 715, - /* 2150 */ 347, 363, 24, 652, 715, 442, 427, 715, 443, 441, - /* 2160 */ 124, 284, 526, 715, 648, 714, 713, 264, 715, 715, - /* 2170 */ 714, 713, 714, 713, 715, 714, 713, 253, 78, 250, - /* 2180 */ 715, 241, 237, 238, 105, 123, 121, 84, 104, 155, - /* 2190 */ 715, 513, 715, 120, 715, 715, 715, 493, 348, 103, - /* 2200 */ 118, 345, 76, 343, 117, 75, 116, 115, 114, 74, - /* 2210 */ 73, 113, 23, 323, 451, 101, 20, 100, 623, 112, - /* 2220 */ 61, 520, 449, 445, 439, 655, 628, 162, 278, 669, - /* 2230 */ 665, 412, 569, 295, 681, 198, 374, 522, 618, 260, - /* 2240 */ 361, 6, 305, 664, 654, 556, 364, 409, 566, 211, - /* 2250 */ 296, 71, 560, 559, 487, 587, 586, 81, 550, 1150, - /* 2260 */ 1150, 1150, 45, + /* 0 */ 432, 49, 49, 48, 48, 48, 47, 216, 717, 340, + /* 10 */ 644, 426, 52, 52, 52, 52, 45, 50, 50, 50, + /* 20 */ 50, 49, 49, 48, 48, 48, 47, 216, 722, 1027, + /* 30 */ 1027, 644, 131, 581, 52, 52, 52, 52, 412, 50, + /* 40 */ 50, 50, 50, 49, 49, 48, 48, 48, 47, 216, + /* 50 */ 580, 81, 59, 644, 157, 686, 302, 283, 1027, 1027, + /* 60 */ 42, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, + /* 70 */ 1027, 1027, 564, 1027, 1027, 1027, 1027, 39, 40, 1027, + /* 80 */ 1027, 1027, 1027, 1027, 41, 432, 529, 386, 717, 596, + /* 90 */ 595, 281, 4, 378, 717, 631, 426, 643, 609, 423, + /* 100 */ 13, 134, 688, 430, 563, 610, 484, 691, 332, 280, + /* 110 */ 715, 714, 565, 566, 643, 690, 689, 688, 235, 507, + /* 120 */ 61, 321, 611, 412, 48, 48, 48, 47, 216, 122, + /* 130 */ 243, 213, 247, 60, 1143, 1143, 487, 610, 608, 604, + /* 140 */ 686, 307, 486, 585, 717, 42, 508, 510, 643, 509, + /* 150 */ 677, 9, 643, 144, 95, 282, 380, 277, 379, 132, + /* 160 */ 298, 717, 39, 40, 602, 200, 199, 7, 356, 41, + /* 170 */ 885, 308, 1135, 275, 249, 717, 18, 4, 885, 1135, + /* 180 */ 57, 718, 643, 432, 423, 885, 330, 688, 430, 717, + /* 190 */ 688, 644, 691, 688, 426, 691, 715, 714, 691, 643, + /* 200 */ 690, 689, 688, 690, 689, 688, 690, 689, 688, 98, + /* 210 */ 683, 240, 644, 218, 411, 885, 487, 885, 885, 484, + /* 220 */ 717, 412, 239, 885, 304, 583, 513, 582, 885, 885, + /* 230 */ 885, 885, 885, 643, 644, 677, 9, 643, 686, 217, + /* 240 */ 245, 674, 102, 42, 288, 301, 715, 714, 67, 303, + /* 250 */ 148, 308, 1134, 151, 307, 485, 81, 716, 97, 1134, + /* 260 */ 39, 40, 552, 715, 714, 772, 130, 41, 947, 377, + /* 270 */ 374, 373, 448, 47, 216, 4, 947, 715, 714, 335, + /* 280 */ 643, 683, 423, 947, 607, 688, 430, 372, 449, 448, + /* 290 */ 691, 715, 714, 305, 265, 146, 268, 643, 690, 689, + /* 300 */ 688, 288, 68, 678, 692, 255, 363, 259, 360, 693, + /* 310 */ 1028, 1028, 683, 947, 716, 947, 947, 448, 699, 234, + /* 320 */ 387, 716, 715, 714, 774, 652, 947, 947, 947, 947, + /* 330 */ 110, 643, 318, 677, 9, 643, 222, 678, 300, 53, + /* 340 */ 54, 427, 290, 1028, 1028, 676, 676, 51, 51, 52, + /* 350 */ 52, 52, 52, 717, 50, 50, 50, 50, 49, 49, + /* 360 */ 48, 48, 48, 47, 216, 432, 429, 341, 717, 336, + /* 370 */ 672, 671, 288, 284, 717, 138, 426, 209, 219, 431, + /* 380 */ 269, 396, 652, 683, 337, 716, 716, 687, 187, 53, + /* 390 */ 54, 427, 290, 716, 453, 676, 676, 51, 51, 52, + /* 400 */ 52, 52, 52, 412, 50, 50, 50, 50, 49, 49, + /* 410 */ 48, 48, 48, 47, 216, 91, 954, 717, 620, 713, + /* 420 */ 686, 404, 383, 130, 711, 42, 377, 374, 373, 712, + /* 430 */ 233, 954, 395, 312, 210, 594, 667, 385, 429, 17, + /* 440 */ 317, 660, 39, 40, 372, 231, 230, 717, 89, 41, + /* 450 */ 932, 431, 717, 659, 717, 715, 714, 4, 932, 687, + /* 460 */ 92, 143, 643, 359, 423, 932, 675, 688, 430, 15, + /* 470 */ 715, 714, 691, 131, 457, 552, 715, 714, 954, 643, + /* 480 */ 690, 689, 688, 669, 668, 210, 594, 459, 385, 458, + /* 490 */ 577, 88, 1028, 1028, 14, 932, 673, 932, 932, 55, + /* 500 */ 576, 679, 43, 369, 38, 402, 36, 382, 932, 1, + /* 510 */ 932, 932, 642, 643, 635, 677, 9, 643, 662, 715, + /* 520 */ 714, 53, 54, 427, 290, 1028, 1028, 676, 676, 51, + /* 530 */ 51, 52, 52, 52, 52, 661, 50, 50, 50, 50, + /* 540 */ 49, 49, 48, 48, 48, 47, 216, 658, 649, 715, + /* 550 */ 714, 497, 543, 570, 715, 714, 715, 714, 657, 692, + /* 560 */ 544, 615, 321, 31, 693, 28, 717, 586, 275, 683, + /* 570 */ 160, 1028, 1028, 427, 290, 694, 614, 676, 676, 51, + /* 580 */ 51, 52, 52, 52, 52, 399, 50, 50, 50, 50, + /* 590 */ 49, 49, 48, 48, 48, 47, 216, 1026, 1026, 81, + /* 600 */ 53, 54, 427, 290, 1028, 1028, 676, 676, 51, 51, + /* 610 */ 52, 52, 52, 52, 497, 50, 50, 50, 50, 49, + /* 620 */ 49, 48, 48, 48, 47, 216, 1026, 1026, 1026, 1026, + /* 630 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, + /* 640 */ 717, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, + /* 650 */ 1026, 1026, 1028, 1028, 358, 50, 50, 50, 50, 49, + /* 660 */ 49, 48, 48, 48, 47, 216, 289, 553, 715, 714, + /* 670 */ 496, 683, 299, 663, 347, 153, 539, 69, 695, 716, + /* 680 */ 716, 53, 54, 427, 290, 1028, 1028, 676, 676, 51, + /* 690 */ 51, 52, 52, 52, 52, 1095, 50, 50, 50, 50, + /* 700 */ 49, 49, 48, 48, 48, 47, 216, 53, 54, 427, + /* 710 */ 290, 419, 512, 676, 676, 51, 51, 52, 52, 52, + /* 720 */ 52, 159, 50, 50, 50, 50, 49, 49, 48, 48, + /* 730 */ 48, 47, 216, 491, 955, 316, 483, 483, 664, 554, + /* 740 */ 215, 651, 715, 714, 81, 53, 54, 427, 290, 955, + /* 750 */ 415, 676, 676, 51, 51, 52, 52, 52, 52, 398, + /* 760 */ 50, 50, 50, 50, 49, 49, 48, 48, 48, 47, + /* 770 */ 216, 158, 1095, 22, 717, 628, 460, 717, 1080, 717, + /* 780 */ 648, 1046, 140, 89, 717, 1150, 154, 436, 2, 716, + /* 790 */ 425, 672, 671, 397, 461, 462, 955, 53, 54, 427, + /* 800 */ 290, 574, 717, 676, 676, 51, 51, 52, 52, 52, + /* 810 */ 52, 322, 50, 50, 50, 50, 49, 49, 48, 48, + /* 820 */ 48, 47, 216, 432, 1109, 81, 206, 205, 204, 53, + /* 830 */ 54, 427, 290, 717, 426, 676, 676, 51, 51, 52, + /* 840 */ 52, 52, 52, 345, 50, 50, 50, 50, 49, 49, + /* 850 */ 48, 48, 48, 47, 216, 598, 716, 667, 601, 463, + /* 860 */ 667, 412, 32, 717, 658, 90, 13, 895, 721, 669, + /* 870 */ 668, 610, 725, 435, 81, 657, 715, 714, 686, 715, + /* 880 */ 714, 715, 714, 42, 529, 273, 715, 714, 611, 350, + /* 890 */ 529, 451, 89, 678, 13, 634, 634, 339, 637, 610, + /* 900 */ 39, 40, 650, 610, 715, 714, 717, 41, 1143, 1143, + /* 910 */ 717, 525, 683, 582, 717, 4, 611, 469, 61, 451, + /* 920 */ 643, 208, 423, 507, 61, 688, 430, 678, 33, 109, + /* 930 */ 691, 610, 501, 502, 353, 715, 714, 643, 690, 689, + /* 940 */ 688, 429, 901, 901, 468, 467, 553, 466, 422, 384, + /* 950 */ 508, 510, 142, 509, 431, 441, 69, 1143, 1143, 716, + /* 960 */ 445, 723, 687, 182, 647, 715, 714, 646, 231, 230, + /* 970 */ 438, 643, 357, 677, 9, 643, 418, 445, 53, 54, + /* 980 */ 427, 290, 91, 91, 676, 676, 51, 51, 52, 52, + /* 990 */ 52, 52, 645, 50, 50, 50, 50, 49, 49, 48, + /* 1000 */ 48, 48, 47, 216, 1035, 445, 669, 668, 715, 714, + /* 1010 */ 91, 454, 715, 714, 683, 642, 715, 714, 325, 202, + /* 1020 */ 53, 54, 427, 290, 447, 681, 676, 676, 51, 51, + /* 1030 */ 52, 52, 52, 52, 640, 50, 50, 50, 50, 49, + /* 1040 */ 49, 48, 48, 48, 47, 216, 606, 53, 54, 427, + /* 1050 */ 290, 717, 447, 676, 676, 51, 51, 52, 52, 52, + /* 1060 */ 52, 460, 50, 50, 50, 50, 49, 49, 48, 48, + /* 1070 */ 48, 47, 216, 454, 716, 37, 664, 424, 215, 461, + /* 1080 */ 342, 370, 593, 53, 54, 427, 290, 639, 89, 676, + /* 1090 */ 676, 51, 51, 52, 52, 52, 52, 32, 50, 50, + /* 1100 */ 50, 50, 49, 49, 48, 48, 48, 47, 216, 414, + /* 1110 */ 724, 2, 12, 53, 54, 427, 290, 34, 589, 676, + /* 1120 */ 676, 51, 51, 52, 52, 52, 52, 625, 50, 50, + /* 1130 */ 50, 50, 49, 49, 48, 48, 48, 47, 216, 516, + /* 1140 */ 716, 538, 30, 91, 343, 667, 140, 136, 572, 53, + /* 1150 */ 54, 427, 290, 715, 714, 676, 676, 51, 51, 52, + /* 1160 */ 52, 52, 52, 549, 50, 50, 50, 50, 49, 49, + /* 1170 */ 48, 48, 48, 47, 216, 91, 717, 234, 387, 53, + /* 1180 */ 54, 427, 290, 339, 272, 676, 676, 51, 51, 52, + /* 1190 */ 52, 52, 52, 334, 50, 50, 50, 50, 49, 49, + /* 1200 */ 48, 48, 48, 47, 216, 533, 8, 518, 697, 87, + /* 1210 */ 137, 53, 54, 427, 290, 23, 558, 676, 676, 51, + /* 1220 */ 51, 52, 52, 52, 52, 135, 50, 50, 50, 50, + /* 1230 */ 49, 49, 48, 48, 48, 47, 216, 81, 1110, 91, + /* 1240 */ 717, 91, 53, 54, 427, 290, 616, 723, 676, 676, + /* 1250 */ 51, 51, 52, 52, 52, 52, 605, 50, 50, 50, + /* 1260 */ 50, 49, 49, 48, 48, 48, 47, 216, 99, 1108, + /* 1270 */ 391, 505, 389, 492, 53, 54, 427, 290, 715, 714, + /* 1280 */ 676, 676, 51, 51, 52, 52, 52, 52, 621, 50, + /* 1290 */ 50, 50, 50, 49, 49, 48, 48, 48, 47, 216, + /* 1300 */ 683, 53, 58, 427, 290, 683, 600, 676, 676, 51, + /* 1310 */ 51, 52, 52, 52, 52, 429, 50, 50, 50, 50, + /* 1320 */ 49, 49, 48, 48, 48, 47, 216, 432, 431, 717, + /* 1330 */ 5, 621, 226, 633, 492, 632, 687, 187, 426, 54, + /* 1340 */ 427, 290, 715, 714, 676, 676, 51, 51, 52, 52, + /* 1350 */ 52, 52, 717, 50, 50, 50, 50, 49, 49, 48, + /* 1360 */ 48, 48, 47, 216, 553, 412, 288, 599, 287, 717, + /* 1370 */ 404, 388, 429, 698, 69, 613, 252, 716, 429, 716, + /* 1380 */ 405, 716, 686, 30, 209, 431, 209, 42, 626, 317, + /* 1390 */ 489, 431, 597, 687, 187, 429, 223, 309, 540, 687, + /* 1400 */ 187, 329, 683, 717, 39, 40, 11, 683, 431, 287, + /* 1410 */ 432, 41, 621, 654, 91, 592, 687, 92, 556, 4, + /* 1420 */ 571, 426, 716, 625, 643, 537, 423, 404, 406, 688, + /* 1430 */ 430, 715, 714, 333, 691, 717, 716, 429, 717, 591, + /* 1440 */ 717, 643, 690, 689, 688, 107, 317, 652, 412, 531, + /* 1450 */ 431, 590, 317, 717, 715, 714, 612, 830, 687, 187, + /* 1460 */ 429, 225, 326, 717, 541, 686, 526, 417, 20, 642, + /* 1470 */ 42, 715, 714, 431, 683, 643, 717, 677, 9, 643, + /* 1480 */ 531, 687, 187, 526, 562, 717, 621, 39, 40, 327, + /* 1490 */ 376, 65, 64, 432, 41, 274, 19, 266, 371, 535, + /* 1500 */ 535, 267, 4, 271, 426, 715, 714, 643, 421, 423, + /* 1510 */ 716, 407, 688, 430, 286, 400, 717, 691, 717, 280, + /* 1520 */ 717, 63, 129, 429, 643, 690, 689, 688, 367, 717, + /* 1530 */ 603, 412, 520, 534, 317, 515, 431, 715, 714, 156, + /* 1540 */ 715, 714, 715, 714, 687, 192, 717, 209, 686, 520, + /* 1550 */ 480, 465, 515, 42, 717, 715, 714, 3, 643, 717, + /* 1560 */ 677, 9, 643, 717, 716, 715, 714, 480, 138, 125, + /* 1570 */ 39, 40, 85, 476, 79, 432, 683, 41, 715, 714, + /* 1580 */ 27, 429, 473, 511, 717, 4, 426, 715, 714, 517, + /* 1590 */ 643, 532, 423, 408, 431, 688, 430, 642, 26, 719, + /* 1600 */ 691, 717, 687, 181, 77, 476, 506, 643, 690, 689, + /* 1610 */ 688, 620, 716, 412, 354, 470, 706, 439, 715, 714, + /* 1620 */ 715, 714, 715, 714, 261, 288, 717, 473, 221, 504, + /* 1630 */ 686, 715, 714, 704, 439, 42, 717, 716, 716, 568, + /* 1640 */ 83, 643, 140, 677, 9, 643, 498, 1036, 715, 714, + /* 1650 */ 702, 284, 39, 40, 254, 642, 715, 714, 432, 41, + /* 1660 */ 328, 715, 714, 429, 716, 715, 714, 4, 1038, 426, + /* 1670 */ 119, 10, 643, 503, 423, 707, 431, 688, 430, 470, + /* 1680 */ 429, 161, 691, 251, 687, 163, 715, 714, 716, 643, + /* 1690 */ 690, 689, 688, 431, 717, 429, 412, 152, 479, 456, + /* 1700 */ 455, 687, 172, 715, 714, 72, 652, 705, 431, 429, + /* 1710 */ 630, 312, 111, 686, 530, 338, 687, 190, 42, 437, + /* 1720 */ 716, 622, 431, 643, 96, 677, 9, 643, 715, 714, + /* 1730 */ 687, 188, 209, 717, 207, 39, 40, 642, 715, 714, + /* 1740 */ 432, 224, 41, 617, 86, 429, 703, 717, 203, 429, + /* 1750 */ 4, 426, 320, 720, 642, 643, 150, 423, 431, 716, + /* 1760 */ 688, 430, 431, 700, 429, 691, 687, 196, 475, 642, + /* 1770 */ 687, 195, 643, 690, 689, 688, 716, 431, 412, 717, + /* 1780 */ 319, 710, 717, 642, 522, 687, 197, 709, 708, 258, + /* 1790 */ 499, 429, 434, 220, 500, 686, 715, 714, 625, 16, + /* 1800 */ 42, 717, 716, 257, 431, 717, 643, 256, 677, 9, + /* 1810 */ 643, 716, 687, 201, 717, 351, 716, 39, 40, 642, + /* 1820 */ 149, 248, 432, 642, 41, 482, 147, 246, 433, 442, + /* 1830 */ 368, 478, 4, 426, 716, 715, 714, 643, 642, 423, + /* 1840 */ 716, 717, 715, 430, 82, 701, 429, 691, 685, 715, + /* 1850 */ 714, 145, 495, 234, 643, 690, 689, 688, 429, 431, + /* 1860 */ 412, 559, 244, 284, 352, 642, 474, 687, 232, 18, + /* 1870 */ 242, 431, 401, 429, 471, 716, 716, 686, 295, 687, + /* 1880 */ 291, 715, 714, 716, 715, 714, 431, 294, 643, 696, + /* 1890 */ 677, 9, 643, 542, 687, 191, 528, 293, 680, 39, + /* 1900 */ 40, 717, 716, 715, 714, 429, 41, 715, 714, 429, + /* 1910 */ 490, 716, 292, 29, 4, 493, 715, 714, 431, 643, + /* 1920 */ 642, 423, 431, 227, 688, 430, 687, 194, 429, 691, + /* 1930 */ 687, 193, 642, 429, 477, 429, 643, 690, 689, 688, + /* 1940 */ 429, 431, 717, 715, 714, 429, 431, 642, 431, 687, + /* 1950 */ 185, 717, 403, 431, 687, 189, 687, 315, 431, 717, + /* 1960 */ 216, 687, 314, 429, 409, 684, 687, 313, 717, 429, + /* 1970 */ 643, 56, 677, 9, 643, 44, 431, 716, 717, 642, + /* 1980 */ 638, 627, 431, 642, 687, 184, 623, 420, 236, 653, + /* 1990 */ 687, 171, 323, 716, 716, 641, 229, 66, 214, 716, + /* 2000 */ 429, 716, 642, 715, 714, 618, 35, 642, 228, 642, + /* 2010 */ 429, 133, 394, 431, 642, 524, 276, 429, 716, 642, + /* 2020 */ 429, 687, 170, 431, 716, 716, 636, 569, 416, 716, + /* 2030 */ 431, 687, 183, 431, 429, 550, 429, 642, 687, 169, + /* 2040 */ 716, 687, 186, 642, 715, 714, 429, 431, 716, 431, + /* 2050 */ 141, 429, 108, 715, 714, 687, 168, 687, 167, 431, + /* 2060 */ 139, 715, 714, 270, 431, 519, 429, 687, 93, 390, + /* 2070 */ 715, 714, 687, 166, 642, 717, 716, 429, 584, 431, + /* 2080 */ 715, 714, 481, 429, 642, 717, 381, 687, 164, 717, + /* 2090 */ 431, 642, 444, 579, 642, 578, 431, 387, 687, 174, + /* 2100 */ 429, 263, 429, 472, 687, 173, 429, 331, 642, 278, + /* 2110 */ 642, 574, 575, 431, 716, 431, 429, 361, 464, 431, + /* 2120 */ 642, 687, 175, 687, 178, 642, 429, 687, 94, 431, + /* 2130 */ 716, 429, 573, 429, 555, 548, 348, 687, 177, 431, + /* 2140 */ 642, 547, 546, 545, 431, 429, 431, 687, 176, 716, + /* 2150 */ 393, 642, 687, 180, 687, 179, 443, 642, 431, 536, + /* 2160 */ 428, 128, 285, 431, 311, 310, 687, 165, 80, 716, + /* 2170 */ 264, 687, 70, 716, 642, 716, 642, 715, 714, 366, + /* 2180 */ 642, 649, 253, 716, 106, 250, 127, 715, 714, 241, + /* 2190 */ 642, 715, 714, 237, 126, 716, 238, 262, 716, 355, + /* 2200 */ 642, 212, 716, 25, 124, 642, 716, 642, 527, 716, + /* 2210 */ 364, 78, 105, 123, 121, 155, 84, 514, 104, 642, + /* 2220 */ 120, 349, 494, 624, 642, 346, 103, 118, 76, 344, + /* 2230 */ 117, 75, 116, 115, 74, 73, 114, 521, 324, 113, + /* 2240 */ 24, 452, 450, 21, 101, 100, 112, 446, 62, 440, + /* 2250 */ 162, 296, 670, 666, 656, 413, 279, 619, 570, 198, + /* 2260 */ 629, 375, 523, 260, 362, 306, 6, 71, 682, 665, + /* 2270 */ 655, 557, 211, 297, 410, 567, 365, 46, 551, 561, + /* 2280 */ 560, 488, 588, 81, 587, }; static const YYCODETYPE yy_lookahead[] = { /* 0 */ 4, 81, 82, 83, 84, 85, 86, 87, 4, 58, @@ -599,271 +601,273 @@ static const YYCODETYPE yy_lookahead[] = { /* 1220 */ 71, 72, 73, 74, 75, 97, 77, 78, 79, 80, /* 1230 */ 81, 82, 83, 84, 85, 86, 87, 55, 89, 219, /* 1240 */ 4, 219, 62, 63, 64, 65, 30, 89, 68, 69, - /* 1250 */ 70, 71, 72, 73, 74, 75, 191, 77, 78, 79, - /* 1260 */ 80, 81, 82, 83, 84, 85, 86, 87, 144, 89, - /* 1270 */ 99, 89, 99, 101, 62, 63, 64, 65, 106, 107, - /* 1280 */ 68, 69, 70, 71, 72, 73, 74, 75, 4, 77, + /* 1250 */ 70, 71, 72, 73, 74, 75, 144, 77, 78, 79, + /* 1260 */ 80, 81, 82, 83, 84, 85, 86, 87, 99, 89, + /* 1270 */ 99, 89, 104, 101, 62, 63, 64, 65, 106, 107, + /* 1280 */ 68, 69, 70, 71, 72, 73, 74, 75, 191, 77, /* 1290 */ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - /* 1300 */ 235, 62, 63, 64, 65, 83, 104, 68, 69, 70, + /* 1300 */ 4, 62, 63, 64, 65, 4, 83, 68, 69, 70, /* 1310 */ 71, 72, 73, 74, 75, 177, 77, 78, 79, 80, - /* 1320 */ 81, 82, 83, 84, 85, 86, 87, 4, 190, 96, - /* 1330 */ 96, 191, 191, 201, 162, 201, 198, 199, 15, 63, + /* 1320 */ 81, 82, 83, 84, 85, 86, 87, 4, 190, 4, + /* 1330 */ 96, 191, 235, 201, 162, 201, 198, 199, 15, 63, /* 1340 */ 64, 65, 106, 107, 68, 69, 70, 71, 72, 73, /* 1350 */ 74, 75, 4, 77, 78, 79, 80, 81, 82, 83, - /* 1360 */ 84, 85, 86, 87, 177, 42, 97, 17, 177, 97, - /* 1370 */ 232, 233, 177, 186, 187, 235, 235, 190, 177, 4, - /* 1380 */ 185, 190, 59, 4, 252, 190, 252, 64, 152, 251, - /* 1390 */ 106, 190, 135, 198, 199, 177, 209, 97, 211, 198, - /* 1400 */ 199, 117, 177, 4, 81, 82, 97, 38, 190, 177, - /* 1410 */ 4, 88, 191, 4, 219, 190, 198, 199, 97, 96, - /* 1420 */ 97, 15, 190, 96, 101, 104, 103, 232, 233, 106, - /* 1430 */ 107, 4, 177, 232, 111, 4, 177, 212, 4, 91, - /* 1440 */ 4, 118, 119, 120, 121, 190, 251, 177, 42, 190, - /* 1450 */ 6, 181, 251, 4, 106, 107, 235, 198, 199, 97, - /* 1460 */ 190, 97, 4, 38, 96, 59, 104, 4, 104, 251, - /* 1470 */ 64, 177, 254, 252, 97, 152, 101, 154, 155, 156, - /* 1480 */ 101, 106, 107, 258, 190, 106, 107, 81, 82, 96, - /* 1490 */ 96, 232, 38, 4, 88, 115, 4, 64, 243, 100, - /* 1500 */ 101, 96, 96, 97, 15, 106, 107, 101, 133, 103, - /* 1510 */ 251, 132, 106, 107, 4, 106, 107, 111, 129, 4, - /* 1520 */ 103, 4, 98, 177, 118, 119, 120, 121, 101, 4, - /* 1530 */ 123, 42, 101, 106, 107, 101, 190, 106, 107, 12, - /* 1540 */ 106, 107, 106, 107, 142, 118, 4, 128, 59, 118, - /* 1550 */ 101, 71, 118, 64, 71, 106, 107, 139, 152, 101, - /* 1560 */ 154, 155, 156, 4, 106, 107, 157, 118, 4, 106, - /* 1570 */ 81, 82, 22, 153, 177, 4, 89, 88, 177, 89, - /* 1580 */ 117, 177, 146, 47, 39, 96, 15, 190, 104, 243, - /* 1590 */ 101, 190, 103, 101, 190, 106, 107, 4, 106, 107, - /* 1600 */ 111, 4, 198, 199, 146, 177, 91, 118, 119, 120, - /* 1610 */ 121, 101, 177, 42, 39, 96, 106, 107, 190, 123, - /* 1620 */ 161, 106, 107, 106, 107, 190, 198, 199, 118, 177, - /* 1630 */ 59, 106, 107, 198, 199, 64, 95, 236, 237, 96, - /* 1640 */ 98, 152, 190, 154, 155, 156, 97, 158, 106, 132, - /* 1650 */ 91, 177, 81, 82, 143, 251, 7, 165, 4, 88, - /* 1660 */ 11, 103, 177, 177, 190, 106, 107, 96, 97, 15, - /* 1670 */ 106, 107, 101, 276, 103, 190, 190, 106, 107, 251, - /* 1680 */ 177, 32, 111, 141, 198, 199, 251, 162, 97, 118, - /* 1690 */ 119, 120, 121, 190, 93, 177, 42, 4, 95, 106, - /* 1700 */ 107, 198, 199, 106, 107, 141, 177, 37, 190, 177, - /* 1710 */ 36, 177, 189, 59, 252, 118, 198, 199, 64, 190, - /* 1720 */ 127, 177, 190, 152, 190, 154, 155, 156, 4, 238, - /* 1730 */ 198, 199, 198, 199, 190, 81, 82, 251, 4, 177, - /* 1740 */ 4, 212, 88, 204, 204, 177, 177, 275, 273, 177, - /* 1750 */ 96, 15, 190, 275, 251, 101, 212, 103, 190, 190, - /* 1760 */ 106, 107, 190, 90, 177, 111, 198, 199, 181, 251, - /* 1770 */ 198, 199, 118, 119, 120, 121, 177, 190, 42, 4, - /* 1780 */ 176, 176, 176, 251, 176, 251, 49, 258, 177, 190, - /* 1790 */ 177, 177, 181, 100, 177, 59, 178, 198, 199, 106, - /* 1800 */ 107, 190, 258, 190, 190, 178, 152, 190, 154, 155, - /* 1810 */ 156, 198, 199, 177, 180, 198, 199, 81, 82, 251, - /* 1820 */ 177, 60, 183, 251, 88, 104, 190, 56, 184, 138, - /* 1830 */ 106, 107, 96, 190, 198, 199, 177, 101, 276, 103, - /* 1840 */ 106, 107, 106, 107, 4, 177, 221, 111, 177, 190, - /* 1850 */ 251, 237, 177, 227, 118, 119, 120, 121, 190, 4, - /* 1860 */ 228, 190, 177, 151, 251, 190, 198, 199, 251, 229, - /* 1870 */ 148, 230, 147, 198, 199, 190, 152, 149, 231, 150, - /* 1880 */ 177, 106, 107, 198, 199, 252, 177, 251, 152, 64, - /* 1890 */ 154, 155, 156, 190, 87, 203, 177, 96, 164, 190, - /* 1900 */ 177, 198, 199, 177, 259, 87, 255, 198, 199, 190, - /* 1910 */ 177, 203, 158, 190, 99, 177, 190, 198, 199, 251, - /* 1920 */ 177, 198, 199, 190, 198, 199, 251, 177, 190, 241, - /* 1930 */ 241, 198, 199, 190, 99, 139, 251, 4, 163, 177, - /* 1940 */ 190, 198, 199, 177, 177, 177, 106, 107, 198, 199, - /* 1950 */ 177, 4, 190, 223, 251, 200, 190, 190, 190, 123, - /* 1960 */ 251, 106, 107, 190, 198, 199, 198, 199, 177, 4, - /* 1970 */ 251, 198, 199, 118, 251, 177, 200, 251, 4, 177, - /* 1980 */ 177, 190, 208, 181, 251, 177, 146, 177, 190, 198, - /* 1990 */ 199, 177, 190, 190, 251, 4, 198, 199, 190, 4, - /* 2000 */ 190, 251, 31, 4, 190, 4, 198, 199, 198, 199, - /* 2010 */ 177, 200, 198, 199, 177, 177, 177, 251, 4, 251, - /* 2020 */ 4, 177, 202, 190, 251, 177, 122, 190, 190, 190, - /* 2030 */ 177, 198, 199, 100, 190, 177, 198, 199, 190, 106, - /* 2040 */ 107, 200, 251, 190, 4, 177, 198, 199, 190, 251, - /* 2050 */ 203, 198, 199, 106, 107, 99, 198, 199, 190, 251, - /* 2060 */ 208, 251, 177, 4, 177, 251, 198, 199, 4, 177, - /* 2070 */ 4, 106, 107, 4, 177, 190, 200, 190, 200, 200, - /* 2080 */ 106, 107, 190, 118, 251, 198, 199, 190, 200, 251, - /* 2090 */ 198, 199, 118, 203, 180, 198, 199, 106, 107, 251, - /* 2100 */ 241, 106, 107, 177, 251, 106, 107, 106, 107, 251, - /* 2110 */ 99, 180, 165, 118, 177, 177, 190, 118, 181, 251, - /* 2120 */ 106, 107, 106, 107, 133, 241, 177, 190, 190, 177, - /* 2130 */ 181, 99, 118, 181, 118, 264, 177, 27, 251, 190, - /* 2140 */ 181, 177, 190, 251, 177, 181, 106, 107, 251, 190, - /* 2150 */ 177, 265, 158, 152, 190, 177, 177, 190, 118, 100, - /* 2160 */ 99, 177, 227, 190, 100, 106, 107, 177, 190, 190, - /* 2170 */ 106, 107, 106, 107, 190, 106, 107, 177, 215, 177, - /* 2180 */ 190, 177, 177, 177, 62, 99, 99, 96, 180, 250, - /* 2190 */ 190, 215, 190, 99, 190, 190, 190, 227, 241, 180, - /* 2200 */ 99, 241, 217, 60, 99, 217, 99, 99, 99, 217, - /* 2210 */ 217, 99, 268, 241, 18, 99, 268, 99, 152, 99, - /* 2220 */ 270, 152, 241, 241, 16, 201, 240, 224, 201, 261, - /* 2230 */ 261, 256, 206, 226, 191, 210, 202, 227, 242, 242, - /* 2240 */ 242, 224, 175, 191, 191, 191, 263, 216, 207, 262, - /* 2250 */ 222, 239, 207, 207, 274, 198, 198, 55, 211, 277, - /* 2260 */ 277, 277, 253, + /* 1360 */ 84, 85, 86, 87, 177, 42, 177, 97, 177, 4, + /* 1370 */ 232, 233, 177, 186, 187, 235, 97, 190, 177, 190, + /* 1380 */ 185, 190, 59, 104, 252, 190, 252, 64, 152, 251, + /* 1390 */ 97, 190, 135, 198, 199, 177, 209, 104, 211, 198, + /* 1400 */ 199, 212, 106, 4, 81, 82, 96, 106, 190, 177, + /* 1410 */ 4, 88, 191, 117, 219, 97, 198, 199, 117, 96, + /* 1420 */ 97, 15, 190, 177, 101, 100, 103, 232, 233, 106, + /* 1430 */ 107, 106, 107, 232, 111, 4, 190, 177, 4, 97, + /* 1440 */ 4, 118, 119, 120, 121, 17, 251, 258, 42, 101, + /* 1450 */ 190, 97, 251, 4, 106, 107, 235, 97, 198, 199, + /* 1460 */ 177, 38, 244, 4, 104, 59, 101, 276, 96, 251, + /* 1470 */ 64, 106, 107, 190, 4, 152, 4, 154, 155, 156, + /* 1480 */ 132, 198, 199, 118, 6, 4, 191, 81, 82, 243, + /* 1490 */ 38, 96, 96, 4, 88, 97, 96, 177, 38, 100, + /* 1500 */ 101, 181, 96, 97, 15, 106, 107, 101, 276, 103, + /* 1510 */ 190, 251, 106, 107, 254, 232, 4, 111, 4, 129, + /* 1520 */ 4, 96, 115, 177, 118, 119, 120, 121, 64, 4, + /* 1530 */ 235, 42, 101, 103, 251, 101, 190, 106, 107, 98, + /* 1540 */ 106, 107, 106, 107, 198, 199, 4, 252, 59, 118, + /* 1550 */ 101, 177, 118, 64, 4, 106, 107, 12, 152, 4, + /* 1560 */ 154, 155, 156, 4, 190, 106, 107, 118, 98, 123, + /* 1570 */ 81, 82, 128, 101, 142, 4, 106, 88, 106, 107, + /* 1580 */ 71, 177, 101, 89, 4, 96, 15, 106, 107, 139, + /* 1590 */ 101, 132, 103, 157, 190, 106, 107, 251, 71, 177, + /* 1600 */ 111, 4, 198, 199, 153, 133, 89, 118, 119, 120, + /* 1610 */ 121, 141, 190, 42, 22, 101, 91, 101, 106, 107, + /* 1620 */ 106, 107, 106, 107, 177, 177, 4, 146, 181, 47, + /* 1630 */ 59, 106, 107, 91, 118, 64, 4, 190, 190, 127, + /* 1640 */ 39, 152, 104, 154, 155, 156, 39, 158, 106, 107, + /* 1650 */ 91, 177, 81, 82, 161, 251, 106, 107, 4, 88, + /* 1660 */ 212, 106, 107, 177, 190, 106, 107, 96, 97, 15, + /* 1670 */ 123, 96, 101, 118, 103, 177, 190, 106, 107, 165, + /* 1680 */ 177, 96, 111, 95, 198, 199, 106, 107, 190, 118, + /* 1690 */ 119, 120, 121, 190, 4, 177, 42, 143, 103, 97, + /* 1700 */ 97, 198, 199, 106, 107, 95, 258, 177, 190, 177, + /* 1710 */ 236, 237, 93, 59, 164, 37, 198, 199, 64, 36, + /* 1720 */ 190, 141, 190, 152, 189, 154, 155, 156, 106, 107, + /* 1730 */ 198, 199, 252, 4, 238, 81, 82, 251, 106, 107, + /* 1740 */ 4, 204, 88, 146, 204, 177, 177, 4, 273, 177, + /* 1750 */ 96, 15, 275, 176, 251, 101, 90, 103, 190, 190, + /* 1760 */ 106, 107, 190, 177, 177, 111, 198, 199, 146, 251, + /* 1770 */ 198, 199, 118, 119, 120, 121, 190, 190, 42, 4, + /* 1780 */ 275, 176, 4, 251, 152, 198, 199, 176, 49, 177, + /* 1790 */ 7, 177, 176, 181, 11, 59, 106, 107, 177, 104, + /* 1800 */ 64, 4, 190, 177, 190, 4, 152, 181, 154, 155, + /* 1810 */ 156, 190, 198, 199, 4, 32, 190, 81, 82, 251, + /* 1820 */ 178, 177, 4, 251, 88, 181, 178, 177, 183, 100, + /* 1830 */ 60, 181, 96, 15, 190, 106, 107, 101, 251, 103, + /* 1840 */ 190, 4, 106, 107, 180, 184, 177, 111, 221, 106, + /* 1850 */ 107, 56, 162, 138, 118, 119, 120, 121, 177, 190, + /* 1860 */ 42, 118, 177, 177, 243, 251, 181, 198, 199, 151, + /* 1870 */ 177, 190, 148, 177, 181, 190, 190, 59, 227, 198, + /* 1880 */ 199, 106, 107, 190, 106, 107, 190, 228, 152, 177, + /* 1890 */ 154, 155, 156, 118, 198, 199, 118, 229, 177, 81, + /* 1900 */ 82, 4, 190, 106, 107, 177, 88, 106, 107, 177, + /* 1910 */ 100, 190, 230, 149, 96, 118, 106, 107, 190, 101, + /* 1920 */ 251, 103, 190, 237, 106, 107, 198, 199, 177, 111, + /* 1930 */ 198, 199, 251, 177, 133, 177, 118, 119, 120, 121, + /* 1940 */ 177, 190, 4, 106, 107, 177, 190, 251, 190, 198, + /* 1950 */ 199, 4, 147, 190, 198, 199, 198, 199, 190, 4, + /* 1960 */ 87, 198, 199, 177, 177, 231, 198, 199, 4, 177, + /* 1970 */ 152, 150, 154, 155, 156, 252, 190, 190, 4, 251, + /* 1980 */ 177, 177, 190, 251, 198, 199, 177, 203, 177, 152, + /* 1990 */ 198, 199, 181, 190, 190, 64, 259, 96, 87, 190, + /* 2000 */ 177, 190, 251, 106, 107, 177, 158, 251, 255, 251, + /* 2010 */ 177, 177, 177, 190, 251, 118, 177, 177, 190, 251, + /* 2020 */ 177, 198, 199, 190, 190, 190, 241, 177, 203, 190, + /* 2030 */ 190, 198, 199, 190, 177, 177, 177, 251, 198, 199, + /* 2040 */ 190, 198, 199, 251, 106, 107, 177, 190, 190, 190, + /* 2050 */ 99, 177, 99, 106, 107, 198, 199, 198, 199, 190, + /* 2060 */ 241, 106, 107, 177, 190, 118, 177, 198, 199, 223, + /* 2070 */ 106, 107, 198, 199, 251, 4, 190, 177, 200, 190, + /* 2080 */ 106, 107, 118, 177, 251, 4, 123, 198, 199, 4, + /* 2090 */ 190, 251, 118, 200, 251, 208, 190, 139, 198, 199, + /* 2100 */ 177, 177, 177, 165, 198, 199, 177, 31, 251, 200, + /* 2110 */ 251, 122, 202, 190, 190, 190, 177, 177, 163, 190, + /* 2120 */ 251, 198, 199, 198, 199, 251, 177, 198, 199, 190, + /* 2130 */ 190, 177, 200, 177, 208, 200, 177, 198, 199, 190, + /* 2140 */ 251, 200, 200, 200, 190, 177, 190, 198, 199, 190, + /* 2150 */ 177, 251, 198, 199, 198, 199, 177, 251, 190, 241, + /* 2160 */ 177, 99, 177, 190, 203, 203, 198, 199, 180, 190, + /* 2170 */ 177, 198, 199, 190, 251, 190, 251, 106, 107, 203, + /* 2180 */ 251, 100, 177, 190, 180, 177, 99, 106, 107, 177, + /* 2190 */ 251, 106, 107, 177, 99, 190, 177, 264, 190, 27, + /* 2200 */ 251, 241, 190, 158, 99, 251, 190, 251, 227, 190, + /* 2210 */ 265, 215, 62, 99, 99, 250, 96, 215, 180, 251, + /* 2220 */ 99, 241, 227, 152, 251, 241, 180, 99, 217, 60, + /* 2230 */ 99, 217, 99, 99, 217, 217, 99, 152, 241, 99, + /* 2240 */ 268, 18, 241, 268, 99, 99, 99, 241, 270, 16, + /* 2250 */ 224, 226, 261, 261, 201, 256, 201, 242, 206, 210, + /* 2260 */ 240, 202, 227, 242, 242, 175, 224, 239, 191, 191, + /* 2270 */ 191, 191, 262, 222, 216, 207, 263, 253, 211, 207, + /* 2280 */ 207, 274, 198, 55, 198, }; #define YY_SHIFT_USE_DFLT (-81) -#define YY_SHIFT_COUNT (434) +#define YY_SHIFT_COUNT (435) #define YY_SHIFT_MIN (-80) -#define YY_SHIFT_MAX (2208) +#define YY_SHIFT_MAX (2233) static const short yy_shift_ofst[] = { /* 0 */ 1158, -4, 201, 1182, 819, 1571, 1571, 689, 361, 1489, - /* 10 */ 1654, 1654, 770, 364, 364, 157, 81, 179, 1406, 1323, - /* 20 */ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, + /* 10 */ 1654, 1654, 1654, 770, 364, 364, 157, 81, 179, 1406, + /* 20 */ 1323, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, /* 30 */ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, /* 40 */ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, - /* 50 */ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1736, 370, 798, - /* 60 */ 181, 370, 2001, 2001, 2001, 2001, 2001, 887, 887, 565, - /* 70 */ 277, 4, 1510, 1492, 1458, 1375, 1449, 1434, 1431, 1427, - /* 80 */ 1379, 448, 1399, 2066, 2066, 2069, 439, 2066, 2064, 2001, + /* 50 */ 1654, 1654, 1654, 1654, 1654, 1654, 1736, 1654, 1818, 370, + /* 60 */ 798, 181, 370, 1837, 1837, 1837, 1837, 887, 887, 565, + /* 70 */ 277, 4, 1516, 1514, 1481, 1472, 1449, 1434, 1431, 1365, + /* 80 */ 1348, 448, 1399, 2071, 2071, 2085, 439, 2071, 2081, 1837, /* 90 */ 565, 1039, 538, 538, 735, 84, 44, 171, 859, 775, /* 100 */ 906, 773, 910, 636, 1172, 5, 450, 5, 443, 413, - /* 110 */ 185, 2059, 2040, 1775, 1947, 1840, 1991, 2016, 1933, 2014, - /* 120 */ 1525, 1999, 1724, 1995, 1974, 1965, 1734, 1517, 1693, 1855, - /* 130 */ 1047, 1593, 1597, 902, 140, 1542, 1542, 1436, 1564, 1542, - /* 140 */ 1236, 780, 1409, 349, 562, 216, 620, 1559, 1515, 1348, - /* 150 */ 90, 829, 829, 829, 872, 544, 2202, 2202, 2202, 2202, - /* 160 */ 2202, -81, -81, 459, 619, 619, 619, 619, 619, 619, + /* 110 */ 185, 1729, 1974, 1955, 1938, 1622, 1801, 1964, 1810, 1797, + /* 120 */ 1690, 1947, 1632, 1897, 1778, 1555, 1550, 1459, 1325, 1775, + /* 130 */ 1047, 1512, 1743, 902, 140, 1470, 1470, 1597, 1580, 1470, + /* 140 */ 1236, 780, 1436, 349, 562, 216, 620, 1559, 1542, 1525, + /* 150 */ 90, 829, 829, 829, 872, 544, 2228, 2228, 2228, 2228, + /* 160 */ 2228, -81, -81, 459, 619, 619, 619, 619, 619, 619, /* 170 */ 619, 619, 619, 645, 327, 683, 1180, 1149, 1117, 1087, /* 180 */ 1051, 1021, 985, 958, 916, 767, 1239, 1212, 1276, 509, /* 190 */ 509, -60, -38, -38, -38, -38, 578, -80, 314, 87, /* 200 */ 87, 41, 155, 75, 58, 58, 58, -6, 186, 862, - /* 210 */ -47, 808, 1649, 1463, 1284, 206, 908, 424, 400, 25, - /* 220 */ 729, 729, 679, 1364, -2, 855, 729, 442, 346, 855, - /* 230 */ 750, 750, 187, -9, 169, 2208, 2120, 2118, 2116, 2196, - /* 240 */ 2196, 2112, 2109, 2143, 2108, 2143, 2107, 2143, 2105, 2143, - /* 250 */ 2101, 1761, 1712, 2094, 1761, 2122, 2091, 2087, 2086, 2122, - /* 260 */ 1712, 2061, 1994, 2110, 2032, 1761, 2011, 1761, 1956, 1801, - /* 270 */ 1836, 1836, 1836, 1836, 1971, 1801, 1836, 1904, 1836, 1971, - /* 280 */ 1836, 1836, 1796, 1835, 1815, 1754, 1801, 1818, 1801, 1825, - /* 290 */ 1807, 1729, 1725, 1728, 1722, 1712, 1691, 1771, 1721, 1761, - /* 300 */ 1737, 1737, 1673, 1673, 1673, 1673, -81, -81, -81, -81, - /* 310 */ -81, -81, -81, -81, -81, -81, 564, 79, 158, 45, - /* 320 */ 702, 243, -49, 398, 1362, 1321, 1042, 984, 788, 2, - /* 330 */ 471, -20, 758, 678, 344, 144, -44, 1674, 1670, 1601, - /* 340 */ 1603, 1591, 1549, 1558, 1543, 1511, 1541, 1519, 1496, 1459, - /* 350 */ 1575, 1484, 1545, 1536, 1550, 1490, 1487, 1418, 1420, 1483, - /* 360 */ 1480, 1419, 1402, 1527, 1407, 1424, 1417, 1433, 1389, 1380, - /* 370 */ 1405, 1454, 1394, 1393, 1377, 1368, 1425, 1444, 1327, 1369, - /* 380 */ 1350, 1309, 1300, 1272, 1202, 1257, 1234, 1269, 1233, 1202, - /* 390 */ 1222, 1173, 1171, 1124, 1128, 1050, 1216, 1197, 1113, 993, - /* 400 */ 1193, 1038, 1099, 993, 990, 937, 846, 895, 870, 848, - /* 410 */ 867, 825, 757, 805, 675, 652, 571, 644, 625, 613, - /* 420 */ 571, 438, 474, 421, 399, 406, 355, 362, 231, 225, - /* 430 */ 166, 143, 63, -37, -61, + /* 210 */ -47, 808, 1783, 1301, 1296, 206, 908, 424, 400, 25, + /* 220 */ 729, 729, 679, 1360, -2, 855, 729, 442, 346, 855, + /* 230 */ 750, 750, 187, -9, 169, 2233, 2147, 2146, 2145, 2223, + /* 240 */ 2223, 2140, 2137, 2169, 2134, 2169, 2133, 2169, 2131, 2169, + /* 250 */ 2128, 1770, 1718, 2121, 1770, 2150, 2120, 2115, 2114, 2150, + /* 260 */ 1718, 2105, 2045, 2172, 2095, 1770, 2087, 1901, 1770, 2062, + /* 270 */ 1901, 1963, 1963, 1963, 1963, 2076, 1901, 1963, 1989, 1963, + /* 280 */ 2076, 1963, 1963, 1958, 1953, 1951, 1848, 1901, 1911, 1901, + /* 290 */ 1931, 1873, 1821, 1805, 1764, 1724, 1718, 1715, 1795, 1695, + /* 300 */ 1770, 1739, 1739, 1666, 1666, 1666, 1666, -81, -81, -81, + /* 310 */ -81, -81, -81, -81, -81, -81, -81, 564, 79, 158, + /* 320 */ 45, 702, 243, -49, 398, 1293, 1279, 1042, 984, 788, + /* 330 */ 2, 471, -20, 758, 678, 344, 144, -44, 1683, 1678, + /* 340 */ 1619, 1610, 1603, 1602, 1595, 1585, 1554, 1588, 1575, 1547, + /* 350 */ 1493, 1607, 1538, 1601, 1582, 1592, 1517, 1494, 1450, 1451, + /* 360 */ 1527, 1509, 1444, 1432, 1545, 1446, 1441, 1430, 1464, 1390, + /* 370 */ 1407, 1425, 1460, 1400, 1396, 1398, 1395, 1452, 1478, 1372, + /* 380 */ 1423, 1428, 1354, 1342, 1318, 1168, 1257, 1310, 1270, 1234, + /* 390 */ 1168, 1223, 1171, 1169, 1112, 1128, 1050, 1216, 1197, 1113, + /* 400 */ 993, 1193, 1038, 1099, 993, 990, 937, 846, 895, 870, + /* 410 */ 848, 867, 825, 757, 805, 675, 652, 571, 644, 625, + /* 420 */ 613, 571, 438, 474, 421, 399, 406, 355, 362, 231, + /* 430 */ 225, 166, 143, 63, -37, -61, }; #define YY_REDUCE_USE_DFLT (-100) -#define YY_REDUCE_COUNT (315) +#define YY_REDUCE_COUNT (316) #define YY_REDUCE_MIN (-99) -#define YY_REDUCE_MAX (2067) +#define YY_REDUCE_MAX (2090) static const short yy_reduce_ofst[] = { - /* 0 */ 615, 1195, 699, -99, 764, 1138, 189, 705, 1259, 1218, - /* 10 */ 1201, 261, 196, 884, 599, 1187, 1897, 1892, 1887, 1868, - /* 20 */ 1858, 1853, 1848, 1838, 1833, 1814, 1810, 1808, 1798, 1791, - /* 30 */ 1773, 1768, 1766, 1750, 1743, 1733, 1726, 1723, 1719, 1709, - /* 40 */ 1703, 1685, 1675, 1668, 1636, 1617, 1613, 1599, 1572, 1568, - /* 50 */ 1534, 1532, 1518, 1503, 1486, 1435, 1428, 1404, 490, 1401, - /* 60 */ 214, 769, 1544, 1529, 1225, 124, 67, 596, 175, 547, - /* 70 */ 1221, 1614, 1964, 1959, 1952, 1949, 1937, 1802, 1611, 1587, - /* 80 */ 1270, 1562, 203, 1346, 1255, 131, 347, 950, 1397, 195, - /* 90 */ 885, 265, 1134, 1132, 125, 377, 1011, 2006, 2005, 1979, - /* 100 */ 1671, 1671, 2004, 2002, 2000, 697, 1990, 11, 1671, 1984, - /* 110 */ 1979, 1978, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1973, - /* 120 */ 1671, 1671, 1967, 1671, 1671, 1938, 1671, 1671, 1671, 1926, - /* 130 */ 1885, 1844, 1839, 1837, 1803, 1141, 1140, 1767, 1762, 1065, - /* 140 */ 1738, 1671, 1659, 1643, 1569, 1485, 632, 1474, 1452, 1294, - /* 150 */ 1232, 1191, 666, 489, 938, 1022, 1020, 956, 924, 791, - /* 160 */ 763, 746, 205, 1462, 1462, 1462, 1462, 1462, 1462, 1462, - /* 170 */ 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, - /* 180 */ 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, - /* 190 */ 1462, 1462, 1462, 1462, 1462, 1462, 1462, 1462, 2047, 2058, - /* 200 */ 2057, 1462, 1980, 1980, 2046, 2045, 2041, 2012, 2031, 2009, - /* 210 */ 2028, 1983, 1987, 2054, 2053, 2052, 2043, 2017, 2067, 2010, - /* 220 */ 1998, 1997, 2034, 2025, 2026, 2027, 1996, 1986, 1975, 2024, - /* 230 */ 1969, 1968, 1462, 2007, 2003, 1950, 1859, 1982, 1981, 1948, - /* 240 */ 1944, 1972, 1859, 1993, 1859, 1992, 1859, 1988, 1859, 1985, - /* 250 */ 1960, 2019, 1970, 1957, 2008, 1976, 1939, 1859, 1859, 1963, - /* 260 */ 1935, 1859, 1886, 1871, 1884, 1931, 1859, 1914, 1859, 1890, - /* 270 */ 1888, 1879, 1878, 1876, 1852, 1847, 1841, 1820, 1811, 1774, - /* 280 */ 1776, 1755, 1730, 1689, 1688, 1651, 1708, 1645, 1692, 1633, - /* 290 */ 1462, 1647, 1641, 1640, 1632, 1626, 1625, 1644, 1639, 1634, - /* 300 */ 1627, 1618, 1608, 1606, 1605, 1604, 1478, 1472, 1475, 1540, - /* 310 */ 1539, 1491, 1462, 1462, 1462, 1523, + /* 0 */ 615, 1195, 699, -99, 764, 1138, 189, 705, 1283, 1260, + /* 10 */ 1218, 1201, 261, 196, 884, 599, 1187, 1973, 1968, 1956, + /* 20 */ 1954, 1949, 1939, 1929, 1925, 1923, 1906, 1900, 1889, 1874, + /* 30 */ 1869, 1859, 1857, 1843, 1840, 1833, 1823, 1792, 1786, 1768, + /* 40 */ 1763, 1758, 1756, 1751, 1732, 1728, 1696, 1681, 1669, 1614, + /* 50 */ 1587, 1572, 1568, 1532, 1518, 1503, 1486, 1404, 1346, 490, + /* 60 */ 1474, 214, 769, 1448, 1189, 124, 67, 596, 175, 547, + /* 70 */ 1295, 1686, 1811, 1693, 1685, 1650, 1644, 1626, 1612, 1447, + /* 80 */ 1320, 1232, 203, 1621, 1246, 131, 347, 950, 1191, 195, + /* 90 */ 885, 265, 1134, 1132, 125, 377, 1011, 2019, 2016, 1983, + /* 100 */ 1803, 1803, 2012, 2008, 2005, 697, 1993, 11, 1803, 1985, + /* 110 */ 1983, 1979, 1803, 1803, 1803, 1803, 1803, 1803, 1803, 1959, + /* 120 */ 1803, 1803, 1940, 1803, 1803, 1924, 1803, 1803, 1803, 1886, + /* 130 */ 1858, 1850, 1839, 1835, 1834, 1221, 1140, 1828, 1809, 1097, + /* 140 */ 1804, 1803, 1787, 1721, 1712, 1586, 632, 1569, 1530, 1498, + /* 150 */ 1422, 1374, 666, 489, 938, 1022, 1020, 956, 924, 791, + /* 160 */ 763, 746, 205, 1480, 1480, 1480, 1480, 1480, 1480, 1480, + /* 170 */ 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, + /* 180 */ 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, + /* 190 */ 1480, 1480, 1480, 1480, 1480, 1480, 1480, 1480, 2067, 2086, + /* 200 */ 2084, 1480, 2007, 2007, 2073, 2072, 2068, 2028, 2058, 2024, + /* 210 */ 2051, 2013, 2010, 2080, 2079, 2078, 2077, 2042, 2090, 2035, + /* 220 */ 2022, 2021, 2059, 2049, 2052, 2055, 2015, 2020, 1999, 2053, + /* 230 */ 1992, 1991, 1480, 2025, 2026, 1978, 1918, 2006, 2001, 1975, + /* 240 */ 1972, 1997, 1918, 2018, 1918, 2017, 1918, 2014, 1918, 2011, + /* 250 */ 1984, 2046, 1995, 1980, 2038, 2002, 1965, 1918, 1918, 1996, + /* 260 */ 1981, 1918, 1945, 1933, 1960, 2004, 1918, 1976, 1988, 1918, + /* 270 */ 1962, 1943, 1942, 1941, 1935, 1926, 1961, 1932, 1910, 1909, + /* 280 */ 1887, 1893, 1878, 1846, 1819, 1785, 1753, 1825, 1737, 1784, + /* 290 */ 1723, 1480, 1734, 1682, 1668, 1659, 1651, 1627, 1661, 1645, + /* 300 */ 1664, 1648, 1642, 1616, 1611, 1605, 1577, 1505, 1477, 1475, + /* 310 */ 1540, 1537, 1496, 1480, 1480, 1480, 1535, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 729, 1037, 1142, 1142, 1026, 1026, 1026, 1142, 1026, 1026, - /* 10 */ 1026, 1026, 900, 1148, 1148, 1148, 1026, 1026, 1026, 1026, - /* 20 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, - /* 30 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, - /* 40 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, - /* 50 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1015, 1148, 894, - /* 60 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 774, - /* 70 */ 890, 900, 1148, 1148, 1148, 1148, 1148, 962, 949, 940, - /* 80 */ 1148, 1148, 1148, 972, 972, 955, 842, 972, 1148, 1148, - /* 90 */ 1148, 1148, 928, 928, 1027, 1148, 766, 1112, 1117, 1013, - /* 100 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 901, 1148, - /* 110 */ 1013, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, - /* 120 */ 1148, 963, 956, 950, 941, 1148, 1148, 1148, 1148, 1148, - /* 130 */ 1148, 1148, 1148, 1148, 1148, 890, 890, 1148, 1148, 890, - /* 140 */ 1148, 1148, 1148, 1014, 1148, 1148, 763, 1148, 1148, 1148, - /* 150 */ 735, 1058, 1148, 1148, 729, 1142, 1142, 1142, 1142, 1142, - /* 160 */ 1142, 1135, 880, 935, 906, 945, 933, 937, 1038, 1031, - /* 170 */ 1032, 1030, 936, 1027, 1027, 1027, 1027, 1027, 1027, 1027, - /* 180 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 988, 1000, - /* 190 */ 987, 995, 1004, 999, 996, 990, 989, 991, 1148, 1148, - /* 200 */ 1148, 992, 1148, 1148, 1148, 1148, 1148, 893, 1148, 1148, - /* 210 */ 864, 1148, 1086, 1148, 1148, 776, 1148, 878, 738, 944, - /* 220 */ 918, 918, 809, 833, 798, 928, 918, 908, 1033, 928, - /* 230 */ 1148, 1148, 993, 891, 878, 1126, 909, 909, 909, 1111, - /* 240 */ 1111, 909, 909, 855, 909, 855, 909, 855, 909, 855, - /* 250 */ 909, 760, 944, 909, 760, 846, 968, 909, 909, 846, - /* 260 */ 944, 909, 1093, 1091, 909, 760, 909, 760, 909, 1046, - /* 270 */ 844, 844, 844, 844, 825, 1046, 844, 809, 844, 825, - /* 280 */ 844, 844, 1148, 909, 909, 1148, 1046, 1052, 1046, 1027, - /* 290 */ 994, 934, 922, 932, 929, 944, 1148, 757, 828, 760, - /* 300 */ 746, 746, 734, 734, 734, 734, 1139, 1139, 1135, 811, - /* 310 */ 811, 896, 1003, 1002, 1001, 785, 1039, 1148, 1148, 1148, - /* 320 */ 1148, 1148, 1148, 1060, 1148, 1148, 1148, 1148, 1148, 1148, - /* 330 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 730, 1148, - /* 340 */ 1148, 1148, 1148, 1148, 1129, 1148, 1148, 1148, 1148, 1148, - /* 350 */ 1148, 1090, 1089, 1148, 1148, 1148, 1148, 1148, 1148, 1148, - /* 360 */ 1148, 1148, 1148, 1078, 1148, 1148, 1148, 1148, 1148, 1148, - /* 370 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, - /* 380 */ 1148, 1148, 1148, 1148, 867, 869, 1148, 1148, 1148, 868, - /* 390 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 930, - /* 400 */ 1148, 923, 1148, 1036, 1148, 1017, 1025, 1148, 1148, 1148, - /* 410 */ 1148, 1148, 1016, 1148, 1148, 1148, 1144, 1148, 1148, 1148, - /* 420 */ 1143, 1148, 1148, 1148, 1148, 1148, 1028, 980, 1148, 979, - /* 430 */ 978, 769, 1148, 744, 1148, 726, 731, 1128, 1125, 1127, - /* 440 */ 1122, 1123, 1121, 1124, 1120, 1118, 1119, 1116, 1114, 1113, - /* 450 */ 1115, 1110, 1106, 1066, 1064, 1062, 1071, 1070, 1069, 1068, - /* 460 */ 1067, 1063, 1061, 1065, 1059, 959, 947, 938, 862, 1105, - /* 470 */ 1103, 1104, 1057, 1055, 1056, 861, 860, 859, 854, 853, - /* 480 */ 852, 851, 1132, 1141, 1140, 1138, 1137, 1136, 1130, 1131, - /* 490 */ 1044, 1043, 1041, 1040, 1042, 762, 1082, 1085, 1084, 1083, - /* 500 */ 1088, 1087, 1080, 1092, 1097, 1096, 1101, 1100, 1099, 1098, - /* 510 */ 1095, 1077, 967, 966, 964, 969, 961, 960, 965, 952, - /* 520 */ 958, 957, 948, 951, 847, 943, 939, 942, 863, 1081, - /* 530 */ 858, 857, 856, 761, 756, 911, 755, 754, 765, 831, - /* 540 */ 832, 840, 843, 838, 841, 837, 836, 835, 839, 834, - /* 550 */ 830, 768, 767, 775, 824, 802, 800, 799, 803, 816, - /* 560 */ 815, 822, 821, 820, 819, 818, 814, 817, 813, 812, - /* 570 */ 804, 797, 796, 810, 795, 827, 826, 823, 794, 850, - /* 580 */ 849, 848, 845, 793, 792, 791, 790, 789, 788, 986, - /* 590 */ 985, 1006, 977, 865, 872, 871, 870, 874, 875, 885, - /* 600 */ 883, 882, 881, 917, 916, 915, 914, 913, 912, 905, - /* 610 */ 903, 899, 898, 904, 902, 920, 921, 919, 897, 889, - /* 620 */ 887, 888, 886, 974, 971, 973, 970, 907, 895, 892, - /* 630 */ 879, 925, 924, 1029, 1018, 1008, 1019, 910, 1007, 1005, - /* 640 */ 1028, 1025, 1020, 1102, 1024, 1012, 1011, 1010, 1147, 1145, - /* 650 */ 1146, 1049, 1051, 1054, 1053, 1050, 927, 926, 1048, 1047, - /* 660 */ 1009, 984, 781, 779, 780, 1074, 1073, 1076, 1075, 1072, - /* 670 */ 783, 782, 778, 777, 998, 997, 982, 1021, 1022, 981, - /* 680 */ 1023, 983, 770, 873, 866, 976, 975, 808, 807, 806, - /* 690 */ 805, 877, 876, 787, 801, 786, 784, 764, 759, 758, - /* 700 */ 753, 751, 748, 750, 747, 752, 749, 745, 743, 742, - /* 710 */ 741, 740, 739, 773, 772, 771, 769, 737, 736, 733, - /* 720 */ 732, 728, 727, 725, + /* 0 */ 730, 1038, 1143, 1143, 1027, 1027, 1027, 1143, 1027, 1027, + /* 10 */ 1027, 1027, 1027, 901, 1149, 1149, 1149, 1027, 1027, 1027, + /* 20 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, + /* 30 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, + /* 40 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, + /* 50 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1016, 1149, + /* 60 */ 895, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 775, + /* 70 */ 891, 901, 1149, 1149, 1149, 1149, 1149, 963, 950, 941, + /* 80 */ 1149, 1149, 1149, 973, 973, 956, 843, 973, 1149, 1149, + /* 90 */ 1149, 1149, 929, 929, 1028, 1149, 767, 1113, 1118, 1014, + /* 100 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 902, 1149, + /* 110 */ 1014, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, + /* 120 */ 1149, 964, 957, 951, 942, 1149, 1149, 1149, 1149, 1149, + /* 130 */ 1149, 1149, 1149, 1149, 1149, 891, 891, 1149, 1149, 891, + /* 140 */ 1149, 1149, 1149, 1015, 1149, 1149, 764, 1149, 1149, 1149, + /* 150 */ 736, 1059, 1149, 1149, 730, 1143, 1143, 1143, 1143, 1143, + /* 160 */ 1143, 1136, 881, 936, 907, 946, 934, 938, 1039, 1032, + /* 170 */ 1033, 1031, 937, 1028, 1028, 1028, 1028, 1028, 1028, 1028, + /* 180 */ 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, 989, 1001, + /* 190 */ 988, 996, 1005, 1000, 997, 991, 990, 992, 1149, 1149, + /* 200 */ 1149, 993, 1149, 1149, 1149, 1149, 1149, 894, 1149, 1149, + /* 210 */ 865, 1149, 1087, 1149, 1149, 777, 1149, 879, 739, 945, + /* 220 */ 919, 919, 810, 834, 799, 929, 919, 909, 1034, 929, + /* 230 */ 1149, 1149, 994, 892, 879, 1127, 910, 910, 910, 1112, + /* 240 */ 1112, 910, 910, 856, 910, 856, 910, 856, 910, 856, + /* 250 */ 910, 761, 945, 910, 761, 847, 969, 910, 910, 847, + /* 260 */ 945, 910, 1094, 1092, 910, 761, 910, 1047, 761, 910, + /* 270 */ 1047, 845, 845, 845, 845, 826, 1047, 845, 810, 845, + /* 280 */ 826, 845, 845, 1149, 910, 910, 1149, 1047, 1053, 1047, + /* 290 */ 1028, 995, 935, 923, 933, 930, 945, 1149, 758, 829, + /* 300 */ 761, 747, 747, 735, 735, 735, 735, 1140, 1140, 1136, + /* 310 */ 812, 812, 897, 1004, 1003, 1002, 786, 1040, 1149, 1149, + /* 320 */ 1149, 1149, 1149, 1149, 1061, 1149, 1149, 1149, 1149, 1149, + /* 330 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 731, + /* 340 */ 1149, 1149, 1149, 1149, 1149, 1130, 1149, 1149, 1149, 1149, + /* 350 */ 1149, 1149, 1091, 1090, 1149, 1149, 1149, 1149, 1149, 1149, + /* 360 */ 1149, 1149, 1149, 1149, 1079, 1149, 1149, 1149, 1149, 1149, + /* 370 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, + /* 380 */ 1149, 1149, 1149, 1149, 1149, 868, 870, 1149, 1149, 1149, + /* 390 */ 869, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, + /* 400 */ 931, 1149, 924, 1149, 1037, 1149, 1018, 1026, 1149, 1149, + /* 410 */ 1149, 1149, 1149, 1017, 1149, 1149, 1149, 1145, 1149, 1149, + /* 420 */ 1149, 1144, 1149, 1149, 1149, 1149, 1149, 1029, 981, 1149, + /* 430 */ 980, 979, 770, 1149, 745, 1149, 727, 732, 1129, 1126, + /* 440 */ 1128, 1123, 1124, 1122, 1125, 1121, 1119, 1120, 1117, 1115, + /* 450 */ 1114, 1116, 1111, 1107, 1067, 1065, 1063, 1072, 1071, 1070, + /* 460 */ 1069, 1068, 1064, 1062, 1066, 1060, 960, 948, 939, 863, + /* 470 */ 1106, 1104, 1105, 1058, 1056, 1057, 862, 861, 860, 855, + /* 480 */ 854, 853, 852, 1133, 1142, 1141, 1139, 1138, 1137, 1131, + /* 490 */ 1132, 1045, 1044, 1042, 1041, 1043, 763, 1083, 1086, 1085, + /* 500 */ 1084, 1089, 1088, 1081, 1093, 1098, 1097, 1102, 1101, 1100, + /* 510 */ 1099, 1096, 1078, 968, 967, 965, 970, 962, 961, 966, + /* 520 */ 953, 959, 958, 949, 952, 848, 944, 940, 943, 864, + /* 530 */ 1082, 859, 858, 857, 762, 757, 912, 756, 755, 766, + /* 540 */ 832, 833, 841, 844, 839, 842, 838, 837, 836, 840, + /* 550 */ 835, 831, 769, 768, 776, 825, 803, 801, 800, 804, + /* 560 */ 817, 816, 823, 822, 821, 820, 819, 815, 818, 814, + /* 570 */ 813, 805, 798, 797, 811, 796, 828, 827, 824, 795, + /* 580 */ 851, 850, 849, 846, 794, 793, 792, 791, 790, 789, + /* 590 */ 987, 986, 1007, 978, 866, 873, 872, 871, 875, 876, + /* 600 */ 886, 884, 883, 882, 918, 917, 916, 915, 914, 913, + /* 610 */ 906, 904, 900, 899, 905, 903, 921, 922, 920, 898, + /* 620 */ 890, 888, 889, 887, 975, 972, 974, 971, 908, 896, + /* 630 */ 893, 880, 926, 925, 1030, 1019, 1009, 1020, 911, 1008, + /* 640 */ 1006, 1029, 1026, 1021, 1103, 1025, 1013, 1012, 1011, 1148, + /* 650 */ 1146, 1147, 1050, 1052, 1055, 1054, 1051, 928, 927, 1049, + /* 660 */ 1048, 1010, 985, 782, 780, 781, 1075, 1074, 1077, 1076, + /* 670 */ 1073, 784, 783, 779, 778, 999, 998, 983, 1022, 1023, + /* 680 */ 982, 1024, 984, 771, 874, 867, 977, 976, 809, 808, + /* 690 */ 807, 806, 878, 877, 788, 802, 787, 785, 765, 760, + /* 700 */ 759, 754, 752, 749, 751, 748, 753, 750, 746, 744, + /* 710 */ 743, 742, 741, 740, 774, 773, 772, 770, 738, 737, + /* 720 */ 734, 733, 729, 728, 726, }; /* The next table maps tokens into fallback tokens. If a construct @@ -1297,7 +1301,7 @@ static const char *const yyRuleName[] = { /* 129 */ "cmd ::= DROP TABLE ifexists ID_DB|ID_TAB", /* 130 */ "ifexists ::= IF EXISTS", /* 131 */ "ifexists ::=", - /* 132 */ "cmd ::= CREATE temp VIEW ifnotexists fullname AS select", + /* 132 */ "cmd ::= CREATE temp VIEW ifnotexists fullname idxlist_opt AS select", /* 133 */ "cmd ::= CREATE temp VIEW ifnotexists nm DOT ID_VIEW_NEW", /* 134 */ "cmd ::= CREATE temp VIEW ifnotexists ID_DB|ID_VIEW_NEW", /* 135 */ "cmd ::= DROP VIEW ifexists fullname", @@ -1481,7 +1485,7 @@ static const char *const yyRuleName[] = { /* 313 */ "exprlist ::=", /* 314 */ "nexprlist ::= nexprlist COMMA expr", /* 315 */ "nexprlist ::= exprx", - /* 316 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt", + /* 316 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", /* 317 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB", /* 318 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW", /* 319 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW", @@ -2354,7 +2358,7 @@ static const struct { { 169, 4 }, { 217, 2 }, { 217, 0 }, - { 169, 7 }, + { 169, 8 }, { 169, 7 }, { 169, 5 }, { 169, 4 }, @@ -3398,12 +3402,13 @@ static void yy_reduce( { yy_destructor(yypParser,177,&yymsp[-2].minor); } break; - case 132: /* cmd ::= CREATE temp VIEW ifnotexists fullname AS select */ + case 132: /* cmd ::= CREATE temp VIEW ifnotexists fullname idxlist_opt AS select */ { - yygotominor.yy399 = new SqliteCreateView(*(yymsp[-5].minor.yy376), *(yymsp[-3].minor.yy237), yymsp[-2].minor.yy66->name1, yymsp[-2].minor.yy66->name2, yymsp[0].minor.yy123); - delete yymsp[-5].minor.yy376; - delete yymsp[-3].minor.yy237; - delete yymsp[-2].minor.yy66; + yygotominor.yy399 = new SqliteCreateView(*(yymsp[-6].minor.yy376), *(yymsp[-4].minor.yy237), yymsp[-3].minor.yy66->name1, yymsp[-3].minor.yy66->name2, yymsp[0].minor.yy123, *(yymsp[-2].minor.yy139)); + delete yymsp[-6].minor.yy376; + delete yymsp[-4].minor.yy237; + delete yymsp[-3].minor.yy66; + delete yymsp[-2].minor.yy139; objectForTokens = yygotominor.yy399; } break; @@ -4463,7 +4468,7 @@ static void yy_reduce( yygotominor.yy13->append(yymsp[0].minor.yy490); } break; - case 316: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt */ + case 316: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ { yygotominor.yy399 = new SqliteCreateIndex( *(yymsp[-10].minor.yy237), @@ -4471,7 +4476,7 @@ static void yy_reduce( *(yymsp[-7].minor.yy211), *(yymsp[-6].minor.yy211), *(yymsp[-4].minor.yy211), - *(yymsp[-2].minor.yy139), + *(yymsp[-2].minor.yy495), yymsp[0].minor.yy490 ); delete yymsp[-8].minor.yy237; @@ -4479,7 +4484,7 @@ static void yy_reduce( delete yymsp[-7].minor.yy211; delete yymsp[-6].minor.yy211; delete yymsp[-4].minor.yy211; - delete yymsp[-2].minor.yy139; + delete yymsp[-2].minor.yy495; objectForTokens = yygotominor.yy399; } break; diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y index 0bab877..932e965 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y +++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y @@ -737,11 +737,12 @@ ifexists(X) ::= . {X = new bool(false);} cmd(X) ::= CREATE temp(T) VIEW ifnotexists(E) fullname(N) - AS select(S). { - X = new SqliteCreateView(*(T), *(E), N->name1, N->name2, S); + idxlist_opt(C) AS select(S). { + X = new SqliteCreateView(*(T), *(E), N->name1, N->name2, S, *(C)); delete T; delete E; delete N; + delete C; objectForTokens = X; } @@ -1824,7 +1825,7 @@ nexprlist(X) ::= exprx(E). { cmd(X) ::= CREATE uniqueflag(U) INDEX ifnotexists(E) nm(N1) dbnm(N2) - ON nm(N3) LP idxlist(L) RP + ON nm(N3) LP sortlist(L) RP where_opt(W). { X = new SqliteCreateIndex( *(U), diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp index ba2ea37..a97b765 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp @@ -74,7 +74,7 @@ StatementTokenBuilder& StatementTokenBuilder::withComment(const QString& value) StatementTokenBuilder& StatementTokenBuilder::withFloat(double value) { - return with(Token::FLOAT, QString::number(value)); + return with(Token::FLOAT, doubleToString(value)); } StatementTokenBuilder& StatementTokenBuilder::withInteger(qint64 value) |
