aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2014-12-14 08:24:26 -0500
committerLibravatarUnit 193 <unit193@ubuntu.com>2014-12-14 08:24:26 -0500
commit89214766d8e3e7b8dd749a1fa18a5b9727f5010d (patch)
tree34ad5aa84ac9674ebb5b7a23b5a3377e8629ee33
parent7167ce41b61d2ba2cdb526777a4233eb84a3b66a (diff)
downloadsqlitestudio-89214766d8e3e7b8dd749a1fa18a5b9727f5010d.tar.bz2
sqlitestudio-89214766d8e3e7b8dd749a1fa18a5b9727f5010d.tar.xz
sqlitestudio-89214766d8e3e7b8dd749a1fa18a5b9727f5010d.tar.zst
Imported Upstream version 3.0.0upstream/3.0.0
-rw-r--r--Plugins/CsvExport/csvexport.cpp15
-rw-r--r--Plugins/CsvExport/csvexport.json2
-rw-r--r--Plugins/ScriptingTcl/ScriptingTcl.pro11
-rw-r--r--Plugins/SqlEnterpriseFormatter/formatcreateview.cpp2
-rw-r--r--Plugins/SqlEnterpriseFormatter/formatstatement.cpp3
-rw-r--r--Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.json2
-rw-r--r--SQLiteStudio3/SQLiteStudio3.pro14
-rw-r--r--SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp8
-rw-r--r--SQLiteStudio3/Tests/TestUtils/TestUtils.pro1
-rw-r--r--SQLiteStudio3/Tests/testdirs.pri2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt936
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/utils.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp44
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp24
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitestatement.cpp14
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp600
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp748
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/token.cpp22
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/token.h12
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/plugintype.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/functionmanager.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/updatemanager.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp2
-rw-r--r--SQLiteStudio3/dirs.pri24
-rw-r--r--SQLiteStudio3/docs/sqlitestudio_logo.pngbin9302 -> 15645 bytes
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/verifiablewizardpage.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp9
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.h4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/img/sqlitestudio_logo.pngbin0 -> 15645 bytes
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp12
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mdiwindow.h4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/taskbar.cpp18
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/taskbar.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/uiloader.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp27
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.h1
-rw-r--r--SQLiteStudio3/plugins.pri18
-rw-r--r--SQLiteStudio3/sqlitestudio/sqlitestudio.pro5
-rw-r--r--SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.pro6
50 files changed, 1902 insertions, 739 deletions
diff --git a/Plugins/CsvExport/csvexport.cpp b/Plugins/CsvExport/csvexport.cpp
index bdaf729..fcbf841 100644
--- a/Plugins/CsvExport/csvexport.cpp
+++ b/Plugins/CsvExport/csvexport.cpp
@@ -59,11 +59,14 @@ bool CsvExport::beforeExportQueryResults(const QString& query, QList<QueryExecut
UNUSED(providedData);
defineCsvFormat();
- QStringList cols;
- for (QueryExecutor::ResultColumnPtr resCol : columns)
- cols << resCol->displayName;
+ if (cfg.CsvExport.ColumnsInFirstRow.get())
+ {
+ QStringList cols;
+ for (QueryExecutor::ResultColumnPtr resCol : columns)
+ cols << resCol->displayName;
- writeln(CsvSerializer::serialize(cols, format));
+ writeln(CsvSerializer::serialize(cols, format));
+ }
return true;
}
@@ -99,7 +102,9 @@ bool CsvExport::exportTable(const QStringList& columnNames)
return false;
defineCsvFormat();
- writeln(CsvSerializer::serialize(columnNames, format));
+ if (cfg.CsvExport.ColumnsInFirstRow.get())
+ writeln(CsvSerializer::serialize(columnNames, format));
+
return true;
}
diff --git a/Plugins/CsvExport/csvexport.json b/Plugins/CsvExport/csvexport.json
index 57def5c..d19e750 100644
--- a/Plugins/CsvExport/csvexport.json
+++ b/Plugins/CsvExport/csvexport.json
@@ -2,6 +2,6 @@
"type": "ExportPlugin",
"title": "CSV export",
"description": "Provides CSV format for exporting",
- "version": 10000,
+ "version": 10001,
"author": "SalSoft"
}
diff --git a/Plugins/ScriptingTcl/ScriptingTcl.pro b/Plugins/ScriptingTcl/ScriptingTcl.pro
index 4b89ce6..08d8796 100644
--- a/Plugins/ScriptingTcl/ScriptingTcl.pro
+++ b/Plugins/ScriptingTcl/ScriptingTcl.pro
@@ -36,6 +36,17 @@ linux: {
# Find tclConfig.sh
TCL_CONFIG_DIR = $$system(echo "puts [info library]" | tclsh)
TCL_CONFIG = $$TCL_CONFIG_DIR/tclConfig.sh
+ message("Looking for $$TCL_CONFIG")
+ !exists($$TCL_CONFIG) {
+ # Debian case
+ DEBIAN_ARCH_PATH=$$system(dpkg-architecture -qDEB_HOST_MULTIARCH)
+ TCL_CONFIG = /usr/lib/$$DEBIAN_ARCH_PATH/tcl$$TCL_VERSION/tclConfig.sh
+ }
+ message("Looking for $$TCL_CONFIG")
+ !exists($$TCL_CONFIG) {
+ error("Could not find tclConfig.sh file. You can define its absolute path by qmake parameter: TCL_CONFIG=/path/to/tclConfig.sh")
+ }
+ message("Using tclconfig: $$TCL_CONFIG")
# Define other libs required when linking with Tcl
eval($$system(cat $$TCL_CONFIG | grep TCL_LIBS))
diff --git a/Plugins/SqlEnterpriseFormatter/formatcreateview.cpp b/Plugins/SqlEnterpriseFormatter/formatcreateview.cpp
index faec87a..4fe1c27 100644
--- a/Plugins/SqlEnterpriseFormatter/formatcreateview.cpp
+++ b/Plugins/SqlEnterpriseFormatter/formatcreateview.cpp
@@ -22,5 +22,5 @@ void FormatCreateView::formatInternal()
if (dialect == Dialect::Sqlite3 && !createView->database.isNull())
withId(createView->database).withIdDot();
- withId(createView->view).withKeyword("AS").withStatement(createView->select).withSemicolon();
+ withId(createView->view).withKeyword("AS").withNewLine().withIncrIndent().withStatement(createView->select).withSemicolon().withDecrIndent();
}
diff --git a/Plugins/SqlEnterpriseFormatter/formatstatement.cpp b/Plugins/SqlEnterpriseFormatter/formatstatement.cpp
index 04c6aae..b5fd408 100644
--- a/Plugins/SqlEnterpriseFormatter/formatstatement.cpp
+++ b/Plugins/SqlEnterpriseFormatter/formatstatement.cpp
@@ -19,6 +19,7 @@
#include "formatcopy.h"
#include "formatcreateindex.h"
#include "formatcreatetrigger.h"
+#include "formatcreateview.h"
#include "formatdelete.h"
#include "formatupdate.h"
#include "formatdropindex.h"
@@ -46,6 +47,7 @@
#include "parser/ast/sqlitecopy.h"
#include "parser/ast/sqlitecreateindex.h"
#include "parser/ast/sqlitecreatetrigger.h"
+#include "parser/ast/sqlitecreateview.h"
#include "parser/ast/sqliteupdate.h"
#include "parser/ast/sqlitedelete.h"
#include "parser/ast/sqlitedropindex.h"
@@ -139,6 +141,7 @@ FormatStatement *FormatStatement::forQuery(SqliteStatement *query)
FORMATTER_FACTORY_ENTRY(query, SqliteCreateIndex, FormatCreateIndex);
FORMATTER_FACTORY_ENTRY(query, SqliteCreateTrigger, FormatCreateTrigger);
FORMATTER_FACTORY_ENTRY(query, SqliteCreateTrigger::Event, FormatCreateTriggerEvent);
+ FORMATTER_FACTORY_ENTRY(query, SqliteCreateView, FormatCreateView);
FORMATTER_FACTORY_ENTRY(query, SqliteUpdate, FormatUpdate);
FORMATTER_FACTORY_ENTRY(query, SqliteDelete, FormatDelete);
FORMATTER_FACTORY_ENTRY(query, SqliteDropIndex, FormatDropIndex);
diff --git a/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.json b/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.json
index 2e6f543..492f811 100644
--- a/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.json
+++ b/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.json
@@ -2,6 +2,6 @@
"type": "CodeFormatterPlugin",
"title": "SQL Enterprise",
"description": "Advanced SQL formatter.",
- "version": 10002,
+ "version": 10003,
"author": "SalSoft"
}
diff --git a/SQLiteStudio3/SQLiteStudio3.pro b/SQLiteStudio3/SQLiteStudio3.pro
index 66efea7..90a7dd9 100644
--- a/SQLiteStudio3/SQLiteStudio3.pro
+++ b/SQLiteStudio3/SQLiteStudio3.pro
@@ -27,20 +27,22 @@ if(contains(DEFINES,tests)) {
SUBDIRS += tests
}
+OUTPUT_DIR_NAME = output
+
win32: {
SUBDIRS += update_app
}
linux: {
- portable.commands = sh $$PWD/create_linux_portable.sh $$PWD/../output $$QMAKE_QMAKE
- tgz.commands = sh $$PWD/create_linux_portable.sh $$PWD/../output $$QMAKE_QMAKE tgz
- dist.commands = sh $$PWD/create_linux_portable.sh $$PWD/../output $$QMAKE_QMAKE dist
+ portable.commands = sh $$PWD/create_linux_portable.sh $$PWD/../$$OUTPUT_DIR_NAME $$QMAKE_QMAKE
+ tgz.commands = sh $$PWD/create_linux_portable.sh $$PWD/../$$OUTPUT_DIR_NAME $$QMAKE_QMAKE tgz
+ dist.commands = sh $$PWD/create_linux_portable.sh $$PWD/../$$OUTPUT_DIR_NAME $$QMAKE_QMAKE dist
QMAKE_EXTRA_TARGETS += portable tgz dist
}
macx: {
- bundle.commands = sh $$PWD/create_macosx_bundle.sh $$PWD/../output $$QMAKE_QMAKE
- dmg.commands = sh $$PWD/create_macosx_bundle.sh $$PWD/../output $$QMAKE_QMAKE dmg
- dist.commands = sh $$PWD/create_macosx_bundle.sh $$PWD/../output $$QMAKE_QMAKE dist
+ bundle.commands = sh $$PWD/create_macosx_bundle.sh $$PWD/../$$OUTPUT_DIR_NAME $$QMAKE_QMAKE
+ dmg.commands = sh $$PWD/create_macosx_bundle.sh $$PWD/../$$OUTPUT_DIR_NAME $$QMAKE_QMAKE dmg
+ dist.commands = sh $$PWD/create_macosx_bundle.sh $$PWD/../$$OUTPUT_DIR_NAME $$QMAKE_QMAKE dist
QMAKE_EXTRA_TARGETS += bundle dmg dist
}
diff --git a/SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp b/SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp
index 5eb96a8..b34f11e 100644
--- a/SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp
+++ b/SQLiteStudio3/Tests/ParserTest/tst_parsertest.cpp
@@ -35,6 +35,7 @@ class ParserTest : public QObject
void testInsertError();
void testExpr();
void testCommentBeginMultiline();
+ void testBetween();
void initTestCase();
void cleanupTestCase();
};
@@ -338,6 +339,13 @@ void ParserTest::testCommentBeginMultiline()
QVERIFY(tokens[0]->type == Token::COMMENT);
}
+void ParserTest::testBetween()
+{
+ QString sql = "SELECT * FROM test WHERE a BETWEEN 1 and 2";
+ bool res = parser3->parse(sql);
+ QVERIFY(res);
+}
+
void ParserTest::initTestCase()
{
initKeywords();
diff --git a/SQLiteStudio3/Tests/TestUtils/TestUtils.pro b/SQLiteStudio3/Tests/TestUtils/TestUtils.pro
index 26600e1..f448ccb 100644
--- a/SQLiteStudio3/Tests/TestUtils/TestUtils.pro
+++ b/SQLiteStudio3/Tests/TestUtils/TestUtils.pro
@@ -47,6 +47,7 @@ unix:!symbian {
}
LIBS += -lcoreSQLiteStudio -lsqlite3
+LIBS -= -lTestUtils
OTHER_FILES += \
test_common.pri
diff --git a/SQLiteStudio3/Tests/testdirs.pri b/SQLiteStudio3/Tests/testdirs.pri
index 7e35f8d..131bd4d 100644
--- a/SQLiteStudio3/Tests/testdirs.pri
+++ b/SQLiteStudio3/Tests/testdirs.pri
@@ -1,4 +1,4 @@
-LIBS += -L$$PWD/../output/SQLiteStudio
+LIBS += -L$$PWD/../$$OUTPUT_DIR_NAME/SQLiteStudio
INCLUDEPATH += $$PWD/TestUtils
DEPENDPATH += $$PWD/TestUtils
diff --git a/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt b/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt
new file mode 100644
index 0000000..7042dcc
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt
@@ -0,0 +1,936 @@
+[3.0.0]
+ * [ADDED]: Application has been rewritten from scratch in C++ and Qt (was previously written in Tcl/Tk). This means improvements in all areas, especially in application performance, good looking interface, more friendly interface and more stability.
+ * [ADDED]: Database list can now group databases in named groups (groups can be embedded in each other).
+ * [ADDED]: Changes made to database schema (modifying/adding/dropping tables, indexes, etc) are now confirmed with user by a DDL dialog (can be disabled).
+ * [ADDED]: Form View for data is now configurable and extensible (with plugins). You can configure which editors you want to make available for which data type.
+ * [ADDED]: Custom collation editor window, so you can implement custom collations using any scripting language available in SQLiteStudio
+ * [ADDED]: Changes made to database schema can now always be tracked down by a DDL history window, which keeps track of all changes you do to the database.
+ * [ADDED]: Database conversion utility now previews changes to be made to the database.
+ * [ADDED]: Drag&drop of objects between databases will preview changes that need to be made to objects before they can be created in the target database.
+ * [ADDED]: Most of the dialogs/forms is validated on-the-fly and user is notified about any problems immediately with a small red icons over the problematic field.
+ * [ADDED]: Scripting languages are now provided by plugins. With this version there is support for QtScript (built in), SQL (built in) and Tcl (as a plugin).
+ * [ADDED]: Support for sorting data by multiple columns by right-clicking on the data grid header.
+ * [ADDED]: Support for "WITHOUT ROWID" tables and "WITH" clause in queries.
+ * [ADDED]: If there are any uncommited changes (in data or schema), user will be asked for confirmation before closing application or MDI window.
+ * [ADDED]: Printing (for data, schema and query) support.
+ * [ADDED]: Much, much more, it's just hard to put every single detail in the changelog. After all, the entire application was written from the very beginning.
+ * [CHANGE]: Table is now edited in the table window directly, not in any special dialog.
+ * [CHANGE]: SQL syntax validator now underlines errors, instead of changing background color.
+ * [CHANGE]: SQL parsing is done in separate threads, making the UI smooth and responsive.
+ * [CHANGE]: Executing queries is done in separate threads, making the UI smooth and responsive.
+ * [CHANGE]: Custom SQL functions editor is now a MDI window with more powerful editing capabilities.
+ * [CHANGE]: Import and export dialogs are now a "Wizard" dialogs and they become more organized.
+ * [CHANGE]: SQLite3 version updated to 3.8.7.4.
+ * [BUGFIX]: The new version deals much better with huge databases than the old version did.
+ * [BUGFIX]: The MacOS X port doesn't crash all the time, like it was for version 2.1.x. It's just as stable as for any other operating system.
+ * [BUGFIX]: SQL syntax assistant got smarter and it deals much better with complex queries.
+ * [BUGFIX]: Enterprise SQL formatter deals better with complex queries.
+
+[2.1.5]
+ * [BUGFIX]: Fixed conversion dialog: http://bugs.sqlitestudio.pl/?id=2515
+ * [BUGFIX]: Fixed conversion dialog: http://bugs.sqlitestudio.pl/?id=2513
+
+[2.1.4]
+ * [BUGFIX]: Fixed conversion dialog: http://bugs.sqlitestudio.pl/?id=2021
+
+[2.1.3]
+ * [ADDED]: Shortcut for editing cell value in BLOB editor dialog (default is Shift-Return, but can be configured).
+ * [ADDED]: Configuration option (on Misc config tab) to define how wide (maximum) can grid column be.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1879
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1878
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1883
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1893
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1907
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1921
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1916
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=2062
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=2093
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=2095
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=2141
+ * [BUGFIX]: Fixed few exporting bugs (errors raised, no data exported, ...).
+ * [BUGFIX]: Fixed "Vacuum" in database context menu.
+
+[2.1.2]
+ * [ADDED]: When dropping a table, SQLiteStudio checks if it's used in any view and if it is, then asks user for confirmation.
+ * [CHANGE]: Database convering dialog now proposes database file basing on typed name.
+ * [CHANGE]: Database convering works in background, not blocking the UI.
+ * [CHANGE]: Main menu reorganized. Now it's also interactive according to what's to what's selected in the databases list.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1711
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1738
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1713
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1699
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1709
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1734
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1703
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1555
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1707
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1760
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1784
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1774
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1817
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1804
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1743
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1700
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1763
+ * [BUGFIX]: When editing a cell from query results and commiting changes, then all cells representing the same database cell will be updated with new value as well.
+ * [BUGFIX]: Fonts initialization optimized. SQL editor widgets should open slightly faster, especially under Windows.
+ * [BUGFIX]: Transparent attach/detach mechanism fixed to avoid multiple attaches of the same database.
+ * [BUGFIX]: Fixed column edition dialog to not hide under Windows after being open with "double click".
+ * [BUGFIX]: When renaming task the old name is typed by in the entry field, instead of "0".
+ * [BUGFIX]: Fixed saving custom toolbar order.
+
+[2.1.1]
+ * [ADDED]: Setting (on "Fonts" tab) for configuring whether you want keywords to be displayed with bold font or not.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1474
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1518
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1517
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1520
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1361
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1540
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1475
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1622
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1597
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1598
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1479
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1483
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1563
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1532
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1649
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1650
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1533
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1514
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1489
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1485
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1482
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1473
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1627
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1480
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1655
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1680
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1584
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1561
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1683
+ * [BUGFIX]: Optimized executing huge SQL directly from a file.
+ * [BUGFIX]: Other minor speed optimizations.
+
+[2.1.0]
+ * [ADDED]: Support for NULL values in form view, blob edit dialog and query parameters dialog.
+ * [ADDED]: Importing engine based on plugins. Currently SQLiteStudio can import from CSV, Clipboard (same as CSV, but from clipboard), DBF (dBase) and from any text files using Regular Expression (RegExp plugin).
+ * [ADDED]: Full Foreign Keys altering support - when modifying table, foreign keys will follow table changes.
+ * [ADDED]: Support for system tables in table window -> they can be viewed but cannot be modified (SQLite itself prevents that).
+ * [ADDED]: Completion hints can suggest columns from Views now.
+ * [ADDED]: Option in configuration to define what to do when user opens a view - show edition dialog or data from view (http://bugs.sqlitestudio.pl/?id=386).
+ * [ADDED]: Button for adding custom number of rows to table data grid at once.
+ * [ADDED]: If application is started first time, it asks for language to use before showing main window.
+ * [ADDED]: Support for "BEGIN", "COMMIT" and "ROLLBACK" statements to be executed from SQL editor.
+ * [ADDED]: Smart "home" key in SQL editor, which goes either to begining of line or to begining of actual text in the line.
+ * [ADDED]: 'Return' key opens selected element from databases tree.
+ * [ADDED]: Context menu option to edit selected cell using BLOB editor, even the cell data size is small.
+ * [ADDED]: Databases tree filter, so user can easly find any database (in long list) or any table/index/trigger/view in any open database by entering any piece of its name.
+ * [ADDED]: Form view of data has now resizable fields (but only for TEXT, BLOB and similar datatypes), so you can see more data at once instead of scrolling a lot.
+ * [ADDED]: Grid row (table data grid or query results grid) can select whole row at once by clicking on ROWNUM column or by Control-click on any cell. (http://bugs.sqlitestudio.pl/?id=208)
+ * [ADDED]: An entry in "View" menu to restore last closed window (and one before that and so on), also a configurable keyboard shortcut and entry in taskbar context menu to do the same.
+ * [ADDED]: Database list tooltips for databases, so you can quickly view what's the path to database file, what's its size, etc.
+ * [ADDED]: Tooltips for tables and views to get quick informations about the object.
+ * [ADDED]: Tooltips for taskbar to display full button title (even long one), database associated with the window and table (in case of table window).
+ * [ADDED]: SQL editor - matching parenthesis pairs highlighting when insertion cursor positioned at the one from the pair.
+ * [ADDED]: Context menu entry to reset AUTOINCREMENT sequence for selected table.
+ * [ADDED]: Option to make indexes linked to (under) tables in databases tree. This is enabled by default and can be disabled in configuration dialog.
+ * [ADDED]: Option to show columns linked to (under) tables in databases tree.
+ * [ADDED]: Portable mode for configuration. If there's a "sqlitestudio-cfg" directory next to the SQLiteStudio binary, then it is used to read and store configuration.
+ * [ADDED]: Option to display ROWIDs in table data as default (after each table window is open).
+ * [ADDED]: Defining order of databases in the list by Drag&Drop of databases.
+ * [ADDED]: Drag&Drop of databases and objects between databases. Now you can copy/move tables (also indexes, triggers and views) between databases simply by D&D. It's possible even between SQLite3 and SQLite2 databases!
+ * [ADDED]: When modifying a table, all views that reference the table are adjusted to the new form of table (new name, column changes, etc), just like indexes and triggers were adjusted so far.
+ * [ADDED]: Help hint about parameters to SQL function in Custom SQL Functions dialog.
+ * [ADDED]: Support for multiple value sets in INSERT statements (introduced in SQLite 3.7.11).
+ * [ADDED]: When editing the table cell, all the contents of that cell are selected by default. This can be disabled in configuration dialog.
+ * [ADDED]: Context menu command to generate SELECT statement for selected cells (in both data grid and results grid).
+ * [ADDED]: Now it's possible to export data from view, just like from a table.
+ * [ADDED]: Positional parameters (@, ?, $, :, ...) are now remebered and recalled when used again in same or similar query (with same parameters).
+ * [ADDED]: Positional parameters dialog has button to copy the value to other parameters in the dialog that are named exactly the same. The button is displayed only if there are more than one parameter with a certain name.
+ * [ADDED]: Context menu for table to erase all data from table (after confirmation).
+ * [ADDED]: Bug report dialog can now use an account from http://bugs.sqlitestudio.pl to report bugs.
+ * [ADDED]: Two new data populating plugins: SQL and Tcl.
+ * [ADDED]: New exporting plugins: DBF (dBase), PDF, JSON, Clipboard, XLS (MS Excel).
+ * [ADDED]: The "ON CONFLICT" algorithm exposed to user when using Populating Dialog. Now any duplicates, can be ignored (http://bugs.sqlitestudio.pl/?id=576).
+ * [CHANGE]: Table window opening speed up. Loading related triggers and indexes postponed to moment of displaying proper tab.
+ * [CHANGE]: Displaying and editing huge data volumes (both in table window and SQL editor) is now supported much better and faster.
+ * [CHANGE]: Memory usage for exporting minimized. Now it's possible to export any amount of data at once.
+ * [CHANGE]: Enabled exporting for cross-database queries.
+ * [CHANGE]: Interrupting query execution now actually works! You can cancel query at any moment.
+ * [CHANGE]: Dropped "PRAGMA full_column_names" usage, as it is deprecated SQLite3 interface.
+ * [CHANGE]: Editing query results now supports editing results from cross-database queries! The only condition is that columns are selected directly, without expression modifiers, such as math operations, etc.
+ * [CHANGE]: Introduced support for custom number of table constraints (not column constraints), so for example two or more primary keys defined as separated table constraints is now possible from table dialog. (http://bugs.sqlitestudio.pl/?id=200)
+ * [CHANGE]: Trigger DDL support enhanced. Now it supports "UPDATE OF <columns>" statements.
+ * [CHANGE]: Supported languages are now displayed in human readable form, by names, not by strange locale symbols.
+ * [CHANGE]: Session management improoved. It's easier to write session-aware classes now.
+ * [CHANGE]: Using thread pools instead of individual threads wherever it's possible. This made SQL editor windows to open a little quicker and to work more smoothly.
+ * [CHANGE]: SQL Editor completion hints display "busy" animated icon if parsing some huge SQL takes a little longer.
+ * [CHANGE]: Platform detecting code unified.
+ * [CHANGE]: Parser and lexer classes enclosed in UniversalParser and UniversalLexer, preventing many potential memory leaks.
+ * [CHANGE]: Switched from BEGIN to SAVEPOINT in most cases (only in SQLite3, in SQLite2 BEGIN usage remains).
+ * [CHANGE]: Table grid view menu context reorganized to be more readable.
+ * [CHANGE]: Changed icons for "Export table" and "Export database" to fit general schema of icons.
+ * [CHANGE]: Enhanced layout of context hints for tables (table data and results data).
+ * [CHANGE]: Auto-update checks directory permissions, so it allows automatic update only if privileges are sufficient.
+ * [CHANGE]: Session saving now stores the full image of what objects were expanded or collapsed, so it gets fully restored.
+ * [CHANGE]: Added shadows for hints under Windows.
+ * [CHANGE]: Simplified bug reporting dialog.
+ * [REMOVED]: Solaris binaries. Nobody seems to use them. Users still can run SQLiteStudio from sources with some Tcl distribution.
+ * [BUGFIX]: Again improved performance for huge table data and huge query results.
+ * [BUGFIX]: Column context information in table window fixed to display constraints correctly.
+ * [BUGFIX]: Fixed virtual table exporting (http://bugs.sqlitestudio.pl/?id=201).
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1199
+
+[2.0.28]
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1086
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1091
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1128
+ * [BUGFIX]: Fixed "maximized" window state, so it's correctly restored on Unixes.
+ * [BUGFIX]: Fixed font picker dialog to use proper theming engine.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1110
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1115
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=977
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1198
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1144
+
+[2.0.27]
+ * [ADDED]: http://bugs.sqlitestudio.pl/?id=967
+ * [ADDED]: http://bugs.sqlitestudio.pl/?id=934
+ * [BUGFIX]: Fix for white icons on disabled toolbar buttons on MacOSX.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=815
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=818
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=828
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=829
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=844
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=852
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=913
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=973
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=947
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=983
+ * [BUGFIX]: Fixed error when completion hint was invoked for alias name that is also a proper table name.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=984
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1029
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=607
+ * [BUGFIX]: Fixed invalid focus when clicked on "data" tab. In result the user was unable to use keyboard shortcut to switch between subtabs.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=959
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=921
+ * [BUGFIX]: Added debug details for http://bugs.sqlitestudio.pl/?id=921
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1000
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1071
+ * [BUGFIX]: Fixed http://forum.sqlitestudio.pl/viewtopic.php?f=11&t=93
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=834
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=949
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=971
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=981
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=1083
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=965
+
+[2.0.26]
+ * [BUGFIX]: SQL editor in Trigger Dialog uses now configured keyboard shortcut for SQL formatting, instead of hardcoded ctrl-f.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=768
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=759 (thanks to Kevin Walzer)
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=771
+ * [BUGFIX]: Fixed context menu on MacOSX, so it's now invoked by right-click, not the middle-click.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=784
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=798
+
+[2.0.25]
+ * [ADDED]: "Donate" in "Help" menu. Voluntary donations help maintain the hosting server and keep me motivated.
+ * [BUGFIX]: Fixed sorting of completion hint for "INSERT INTO table (". Now columns from "table" are first.
+ * [BUGFIX]: Tooltips fixed to display in intelligent spot, so it won't go out of screen edge.
+ * [BUGFIX]: Fixed formatting of "x BETWEEN y AND z" so there's a whitespace after "AND".
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=715
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=721
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=722
+ * [BUGFIX]: Binary distribution for Mac OS X is now deployed with a little different menthod which should result in less critical crashes. Also resolved problem with starting on some OSX machines. Big thanks to Michal Janiak for helping with this!
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=725
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=728
+ * [BUGFIX]: Fixed parsing and formatting of CREATE TRIGGER with "CASE ... END" in it.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=747
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=755
+
+[2.0.24]
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=702
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=707
+
+[2.0.23]
+ * [CHANGE]: SQLite updated to 3.0.9 in binary distributions. Also a binary for Mac OS X got recompiled with SQLITE_ENABLE_LOCKING_STYLE, so it works with network file systems well.
+ * [BUGFIX]: Fixed error checking, that was not running when used "Enter" or "Backspace" or at application startup.
+ * [BUGFIX]: Fixed Enterprise Formatter to put whitespace after "BETWEEN" keyword.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=587
+ * [BUGFIX]: Fixed AUTOINCREMENT column constraint in Enterprise Formatter (it missed the keyword while formatting).
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=664
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=666
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=583
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=614
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=685
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=676
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=673
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=601
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=680
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=701
+
+[2.0.22]
+ * [NEW]: Implemented http://bugs.sqlitestudio.pl/?id=490
+ * [BUGFIX]: Completion hint (in SQL Editor) will not disappear if users hits "completion key shortcut" again accidentally.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=479
+ * [BUGFIX]: Fixed very slow execution SQL custom functions implemented in Tcl. Discussion: http://forum.sqlitestudio.pl/viewtopic.php?f=11&t=31
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=474
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=486
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=243
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=498
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=499
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=501
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=519
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=522
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=566
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=526
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=508
+ * [BUGFIX]: E-mail field in Bug Report dialog is now validated, so only valid or empty value is accepted.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=573
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=523
+
+[2.0.21]
+ * [ADDED]: Bug report dialog have new field "e-mail". It is optional and it's only for SQLiteStudio developer to contact reporter about some details of error report. It will never be shared to anyone or used for any other purpose. It won't be published anywhere.
+ * [BUGFIX]: Fixed enterprise SQL formatter to not wrap "ALL" in "UNION ALL" with "[]".
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=454
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=461
+ * [BUGFIX]: Export dialog and database dialog handles manually typed file names (not picked with file dialog) correctly.
+ * [BUGFIX]: Export dialog title changed to 'Output file' to avoid any misunderstands.
+
+[2.0.20]
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=447
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=452
+
+[2.0.19]
+ * [BUGFIX]: Fixed help tip text in CSV export plugin configuration.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=432
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=430
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=434
+
+[2.0.18]
+ * [CHANGE]: In table and column dialogs the insertion cursor in name field is initially placed at the end of value.
+ * [CHANGE]: Added more debug information regarding http://bugs.sqlitestudio.pl/?id=411
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=408
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=416
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=419
+
+[2.0.17]
+ * [BUGFIX]: Fixed completion hints for vies, triggers and indexes in case of "DROP" statement.
+ * [BUGFIX]: Enabled encoding configuration for SQL export format for entire database.
+ * [BUGFIX]: Fixed some problems with switching MDI windows (especially when used Control+click on table name in SQL editor).
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=403
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=402
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=405
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=406
+
+[2.0.16]
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=391
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=397
+ * [BUGFIX]: Fixed copying DDL code from DDL tab in various dialog windows.
+ * [BUGFIX]: Fixed button names in trigger, index and view dialogs in case of editing existing object.
+
+[2.0.15]
+ * [BUGFIX]: Fixed file() SQL function to handle binary files.
+ * [BUGFIX]: Fixed "identity encoding" issue while exporting data.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=385
+ * [BUGFIX]: Fixed parser support for primary key table constraint with single column in it.
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=389
+
+[2.0.14]
+ * [CHANGE]: Updated to SQLite 3.7.8 (http://bugs.sqlitestudio.pl/?id=247)
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=241
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=242
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=268
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=285
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=256
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=266
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=250
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=240
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=245
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=248
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=251
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=253
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=269
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=271
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=323
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=363
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=302
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=304
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=365
+ * [BUGFIX]: Fixed completion hint not working when used with alias for table name typed with different case.
+ * [BUGFIX]: Fixed deleting any object from database (in database objects tree) with Delete key. It always tried to delete database, instead of selected object.
+
+[2.0.13]
+ * [NEW]: Introduced Chinese translation, thanks to Yu Longzhen! It's not yet complete, but already more than a half is done.
+ * [NEW]: Home page added to help menu, also manual link updated (http://bugs.sqlitestudio.pl/?id=193)
+ * [NEW]: Added Google Chrome to list of predefined browsers under unix systems.
+ * [CHANGE]: Datatypes in column edition dialog are now autocompleted while typing, so it's enough to type "t" to get "TEXT" type.
+ * [CHANGE]: Datatype list in column edition can now be fast navigated using keys, so if you drop down the list, you can press "i" to select "INT" type fast. (http://bugs.sqlitestudio.pl/?id=190)
+ * [BUGFIX]: Fixed bug related to "_toCommit".
+ * [BUGFIX]: Fixed bug, when user was able to edit deleted but uncommited row (even the edition was ignored).
+ * [BUGFIX]: Fixed insertion of numeric values in data view - they're now treated as numeric if column type says so (they used to be treated as string and CHECK constraint was not satisfied very often).
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=168
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=172
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=173
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=175
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=176
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=177
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=178
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=179
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=182
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=184
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=185
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=188
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=189
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=191
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=193
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=194
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=195
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=196
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=197
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=198
+ * [BUGFIX]: Fixed http://bugs.sqlitestudio.pl/?id=203
+ * [BUGFIX]: Fixed several issues related to inserting new rows from Form View of table data.
+ * [BUGFIX]: Fixed issue related to table and column names with strange characters in name.
+ * [BUGFIX]: Enterprise SQL formatter indents sub-selected datasources better.
+ * [BUGFIX]: Some other, minor bugs fixed.
+
+[2.0.12]
+ * [BUGFIX]: Fixed error for SQLite2 DDL that uses "REFERENCES" keyword, even it's unsupported by SQLite2.
+ * [BUGFIX]: Binary compatibility for MacOS X restored from 2.0.9.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4632
+
+[2.0.11]
+ * [BUGFIX]: Removed SQL debug messages enabled in 2.0.10, causing "stdout" related error under Windows.
+
+[2.0.10]
+ * [CHANGE]: If query could not be executed by Smart Query Executor, then simple executor adds its signature to eventual error message in status.
+ * [CHANGE]: Added <Delete> key shortcut to delete selected database from list.
+ * [CHANGE]: Various MacOS X appearance improovements.
+ * [BUGFIX]: Significat configuration saving speedup.
+ * [BUGFIX]: Fixed nasty bug related to character encoding for SQLite2 under Windows: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3860
+ * [BUGFIX]: Column Drag&Drop in table dialog works again.
+ * [BUGFIX]: TreeCtrl extension updated to 2.3.1, which fixes 2 major bugs in data grid header.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4495
+ * [BUGFIX]: 'removeComments' routine fixed (by maovrn).
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4500
+ * [BUGFIX]: Fixed minor SQL formatting error for SQlite 2.
+ * [BUGFIX]: Message about "ATTACH DATABASE" limit exceed is now wrapped in nice readable message dialog.
+ * [BUGFIX]: Fixed "unknown execution error" in case of problem with transparent attaching database.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4579
+ * [BUGFIX]: Removed "-force" from all [focus] calls.
+ * [BUGFIX]: Added additional debug routines for some bugs. Hope to fix them with next release.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4553
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4586
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4550
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4510 (UNION SELECTs forbids to edit results data, for now).
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4583
+ * [BUGFIX]: Fixed grid to form synchronization when adding new row in grid.
+
+[2.0.9]
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4484
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4485
+ * [BUGFIX]: Entering edition mode in grid works now for international characters too.
+ * [BUGFIX]: Added all missing encoding systems to binary distributions.
+
+[2.0.8]
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4476
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4465 (unknown option "0")
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4473
+ * [BUGFIX]: If updating process doesn't have right to write to disk, then human readable message is displayed.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4479
+
+[2.0.7]
+ * [BUGFIX]: Fixed nasty bug with "-notnull1": http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4455
+ * [BUGFIX]: Fixed another nasty bug with "-tableAlias": http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4456
+ * [BUGFIX]: Added more debug information for bug "row(sql)": http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4458
+
+[2.0.6]
+ * [ADDED]: Context menu (with copy/cut/paste) in text fields.
+ * [CHANGE]: Removed "autoCommit". Now all changes have to be commited.
+ * [CHANGE]: Database add/edit dialog modified for Mac OS X. Now it uses two dialogs to pick file - native OSX dialogs!
+ * [BUGFIX]: Commit/Rollback buttons activates when editing starts by typing value.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3972
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3974
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3973
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3977
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3979
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=2&t=4020
+ * [BUGFIX]: Fixed error for SQLite2 with "unknown command total_cahnges".
+ * [BUGFIX]: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4184
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4163
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4160
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4159
+ * [BUGFIX]: Fixed support for "CREATE TRIGGER" defined on "database.table".
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4261
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4155
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4161
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3980
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4009
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4042
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4068
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4023
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3987
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4388
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4059
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4284
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4339
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4372
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3990
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4078
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4238
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=2&t=4019
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4016
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4086
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4273
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3966
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4407
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4070
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=2&t=4106
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4243
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3874
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=2&t=4139
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4166
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4223
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4280
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4357
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4245
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4298
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4067
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4124
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4083
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4152
+ * [BUGFIX]: Fixed SQL syntax error marking in SQLEditor under Windows.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=4429
+
+[2.0.5]
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3943
+ * [BUGFIX]: Plain text export fixed.
+ * [BUGFIX]: Fixed crash when exporting database with virtual table.
+ * [BUGFIX]: Foreign keys enforcing is now enabled by default and can be disabled by proper PRAGMA call.
+ * [BUGFIX]: Fixed counting "affected rows".
+
+[2.0.4]
+ * [CHANGE]: Trigger dialog is now resizable.
+ * [CHANGE]: Enterprise formatter enforced to be selected for this one time. It still can be changed in configuration. Many people don't even realize there's such formatter.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3831
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3832
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3847
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3837
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3836
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3838
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3850
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3882
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3894
+ * [BUGFIX]: Fixed opening database passed in command line.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3863
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3890
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3875
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3872
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3891
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3873
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3927
+ * [BUGFIX]: Fixed recreating of indexes and triggers while table structure is modified.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3899
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3901
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3937
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3893
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3929
+
+[2.0.3]
+ * [CHANGE]: Enabled additional keys to enter edit mode in data grid.
+ * [CHANGE]: Added transactions tracing for better transaction-related problems debugging in bug reports.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3668
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3768
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3767
+ * [BUGFIX]: Various form view key binding fixes.
+ * [BUGFIX]: Trying to edit system index caused critical error.
+ * [BUGFIX]: Added upper-case file name extensions for database file selector.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3772
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3774
+ * [BUGFIX]: Undo mechanism fixed for SQL code formatting - doesn't need to call Ctrl+z twice anymore.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3785
+ * [BUGFIX]: Again improved performance for huge table data and huge query results.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=9&t=3780
+ * [BUGFIX]: Fixed index dialog for SQLite 2.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=3&t=3798
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3810
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3817
+ * [BUGFIX]: Fixed EXPLAIN results displaying.
+ * [BUGFIX]: Fixed MDI windows closing in custom order.
+
+[2.0.2]
+ * [ADDED]: Character encoding for exporting data can be selected now.
+ * [CHANGE]: SQLiteStudio version included in bug reports and feature request reports.
+ * [CHANGE]: Various MacOSX user interface improvements.
+ * [CHANGE]: Various liftings of user interface.
+ * [CHANGE]: Index dialog has now database in a list separated from table list.
+ * [CHANGE]: Trigger dialog supports "FOR EACH ROW" and "FOR EACH STATEMENT" (the second one for SQLite 2 only).
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3716
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3718
+ * [BUGFIX]: Fixed indentation for 2 or more column constraints for CREATE TABLE in Enterprise formatter.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3724
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3687
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3723
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3726
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3730
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3729
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3734
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3731
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=3&t=3733
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3744
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3722
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3751
+
+[2.0.1]
+ * [ADDED]: Support to vacuum databases with custom collation sequences.
+ * [ADDED]: Databases list sorting in databases context menu.
+ * [CHANGE]: Bug reporting dialog includes OS version in its report.
+ * [CHANGE]: "SQLiteStudio" menu renamed to "Help".
+ * [CHANGE]: Database adding/editing dialog reorganization. The "file" field is now the most important. Name (alias) is auto-generated, or manually entered (as an option).
+ * [BUGFIX]: Fixed updates-checking and auto-update functions. They didn't work in 2.0.0.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3651
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3654
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3668
+ * [BUGFIX]: Bug reporting dialog allows using Return key in its fields, instead of sending unfinished report immediately.
+ * [BUGFIX]: SQL code in View Dialog is now stored in SQLite as it's written and displayed just like read from SQLite - no formatting changes are applied.
+ * [BUGFIX]: Fixed wrong results from queries with custom collation sequences.
+ * [BUGFIX]: Performance improved significantly for huge table data and huge query results.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3656
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3660
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3676
+ * [BUGFIX]: Fixed switching between pages of query results.
+ * [BUGFIX]: Fixed opening tables from SQL editor links (control+click) with different case size.
+ * [BUGFIX]: Fixed error with "_colItem(query)" reported on comp.lang.tcl group.
+ * [BUGFIX]: Fixed problem with inserting first row to empty table using Form View.
+ * [BUGFIX]: The progressbar dialog won't stay any longer after critical error occured, so user was unable to report the bug.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3659
+ * [BUGFIX]: Fixed viewing data from View in SQlite 2.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3662
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3679
+ * [BUGFIX]: Initial size of application window on Mac OS X is now reasonable.
+ * [BUGFIX]: Fixed support for loadable SQLite extensions. Now you can load them with load_extension() in query and use extension as you would expect it.
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3701
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3706
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3708
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3695
+ * [BUGFIX]: Fixed: http://forum.sqlitestudio.pl/viewtopic.php?f=4&t=3712
+
+[2.0.0]
+ * [ADDED]: Updates checking on startup.
+ * [ADDED]: Real SQL parser based on lexer&parser pair! It provides many, many possibilities. Few of them are already implemented and listed in changelog below.
+ * [ADDED]: (SQL parser stuff) SQL syntax validation on the fly with error markers.
+ * [ADDED]: (SQL parser stuff) Enterprise SQL code formatter. It's very powerful and configurable, but works only on valid code, so if the SQL is marked to be incorrect (see paragraph above) then formatter won't format such SQL.
+ * [ADDED]: Table columns can be edited directly from table window by double-clicking on them.
+ * [ADDED]: Columns order in TableDialog can be now be managed by drag&drop.
+ * [ADDED]: Possibility to display ROWID in table data view. Just right-click and pick it from context menu.
+ * [ADDED]: Internal stuff: [final] procedure, so important internal variables are secured.
+ * [ADDED]: Internal stuff: Introduced threads. GUI acts more shmoothly.
+ * [ADDED]: Possibility to add database only for current session (it won't be on the list after application restart).
+ * [ADDED]: Window/task can be renamed now from taskbar context menu.
+ * [ADDED]: Tasks order in taskbar at the bottom can now be managed using drag&drop.
+ * [ADDED]: Progress bar for export dialog, populate dalog and table dialog (good to keep track on tasks done on tables with lots of data) with possibility to interrupt the process.
+ * [ADDED]: Long query executions can be interrupted.
+ * [ADDED]: Pending commits (with autocommit as option in configuration). User can modify some data (add, edit or delete rows) and commit them all togather at the end.
+ * [ADDED]: Filter entry in form view of table data tab.
+ * [ADDED]: Added "(filtered)" information next to "Total rows" in case of filtered table data view.
+ * [ADDED]: Edit trigger and edit index buttons added in table triggers and indexes tabs.
+ * [ADDED]: "Execute SQL from file" button in SQL editor window.
+ * [ADDED]: Context menu for SQL editor window.
+ * [ADDED]: SQL functions available while managing databases in SQLiteStudio: md5(), base64_encode(), base64_decode(), file(), sha1(), hmac().
+ * [ADDED]: "Create similar table" option.
+ * [ADDED]: Quick opening of tables typed in SQL editor. Press Control key and click on table name to open it.
+ * [ADDED]: Database integrity checking pragma added to database context menu.
+ * [ADDED]: Full informations about installed plugins and used Tcl packages available in About dialog.
+ * [ADDED]: Option to open items from database tree by single-click.
+ * [ADDED]: While creating an unique index: if there are duplicates in table, then SQLiteStudio proposes to create SQL to select all duplicated rows.
+ * [ADDED]: Button in SQL editor to create a view from query typed in the editor.
+ * [ADDED]: Support for parameters (?, ?NNN, :VVV, @VVV, $VVV) in queries typed in SQL editor.
+ * [ADDED]: Option to place SQL editor results below the query, not in separated tab.
+ * [ADDED]: When holding mouse over data grid or results grid, the hint pops up with some context information about cell under mouse cursor.
+ * [ADDED]: DDL tab in all Table/Index/Trigger/View dialog windows to see objects DDL before it's actualy created.
+ * [ADDED]: New versions checking at startup or on demand and auto-upadte support for binary distributions.
+ * [ADDED]: MacOS X port.
+ * [ADDED]: Binaries for linux (ix86_64), freebsd (ix86_64) and macosx (ix86_64) platforms.
+ * [CHANGE]: Exporting was rewritten from scratch. It was the ugliest code in whole application. Now it's based on plugins, so it's much easier to add new exporting engines.
+ * [CHANGE]: (SQL parser stuff) Smart completion hints - now SQLiteStudio knows better if next argument should be a keyword, or a table name, or index, name, etc. Moreover - object names (tables, indexes, etc) already used somewhere in the SQL query appear higher in completion hint, since user seems to be interested in them. It really kicks ass! Try it out!
+ * [CHANGE]: Internal stuff: 'Array' class has been completly replaced by Tcl Dicts from Tcl 8.5.
+ * [CHANGE]: Small unification in layout of database edit dialog and convert database dialog.
+ * [CHANGE]: Configuration settings saving enclosed in transaction - major speed improvement of this action.
+ * [CHANGE]: Bug reporting engine completly rewritten. Know it is very simple to report a bug.
+ * [CHANGE]: Numerous scrollbars are now shown/hidden dynamically when needed.
+ * [CHANGE]: Query execution status field shows icon (info, warning, error) for all messages to identify type of message easier.
+ * [CHANGE]: Results as plain text moved to separated tab.
+ * [CHANGE]: Context menu in databases list reorganized.
+ * [CHANGE]: Refreshing database schema doesn't collapse its branches.
+ * [CHANGE]: Executing queries in SQL editor refreshes schema in databases tree, so all new, changed or deleted objects are noticed immediately.
+ * [CHANGE]: Balloon hints appears now faster and allows to browse help hints for many widgets placed close to each other very quickly.
+ * [CHANGE]: New icons.
+ * [CHANGE]: Table window now displays all constraints in "Columns" tab as icons. Therefore "constraints" tab has been removed from table window.
+ * [CHANGE]: More intuitive inserting data in form view.
+ * [CHANGE]: Plain text results are now configurable (NULL representation, column width).
+ * [CHANGE]: Pressing key Right/Left while editing cell and being on the begin/end of the edited value moves keyboard focus to cell on the left/right side.
+ * [BUGFIX]: Fixed highlighting of comment which starts in the middle of contents with '/*' and never ends.
+ * [BUGFIX]: Closing configuration window in other way than "cancel" or "ok" makes it close as for "cancel".
+ * [BUGFIX]: (SQL parser stuff) Detecting symbolic database names (databases from objects tree) in SQL editor has been fixed, so table name same as database name won't be a problem anymore.
+ * [BUGFIX]: (SQL parser stuff) All dialog windows for editing SQLite objets (tables, indexes, ...) use now built-in SQL parser, so they read all object definitions correctly.
+ * [BUGFIX]: Triggers created for table are recreated after table is edited.
+ * [BUGFIX]: File choosing dialog fixes under Unix (filters updating and <escape> key binding).
+ * [BUGFIX]: Database adding/editing dialog under Windows unified to Unix version, so now there's only one button for file picking. No more confusion here.
+ * [BUGFIX]: Many, many, many other bug fixes not listed here, because I didn't write them down during fixing.
+ * [BUGFIX]: Scrolling grids horizontally is now smooth.
+ * [BUGFIX]: Added *(*autoindex*)* indexes of SQLite2 to list of system indexes, so they can be filtered out.
+ * [BUGFIX]: Many, many other minor and major bugfixes not mentioned here.
+
+[1.1.3]
+ * [ADDED]: Port to FreeBSD!
+ * [ADDED]: Support for lang/ subdirectory in starting directory, so testing new translations is now very simple.
+ * [ADDED]: Ctrl+c shortcut now works for databases tree - you can copy label of any element from the tree.
+ * [ADDED]: New translation: Espanol (Spanish).
+ * [ADDED]: New translation: German.
+ * [CHANGE]: Internal change: [foreach] replaced with [lassign] to adjust code to Tcl 8.5.
+ * [CHANGE]: Export dialog suggests same directory for output file as exported database is in.
+ * [CHANGE]: Tcl/Tk updated to 8.5.7, SQLite3 updated to 3.6.16, TreeCtrl updated to 2.2.9 - for binary packages.
+ * [BUGFIX]: Fixed dialogs: About, ChangeLog and Roadmap.
+ * [BUGFIX]: Minor fixes in messages and translations.
+ * [BUGFIX]: Toolbar doesn't display undefined (empty) tooltips anymore.
+ * [BUGFIX]: Fixed support of some constraints. Caused numerous problems.
+ * [BUGFIX]: Indexes for incorrect/not existing columns are now handled properly when user opens index edit dialog.
+ * [BUGFIX]: Fixed issue with Ctrl+c (and similar) shortcuts on Windows while having enabled CapsLock.
+ * [BUGFIX]: Blob edit widget fixed for Form View to display current row value correctly.
+ * [BUGFIX]: Duplicated themes fixed.
+ * [BUGFIX]: Fixed error while trying to enter new value of cell in grid while there was no cell selected.
+
+[1.1.2]
+ * [ADDED]: SQLite3 engine version used by application in the About dialog.
+ * [CHANGE]: MDI windows remembers their position and dimensions in session.
+ * [CHANGE]: Renamed "Open editor" to "Open SQL editor" in configuration "Shortcuts" tab.
+ * [CHANGE]: SQLite system tables (if enabled to display) are now marked so user can recognize them easly.
+ * [BUGFIX]: Copying&pasting cells with NULLs handled properly.
+ * [BUGFIX]: Columns with strange names are now handled correctly.
+ * [BUGFIX]: Fixed editing table data using form view for SQLite 2.
+ * [BUGFIX]: Populating dialog won't allow to enter negative number of rows to insert.
+ * [BUGFIX]: Critical error occuring when clicking fast in Unix file choosing dialog.
+ * [BUGFIX]: Font choosing dialog doesn't crash anymore if invoked twice without closing first one.
+ * [BUGFIX]: Exporting results to some formats was crashing every time. Not anymore.
+ * [BUGFIX]: Resizing windows without proper cursor fixed.
+ * [BUGFIX]: Fixed changing index table.
+ * [BUGFIX]: Fixed support in table edit dialog for column names with dots and commas.
+ * [BUGFIX]: Fixed renaming tables in SQLite2 database.
+ * [BUGFIX]: Better handling of advanced tables DDL.
+ * [BUGFIX]: Rolling back transactions won't cause problems anymore.
+ * [BUGFIX]: Fixed current directory of binary distribution.
+ * [BUGFIX]: Several fixes of drawing for dark themes of operating system interface.
+ * [BUGFIX]: Fixed many problems with Foreign Keys.
+ * [BUGFIX]: SrolledFrame widget fixed for uncommon localizations.
+ * [BUGFIX]: Exporting database to HTML format fixed.
+ * [BUGFIX]: Fixed error occuring sometimes while trying to commit edited value.
+ * [BUGFIX]: Tab-key order in Form View fixed.
+ * [BUGFIX]: Allow to open read-only database files.
+ * [BUGFIX]: Form View shortcuts, additional toolbar buttons.
+ * [BUGFIX]: Result grid editing for table name with whitespace fixed.
+ * [BUGFIX]: Fixed control-a shortcut for some edit fields.
+ * [BUGFIX]: Keyboard/mouse input focus grabbing for some of modal dialogs fixed.
+ * [BUGFIX]: Handling of uncommited grid editions while closing MDI window.
+ * [BUGFIX]: Handling of NOT NULL constraint used and no DEFAULT specified in table column editing dialog in case when table already contains some data filled in.
+ * [BUGFIX]: Small grammar fixes in tips dialog.
+ * [BUGFIX]: Font handling rewritten. Should not cause problems anymore, but if it does, then fixing will be now much easier.
+ * [BUGFIX]: Fixed 100% CPU usage for sequence: open 2 table windows, edit data cell in one window, then focus the other one window without commiting edition before.
+ * [BUGFIX]: Fixed MDI window placement, so they won't appear at exactly same position while creating anymore.
+ * [BUGFIX]: Added DATETIME data type support.
+ * [BUGFIX]: DEFAULT values handled properly. Now you can use functions and other expressions, as well as literal values.
+ * [BUGFIX]: Fixed chosing other database in 'new table' dialog.
+ * [BUGFIX]: Fixed crashing when changing configuration while image-type cell in grid is selected.
+ * [BUGFIX]: Prevention against duplicated column names in table edition dialog.
+ * [BUGFIX]: New trigger dialog doesn't allow to use 'INSTEAD OF' for table triggers.
+ * [BUGFIX]: Fixed FK window visibility under Windows.
+ * [BUGFIX]: Grid navigation to right/left scrolls a view.
+
+[1.1.1]
+ * [CHANGE]: "Export table data" button moved from table structure toolbar to table data toolbar.
+ * [CHANGE]: Results in plain text are now formatted so they're more readable.
+ * [CHANGE]: Nasty behaviour when trying to edit data cell and commit invalid value (like alpha-characters in INTEGER-PK column) has been modified so application asks user what would he like to do.
+ * [BUGFIX]: Windows default font size for few text fields (i.e. "did you know that..." dialog) has been increased, so it's readable now.
+ * [BUGFIX]: Taskbar button "more" is now hidden correctly (its frame was visible even when it supposed to be hidden).
+ * [BUGFIX]: Formatter plugin is now set up correctly after closing configuration window.
+ * [BUGFIX]: Custom SQL function results handled better when they're null.
+ * [BUGFIX]: Fixed support for using symbolic database names in SQL editor (it was causing problems sometimes).
+ * [BUGFIX]: Fixed switching tasks back to previously active one when executed "Show view data" in some cases.
+ * [BUGFIX]: Fixed bug when reading triggers with unusual names.
+ * [BUGFIX]: Index dialog uses Grid widget to display columns proposition. Now there's no problem with adjusting header and widgets.
+
+[1.1.0]
+ * [ADDED]: Full support for SQLite 2 databases! Binary distribution includes SQLite 2.8.17.
+ * [ADDED]: Solaris port.
+ * [ADDED]: Selecting multiple cells/rows/columns in data grids is now possible. It enables user to delete multiple rows at once.
+ * [ADDED]: Advanced copy-paste routines: copying multiple rows/columns results in clipboard format applicable for pasting into many famous spreadsheets. It's also easy to read when pasted into regular text file. It also can be pasted into other SQLiteStudio grid. User also can copy from spreadsheet and paste into SQLiteStudio grid!
+ * [ADDED]: Custom SQL functions can be defined by user, so they're registered in all opened databases.
+ * [ADDED]: Support for usage many databases in single SQL query using symbolic names of databases that are displayed in the databases tree.
+ * [ADDED]: Support for editing cell values in Results grid, including pasting to it! Even for combined SELECT with JOINs!
+ * [ADDED]: Table data filtering. Just type the word you're looking for in filter entry.
+ * [ADDED]: sqlite_* objects can be displayed in databases tree as an option (in configuration dialog).
+ * [ADDED]: Find&Replace dialog for SQL editor widget.
+ * [ADDED]: Populating tables. It's first feature in SQLiteStudio that is based on plugins. Plugins will be described in documentation.
+ * [ADDED]: Keramik and Plastik image-based themes (multi-platform).
+ * [ADDED]: Database name in DB tree is now labeled with identification of database handler, so you'll know if the database is SQLite 2 or SQLite 3.
+ * [ADDED]: String class highlighting for SQL editor.
+ * [ADDED]: Execution of SQL directly from file. Available from database context menu or SQL function sqlfile().
+ * [ADDED]: Importing schema (not data!) from one database to another. To copy schema and data use "copy file" feature in your operating system.
+ * [ADDED]: Configuration of "hint baloon" is now possible (colors, font).
+ * [ADDED]: Added sorting of data in table window by custom columns.
+ * [ADDED]: Handler of common database errors (such as 'database is locked') to display such errors in dialog window that is less scary than default critical error dialog.
+ * [ADDED]: Command line parameters. Database file can be passed as parameter to application so it will be managed with SQLiteStudio.
+ * [ADDED]: Duplicating table data row feature.
+ * [ADDED]: Navigation buttons for Form View of table data, so user can walk through all rows in grid without switching to grid.
+ * [ADDED]: Option to open Data tab in table window when that window was just opened, instead of Structure tab.
+ * [ADDED]: GTK and QT themes in linux binary distribution.
+ * [ADDED]: Results of query execution as plain text.
+ * [CHANGE]: Moved to Tcl/Tk 8.5.
+ * [CHANGE]: SQLite3 updated to newest - 3.6.7.
+ * [CHANGE]: Foreign Key support upgraded to join it with table editor dialog. Any foreign key-related changes in table editor will also affect FK triggers. Separate creating FK is no more needed, just set it in table definition. It means SQLiteStudio emulates Foreign Keys transparently!
+ * [CHANGE]: Optimization of HEX editor. Huge performance gain!
+ * [CHANGE]: Added support for img::png package as alternation to tkpng (img::png is still more popular on some platforms).
+ * [CHANGE]: printStackTract procedure modified a little to produce more readable stack traces.
+ * [CHANGE]: API documentation updated. More classess documented.
+ * [CHANGE]: Shortcut edit widget takes Escape key as a way to cancel edition, instead of binding a shortcut with it.
+ * [CHANGE]: New rows which user adds to table data appears below currently selected row, instead of end of grid.
+ * [CHANGE]: SQL formatter externalized to plugin. Now anyone can write his own SQL formatter as plugin.
+ * [CHANGE]: SQL errors are no longer connected with full Tcl stack trace in error/warning dialogs, so they are more readable to user.
+ * [BUGFIX]: NULL handling fixed (for SQLite3). Note that setting NULL in SQLite2 databases works, but it cannot be read as NULL, so for NULLs in SQLite2 you'll see just empty cells.
+ * [BUGFIX]: Exporting results of query with number of rows greater than 1000 was exporting only 1000 - the ones currently visible in results table.
+ * [BUGFIX]: /* This kind of comments */ is now highlighted.
+ * [BUGFIX]: Shortcut edits doesn't crash when Control key was pressed and released without any other key togather.
+ * [BUGFIX]: ScrolledFrame fixed to fit well into parent widgets. It affects numerous Configuration Dialog tabs as well, as Form View of data, Index dialog and others.
+ * [BUGFIX]: Fixed editing tables with name containing whitespaces.
+ * [BUGFIX]: Font of grids is now set properly.
+ * [BUGFIX]: Fixed indexes for columns with spaces in name.
+ * [BUGFIX]: Fixed new index dialog when choosing target table from database with uncommon name.
+ * [BUGFIX]: Fixed view edit dialog to support views with spaces in name.
+ * [BUGFIX]: Fixed editing table columns with value length specified, as 'VARCHAR(10)'.
+ * [BUGFIX]: Fixed validation of integer value for maximum results per page in data preview.
+ * [BUGFIX]: Font dialog fixed so it looks a bit better.
+ * [BUGFIX]: Total number of rows in table data tab updates on the fly when new rows are added or deleted.
+ * [BUGFIX]: Fixed SQL highlighting in editor history tab.
+ * [BUGFIX]: Setting Foreign Key for column(s) while creating new table (it worked for editing tables).
+ * [BUGFIX]: Fixed restoring session - in some cases it wasn't restoring properly.
+ * [BUGFIX]: Fixed creating and opening table with strange names, like '''''''''''.
+ * [BUGFIX]: Edit widget (for non-BLOB columns) is now moved correctly when scrolling grid.
+ * [BUGFIX]: Exporting dialog doesn't close on input error anymore and lets user to fix input.
+ * [BUGFIX]: Add/Edit database dialog doesn't change main window title anymore.
+ * [BUGFIX]: Fixed support for strange database names (such as abc';'efg).
+ * [BUGFIX]: Refreshing toolbar after changing schema is now performed correctly.
+ * [BUGFIX]: Fixed View dialog database selection.
+ * [BUGFIX]: CSV exporting fixed in case of spearator character in cell value.
+ * [BUGFIX]: Other minor fixes.
+
+[1.0.1]
+ * [CHANGE]: SQLite 3 engine updated to 3.5.9 for binary distributions.
+ * [CHANGE]: Index dialog modified to use ScrolledFrame instead of canvas, so it looks much better.
+ * [BUGFIX]: Fixed common error "item X column Y has no style" that was very hard to reproduce, at last!
+ * [BUGFIX]: Fixed running binary application with "[" character in its file name.
+ * [BUGFIX]: Granted permissions to load external SQLite extensions using load_extension() SQL function.
+
+[1.0.0]
+ * [CHANGE]: SQLiteStudio has been released on GPLv2 licence!
+ * [CHANGE]: Removed licence-responsible code. Tbcload extension is no more required.
+
+[1.0.0-beta6]
+ * [CHANGE]: Columns in table data view and editor results view can be resized now, but BLOB fileds still can't be loaded whole directly to grid cell (I think the reason is obvious).
+ * [CHANGE]: There is a known bug that is not 100%-repeatable. It occurs sometimes when switching to FormView of table data. This change has added some additional logs to debug the bug.
+ * [BUGFIX]: A very obvious bug included in beta5 - adding database dialog didn't disappear when database is added correctly.
+ * [BUGFIX]: Fixed error while switching from standard BLOB editor to hexadecimal editor.
+ * [BUGFIX]: Fixed commiting new rows from FormView of table data.
+
+[1.0.0-beta5]
+ * [ADDED]: Databases tree refresh button on toolbar and in View menu.
+ * [CHANGE]: SQLite engine updated to 3.5.4 for binary distributions.
+ * [CHANGE]: Now 'Triggers' tab in table window contains triggers related to the table by 'ON' clause only.
+ * [CHANGE]: View dialogs (new and edit) can be resized now.
+ * [BUGFIX]: Another fixes related to proper SQL updates and inserts with strange data characters.
+ * [BUGFIX]: Fixed support for 'main'.'table' expressions in triggers.
+ * [BUGFIX]: Fixed crashes on closing main window (quiting). Sometimes it denied to quit because of error...
+ * [BUGFIX]: Fixed errors occuring on few Grid widgets containing images or widgets inside of them.
+ * [BUGFIX]: Fixed error when right-clicking on empty tree list on the left.
+ * [BUGFIX]: Added handling of settings file from previous versions of SQLiteStudio.
+ * [BUGFIX]: Fixed bug when maximizing the only one MDI window, which was in normal mode while application startup.
+ * [BUGFIX]: Fixed 'window name "edit" already exists in parent' bug occuring in DataGrid and ResultGrid.
+ * [BUGFIX]: Fixed error while closing application and some of MDI windows has closed before it's session was saved.
+ * [BUGFIX]: Fixed exporting query results to CSV format (new line characters).
+ * [BUGFIX]: Fixed executing queries with semi-colon and white-space at the end of query.
+ * [BUGFIX]: Fixed problem with untranslated messages and unsupported localizations so '%s' are substituted correctly.
+ * [BUGFIX]: Fixed Tcl core critical error related to exporting large databases/tables (problem with memory allocation).
+ * [BUGFIX]: Fixed displaying list of indexes in table window in Indexes tab.
+ * [BUGFIX]: Few minor fixes related to object names (like tables, columns) that are surrounded with [] or " characters.
+ * [BUGFIX]: Fixed error while clicking on Primary Key column in table structure with no primary key set.
+ * [BUGFIX]: Fixed 'Add database' dialog so it doesn't disappear when database cannot be added for some reason, but lets user fix it.
+ * [BUGFIX]: Full support for NULL values while exporting to various formats.
+
+[1.0.0-beta4]
+ * [ADDED]: New SQL function tcl() to execute Tcl code in separate interpreter and return its results.
+ * [ADDED]: Full support for NULL value (which is not same as empty value).
+ * [ADDED]: Universal 'Delete' shortcut for databases tree. Deletes selected item (if possible).
+ * [CHANGE]: 'New database' label renamed to 'Add database' to be less confusing.
+ * [CHANGE]: SQLite engine updated to 3.4.2 for binary distributions.
+ * [REMOVED]: Removed date() function while there is standard SQLite date() function.
+ * [BUGFIX]: 'View data preview' window is now properly stored in session so it's title is restored in next session.
+ * [BUGFIX]: 'View data preview' can not be opened in two separate windows now, so it will not cause problems with doubled tasks on taskbar anymore.
+ * [BUGFIX]: Another little bug with 'REFERENCES' in table edition dialog - occured when column reference was wrapped with white-spaces.
+ * [BUGFIX]: Detection of 'REFERENCES' constraints in table browsing window on Constraints tab. It used to detect more constraints than there was.
+ * [BUGFIX]: Handling table global constraints in table browsing window on Constraints tab.
+ * [BUGFIX]: Fixed (finally?) problem with UTF-8 data in database.
+ * [BUGFIX]: While editing table schema: renaming a column causes losing data from that column. Fixed.
+ * [BUGFIX]: Support for multi-word names enclosed in quotes, instead of square brackets.
+ * [BUGFIX]: Yet another fix related to global table contraints. This time - named global constraints.
+ * [BUGFIX]: Right-click (context menu) now selects currently clicked node - it's common behaviour.
+ * [BUGFIX]: Disabling clipboard pasting to SQL editor on systems that causes problems with that feature.
+ * [BUGFIX]: Fixed error with trying to create second editor in Grid widget, while there still is a first.
+ * [BUGFIX]: Foreign key wizard dialog now interpretes main table and foreign table as they should be: foreign table/fields determinates cascades on main table.
+ * [BUGFIX]: Fixed 'Refresh' shortcut in table data preview, as well as in table structure tab and table DDL tab.
+ * [BUGFIX]: Fixed international characters support in various edit widgets.
+
+[1.0.0-beta3]
+ * [ADDED]: 'Report the bug' button in critical error dialog. Now it's much easier to report these kind of bugs.
+ * [BUGFIX]: Few detection bugs with constraints detection (in table editon dialog).
+ * [BUGFIX]: Browsing table data with BLOB columns (broken in beta2).
+ * [BUGFIX]: Bugs with exporting whole database to SQL and XML formats.
+
+[1.0.0-beta2]
+ * [ADDED]: date() function to read unixtime from database. It formats unixtime value into human-readable format.
+ * [ADDED]: Support for 'REFERENCES' keyword in columns and all stuff related to this keyword.
+ * [ADDED]: Support for table global constraints.
+ * [ADDED]: Support for triggers on views.
+ * [ADDED]: ChangeLog dialog.
+ * [ADDED]: 'Escape' shortcut in editor window to hide status field.
+ * [CHANGE]: SQLite engine updated to 3.4.1 for binary distributions.
+ * [CHANGE]: Insertion cursor in SQL editor blinks a little faster so it's easier to locate it.
+ * [CHANGE]: PageDown and PageUp shortcuts upgraded (moves cursor too, not just pages).
+ * [CHANGE]: Tab and Shift+Tab upgraded to let indent and unindent multiple lines as well as single lines.
+ * [CHANGE]: Handling completion for column names entered in function arguments, like 'max(columnname)'.
+ * [BUGFIX]: ColorPicker handles incorrect colors passed to it and in that case it uses white color as default.
+ * [BUGFIX]: ColorPicker handles HTML color editing much better then before. Now it might be impossible to break it.
+ * [BUGFIX]: Better detection of operating system (fixed problems with Windows Vista and Windows 2000).
+ * [BUGFIX]: Fixed adding new row to table data grid when there was an error while commiting previous row.
+ * [BUGFIX]: Shortcuts Ctrl+Left, Ctrl+Right, Ctrl+Shift+Left and Ctrl+Shift+Right are back!
+ * [BUGFIX]: Detection of 'language changed' in configuration dialog fixed (it used to detect change even there was no change).
+ * [BUGFIX]: Fixed active task changing while setting MDI windows in cascade layout, then pushing maximize button on some window other than the currently active.
+ * [BUGFIX]: Fixed formatting of preformatted table DDL code.
+ * [BUGFIX]: Refreshing toolbar state after deletion of any object in the tree.
+ * [BUGFIX]: Problems with highlighting of first line in SQL editor in View Edit Dialog.
+ * [BUGFIX]: Numerous fixes in all dialog windows, so they don't disappear on errors, but let user fix his input.
+ * [BUGFIX]: Minor fixes in Polish translation.
+ * [BUGFIX]: SQLiteStudio doesn't let to create objects with empty names (or just whitespaces in name) anymore.
+ * [BUGFIX]: Changing table in New Index Dialog didn't work.
+ * [BUGFIX]: Clear History toolbar button in SQL Editor window has been fixed.
+ * [BUGFIX]: Mouse Wheel is now working on Windows platform.
+ * [BUGFIX]: Minor memory leaks fixed in Edit Table Dialog.
+ * [BUGFIX]: Constraints list in table window displays now correct list of constraints.
+ * [BUGFIX]: Using ' (single quote) character in table data grid has been fixed.
+ * [BUGFIX]: SQLite objects containing spaces in name are now supported correctly.
+ * [BUGFIX]: Fixed execution of multiple SQL statements that are creating some SQLite objects (it tried to create some of them twice).
+ * [BUGFIX]: DDL formatting in table window fixed.
+ * [BUGFIX]: Fixed critical error while exporting some data as a XML.
+ * [BUGFIX]: Fixed critical error while some error occured when trying to create trigger.
+ * [BUGFIX]: Fixed critical errors while customizing toolbar.
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/utils.h b/SQLiteStudio3/coreSQLiteStudio/common/utils.h
index 4ded52b..90d2d62 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/utils.h
+++ b/SQLiteStudio3/coreSQLiteStudio/common/utils.h
@@ -8,6 +8,7 @@
#include <QChar>
#include <QStringList>
#include <QFileInfo>
+#include <functional>
class QTextCodec;
diff --git a/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro b/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
index 6aa14e2..c5c81eb 100644
--- a/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
+++ b/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
@@ -22,7 +22,7 @@ win32 {
}
linux: {
- DEFINES += SYS_PLUGINS_DIR=/usr/lib/sqlitestudio
+ DEFINES += SYS_PLUGINS_DIR=$$LIBDIR/sqlitestudio
portable: {
DESTDIR = $$DESTDIR/lib
}
@@ -387,12 +387,8 @@ HEADERS += sqlitestudio.h\
rsa/PrimeGenerator.h \
rsa/RSA.h
-unix:!symbian {
- maemo5 {
- target.path = /opt/usr/lib
- } else {
- target.path = /usr/lib
- }
+unix: {
+ target.path = $$LIBDIR
INSTALLS += target
}
@@ -407,7 +403,8 @@ OTHER_FILES += \
licenses/sqlitestudio_license.txt \
licenses/lgpl.txt \
licenses/diff_match.txt \
- licenses/gpl.txt
+ licenses/gpl.txt \
+ ChangeLog.txt
FORMS += \
plugins/populatesequence.ui \
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h
index d8e54b4..89c3d96 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h
@@ -700,6 +700,8 @@ void AbstractDb3<T>::releaseAggregateContext(typename T::context* context)
template <class T>
void AbstractDb3<T>::registerDefaultCollation(void* fnUserData, typename T::handle* fnDbHandle, int eTextRep, const char* collationName)
{
+ UNUSED(eTextRep);
+
CollationUserData* defUserData = reinterpret_cast<CollationUserData*>(fnUserData);
if (!defUserData)
{
@@ -725,7 +727,7 @@ void AbstractDb3<T>::registerDefaultCollation(void* fnUserData, typename T::hand
return;
}
- int res = T::create_collation_v2(fnDbHandle, collationName, eTextRep, nullptr,
+ int res = T::create_collation_v2(fnDbHandle, collationName, T::UTF8, nullptr,
&AbstractDb3<T>::evaluateDefaultCollation, nullptr);
if (res != T::OK)
@@ -738,7 +740,7 @@ int AbstractDb3<T>::evaluateDefaultCollation(void* userData, int length1, const
UNUSED(userData);
UNUSED(length1);
UNUSED(length2);
- return COLLATIONS->evaluateDefault(QString::fromUtf8((const char*)value1), QString::fromUtf8((const char*)value2));
+ return COLLATIONS->evaluateDefault(QString::fromUtf8((const char*)value1, length1), QString::fromUtf8((const char*)value2, length2));
}
template <class T>
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp
index 02f90b2..bce1304 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp
@@ -164,6 +164,28 @@ SqliteSelect::Core::ResultColumn* QueryExecutorColumns::getResultColumnForSelect
selectResultColumn->expr->table = resultColumn->table;
}
+
+// // SQLite2 requires special treatment here. It won't allow selecting db.table.col from a subquery - it needs escaped ID that reflects db.table.col.
+// if (dialect == Dialect::Sqlite2)
+// {
+// selectResultColumn->expr->rebuildTokens();
+// colString = wrapObjIfNeeded(selectResultColumn->expr->detokenize(), dialect);
+// delete selectResultColumn->expr;
+// selectResultColumn->expr = nullptr;
+
+// expr = parser.parseExpr(colString);
+// if (!expr)
+// {
+// qWarning() << "Could not parse result column expr in SQLite2's second parsing phase:" << colString;
+// if (parser.getErrors().size() > 0)
+// qWarning() << "The error was:" << parser.getErrors().first()->getFrom() << ":" << parser.getErrors().first()->getMessage();
+
+// return nullptr;
+// }
+
+// expr->setParent(selectResultColumn);
+// selectResultColumn->expr = expr;
+// }
}
if (!col.alias.isNull())
@@ -232,8 +254,10 @@ void QueryExecutorColumns::wrapWithAliasedColumns(SqliteSelect* select)
baseColName = QString();
if (!resCol->alias.isNull())
baseColName = resCol->alias;
- else if (!resCol->expression)
+ else if (dialect == Dialect::Sqlite3 && !resCol->expression)
baseColName = resCol->column;
+ else if (dialect == Dialect::Sqlite2 && !resCol->expression)
+ baseColName = getAliasedColumnNameForSqlite2(resCol);
if (!baseColName.isNull())
{
@@ -254,3 +278,21 @@ void QueryExecutorColumns::wrapWithAliasedColumns(SqliteSelect* select)
//QString t = outerColumns.detokenize(); // keeping it for debug purposes
select->tokens = wrapSelect(select->tokens, outerColumns);
}
+
+QString QueryExecutorColumns::getAliasedColumnNameForSqlite2(const QueryExecutor::ResultColumnPtr& resCol)
+{
+ QStringList colNameParts;
+ if (!resCol->table.isNull())
+ {
+ if (!resCol->database.isNull())
+ {
+ if (context->dbNameToAttach.containsLeft(resCol->database, Qt::CaseInsensitive))
+ colNameParts << context->dbNameToAttach.valueByLeft(resCol->database, Qt::CaseInsensitive);
+ else
+ colNameParts << resCol->database;
+ }
+ colNameParts << resCol->table;
+ }
+ colNameParts << resCol->column;
+ return colNameParts.join(".");
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.h
index 3f90311..fd85651 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.h
@@ -67,6 +67,8 @@ class QueryExecutorColumns : public QueryExecutorStep
bool isRowIdColumnAlias(const QString& alias);
void wrapWithAliasedColumns(SqliteSelect* select);
+
+ QString getAliasedColumnNameForSqlite2(const QueryExecutor::ResultColumnPtr& resCol);
};
#endif // QUERYEXECUTORCOLUMNS_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp b/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp
index 61f5cb2..f8c51dc 100644
--- a/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp
@@ -174,7 +174,7 @@ void DbObjectOrganizer::processPreparation()
}
}
- if (referencedTables.size() > 0 && !confirmFunction(referencedTables.toList()))
+ if (referencedTables.size() > 0 && !execConfirmFunctionInMainThread(referencedTables.toList()))
referencedTables.clear();
for (const QString& srcTable : referencedTables)
@@ -370,8 +370,6 @@ bool DbObjectOrganizer::copyTableToDb(const QString& table)
{
QString ddl;
QString targetTable = table;
-// AttachGuard attach = srcDb->guardedAttach(dstDb, true);
-// QString attachName = attach->getName();
if (renamed.contains(table) || !attachName.isNull())
{
SqliteQueryPtr parsedObject = srcResolver->getParsedObject(table, SchemaResolver::TABLE);
@@ -737,6 +735,21 @@ void DbObjectOrganizer::emitFinished(bool success)
setExecuting(false);
}
+bool DbObjectOrganizer::execConfirmFunctionInMainThread(const QStringList& tables)
+{
+ bool res;
+ bool invokation = QMetaObject::invokeMethod(this, "confirmFunctionSlot", Qt::BlockingQueuedConnection,
+ Q_RETURN_ARG(bool, res), Q_ARG(QStringList, tables));
+
+ if (!invokation)
+ {
+ qCritical() << "Could not call DbObjectOrganizer::confirmFunctionSlot() between threads!";
+ return false;
+ }
+
+ return res;
+}
+
void DbObjectOrganizer::processPreparationFinished()
{
if (errorsToConfirm.size() > 0 && !conversionErrorsConfimFunction(errorsToConfirm))
@@ -775,3 +788,8 @@ void DbObjectOrganizer::processPreparationFinished()
QThreadPool::globalInstance()->start(this);
}
+
+bool DbObjectOrganizer::confirmFunctionSlot(const QStringList& tables)
+{
+ return confirmFunction(tables);
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.h b/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.h
index 70b748f..8a7e7a9 100644
--- a/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.h
+++ b/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.h
@@ -108,6 +108,7 @@ class API_EXPORT DbObjectOrganizer : public QObject, public QRunnable, public In
bool commit();
bool rollback();
void emitFinished(bool success);
+ bool execConfirmFunctionInMainThread(const QStringList& tables);
ReferencedTablesConfimFunction confirmFunction;
NameConflictResolveFunction nameConflictResolveFunction;
@@ -142,6 +143,7 @@ class API_EXPORT DbObjectOrganizer : public QObject, public QRunnable, public In
private slots:
void processPreparationFinished();
+ bool confirmFunctionSlot(const QStringList& tables);
signals:
void finishedDbObjectsMove(bool success, Db* srcDb, Db* dstDb);
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitestatement.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitestatement.cpp
index 482baf8..f14273d 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitestatement.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitestatement.cpp
@@ -358,7 +358,9 @@ TokenPtr SqliteStatement::getDbTokenFromNmDbnm(const QString &tokensMapKey1, con
// if (tokensMap[tokensMapKey2].size() == 0)
// return TokenPtr();
- if (!tokensMap.contains("DOT") && tokensMap[tokensMapKey2].size() == 0)
+ TokenList listForKey1 = extractPrintableTokens(tokensMap[tokensMapKey1]);
+ TokenList listForKey2 = extractPrintableTokens(tokensMap[tokensMapKey2]);
+ if (!tokensMap.contains("DOT") && listForKey2.size() == 0)
{
// In this case the query is "SELECT * FROM test" and there is no database,
// but if there was a dot after the "test", then the "test" is a database name,
@@ -366,7 +368,7 @@ TokenPtr SqliteStatement::getDbTokenFromNmDbnm(const QString &tokensMapKey1, con
return TokenPtr();
}
- return extractPrintableTokens(tokensMap[tokensMapKey1])[0];
+ return extractPrintableTokens(listForKey1)[0];
}
TokenPtr SqliteStatement::getObjectTokenFromNmDbnm(const QString &tokensMapKey1, const QString &tokensMapKey2)
@@ -383,10 +385,12 @@ TokenPtr SqliteStatement::getObjectTokenFromNmDbnm(const QString &tokensMapKey1,
return TokenPtr();
}
- if (tokensMap[tokensMapKey2].size() == 0)
- return extractPrintableTokens(tokensMap[tokensMapKey1])[0];
+ TokenList listForKey1 = extractPrintableTokens(tokensMap[tokensMapKey1]);
+ TokenList listForKey2 = extractPrintableTokens(tokensMap[tokensMapKey2]);
+ if (listForKey2.size() == 0)
+ return extractPrintableTokens(listForKey1)[0];
- return extractPrintableTokens(tokensMap[tokensMapKey2])[1];
+ return extractPrintableTokens(listForKey2)[1];
}
TokenList SqliteStatement::getDbTokenListFromFullname(const QString &tokensMapKey)
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp
index 7fc9edc..fa61c21 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp
@@ -237,178 +237,182 @@ static const YYMINORTYPE yyzerominor = { 0 };
** shifting non-terminals after a reduce.
** yy_default[] Default action for each state.
*/
-#define YY_ACTTAB_COUNT (1697)
+#define YY_ACTTAB_COUNT (1737)
static const YYACTIONTYPE yy_action[] = {
/* 0 */ 338, 191, 186, 242, 476, 511, 576, 193, 332, 16,
/* 10 */ 511, 384, 189, 322, 239, 519, 518, 570, 337, 450,
- /* 20 */ 15, 851, 125, 58, 575, 179, 851, 574, 63, 142,
- /* 30 */ 401, 581, 328, 27, 84, 569, 114, 322, 573, 519,
- /* 40 */ 518, 851, 851, 36, 851, 851, 851, 851, 851, 851,
- /* 50 */ 851, 851, 851, 851, 851, 851, 851, 851, 851, 33,
- /* 60 */ 34, 851, 851, 851, 851, 320, 379, 35, 240, 238,
+ /* 20 */ 15, 851, 125, 58, 575, 179, 851, 574, 63, 143,
+ /* 30 */ 401, 581, 328, 26, 84, 569, 114, 322, 573, 519,
+ /* 40 */ 518, 851, 851, 35, 851, 851, 851, 851, 851, 851,
+ /* 50 */ 851, 851, 851, 851, 851, 851, 851, 851, 851, 32,
+ /* 60 */ 33, 851, 851, 851, 851, 320, 379, 34, 240, 238,
/* 70 */ 121, 556, 291, 251, 57, 7, 217, 577, 265, 264,
/* 80 */ 523, 179, 555, 336, 335, 338, 569, 549, 548, 550,
/* 90 */ 271, 569, 10, 724, 199, 297, 203, 489, 459, 332,
/* 100 */ 568, 567, 451, 253, 158, 523, 449, 444, 443, 337,
/* 110 */ 187, 870, 266, 187, 580, 517, 168, 328, 505, 343,
- /* 120 */ 142, 235, 490, 108, 101, 489, 523, 164, 36, 531,
+ /* 120 */ 143, 235, 490, 108, 101, 489, 523, 164, 35, 531,
/* 130 */ 187, 13, 523, 252, 234, 547, 236, 119, 340, 232,
- /* 140 */ 339, 120, 216, 155, 33, 34, 481, 547, 322, 215,
- /* 150 */ 519, 518, 35, 714, 456, 477, 320, 367, 547, 478,
+ /* 140 */ 339, 120, 216, 155, 32, 33, 481, 547, 322, 215,
+ /* 150 */ 519, 518, 34, 714, 456, 477, 320, 367, 547, 478,
/* 160 */ 7, 714, 400, 321, 251, 523, 714, 563, 336, 335,
/* 170 */ 500, 553, 549, 548, 550, 188, 465, 500, 401, 466,
- /* 180 */ 366, 365, 552, 364, 293, 435, 40, 40, 40, 39,
+ /* 180 */ 366, 365, 552, 364, 293, 435, 39, 39, 39, 38,
/* 190 */ 523, 562, 60, 255, 714, 569, 714, 714, 852, 570,
/* 200 */ 271, 714, 502, 852, 500, 714, 570, 714, 714, 714,
- /* 210 */ 714, 523, 569, 178, 531, 422, 13, 523, 45, 46,
- /* 220 */ 330, 43, 43, 530, 530, 223, 852, 852, 44, 44,
- /* 230 */ 44, 44, 42, 42, 42, 42, 41, 41, 40, 40,
- /* 240 */ 40, 39, 199, 297, 203, 55, 236, 92, 340, 232,
+ /* 210 */ 714, 523, 569, 178, 531, 422, 13, 523, 44, 45,
+ /* 220 */ 330, 42, 42, 530, 530, 223, 852, 852, 43, 43,
+ /* 230 */ 43, 43, 41, 41, 41, 41, 40, 40, 39, 39,
+ /* 240 */ 39, 38, 199, 297, 203, 55, 236, 92, 340, 232,
/* 250 */ 339, 120, 216, 500, 106, 570, 268, 19, 187, 215,
- /* 260 */ 500, 105, 553, 42, 42, 42, 42, 41, 41, 40,
- /* 270 */ 40, 40, 39, 552, 41, 41, 40, 40, 40, 39,
+ /* 260 */ 500, 105, 553, 41, 41, 41, 41, 40, 40, 39,
+ /* 270 */ 39, 39, 38, 552, 40, 40, 39, 39, 39, 38,
/* 280 */ 852, 3, 568, 567, 187, 852, 512, 500, 219, 568,
/* 290 */ 567, 17, 496, 156, 322, 345, 519, 518, 569, 292,
- /* 300 */ 45, 46, 330, 43, 43, 530, 530, 223, 852, 852,
- /* 310 */ 44, 44, 44, 44, 42, 42, 42, 42, 41, 41,
- /* 320 */ 40, 40, 40, 39, 547, 533, 852, 100, 308, 306,
+ /* 300 */ 44, 45, 330, 42, 42, 530, 530, 223, 852, 852,
+ /* 310 */ 43, 43, 43, 43, 41, 41, 41, 41, 40, 40,
+ /* 320 */ 39, 39, 39, 38, 547, 533, 852, 100, 308, 306,
/* 330 */ 305, 852, 448, 447, 418, 418, 316, 245, 568, 567,
- /* 340 */ 304, 937, 122, 344, 1, 582, 45, 46, 330, 43,
- /* 350 */ 43, 530, 530, 223, 852, 852, 44, 44, 44, 44,
- /* 360 */ 42, 42, 42, 42, 41, 41, 40, 40, 40, 39,
- /* 370 */ 338, 442, 45, 46, 330, 43, 43, 530, 530, 223,
- /* 380 */ 524, 569, 44, 44, 44, 44, 42, 42, 42, 42,
- /* 390 */ 41, 41, 40, 40, 40, 39, 5, 9, 524, 781,
- /* 400 */ 220, 324, 328, 167, 45, 46, 330, 43, 43, 530,
- /* 410 */ 530, 223, 781, 36, 44, 44, 44, 44, 42, 42,
- /* 420 */ 42, 42, 41, 41, 40, 40, 40, 39, 8, 33,
- /* 430 */ 34, 274, 387, 435, 547, 388, 237, 35, 774, 421,
+ /* 340 */ 304, 937, 122, 344, 1, 582, 44, 45, 330, 42,
+ /* 350 */ 42, 530, 530, 223, 852, 852, 43, 43, 43, 43,
+ /* 360 */ 41, 41, 41, 41, 40, 40, 39, 39, 39, 38,
+ /* 370 */ 338, 442, 44, 45, 330, 42, 42, 530, 530, 223,
+ /* 380 */ 524, 569, 43, 43, 43, 43, 41, 41, 41, 41,
+ /* 390 */ 40, 40, 39, 39, 39, 38, 5, 9, 524, 781,
+ /* 400 */ 220, 324, 328, 167, 44, 45, 330, 42, 42, 530,
+ /* 410 */ 530, 223, 781, 35, 43, 43, 43, 43, 41, 41,
+ /* 420 */ 41, 41, 40, 40, 39, 39, 39, 38, 8, 32,
+ /* 430 */ 33, 274, 387, 435, 547, 388, 237, 34, 774, 421,
/* 440 */ 60, 14, 219, 569, 250, 7, 774, 437, 441, 169,
/* 450 */ 523, 524, 569, 336, 335, 285, 781, 549, 548, 550,
- /* 460 */ 44, 44, 44, 44, 42, 42, 42, 42, 41, 41,
- /* 470 */ 40, 40, 40, 39, 332, 523, 332, 425, 470, 774,
+ /* 460 */ 43, 43, 43, 43, 41, 41, 41, 41, 40, 40,
+ /* 470 */ 39, 39, 39, 38, 332, 523, 332, 425, 470, 774,
/* 480 */ 560, 774, 774, 850, 337, 426, 337, 455, 850, 613,
- /* 490 */ 774, 181, 774, 774, 774, 142, 523, 142, 31, 531,
+ /* 490 */ 774, 181, 774, 774, 774, 143, 523, 143, 30, 531,
/* 500 */ 614, 13, 523, 850, 850, 850, 850, 850, 850, 850,
/* 510 */ 850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
/* 520 */ 850, 850, 850, 850, 850, 850, 850, 852, 500, 460,
/* 530 */ 357, 320, 852, 318, 75, 570, 401, 570, 311, 251,
- /* 540 */ 569, 251, 446, 445, 570, 358, 359, 45, 46, 330,
- /* 550 */ 43, 43, 530, 530, 223, 852, 852, 44, 44, 44,
- /* 560 */ 44, 42, 42, 42, 42, 41, 41, 40, 40, 40,
- /* 570 */ 39, 338, 45, 46, 330, 43, 43, 530, 530, 223,
- /* 580 */ 615, 570, 44, 44, 44, 44, 42, 42, 42, 42,
- /* 590 */ 41, 41, 40, 40, 40, 39, 185, 184, 497, 782,
+ /* 540 */ 569, 251, 446, 445, 570, 358, 359, 44, 45, 330,
+ /* 550 */ 42, 42, 530, 530, 223, 852, 852, 43, 43, 43,
+ /* 560 */ 43, 41, 41, 41, 41, 40, 40, 39, 39, 39,
+ /* 570 */ 38, 338, 44, 45, 330, 42, 42, 530, 530, 223,
+ /* 580 */ 615, 570, 43, 43, 43, 43, 41, 41, 41, 41,
+ /* 590 */ 40, 40, 39, 39, 39, 38, 185, 184, 497, 782,
/* 600 */ 199, 297, 203, 328, 360, 538, 96, 488, 97, 570,
- /* 610 */ 103, 500, 782, 436, 36, 570, 187, 225, 568, 567,
+ /* 610 */ 103, 500, 782, 436, 35, 570, 187, 225, 568, 567,
/* 620 */ 568, 567, 332, 354, 540, 539, 294, 568, 567, 570,
- /* 630 */ 33, 34, 337, 356, 482, 355, 569, 85, 35, 759,
+ /* 630 */ 32, 33, 337, 356, 482, 355, 569, 85, 34, 759,
/* 640 */ 532, 111, 70, 78, 487, 483, 7, 759, 90, 494,
/* 650 */ 508, 523, 493, 160, 336, 335, 782, 528, 549, 548,
/* 660 */ 550, 532, 440, 434, 568, 567, 118, 54, 332, 919,
/* 670 */ 214, 100, 308, 306, 305, 75, 523, 333, 337, 571,
- /* 680 */ 759, 529, 759, 759, 304, 48, 177, 522, 32, 142,
- /* 690 */ 30, 759, 568, 567, 759, 759, 159, 523, 568, 567,
- /* 700 */ 531, 464, 13, 523, 45, 46, 330, 43, 43, 530,
- /* 710 */ 530, 223, 568, 567, 44, 44, 44, 44, 42, 42,
- /* 720 */ 42, 42, 41, 41, 40, 40, 40, 39, 463, 570,
- /* 730 */ 498, 919, 570, 323, 514, 570, 222, 45, 46, 330,
- /* 740 */ 43, 43, 530, 530, 223, 393, 392, 44, 44, 44,
- /* 750 */ 44, 42, 42, 42, 42, 41, 41, 40, 40, 40,
- /* 760 */ 39, 45, 46, 330, 43, 43, 530, 530, 223, 540,
- /* 770 */ 539, 44, 44, 44, 44, 42, 42, 42, 42, 41,
- /* 780 */ 41, 40, 40, 40, 39, 583, 1, 45, 46, 330,
- /* 790 */ 43, 43, 530, 530, 223, 267, 475, 44, 44, 44,
- /* 800 */ 44, 42, 42, 42, 42, 41, 41, 40, 40, 40,
- /* 810 */ 39, 434, 568, 567, 420, 568, 567, 163, 568, 567,
- /* 820 */ 570, 110, 218, 45, 46, 330, 43, 43, 530, 530,
- /* 830 */ 223, 28, 468, 44, 44, 44, 44, 42, 42, 42,
- /* 840 */ 42, 41, 41, 40, 40, 40, 39, 570, 547, 45,
- /* 850 */ 46, 330, 43, 43, 530, 530, 223, 570, 212, 44,
- /* 860 */ 44, 44, 44, 42, 42, 42, 42, 41, 41, 40,
- /* 870 */ 40, 40, 39, 46, 330, 43, 43, 530, 530, 223,
- /* 880 */ 527, 526, 44, 44, 44, 44, 42, 42, 42, 42,
- /* 890 */ 41, 41, 40, 40, 40, 39, 338, 330, 43, 43,
- /* 900 */ 530, 530, 223, 568, 567, 44, 44, 44, 44, 42,
- /* 910 */ 42, 42, 42, 41, 41, 40, 40, 40, 39, 570,
- /* 920 */ 525, 570, 64, 859, 88, 424, 198, 391, 328, 520,
- /* 930 */ 568, 567, 357, 570, 516, 164, 569, 380, 12, 36,
- /* 940 */ 568, 567, 569, 164, 502, 25, 570, 358, 275, 172,
- /* 950 */ 171, 170, 391, 256, 569, 33, 34, 310, 66, 389,
- /* 960 */ 390, 287, 76, 35, 104, 395, 547, 484, 561, 79,
- /* 970 */ 452, 7, 862, 395, 547, 455, 523, 338, 80, 336,
- /* 980 */ 335, 213, 480, 549, 548, 550, 75, 312, 396, 398,
- /* 990 */ 570, 397, 293, 479, 570, 380, 396, 398, 259, 397,
- /* 1000 */ 293, 523, 568, 567, 568, 567, 276, 538, 10, 328,
- /* 1010 */ 4, 289, 474, 490, 570, 473, 568, 567, 23, 290,
- /* 1020 */ 36, 65, 523, 431, 284, 531, 532, 13, 523, 568,
- /* 1030 */ 567, 497, 570, 584, 439, 332, 33, 34, 490, 317,
- /* 1040 */ 162, 489, 535, 570, 35, 337, 570, 532, 570, 179,
- /* 1050 */ 307, 53, 7, 471, 52, 345, 139, 523, 338, 569,
- /* 1060 */ 336, 335, 179, 302, 549, 548, 550, 495, 75, 303,
- /* 1070 */ 413, 547, 569, 568, 567, 570, 254, 568, 567, 325,
- /* 1080 */ 262, 209, 523, 272, 570, 18, 569, 361, 160, 570,
- /* 1090 */ 328, 569, 515, 261, 407, 413, 51, 568, 567, 570,
- /* 1100 */ 522, 36, 569, 523, 192, 582, 531, 10, 13, 523,
- /* 1110 */ 99, 338, 489, 730, 569, 568, 567, 33, 34, 407,
- /* 1120 */ 503, 500, 456, 403, 570, 35, 568, 567, 376, 568,
- /* 1130 */ 567, 568, 567, 7, 211, 456, 570, 490, 523, 570,
- /* 1140 */ 489, 336, 335, 328, 570, 549, 548, 550, 403, 497,
- /* 1150 */ 730, 730, 404, 376, 36, 371, 500, 108, 568, 567,
- /* 1160 */ 124, 101, 234, 523, 486, 279, 82, 568, 567, 2,
- /* 1170 */ 33, 34, 568, 567, 497, 569, 197, 301, 35, 368,
- /* 1180 */ 69, 75, 568, 567, 523, 492, 7, 531, 666, 13,
- /* 1190 */ 523, 523, 338, 423, 336, 335, 417, 73, 549, 548,
- /* 1200 */ 550, 350, 485, 570, 568, 567, 570, 568, 567, 22,
- /* 1210 */ 491, 570, 21, 67, 371, 179, 523, 6, 258, 568,
- /* 1220 */ 567, 219, 568, 567, 328, 569, 405, 568, 567, 570,
- /* 1230 */ 255, 569, 399, 106, 394, 36, 215, 523, 71, 500,
- /* 1240 */ 531, 368, 13, 523, 416, 860, 260, 386, 570, 415,
- /* 1250 */ 338, 33, 34, 269, 544, 543, 205, 570, 204, 35,
- /* 1260 */ 108, 350, 409, 81, 570, 385, 569, 7, 502, 507,
- /* 1270 */ 245, 496, 523, 182, 50, 336, 335, 570, 569, 549,
- /* 1280 */ 548, 550, 328, 160, 338, 281, 568, 567, 456, 568,
- /* 1290 */ 567, 570, 381, 36, 568, 567, 115, 523, 278, 277,
- /* 1300 */ 570, 351, 570, 363, 353, 187, 352, 49, 411, 33,
- /* 1310 */ 34, 406, 568, 567, 538, 160, 328, 35, 523, 174,
- /* 1320 */ 157, 531, 286, 13, 523, 7, 862, 36, 185, 184,
- /* 1330 */ 523, 568, 567, 336, 335, 179, 362, 549, 548, 550,
- /* 1340 */ 568, 567, 180, 33, 34, 569, 569, 568, 567, 383,
- /* 1350 */ 74, 35, 202, 377, 296, 523, 540, 539, 241, 7,
- /* 1360 */ 568, 567, 569, 579, 523, 374, 257, 336, 335, 342,
- /* 1370 */ 112, 549, 548, 550, 568, 567, 523, 346, 201, 531,
- /* 1380 */ 200, 13, 523, 568, 567, 568, 567, 569, 569, 523,
- /* 1390 */ 542, 544, 543, 536, 544, 543, 566, 332, 263, 544,
- /* 1400 */ 543, 332, 565, 373, 309, 544, 543, 337, 456, 564,
- /* 1410 */ 523, 337, 341, 531, 332, 13, 523, 501, 77, 370,
- /* 1420 */ 11, 559, 146, 196, 337, 378, 457, 332, 408, 558,
- /* 1430 */ 557, 270, 332, 569, 332, 144, 554, 337, 187, 332,
- /* 1440 */ 551, 546, 337, 17, 337, 47, 332, 332, 151, 337,
- /* 1450 */ 227, 538, 228, 150, 538, 152, 337, 337, 229, 538,
- /* 1460 */ 161, 24, 522, 226, 319, 538, 522, 224, 249, 334,
- /* 1470 */ 59, 545, 220, 332, 332, 332, 39, 521, 37, 522,
- /* 1480 */ 332, 332, 183, 337, 337, 337, 29, 109, 332, 510,
- /* 1490 */ 337, 337, 522, 572, 143, 149, 145, 522, 337, 522,
- /* 1500 */ 332, 248, 247, 569, 522, 332, 332, 570, 332, 246,
- /* 1510 */ 337, 522, 522, 332, 332, 337, 337, 513, 337, 107,
- /* 1520 */ 83, 141, 332, 337, 337, 472, 133, 132, 454, 140,
- /* 1530 */ 56, 332, 337, 244, 131, 148, 453, 430, 522, 522,
- /* 1540 */ 522, 337, 429, 147, 428, 522, 522, 332, 332, 534,
- /* 1550 */ 326, 332, 130, 522, 332, 243, 332, 337, 337, 569,
- /* 1560 */ 569, 337, 427, 419, 337, 522, 337, 98, 129, 127,
- /* 1570 */ 522, 522, 135, 522, 332, 134, 332, 136, 522, 522,
- /* 1580 */ 195, 332, 372, 314, 337, 207, 337, 522, 95, 288,
- /* 1590 */ 569, 337, 94, 337, 206, 138, 522, 137, 298, 194,
- /* 1600 */ 20, 369, 128, 414, 61, 504, 68, 153, 499, 569,
- /* 1610 */ 102, 93, 522, 522, 315, 569, 522, 469, 569, 522,
- /* 1620 */ 569, 522, 432, 210, 569, 300, 91, 569, 123, 72,
- /* 1630 */ 166, 402, 569, 569, 117, 569, 89, 295, 283, 522,
- /* 1640 */ 569, 522, 375, 382, 280, 331, 522, 569, 522, 221,
- /* 1650 */ 208, 176, 569, 87, 86, 569, 347, 175, 116, 569,
- /* 1660 */ 569, 569, 349, 173, 113, 126, 233, 541, 230, 154,
- /* 1670 */ 537, 329, 509, 506, 458, 410, 273, 299, 470, 282,
- /* 1680 */ 190, 348, 467, 462, 461, 438, 38, 165, 938, 62,
- /* 1690 */ 938, 327, 231, 578, 433, 938, 412,
+ /* 680 */ 759, 529, 759, 759, 304, 48, 177, 522, 31, 143,
+ /* 690 */ 29, 759, 568, 567, 759, 759, 159, 523, 568, 567,
+ /* 700 */ 531, 464, 13, 523, 44, 45, 330, 42, 42, 530,
+ /* 710 */ 530, 223, 568, 567, 43, 43, 43, 43, 41, 41,
+ /* 720 */ 41, 41, 40, 40, 39, 39, 39, 38, 463, 570,
+ /* 730 */ 498, 919, 570, 323, 514, 570, 222, 44, 45, 330,
+ /* 740 */ 42, 42, 530, 530, 223, 393, 392, 43, 43, 43,
+ /* 750 */ 43, 41, 41, 41, 41, 40, 40, 39, 39, 39,
+ /* 760 */ 38, 44, 45, 330, 42, 42, 530, 530, 223, 540,
+ /* 770 */ 539, 43, 43, 43, 43, 41, 41, 41, 41, 40,
+ /* 780 */ 40, 39, 39, 39, 38, 583, 1, 44, 45, 330,
+ /* 790 */ 42, 42, 530, 530, 223, 267, 475, 43, 43, 43,
+ /* 800 */ 43, 41, 41, 41, 41, 40, 40, 39, 39, 39,
+ /* 810 */ 38, 256, 568, 567, 420, 568, 567, 163, 568, 567,
+ /* 820 */ 110, 570, 218, 44, 45, 330, 42, 42, 530, 530,
+ /* 830 */ 223, 27, 468, 43, 43, 43, 43, 41, 41, 41,
+ /* 840 */ 41, 40, 40, 39, 39, 39, 38, 486, 547, 44,
+ /* 850 */ 45, 330, 42, 42, 530, 530, 223, 859, 212, 43,
+ /* 860 */ 43, 43, 43, 41, 41, 41, 41, 40, 40, 39,
+ /* 870 */ 39, 39, 38, 44, 47, 330, 42, 42, 530, 530,
+ /* 880 */ 223, 535, 284, 43, 43, 43, 43, 41, 41, 41,
+ /* 890 */ 41, 40, 40, 39, 39, 39, 38, 45, 330, 42,
+ /* 900 */ 42, 530, 530, 223, 568, 567, 43, 43, 43, 43,
+ /* 910 */ 41, 41, 41, 41, 40, 40, 39, 39, 39, 38,
+ /* 920 */ 330, 42, 42, 530, 530, 223, 338, 160, 43, 43,
+ /* 930 */ 43, 43, 41, 41, 41, 41, 40, 40, 39, 39,
+ /* 940 */ 39, 38, 164, 570, 527, 338, 332, 269, 544, 543,
+ /* 950 */ 526, 162, 561, 79, 452, 64, 337, 88, 328, 455,
+ /* 960 */ 570, 209, 385, 272, 205, 357, 204, 139, 525, 35,
+ /* 970 */ 520, 569, 395, 547, 569, 569, 23, 328, 213, 254,
+ /* 980 */ 358, 275, 547, 75, 182, 32, 33, 310, 35, 569,
+ /* 990 */ 361, 66, 164, 34, 160, 396, 398, 317, 397, 293,
+ /* 1000 */ 570, 7, 862, 516, 32, 33, 523, 570, 538, 336,
+ /* 1010 */ 335, 522, 34, 549, 548, 550, 25, 4, 289, 338,
+ /* 1020 */ 7, 471, 395, 547, 12, 523, 568, 567, 336, 335,
+ /* 1030 */ 302, 523, 549, 548, 550, 75, 570, 404, 338, 276,
+ /* 1040 */ 538, 104, 108, 568, 567, 396, 398, 76, 397, 293,
+ /* 1050 */ 523, 328, 523, 570, 65, 531, 500, 13, 523, 101,
+ /* 1060 */ 185, 184, 35, 570, 172, 171, 170, 197, 290, 503,
+ /* 1070 */ 328, 523, 75, 570, 531, 301, 13, 523, 32, 33,
+ /* 1080 */ 380, 35, 10, 568, 567, 479, 34, 490, 540, 539,
+ /* 1090 */ 568, 567, 570, 325, 7, 211, 666, 32, 33, 523,
+ /* 1100 */ 179, 423, 336, 335, 570, 34, 549, 548, 550, 80,
+ /* 1110 */ 569, 570, 490, 7, 480, 489, 391, 570, 523, 568,
+ /* 1120 */ 567, 336, 335, 338, 523, 549, 548, 550, 255, 497,
+ /* 1130 */ 570, 262, 584, 106, 215, 484, 568, 567, 380, 500,
+ /* 1140 */ 312, 391, 202, 523, 296, 523, 568, 567, 531, 198,
+ /* 1150 */ 13, 523, 569, 413, 345, 328, 568, 567, 532, 569,
+ /* 1160 */ 474, 570, 307, 570, 523, 495, 35, 531, 53, 13,
+ /* 1170 */ 523, 496, 860, 456, 473, 568, 567, 570, 413, 532,
+ /* 1180 */ 570, 485, 32, 33, 407, 439, 10, 568, 567, 500,
+ /* 1190 */ 34, 489, 730, 570, 568, 567, 431, 403, 7, 52,
+ /* 1200 */ 568, 567, 570, 523, 582, 234, 336, 335, 338, 407,
+ /* 1210 */ 549, 548, 550, 568, 567, 18, 490, 570, 303, 489,
+ /* 1220 */ 497, 570, 403, 389, 390, 287, 570, 502, 523, 730,
+ /* 1230 */ 730, 570, 201, 570, 200, 424, 187, 569, 332, 51,
+ /* 1240 */ 328, 376, 569, 371, 568, 567, 568, 567, 337, 523,
+ /* 1250 */ 99, 35, 531, 124, 13, 523, 492, 368, 497, 148,
+ /* 1260 */ 568, 567, 570, 568, 567, 82, 376, 32, 33, 350,
+ /* 1270 */ 2, 570, 568, 567, 570, 34, 568, 567, 570, 73,
+ /* 1280 */ 179, 259, 570, 7, 862, 568, 567, 417, 523, 338,
+ /* 1290 */ 569, 336, 335, 22, 491, 549, 548, 550, 416, 69,
+ /* 1300 */ 568, 567, 371, 522, 568, 567, 570, 415, 405, 568,
+ /* 1310 */ 567, 261, 21, 523, 568, 567, 568, 567, 196, 368,
+ /* 1320 */ 378, 328, 411, 67, 542, 544, 543, 6, 569, 350,
+ /* 1330 */ 258, 406, 35, 502, 523, 399, 377, 531, 394, 13,
+ /* 1340 */ 523, 71, 338, 569, 108, 568, 567, 409, 32, 33,
+ /* 1350 */ 536, 544, 543, 456, 568, 567, 34, 568, 567, 81,
+ /* 1360 */ 386, 568, 567, 50, 7, 568, 567, 570, 281, 523,
+ /* 1370 */ 374, 383, 336, 335, 328, 115, 549, 548, 550, 263,
+ /* 1380 */ 544, 543, 309, 544, 543, 538, 219, 286, 179, 568,
+ /* 1390 */ 567, 381, 278, 179, 523, 195, 569, 372, 569, 277,
+ /* 1400 */ 363, 32, 33, 569, 501, 569, 351, 49, 457, 34,
+ /* 1410 */ 373, 538, 353, 102, 352, 523, 370, 7, 531, 260,
+ /* 1420 */ 13, 523, 523, 569, 257, 336, 335, 174, 332, 549,
+ /* 1430 */ 548, 550, 408, 160, 507, 245, 579, 157, 337, 570,
+ /* 1440 */ 538, 241, 332, 538, 332, 515, 332, 523, 332, 77,
+ /* 1450 */ 568, 567, 337, 342, 337, 569, 337, 112, 337, 180,
+ /* 1460 */ 332, 456, 332, 147, 11, 145, 456, 151, 523, 150,
+ /* 1470 */ 337, 531, 337, 13, 523, 194, 332, 369, 332, 332,
+ /* 1480 */ 74, 152, 332, 161, 566, 569, 337, 565, 337, 337,
+ /* 1490 */ 564, 332, 337, 522, 559, 557, 332, 224, 558, 249,
+ /* 1500 */ 144, 337, 341, 149, 270, 332, 337, 522, 332, 522,
+ /* 1510 */ 332, 522, 146, 522, 332, 337, 554, 248, 337, 551,
+ /* 1520 */ 337, 434, 568, 567, 337, 522, 247, 522, 332, 246,
+ /* 1530 */ 332, 141, 187, 546, 229, 133, 332, 17, 337, 319,
+ /* 1540 */ 337, 522, 332, 522, 522, 332, 337, 522, 228, 132,
+ /* 1550 */ 332, 140, 337, 334, 192, 337, 522, 131, 227, 332,
+ /* 1560 */ 337, 522, 279, 142, 569, 24, 130, 332, 332, 337,
+ /* 1570 */ 522, 129, 569, 522, 362, 522, 332, 337, 337, 522,
+ /* 1580 */ 127, 332, 332, 226, 569, 46, 337, 59, 135, 134,
+ /* 1590 */ 220, 337, 337, 522, 545, 522, 346, 136, 38, 332,
+ /* 1600 */ 36, 522, 138, 137, 314, 521, 569, 522, 572, 337,
+ /* 1610 */ 522, 534, 326, 504, 337, 522, 183, 499, 569, 315,
+ /* 1620 */ 128, 569, 569, 569, 522, 61, 469, 569, 432, 569,
+ /* 1630 */ 210, 28, 522, 522, 300, 166, 569, 513, 569, 295,
+ /* 1640 */ 569, 522, 375, 331, 569, 569, 522, 522, 221, 569,
+ /* 1650 */ 208, 109, 569, 569, 510, 570, 176, 83, 569, 107,
+ /* 1660 */ 569, 472, 244, 56, 522, 454, 569, 430, 453, 522,
+ /* 1670 */ 429, 428, 427, 243, 419, 98, 207, 95, 206, 288,
+ /* 1680 */ 298, 20, 94, 153, 93, 91, 414, 68, 123, 72,
+ /* 1690 */ 283, 402, 382, 117, 89, 87, 86, 116, 175, 280,
+ /* 1700 */ 347, 349, 173, 233, 113, 126, 230, 509, 541, 470,
+ /* 1710 */ 506, 537, 458, 282, 154, 410, 273, 190, 348, 438,
+ /* 1720 */ 467, 462, 329, 461, 578, 231, 62, 938, 37, 412,
+ /* 1730 */ 165, 433, 938, 938, 938, 327, 299,
};
static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 4, 8, 195, 10, 80, 25, 5, 14, 156, 202,
@@ -492,175 +496,179 @@ static const YYCODETYPE yy_lookahead[] = {
/* 780 */ 64, 65, 66, 67, 68, 151, 152, 45, 46, 47,
/* 790 */ 48, 49, 50, 51, 52, 105, 80, 55, 56, 57,
/* 800 */ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
- /* 810 */ 68, 86, 87, 88, 83, 87, 88, 161, 87, 88,
- /* 820 */ 4, 85, 80, 45, 46, 47, 48, 49, 50, 51,
+ /* 810 */ 68, 157, 87, 88, 83, 87, 88, 161, 87, 88,
+ /* 820 */ 85, 4, 80, 45, 46, 47, 48, 49, 50, 51,
/* 830 */ 52, 139, 104, 55, 56, 57, 58, 59, 60, 61,
- /* 840 */ 62, 63, 64, 65, 66, 67, 68, 4, 192, 45,
- /* 850 */ 46, 47, 48, 49, 50, 51, 52, 4, 80, 55,
+ /* 840 */ 62, 63, 64, 65, 66, 67, 68, 122, 192, 45,
+ /* 850 */ 46, 47, 48, 49, 50, 51, 52, 138, 80, 55,
/* 860 */ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- /* 870 */ 66, 67, 68, 46, 47, 48, 49, 50, 51, 52,
- /* 880 */ 80, 80, 55, 56, 57, 58, 59, 60, 61, 62,
- /* 890 */ 63, 64, 65, 66, 67, 68, 4, 47, 48, 49,
- /* 900 */ 50, 51, 52, 87, 88, 55, 56, 57, 58, 59,
- /* 910 */ 60, 61, 62, 63, 64, 65, 66, 67, 68, 4,
- /* 920 */ 80, 4, 42, 138, 44, 109, 156, 84, 36, 114,
- /* 930 */ 87, 88, 156, 4, 80, 161, 166, 84, 125, 47,
- /* 940 */ 87, 88, 166, 161, 156, 85, 4, 171, 172, 101,
- /* 950 */ 102, 103, 109, 157, 166, 63, 64, 65, 78, 101,
- /* 960 */ 102, 103, 79, 71, 80, 191, 192, 122, 173, 174,
- /* 970 */ 175, 79, 80, 191, 192, 180, 84, 4, 82, 87,
- /* 980 */ 88, 80, 65, 91, 92, 93, 85, 82, 214, 215,
- /* 990 */ 4, 217, 218, 65, 4, 142, 214, 215, 210, 217,
- /* 1000 */ 218, 109, 87, 88, 87, 88, 230, 231, 79, 36,
- /* 1010 */ 236, 237, 80, 84, 4, 80, 87, 88, 100, 237,
- /* 1020 */ 47, 141, 130, 108, 228, 133, 109, 135, 136, 87,
- /* 1030 */ 88, 167, 4, 0, 80, 156, 63, 64, 109, 121,
- /* 1040 */ 161, 112, 176, 4, 71, 166, 4, 130, 4, 156,
- /* 1050 */ 32, 79, 79, 80, 79, 22, 177, 84, 4, 166,
- /* 1060 */ 87, 88, 156, 80, 91, 92, 93, 203, 85, 32,
- /* 1070 */ 84, 192, 166, 87, 88, 4, 156, 87, 88, 137,
- /* 1080 */ 187, 156, 109, 158, 4, 79, 166, 167, 222, 4,
- /* 1090 */ 36, 166, 156, 187, 84, 109, 79, 87, 88, 4,
- /* 1100 */ 221, 47, 166, 130, 156, 72, 133, 79, 135, 136,
- /* 1110 */ 98, 4, 84, 85, 166, 87, 88, 63, 64, 109,
- /* 1120 */ 130, 4, 229, 84, 4, 71, 87, 88, 84, 87,
- /* 1130 */ 88, 87, 88, 79, 80, 229, 4, 109, 84, 4,
- /* 1140 */ 112, 87, 88, 36, 4, 91, 92, 93, 109, 167,
- /* 1150 */ 122, 123, 80, 109, 47, 84, 4, 85, 87, 88,
- /* 1160 */ 81, 31, 106, 109, 122, 156, 100, 87, 88, 10,
- /* 1170 */ 63, 64, 87, 88, 167, 166, 80, 47, 71, 84,
- /* 1180 */ 120, 85, 87, 88, 130, 203, 79, 133, 80, 135,
- /* 1190 */ 136, 84, 4, 85, 87, 88, 111, 105, 91, 92,
- /* 1200 */ 93, 84, 122, 4, 87, 88, 4, 87, 88, 48,
- /* 1210 */ 203, 4, 48, 131, 143, 156, 109, 79, 20, 87,
- /* 1220 */ 88, 156, 87, 88, 36, 166, 80, 87, 88, 4,
- /* 1230 */ 100, 166, 72, 81, 72, 47, 106, 130, 33, 87,
- /* 1240 */ 133, 146, 135, 136, 109, 138, 187, 33, 4, 109,
- /* 1250 */ 4, 63, 64, 170, 171, 172, 156, 4, 158, 71,
- /* 1260 */ 85, 144, 130, 141, 4, 145, 166, 79, 156, 204,
- /* 1270 */ 205, 119, 84, 212, 79, 87, 88, 4, 166, 91,
- /* 1280 */ 92, 93, 36, 222, 4, 100, 87, 88, 229, 87,
- /* 1290 */ 88, 4, 109, 47, 87, 88, 120, 109, 121, 17,
- /* 1300 */ 4, 144, 4, 87, 80, 117, 80, 165, 109, 63,
- /* 1310 */ 64, 109, 87, 88, 231, 222, 36, 71, 130, 81,
- /* 1320 */ 206, 133, 210, 135, 136, 79, 80, 47, 63, 64,
- /* 1330 */ 84, 87, 88, 87, 88, 156, 156, 91, 92, 93,
- /* 1340 */ 87, 88, 179, 63, 64, 166, 166, 87, 88, 142,
- /* 1350 */ 179, 71, 156, 109, 158, 109, 91, 92, 154, 79,
- /* 1360 */ 87, 88, 166, 155, 84, 112, 187, 87, 88, 100,
- /* 1370 */ 73, 91, 92, 93, 87, 88, 130, 156, 156, 133,
- /* 1380 */ 158, 135, 136, 87, 88, 87, 88, 166, 166, 109,
- /* 1390 */ 170, 171, 172, 170, 171, 172, 154, 156, 170, 171,
- /* 1400 */ 172, 156, 154, 143, 170, 171, 172, 166, 229, 154,
- /* 1410 */ 130, 166, 160, 133, 156, 135, 136, 130, 177, 146,
- /* 1420 */ 85, 155, 177, 156, 166, 158, 130, 156, 130, 155,
- /* 1430 */ 183, 28, 156, 166, 156, 177, 155, 166, 117, 156,
- /* 1440 */ 155, 192, 166, 129, 166, 212, 156, 156, 177, 166,
- /* 1450 */ 199, 231, 198, 177, 231, 177, 166, 166, 197, 231,
- /* 1460 */ 177, 127, 221, 200, 126, 231, 221, 177, 177, 124,
- /* 1470 */ 128, 201, 99, 156, 156, 156, 68, 47, 222, 221,
- /* 1480 */ 156, 156, 225, 166, 166, 166, 138, 82, 156, 166,
- /* 1490 */ 166, 166, 221, 156, 177, 177, 177, 221, 166, 221,
- /* 1500 */ 156, 177, 177, 166, 221, 156, 156, 4, 156, 177,
- /* 1510 */ 166, 221, 221, 156, 156, 166, 166, 209, 166, 209,
- /* 1520 */ 82, 177, 156, 166, 166, 155, 177, 177, 166, 177,
- /* 1530 */ 79, 156, 166, 178, 177, 177, 183, 155, 221, 221,
- /* 1540 */ 221, 166, 155, 177, 155, 221, 221, 156, 156, 156,
- /* 1550 */ 156, 156, 177, 221, 156, 178, 156, 166, 166, 166,
- /* 1560 */ 166, 166, 155, 209, 166, 221, 166, 82, 177, 177,
- /* 1570 */ 221, 221, 177, 221, 156, 177, 156, 177, 221, 221,
- /* 1580 */ 156, 156, 158, 156, 166, 209, 166, 221, 82, 24,
- /* 1590 */ 166, 166, 82, 166, 234, 177, 221, 177, 235, 156,
- /* 1600 */ 138, 158, 177, 197, 177, 156, 190, 45, 156, 166,
- /* 1610 */ 156, 82, 221, 221, 156, 166, 221, 156, 166, 221,
- /* 1620 */ 166, 221, 156, 156, 166, 156, 82, 166, 219, 79,
- /* 1630 */ 156, 190, 166, 166, 82, 166, 82, 156, 209, 221,
- /* 1640 */ 166, 221, 156, 155, 209, 156, 221, 166, 221, 156,
- /* 1650 */ 156, 156, 166, 82, 82, 166, 15, 238, 190, 166,
- /* 1660 */ 166, 166, 239, 121, 238, 194, 176, 231, 196, 185,
- /* 1670 */ 231, 226, 176, 208, 176, 197, 167, 233, 181, 209,
- /* 1680 */ 167, 167, 182, 182, 182, 167, 223, 232, 240, 207,
- /* 1690 */ 240, 227, 193, 189, 186, 240, 189,
+ /* 870 */ 66, 67, 68, 45, 46, 47, 48, 49, 50, 51,
+ /* 880 */ 52, 176, 228, 55, 56, 57, 58, 59, 60, 61,
+ /* 890 */ 62, 63, 64, 65, 66, 67, 68, 46, 47, 48,
+ /* 900 */ 49, 50, 51, 52, 87, 88, 55, 56, 57, 58,
+ /* 910 */ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ /* 920 */ 47, 48, 49, 50, 51, 52, 4, 222, 55, 56,
+ /* 930 */ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ /* 940 */ 67, 68, 161, 4, 80, 4, 156, 170, 171, 172,
+ /* 950 */ 80, 161, 173, 174, 175, 42, 166, 44, 36, 180,
+ /* 960 */ 4, 156, 145, 158, 156, 156, 158, 177, 80, 47,
+ /* 970 */ 114, 166, 191, 192, 166, 166, 100, 36, 80, 156,
+ /* 980 */ 171, 172, 192, 85, 212, 63, 64, 65, 47, 166,
+ /* 990 */ 167, 78, 161, 71, 222, 214, 215, 121, 217, 218,
+ /* 1000 */ 4, 79, 80, 80, 63, 64, 84, 4, 231, 87,
+ /* 1010 */ 88, 221, 71, 91, 92, 93, 85, 236, 237, 4,
+ /* 1020 */ 79, 80, 191, 192, 125, 84, 87, 88, 87, 88,
+ /* 1030 */ 80, 109, 91, 92, 93, 85, 4, 80, 4, 230,
+ /* 1040 */ 231, 80, 85, 87, 88, 214, 215, 79, 217, 218,
+ /* 1050 */ 109, 36, 130, 4, 141, 133, 4, 135, 136, 31,
+ /* 1060 */ 63, 64, 47, 4, 101, 102, 103, 80, 237, 130,
+ /* 1070 */ 36, 130, 85, 4, 133, 47, 135, 136, 63, 64,
+ /* 1080 */ 84, 47, 79, 87, 88, 65, 71, 84, 91, 92,
+ /* 1090 */ 87, 88, 4, 137, 79, 80, 80, 63, 64, 84,
+ /* 1100 */ 156, 85, 87, 88, 4, 71, 91, 92, 93, 82,
+ /* 1110 */ 166, 4, 109, 79, 65, 112, 84, 4, 84, 87,
+ /* 1120 */ 88, 87, 88, 4, 109, 91, 92, 93, 100, 167,
+ /* 1130 */ 4, 187, 0, 81, 106, 122, 87, 88, 142, 87,
+ /* 1140 */ 82, 109, 156, 109, 158, 130, 87, 88, 133, 156,
+ /* 1150 */ 135, 136, 166, 84, 22, 36, 87, 88, 109, 166,
+ /* 1160 */ 80, 4, 32, 4, 130, 203, 47, 133, 79, 135,
+ /* 1170 */ 136, 119, 138, 229, 80, 87, 88, 4, 109, 130,
+ /* 1180 */ 4, 122, 63, 64, 84, 80, 79, 87, 88, 4,
+ /* 1190 */ 71, 84, 85, 4, 87, 88, 108, 84, 79, 79,
+ /* 1200 */ 87, 88, 4, 84, 72, 106, 87, 88, 4, 109,
+ /* 1210 */ 91, 92, 93, 87, 88, 79, 109, 4, 32, 112,
+ /* 1220 */ 167, 4, 109, 101, 102, 103, 4, 156, 109, 122,
+ /* 1230 */ 123, 4, 156, 4, 158, 109, 117, 166, 156, 79,
+ /* 1240 */ 36, 84, 166, 84, 87, 88, 87, 88, 166, 130,
+ /* 1250 */ 98, 47, 133, 81, 135, 136, 203, 84, 167, 177,
+ /* 1260 */ 87, 88, 4, 87, 88, 100, 109, 63, 64, 84,
+ /* 1270 */ 10, 4, 87, 88, 4, 71, 87, 88, 4, 105,
+ /* 1280 */ 156, 210, 4, 79, 80, 87, 88, 111, 84, 4,
+ /* 1290 */ 166, 87, 88, 48, 203, 91, 92, 93, 109, 120,
+ /* 1300 */ 87, 88, 143, 221, 87, 88, 4, 109, 80, 87,
+ /* 1310 */ 88, 187, 48, 109, 87, 88, 87, 88, 156, 146,
+ /* 1320 */ 158, 36, 109, 131, 170, 171, 172, 79, 166, 144,
+ /* 1330 */ 20, 109, 47, 156, 130, 72, 109, 133, 72, 135,
+ /* 1340 */ 136, 33, 4, 166, 85, 87, 88, 130, 63, 64,
+ /* 1350 */ 170, 171, 172, 229, 87, 88, 71, 87, 88, 141,
+ /* 1360 */ 33, 87, 88, 79, 79, 87, 88, 4, 100, 84,
+ /* 1370 */ 112, 142, 87, 88, 36, 120, 91, 92, 93, 170,
+ /* 1380 */ 171, 172, 170, 171, 172, 231, 156, 210, 156, 87,
+ /* 1390 */ 88, 109, 121, 156, 109, 156, 166, 158, 166, 17,
+ /* 1400 */ 87, 63, 64, 166, 130, 166, 144, 165, 130, 71,
+ /* 1410 */ 143, 231, 80, 156, 80, 130, 146, 79, 133, 187,
+ /* 1420 */ 135, 136, 84, 166, 187, 87, 88, 81, 156, 91,
+ /* 1430 */ 92, 93, 130, 222, 204, 205, 155, 206, 166, 4,
+ /* 1440 */ 231, 154, 156, 231, 156, 156, 156, 109, 156, 177,
+ /* 1450 */ 87, 88, 166, 100, 166, 166, 166, 73, 166, 179,
+ /* 1460 */ 156, 229, 156, 177, 85, 177, 229, 177, 130, 177,
+ /* 1470 */ 166, 133, 166, 135, 136, 156, 156, 158, 156, 156,
+ /* 1480 */ 179, 177, 156, 177, 154, 166, 166, 154, 166, 166,
+ /* 1490 */ 154, 156, 166, 221, 155, 183, 156, 177, 155, 177,
+ /* 1500 */ 177, 166, 160, 177, 28, 156, 166, 221, 156, 221,
+ /* 1510 */ 156, 221, 177, 221, 156, 166, 155, 177, 166, 155,
+ /* 1520 */ 166, 86, 87, 88, 166, 221, 177, 221, 156, 177,
+ /* 1530 */ 156, 177, 117, 192, 197, 177, 156, 129, 166, 126,
+ /* 1540 */ 166, 221, 156, 221, 221, 156, 166, 221, 198, 177,
+ /* 1550 */ 156, 177, 166, 124, 156, 166, 221, 177, 199, 156,
+ /* 1560 */ 166, 221, 156, 177, 166, 127, 177, 156, 156, 166,
+ /* 1570 */ 221, 177, 166, 221, 156, 221, 156, 166, 166, 221,
+ /* 1580 */ 177, 156, 156, 200, 166, 212, 166, 128, 177, 177,
+ /* 1590 */ 99, 166, 166, 221, 201, 221, 156, 177, 68, 156,
+ /* 1600 */ 222, 221, 177, 177, 156, 47, 166, 221, 156, 166,
+ /* 1610 */ 221, 156, 156, 156, 166, 221, 225, 156, 166, 156,
+ /* 1620 */ 177, 166, 166, 166, 221, 177, 156, 166, 156, 166,
+ /* 1630 */ 156, 138, 221, 221, 156, 156, 166, 209, 166, 156,
+ /* 1640 */ 166, 221, 156, 156, 166, 166, 221, 221, 156, 166,
+ /* 1650 */ 156, 82, 166, 166, 166, 4, 156, 82, 166, 209,
+ /* 1660 */ 166, 155, 178, 79, 221, 166, 166, 155, 183, 221,
+ /* 1670 */ 155, 155, 155, 178, 209, 82, 209, 82, 234, 24,
+ /* 1680 */ 235, 138, 82, 45, 82, 82, 197, 190, 219, 79,
+ /* 1690 */ 209, 190, 155, 82, 82, 82, 82, 190, 238, 209,
+ /* 1700 */ 15, 239, 121, 176, 238, 194, 196, 176, 231, 181,
+ /* 1710 */ 208, 231, 176, 209, 185, 197, 167, 167, 167, 167,
+ /* 1720 */ 182, 182, 226, 182, 189, 193, 207, 240, 223, 189,
+ /* 1730 */ 232, 186, 240, 240, 240, 227, 233,
};
#define YY_SHIFT_USE_DFLT (-101)
#define YY_SHIFT_COUNT (343)
#define YY_SHIFT_MIN (-100)
-#define YY_SHIFT_MAX (1641)
+#define YY_SHIFT_MAX (1685)
static const short yy_shift_ofst[] = {
- /* 0 */ 273, -7, 499, -4, 141, 892, 1246, 1188, 533, 533,
- /* 10 */ 13, 577, 567, 1107, 1280, 725, 81, 366, 1054, 973,
- /* 20 */ 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280,
- /* 30 */ 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280,
- /* 40 */ 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1280, 1028, 43,
- /* 50 */ 1296, 1296, 1296, 1296, 1265, 1265, 1296, 1265, 1265, 1265,
- /* 60 */ 524, 173, 929, 1117, 1095, 1071, 1044, 1039, 1010, 986,
- /* 70 */ 251, 1287, 1287, 1298, 1130, 1296, 1287, 255, 301, 153,
- /* 80 */ 917, 853, 843, 540, 202, 531, 1273, 1260, 1253, 1244,
- /* 90 */ 1207, 1202, 1132, 1199, 1140, 1135, 1120, 1085, 731, 816,
- /* 100 */ 915, 728, 1080, 1042, 1152, 1152, 611, 1152, 990, 625,
- /* 110 */ 942, 195, 605, 1225, 1225, 1225, 1225, 1225, 1225, 1225,
- /* 120 */ 1225, -30, 1033, 167, 1321, 1321, -101, 502, 502, 502,
+ /* 0 */ 273, -7, 499, -4, 141, 922, 1204, 1119, 533, 533,
+ /* 10 */ 13, 577, 567, 1034, 1285, 1435, 81, 366, 1015, 941,
+ /* 20 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 30 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285,
+ /* 40 */ 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1338, 1107, 43,
+ /* 50 */ 1278, 1278, 1278, 1278, 997, 997, 1278, 997, 997, 997,
+ /* 60 */ 524, 173, 1003, 1185, 1173, 1159, 1157, 1113, 1100, 1069,
+ /* 70 */ 251, 1274, 1274, 1302, 1028, 1278, 1274, 255, 301, 153,
+ /* 80 */ 1049, 996, 1032, 540, 202, 531, 1270, 1267, 1258, 1227,
+ /* 90 */ 1229, 1222, 1217, 1213, 1198, 1189, 817, 1176, 731, 1126,
+ /* 100 */ 1088, 728, 1059, 725, 1052, 1052, 611, 1052, 939, 625,
+ /* 110 */ 956, 195, 605, 1363, 1363, 1363, 1363, 1363, 1363, 1363,
+ /* 120 */ 1363, -30, 1132, 167, 1415, 1415, -101, 502, 502, 502,
/* 130 */ 502, 502, 502, 502, 527, 327, 659, 778, 742, 716,
- /* 140 */ 692, 359, 804, 804, 827, 850, 850, 405, 405, 405,
+ /* 140 */ 692, 359, 828, 804, 804, 851, 873, 873, 405, 405,
/* 150 */ 405, 204, 211, 1, 233, 1, 181, 522, 35, 375,
- /* 160 */ -20, 121, -76, -100, -100, 858, 426, -100, -100, 166,
- /* 170 */ 690, 690, 690, 200, 200, 200, 566, 162, 1108, 164,
- /* 180 */ 93, 918, 164, 550, 678, 678, 565, 41, 164, 1641,
- /* 190 */ 1542, 1641, 1552, 1562, 1572, 1571, 1554, 1269, 1552, 1562,
- /* 200 */ 1550, 1544, 1529, 1562, 1314, 1510, 1462, 1565, 1506, 1485,
- /* 210 */ 1451, 1269, 1269, 1269, 1269, 1403, 1503, 1451, 1269, 1438,
- /* 220 */ 1503, 1405, 1348, 1430, 1408, 1373, 1342, 1345, 1334, 1338,
- /* 230 */ 1314, 1321, 1269, 1269, 1403, 1269, 1269, 1335, 1297, 1297,
- /* 240 */ 1297, 1269, 1297, -101, -101, -101, -101, -101, -101, -101,
- /* 250 */ -101, 458, 15, 880, 349, 848, 564, 1096, 706, 1072,
- /* 260 */ 983, 901, 590, 582, 451, 241, 449, 86, 38, -11,
- /* 270 */ 55, 28, -59, 1238, 1157, 1226, 1224, 1216, 1282, 1177,
- /* 280 */ 1176, 1183, 1185, 1195, 1122, 1214, 1175, 1205, 1198, 1162,
- /* 290 */ 1160, 1146, 1138, 1082, 1164, 1161, 1092, 1060, 1159, 1066,
- /* 300 */ 1079, 1056, 1012, 1017, 1037, 1006, 975, 972, 1018, 954,
- /* 310 */ 935, 932, 928, 905, 896, 845, 884, 883, 860, 813,
- /* 320 */ 860, 854, 815, 785, 840, 801, 800, 736, 617, 636,
+ /* 160 */ -20, 121, -76, -100, -100, 1122, 426, -100, -100, 166,
+ /* 170 */ 690, 690, 690, 200, 200, 200, 566, 162, 1016, 164,
+ /* 180 */ 93, 876, 164, 550, 678, 678, 565, 41, 164, 1685,
+ /* 190 */ 1581, 1685, 1611, 1638, 1614, 1613, 1612, 1353, 1611, 1638,
+ /* 200 */ 1610, 1603, 1602, 1638, 1408, 1600, 1543, 1655, 1595, 1593,
+ /* 210 */ 1584, 1353, 1353, 1353, 1353, 1476, 1651, 1584, 1353, 1575,
+ /* 220 */ 1651, 1569, 1493, 1558, 1530, 1491, 1459, 1429, 1438, 1413,
+ /* 230 */ 1408, 1415, 1353, 1353, 1476, 1353, 1353, 1379, 1384, 1384,
+ /* 240 */ 1384, 1353, 1384, -101, -101, -101, -101, -101, -101, -101,
+ /* 250 */ -101, 458, 15, 913, 349, 963, 564, 987, 706, 957,
+ /* 260 */ 950, 898, 590, 582, 451, 241, 449, 86, 38, -11,
+ /* 270 */ 55, 28, -59, 1346, 1262, 1334, 1332, 1313, 1382, 1271,
+ /* 280 */ 1255, 1282, 1268, 1284, 1218, 1327, 1259, 1308, 1310, 1266,
+ /* 290 */ 1263, 1228, 1248, 1192, 1264, 1245, 1174, 1179, 1260, 1165,
+ /* 300 */ 1172, 1099, 1152, 1160, 1186, 1136, 1120, 1089, 1130, 1105,
+ /* 310 */ 1094, 1080, 1020, 1058, 1027, 1013, 961, 968, 931, 899,
+ /* 320 */ 931, 923, 856, 719, 888, 870, 864, 735, 617, 636,
/* 330 */ 588, 559, 555, 532, 316, 498, 418, 407, 317, 178,
/* 340 */ 143, 87, 130, -41,
};
#define YY_REDUCE_USE_DFLT (-194)
#define YY_REDUCE_COUNT (250)
#define YY_REDUCE_MIN (-193)
-#define YY_REDUCE_MAX (1518)
+#define YY_REDUCE_MAX (1552)
static const short yy_reduce_ofst[] = {
- /* 0 */ 192, -34, 774, -57, 782, 318, -148, 879, 776, 374,
- /* 10 */ 132, 29, 320, 512, 466, 277, 1427, 1425, 1420, 1418,
- /* 20 */ 1400, 1398, 1395, 1392, 1391, 1375, 1366, 1358, 1357, 1352,
- /* 30 */ 1350, 1349, 1344, 1332, 1325, 1324, 1319, 1318, 1317, 1291,
- /* 40 */ 1290, 1283, 1278, 1276, 1271, 1258, 1245, 1241, 1065, 795,
- /* 50 */ 1179, 1059, 906, 893, 1234, 1228, -75, 1223, 1220, 1083,
- /* 60 */ 280, 431, 286, 920, 1443, 1424, 1267, 1222, 1196, 1100,
- /* 70 */ 925, 1112, 788, 470, 297, -131, 46, 866, 1061, 307,
- /* 80 */ 1489, 1495, 1494, 936, 1493, 1489, 936, 936, 1486, 936,
- /* 90 */ 936, 936, 1481, 936, 936, 936, 1474, 1469, 936, 1467,
- /* 100 */ 1466, 1461, 1458, 1454, 1007, 982, 1452, 864, 1449, 936,
- /* 110 */ 1394, 1393, 1337, 1221, 1180, 1009, 948, 936, 770, 215,
- /* 120 */ -80, 796, 634, 656, 242, -45, -193, 1093, 1093, 1093,
- /* 130 */ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
- /* 140 */ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093,
- /* 150 */ 1093, 1093, 1093, 1507, 1508, 1504, 1499, 1482, 1499, 1464,
- /* 160 */ 1463, 1093, 1499, 1499, 1499, 1444, 1455, 1499, 1499, 1518,
- /* 170 */ 1502, 1501, 1500, 1514, 1513, 1509, 1470, 1478, 1484, 1498,
- /* 180 */ 1497, 1465, 1496, 1445, 1439, 1436, 1472, 1471, 1490, 1426,
- /* 190 */ 1423, 1419, 1435, 1468, 1354, 1354, 1354, 1488, 1429, 1441,
- /* 200 */ 1409, 1354, 1354, 1416, 1406, 1354, 1363, 1360, 1376, 1354,
- /* 210 */ 1377, 1407, 1389, 1387, 1382, 1353, 1362, 1355, 1370, 1310,
- /* 220 */ 1323, 1308, 1257, 1256, 1093, 1233, 1270, 1263, 1251, 1254,
- /* 230 */ 1261, 1249, 1285, 1281, 1247, 1274, 1266, 1252, 1255, 1248,
- /* 240 */ 1242, 1208, 1204, 1171, 1163, 1114, 1093, 1093, 1093, 1093,
- /* 250 */ 1142,
+ /* 0 */ 192, -34, 781, -57, 831, 318, -148, 790, 809, 374,
+ /* 10 */ 132, 29, 320, 512, 466, 277, 1448, 1443, 1426, 1425,
+ /* 20 */ 1420, 1412, 1411, 1403, 1394, 1389, 1386, 1380, 1374, 1372,
+ /* 30 */ 1358, 1354, 1352, 1349, 1340, 1335, 1326, 1323, 1322, 1320,
+ /* 40 */ 1306, 1304, 1292, 1290, 1288, 1286, 1272, 1082, 1230, 779,
+ /* 50 */ 1237, 1232, 1124, 944, 1212, 1209, -75, 1180, 1154, 777,
+ /* 60 */ 280, 431, 286, 823, 1319, 1239, 1162, 1076, 986, 808,
+ /* 70 */ 805, 1177, 1071, 470, 297, -131, 46, 705, 772, 307,
+ /* 80 */ 1487, 1500, 1494, 1289, 1492, 1487, 1289, 1289, 1486, 1289,
+ /* 90 */ 1289, 1289, 1483, 1289, 1289, 1289, 1479, 1478, 1289, 1474,
+ /* 100 */ 1472, 1470, 1463, 1257, 1091, 1053, 1461, 962, 1457, 1289,
+ /* 110 */ 1456, 1455, 1452, 1440, 1418, 1406, 1398, 1289, 993, 215,
+ /* 120 */ -80, 654, 634, 656, 242, -45, -193, 1211, 1211, 1211,
+ /* 130 */ 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211,
+ /* 140 */ 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211,
+ /* 150 */ 1211, 1211, 1211, 1540, 1545, 1535, 1532, 1519, 1532, 1508,
+ /* 160 */ 1505, 1211, 1532, 1532, 1532, 1503, 1498, 1532, 1532, 1552,
+ /* 170 */ 1541, 1539, 1538, 1551, 1550, 1549, 1504, 1518, 1529, 1536,
+ /* 180 */ 1528, 1502, 1531, 1496, 1480, 1477, 1510, 1511, 1527, 1466,
+ /* 190 */ 1462, 1460, 1490, 1507, 1465, 1465, 1465, 1537, 1481, 1501,
+ /* 200 */ 1469, 1465, 1465, 1497, 1489, 1465, 1445, 1444, 1467, 1465,
+ /* 210 */ 1495, 1517, 1516, 1515, 1512, 1485, 1499, 1484, 1506, 1450,
+ /* 220 */ 1488, 1428, 1391, 1378, 1211, 1373, 1393, 1383, 1359, 1350,
+ /* 230 */ 1337, 1341, 1364, 1361, 1312, 1343, 1339, 1342, 1336, 1333,
+ /* 240 */ 1330, 1281, 1287, 1301, 1280, 1231, 1211, 1211, 1211, 1211,
+ /* 250 */ 1242,
};
static const YYACTIONTYPE yy_default[] = {
/* 0 */ 589, 936, 936, 862, 903, 851, 851, 851, 936, 936,
/* 10 */ 730, 936, 851, 851, 851, 936, 851, 851, 851, 851,
/* 20 */ 851, 851, 851, 851, 851, 851, 851, 851, 851, 851,
/* 30 */ 851, 851, 851, 851, 851, 851, 851, 851, 851, 851,
- /* 40 */ 851, 851, 851, 851, 851, 851, 851, 851, 724, 608,
+ /* 40 */ 851, 851, 851, 851, 851, 851, 851, 841, 724, 608,
/* 50 */ 936, 936, 936, 936, 936, 936, 936, 936, 936, 936,
/* 60 */ 616, 720, 730, 936, 936, 936, 936, 790, 777, 768,
/* 70 */ 936, 800, 800, 783, 679, 936, 800, 756, 752, 936,
@@ -670,7 +678,7 @@ static const YYACTIONTYPE yy_default[] = {
/* 110 */ 936, 840, 594, 936, 882, 936, 936, 936, 936, 936,
/* 120 */ 936, 605, 589, 936, 936, 936, 710, 736, 773, 761,
/* 130 */ 863, 856, 857, 855, 852, 852, 852, 852, 852, 852,
- /* 140 */ 852, 852, 852, 823, 816, 827, 815, 831, 841, 826,
+ /* 140 */ 852, 852, 852, 852, 823, 816, 827, 815, 831, 826,
/* 150 */ 818, 817, 819, 936, 936, 936, 936, 723, 936, 936,
/* 160 */ 936, 820, 936, 789, 698, 936, 910, 693, 601, 618,
/* 170 */ 936, 936, 936, 936, 936, 936, 936, 772, 670, 756,
@@ -1247,7 +1255,7 @@ static const char *const yyRuleName[] = {
/* 254 */ "exprx ::= RAISE LP IGNORE RP",
/* 255 */ "exprx ::= nm DOT",
/* 256 */ "exprx ::= nm DOT nm DOT",
- /* 257 */ "exprx ::= expr not_opt BETWEEN expr",
+ /* 257 */ "exprx ::= expr not_opt BETWEEN expr AND",
/* 258 */ "exprx ::= CASE case_operand case_exprlist case_else",
/* 259 */ "exprx ::= expr not_opt IN LP exprlist",
/* 260 */ "exprx ::= expr not_opt IN ID_DB",
@@ -2208,7 +2216,7 @@ static const struct {
{ 221, 4 },
{ 221, 2 },
{ 221, 4 },
- { 221, 4 },
+ { 221, 5 },
{ 221, 4 },
{ 221, 5 },
{ 221, 4 },
@@ -3879,12 +3887,12 @@ static void yy_reduce(
parserContext->minorErrorBeforeNextToken("Syntax error");
}
break;
- case 257: /* exprx ::= expr not_opt BETWEEN expr */
+ case 257: /* exprx ::= expr not_opt BETWEEN expr AND */
{
yygotominor.yy192 = new SqliteExpr();
- delete yymsp[-2].minor.yy291;
- delete yymsp[-3].minor.yy192;
- delete yymsp[0].minor.yy192;
+ delete yymsp[-3].minor.yy291;
+ delete yymsp[-4].minor.yy192;
+ delete yymsp[-1].minor.yy192;
objectForTokens = yygotominor.yy192;
parserContext->minorErrorBeforeNextToken("Syntax error");
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y
index e44e9b8..04da6cb 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y
@@ -1559,7 +1559,7 @@ exprx(X) ::= nm(N1) DOT nm(N2) DOT. {
parserContext->minorErrorBeforeNextToken("Syntax error");
}
exprx(X) ::= expr(E1) not_opt(N) BETWEEN
- expr(E2). [BETWEEN] {
+ expr(E2) AND. {
X = new SqliteExpr();
delete N;
delete E1;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
index 3bdd9a4..8786832 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
@@ -242,231 +242,237 @@ static const YYMINORTYPE yyzerominor = { 0 };
** shifting non-terminals after a reduce.
** yy_default[] Default action for each state.
*/
-#define YY_ACTTAB_COUNT (2221)
+#define YY_ACTTAB_COUNT (2282)
static const YYACTIONTYPE yy_action[] = {
- /* 0 */ 431, 49, 49, 48, 48, 48, 47, 216, 716, 339,
- /* 10 */ 643, 425, 52, 52, 52, 52, 45, 50, 50, 50,
- /* 20 */ 50, 49, 49, 48, 48, 48, 47, 216, 721, 1026,
- /* 30 */ 1026, 643, 131, 580, 52, 52, 52, 52, 411, 50,
- /* 40 */ 50, 50, 50, 49, 49, 48, 48, 48, 47, 216,
+ /* 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 */ 42, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
- /* 70 */ 1026, 1026, 563, 1026, 1026, 1026, 1026, 39, 40, 1026,
- /* 80 */ 1026, 1026, 1026, 1026, 41, 431, 528, 385, 716, 595,
+ /* 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, 48, 48, 48, 47, 216, 122,
+ /* 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, 42, 507, 509, 642, 508,
+ /* 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, 39, 40, 601, 200, 199, 7, 355, 41,
+ /* 160 */ 297, 716, 38, 39, 601, 200, 199, 7, 355, 40,
/* 170 */ 884, 307, 1134, 274, 249, 716, 17, 4, 884, 1134,
- /* 180 */ 57, 717, 642, 431, 422, 884, 329, 687, 429, 716,
+ /* 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, 42, 287, 300, 714, 713, 67, 302,
+ /* 240 */ 245, 673, 102, 41, 287, 300, 714, 713, 67, 302,
/* 250 */ 148, 307, 1133, 151, 306, 484, 81, 715, 97, 1133,
- /* 260 */ 39, 40, 551, 714, 713, 771, 130, 41, 946, 376,
- /* 270 */ 373, 372, 447, 47, 216, 4, 946, 714, 713, 334,
+ /* 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, 53,
- /* 340 */ 54, 426, 289, 1027, 1027, 675, 675, 51, 51, 52,
- /* 350 */ 52, 52, 52, 716, 50, 50, 50, 50, 49, 49,
- /* 360 */ 48, 48, 48, 47, 216, 431, 428, 340, 716, 335,
+ /* 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, 186, 53,
- /* 390 */ 54, 426, 289, 715, 452, 675, 675, 51, 51, 52,
- /* 400 */ 52, 52, 52, 411, 50, 50, 50, 50, 49, 49,
- /* 410 */ 48, 48, 48, 47, 216, 91, 953, 716, 619, 712,
- /* 420 */ 685, 403, 382, 130, 710, 42, 376, 373, 372, 711,
+ /* 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, 39, 40, 371, 231, 230, 716, 89, 41,
+ /* 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, 55,
- /* 500 */ 575, 678, 43, 368, 38, 401, 36, 381, 931, 1,
+ /* 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, 53, 54, 426, 289, 1027, 1027, 675, 675, 51,
- /* 530 */ 51, 52, 52, 52, 52, 660, 50, 50, 50, 50,
- /* 540 */ 49, 49, 48, 48, 48, 47, 216, 657, 648, 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, 51,
- /* 580 */ 51, 52, 52, 52, 52, 398, 50, 50, 50, 50,
- /* 590 */ 49, 49, 48, 48, 48, 47, 216, 1025, 1025, 81,
- /* 600 */ 53, 54, 426, 289, 1027, 1027, 675, 675, 51, 51,
- /* 610 */ 52, 52, 52, 52, 496, 50, 50, 50, 50, 49,
- /* 620 */ 49, 48, 48, 48, 47, 216, 1025, 1025, 1025, 1025,
+ /* 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, 50, 50, 50, 50, 49,
- /* 660 */ 49, 48, 48, 48, 47, 216, 288, 552, 714, 713,
+ /* 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, 53, 54, 426, 289, 1027, 1027, 675, 675, 51,
- /* 690 */ 51, 52, 52, 52, 52, 1094, 50, 50, 50, 50,
- /* 700 */ 49, 49, 48, 48, 48, 47, 216, 53, 54, 426,
- /* 710 */ 289, 418, 511, 675, 675, 51, 51, 52, 52, 52,
- /* 720 */ 52, 159, 50, 50, 50, 50, 49, 49, 48, 48,
- /* 730 */ 48, 47, 216, 490, 954, 315, 482, 482, 663, 553,
- /* 740 */ 215, 650, 714, 713, 81, 53, 54, 426, 289, 954,
- /* 750 */ 414, 675, 675, 51, 51, 52, 52, 52, 52, 397,
- /* 760 */ 50, 50, 50, 50, 49, 49, 48, 48, 48, 47,
+ /* 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, 53, 54, 426,
- /* 800 */ 289, 573, 716, 675, 675, 51, 51, 52, 52, 52,
- /* 810 */ 52, 321, 50, 50, 50, 50, 49, 49, 48, 48,
- /* 820 */ 48, 47, 216, 431, 1108, 81, 206, 205, 204, 53,
- /* 830 */ 54, 426, 289, 716, 425, 675, 675, 51, 51, 52,
- /* 840 */ 52, 52, 52, 344, 50, 50, 50, 50, 49, 49,
- /* 850 */ 48, 48, 48, 47, 216, 597, 715, 666, 600, 462,
+ /* 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, 42, 528, 272, 714, 713, 610, 349,
+ /* 880 */ 713, 714, 713, 41, 528, 272, 714, 713, 610, 349,
/* 890 */ 528, 450, 89, 677, 12, 633, 633, 338, 636, 609,
- /* 900 */ 39, 40, 649, 609, 714, 713, 716, 41, 1142, 1142,
+ /* 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, 33, 109,
+ /* 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, 53, 54,
- /* 980 */ 426, 289, 91, 91, 675, 675, 51, 51, 52, 52,
- /* 990 */ 52, 52, 644, 50, 50, 50, 50, 49, 49, 48,
- /* 1000 */ 48, 48, 47, 216, 1034, 444, 668, 667, 714, 713,
+ /* 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 */ 53, 54, 426, 289, 446, 680, 675, 675, 51, 51,
- /* 1030 */ 52, 52, 52, 52, 639, 50, 50, 50, 50, 49,
- /* 1040 */ 49, 48, 48, 48, 47, 216, 605, 53, 54, 426,
- /* 1050 */ 289, 716, 446, 675, 675, 51, 51, 52, 52, 52,
- /* 1060 */ 52, 459, 50, 50, 50, 50, 49, 49, 48, 48,
- /* 1070 */ 48, 47, 216, 453, 715, 37, 663, 423, 215, 460,
- /* 1080 */ 341, 369, 592, 53, 54, 426, 289, 638, 89, 675,
- /* 1090 */ 675, 51, 51, 52, 52, 52, 52, 31, 50, 50,
- /* 1100 */ 50, 50, 49, 49, 48, 48, 48, 47, 216, 413,
- /* 1110 */ 723, 2, 11, 53, 54, 426, 289, 34, 588, 675,
- /* 1120 */ 675, 51, 51, 52, 52, 52, 52, 624, 50, 50,
- /* 1130 */ 50, 50, 49, 49, 48, 48, 48, 47, 216, 515,
- /* 1140 */ 715, 537, 29, 91, 342, 666, 140, 8, 571, 53,
- /* 1150 */ 54, 426, 289, 714, 713, 675, 675, 51, 51, 52,
- /* 1160 */ 52, 52, 52, 548, 50, 50, 50, 50, 49, 49,
- /* 1170 */ 48, 48, 48, 47, 216, 91, 252, 234, 386, 53,
- /* 1180 */ 54, 426, 289, 89, 271, 675, 675, 51, 51, 52,
- /* 1190 */ 52, 52, 52, 333, 50, 50, 50, 50, 49, 49,
- /* 1200 */ 48, 48, 48, 47, 216, 532, 81, 682, 696, 338,
- /* 1210 */ 87, 53, 54, 426, 289, 22, 557, 675, 675, 51,
- /* 1220 */ 51, 52, 52, 52, 52, 615, 50, 50, 50, 50,
- /* 1230 */ 49, 49, 48, 48, 48, 47, 216, 682, 1109, 91,
- /* 1240 */ 504, 716, 53, 54, 426, 289, 604, 137, 675, 675,
- /* 1250 */ 51, 51, 52, 52, 52, 52, 136, 50, 50, 50,
- /* 1260 */ 50, 49, 49, 48, 48, 48, 47, 216, 431, 1107,
- /* 1270 */ 135, 488, 388, 722, 53, 54, 426, 289, 308, 425,
- /* 1280 */ 675, 675, 51, 51, 52, 52, 52, 52, 620, 50,
- /* 1290 */ 50, 50, 50, 49, 49, 48, 48, 48, 47, 216,
- /* 1300 */ 428, 552, 624, 428, 283, 716, 411, 517, 404, 682,
- /* 1310 */ 697, 69, 829, 430, 715, 715, 430, 715, 464, 540,
- /* 1320 */ 653, 686, 186, 685, 686, 186, 99, 428, 42, 716,
- /* 1330 */ 390, 715, 226, 223, 599, 539, 5, 534, 534, 682,
- /* 1340 */ 430, 91, 91, 714, 713, 39, 40, 682, 686, 186,
- /* 1350 */ 555, 431, 41, 620, 620, 403, 405, 598, 403, 387,
- /* 1360 */ 4, 570, 425, 629, 311, 642, 428, 422, 326, 10,
- /* 1370 */ 687, 429, 716, 624, 316, 690, 716, 316, 428, 430,
- /* 1380 */ 716, 620, 642, 689, 688, 687, 715, 686, 186, 411,
- /* 1390 */ 716, 430, 498, 596, 716, 632, 499, 602, 612, 686,
- /* 1400 */ 186, 406, 491, 591, 285, 631, 685, 714, 713, 266,
- /* 1410 */ 590, 42, 716, 365, 209, 589, 642, 350, 676, 9,
- /* 1420 */ 642, 332, 715, 261, 107, 611, 530, 221, 39, 40,
- /* 1430 */ 225, 714, 713, 399, 431, 41, 715, 716, 283, 351,
- /* 1440 */ 316, 138, 716, 4, 270, 425, 209, 286, 642, 682,
- /* 1450 */ 422, 715, 316, 714, 429, 716, 209, 530, 690, 716,
- /* 1460 */ 715, 19, 561, 491, 716, 642, 689, 688, 687, 525,
- /* 1470 */ 375, 65, 411, 519, 714, 713, 273, 475, 714, 713,
- /* 1480 */ 64, 370, 714, 713, 619, 18, 525, 514, 129, 685,
- /* 1490 */ 519, 479, 714, 713, 42, 716, 714, 713, 227, 642,
- /* 1500 */ 428, 676, 9, 642, 514, 63, 286, 428, 479, 475,
- /* 1510 */ 622, 39, 40, 430, 714, 713, 431, 718, 41, 715,
- /* 1520 */ 430, 686, 181, 715, 279, 716, 4, 425, 686, 163,
- /* 1530 */ 715, 642, 366, 422, 472, 156, 687, 429, 533, 714,
- /* 1540 */ 713, 690, 125, 3, 714, 713, 416, 79, 642, 689,
- /* 1550 */ 688, 687, 469, 85, 411, 258, 438, 714, 713, 220,
- /* 1560 */ 26, 714, 713, 25, 706, 407, 714, 713, 715, 77,
- /* 1570 */ 704, 685, 510, 438, 641, 516, 42, 715, 716, 472,
- /* 1580 */ 353, 641, 642, 715, 676, 9, 642, 503, 1035, 428,
- /* 1590 */ 625, 536, 505, 39, 40, 83, 119, 714, 713, 428,
- /* 1600 */ 41, 621, 430, 497, 428, 420, 254, 62, 4, 1037,
- /* 1610 */ 686, 172, 430, 642, 140, 422, 469, 430, 687, 429,
- /* 1620 */ 686, 189, 152, 690, 337, 686, 187, 714, 713, 251,
- /* 1630 */ 642, 689, 688, 687, 161, 54, 426, 289, 716, 558,
- /* 1640 */ 675, 675, 51, 51, 52, 52, 52, 52, 478, 50,
- /* 1650 */ 50, 50, 50, 49, 49, 48, 48, 48, 47, 216,
- /* 1660 */ 431, 428, 455, 641, 642, 705, 676, 9, 642, 111,
- /* 1670 */ 716, 425, 428, 641, 430, 428, 702, 454, 641, 428,
- /* 1680 */ 714, 713, 686, 196, 207, 430, 428, 72, 430, 715,
- /* 1690 */ 428, 436, 430, 686, 195, 716, 686, 197, 411, 430,
- /* 1700 */ 686, 201, 716, 430, 428, 699, 428, 686, 232, 428,
- /* 1710 */ 209, 686, 290, 96, 203, 685, 150, 430, 715, 430,
- /* 1720 */ 42, 224, 430, 86, 319, 686, 190, 686, 194, 428,
- /* 1730 */ 686, 193, 257, 82, 695, 641, 256, 39, 40, 318,
- /* 1740 */ 714, 713, 430, 719, 41, 715, 641, 715, 149, 641,
- /* 1750 */ 686, 185, 4, 641, 707, 679, 287, 642, 709, 422,
- /* 1760 */ 641, 567, 687, 429, 641, 15, 428, 690, 715, 715,
- /* 1770 */ 367, 428, 714, 713, 642, 689, 688, 687, 641, 430,
- /* 1780 */ 641, 716, 703, 641, 430, 147, 287, 686, 188, 701,
- /* 1790 */ 708, 328, 686, 314, 428, 432, 428, 714, 713, 715,
- /* 1800 */ 700, 428, 145, 641, 714, 713, 408, 430, 642, 430,
- /* 1810 */ 676, 9, 642, 428, 430, 686, 313, 686, 312, 715,
- /* 1820 */ 428, 327, 686, 184, 684, 428, 430, 433, 494, 294,
- /* 1830 */ 428, 637, 234, 430, 686, 171, 428, 651, 430, 17,
- /* 1840 */ 641, 686, 170, 430, 715, 641, 686, 183, 293, 430,
- /* 1850 */ 428, 686, 169, 626, 716, 400, 428, 686, 192, 292,
- /* 1860 */ 428, 287, 291, 430, 28, 44, 715, 651, 641, 430,
- /* 1870 */ 641, 686, 191, 430, 715, 641, 428, 686, 168, 428,
- /* 1880 */ 402, 686, 167, 714, 713, 56, 716, 641, 683, 430,
- /* 1890 */ 428, 216, 430, 428, 641, 428, 325, 686, 93, 641,
- /* 1900 */ 686, 166, 716, 430, 641, 428, 430, 428, 430, 640,
- /* 1910 */ 641, 686, 164, 66, 686, 174, 686, 173, 430, 716,
- /* 1920 */ 430, 716, 428, 616, 641, 716, 686, 175, 686, 178,
- /* 1930 */ 641, 229, 419, 214, 641, 430, 228, 415, 428, 716,
- /* 1940 */ 35, 428, 651, 686, 94, 617, 716, 635, 141, 716,
- /* 1950 */ 641, 430, 428, 641, 430, 428, 714, 713, 715, 686,
- /* 1960 */ 177, 139, 686, 176, 641, 430, 108, 641, 430, 641,
- /* 1970 */ 428, 133, 392, 686, 180, 716, 686, 179, 716, 641,
- /* 1980 */ 716, 641, 531, 430, 715, 430, 716, 583, 714, 713,
- /* 1990 */ 389, 686, 165, 686, 70, 393, 641, 716, 248, 716,
- /* 2000 */ 541, 716, 481, 246, 714, 713, 380, 477, 715, 716,
- /* 2010 */ 386, 715, 641, 578, 716, 641, 715, 716, 577, 716,
- /* 2020 */ 330, 714, 713, 714, 713, 275, 641, 714, 713, 641,
- /* 2030 */ 244, 716, 242, 502, 473, 527, 470, 277, 715, 523,
- /* 2040 */ 574, 714, 713, 715, 641, 715, 641, 573, 714, 713,
- /* 2050 */ 310, 714, 713, 236, 568, 549, 269, 322, 572, 554,
- /* 2060 */ 518, 263, 529, 492, 547, 546, 715, 715, 715, 715,
- /* 2070 */ 545, 489, 360, 347, 715, 544, 309, 714, 713, 128,
- /* 2080 */ 714, 713, 714, 713, 442, 715, 715, 521, 714, 713,
- /* 2090 */ 80, 127, 480, 427, 106, 284, 262, 715, 535, 714,
- /* 2100 */ 713, 714, 713, 714, 713, 441, 715, 212, 715, 476,
- /* 2110 */ 126, 714, 713, 443, 354, 648, 714, 713, 24, 714,
- /* 2120 */ 713, 714, 713, 264, 253, 363, 526, 250, 474, 241,
- /* 2130 */ 237, 238, 124, 714, 713, 78, 715, 715, 105, 123,
- /* 2140 */ 715, 121, 715, 715, 715, 84, 513, 155, 104, 348,
- /* 2150 */ 120, 493, 103, 345, 118, 76, 343, 117, 471, 116,
- /* 2160 */ 463, 75, 652, 115, 114, 623, 74, 323, 73, 113,
- /* 2170 */ 23, 451, 20, 449, 101, 445, 100, 112, 439, 520,
- /* 2180 */ 162, 61, 655, 295, 669, 412, 278, 198, 665, 569,
- /* 2190 */ 618, 522, 374, 305, 6, 628, 364, 681, 664, 654,
- /* 2200 */ 260, 361, 211, 556, 409, 71, 296, 566, 560, 559,
- /* 2210 */ 487, 81, 587, 1150, 46, 586, 1150, 1150, 1150, 1150,
- /* 2220 */ 550,
+ /* 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, 286, 337, 714,
+ /* 1700 */ 713, 686, 190, 714, 713, 621, 287, 72, 430, 428,
+ /* 1710 */ 715, 428, 436, 685, 209, 558, 686, 188, 41, 715,
+ /* 1720 */ 567, 287, 430, 642, 430, 676, 9, 642, 716, 96,
+ /* 1730 */ 686, 196, 686, 195, 715, 38, 39, 641, 716, 283,
+ /* 1740 */ 431, 327, 40, 716, 207, 428, 203, 319, 150, 428,
+ /* 1750 */ 4, 425, 715, 318, 641, 642, 325, 422, 430, 716,
+ /* 1760 */ 687, 429, 430, 719, 716, 690, 686, 197, 709, 641,
+ /* 1770 */ 686, 201, 642, 689, 688, 687, 428, 224, 411, 716,
+ /* 1780 */ 261, 716, 86, 641, 221, 641, 708, 651, 258, 430,
+ /* 1790 */ 428, 695, 220, 715, 428, 685, 420, 686, 232, 227,
+ /* 1800 */ 41, 715, 651, 430, 715, 433, 642, 430, 676, 9,
+ /* 1810 */ 642, 686, 290, 428, 707, 686, 191, 38, 39, 641,
+ /* 1820 */ 149, 147, 431, 641, 40, 257, 430, 82, 432, 256,
+ /* 1830 */ 714, 713, 4, 425, 686, 194, 679, 642, 715, 422,
+ /* 1840 */ 714, 713, 714, 429, 716, 714, 713, 690, 716, 715,
+ /* 1850 */ 641, 367, 428, 15, 642, 689, 688, 687, 428, 684,
+ /* 1860 */ 411, 714, 713, 700, 641, 430, 714, 713, 641, 145,
+ /* 1870 */ 17, 430, 476, 686, 193, 234, 521, 685, 294, 686,
+ /* 1880 */ 185, 714, 713, 714, 713, 293, 400, 641, 642, 428,
+ /* 1890 */ 676, 9, 642, 541, 428, 502, 292, 28, 529, 38,
+ /* 1900 */ 39, 474, 430, 291, 248, 408, 40, 430, 481, 428,
+ /* 1910 */ 686, 189, 55, 683, 4, 686, 314, 715, 715, 642,
+ /* 1920 */ 428, 422, 430, 463, 687, 429, 641, 428, 716, 690,
+ /* 1930 */ 686, 313, 641, 430, 402, 216, 642, 689, 688, 687,
+ /* 1940 */ 430, 686, 312, 428, 536, 428, 714, 713, 686, 184,
+ /* 1950 */ 714, 713, 43, 640, 419, 66, 430, 229, 430, 214,
+ /* 1960 */ 415, 228, 34, 641, 686, 171, 686, 170, 641, 637,
+ /* 1970 */ 642, 635, 676, 9, 642, 428, 141, 626, 428, 622,
+ /* 1980 */ 246, 139, 715, 641, 477, 428, 108, 389, 430, 428,
+ /* 1990 */ 715, 430, 715, 715, 641, 386, 686, 183, 430, 686,
+ /* 2000 */ 169, 641, 430, 380, 577, 471, 686, 186, 617, 244,
+ /* 2010 */ 686, 168, 428, 473, 133, 428, 242, 641, 330, 641,
+ /* 2020 */ 470, 715, 715, 583, 578, 430, 277, 715, 430, 715,
+ /* 2030 */ 714, 713, 428, 686, 167, 428, 686, 93, 574, 716,
+ /* 2040 */ 535, 573, 443, 572, 716, 430, 547, 128, 430, 641,
+ /* 2050 */ 310, 428, 641, 686, 166, 428, 686, 164, 428, 641,
+ /* 2060 */ 716, 236, 716, 641, 430, 322, 546, 716, 430, 428,
+ /* 2070 */ 393, 430, 686, 174, 715, 554, 686, 173, 309, 686,
+ /* 2080 */ 175, 716, 430, 715, 716, 275, 641, 716, 545, 641,
+ /* 2090 */ 686, 178, 428, 80, 428, 568, 716, 428, 715, 428,
+ /* 2100 */ 544, 716, 127, 106, 716, 430, 641, 430, 715, 641,
+ /* 2110 */ 430, 549, 430, 686, 94, 686, 177, 428, 686, 176,
+ /* 2120 */ 686, 180, 269, 428, 715, 641, 212, 392, 126, 641,
+ /* 2130 */ 430, 354, 641, 262, 24, 715, 430, 526, 686, 179,
+ /* 2140 */ 430, 714, 713, 641, 686, 165, 714, 713, 686, 70,
+ /* 2150 */ 124, 363, 78, 527, 123, 105, 121, 155, 523, 513,
+ /* 2160 */ 84, 104, 714, 713, 714, 713, 641, 348, 641, 714,
+ /* 2170 */ 713, 641, 263, 641, 518, 360, 492, 489, 120, 493,
+ /* 2180 */ 441, 480, 103, 714, 713, 715, 714, 713, 715, 714,
+ /* 2190 */ 713, 641, 648, 118, 345, 347, 76, 641, 714, 713,
+ /* 2200 */ 442, 641, 343, 714, 713, 427, 714, 713, 715, 284,
+ /* 2210 */ 264, 253, 117, 715, 250, 241, 75, 116, 715, 115,
+ /* 2220 */ 237, 74, 715, 715, 715, 73, 238, 715, 715, 114,
+ /* 2230 */ 323, 113, 23, 715, 451, 652, 20, 449, 101, 715,
+ /* 2240 */ 100, 445, 112, 61, 439, 162, 295, 669, 655, 623,
+ /* 2250 */ 412, 665, 520, 628, 618, 278, 569, 260, 198, 361,
+ /* 2260 */ 305, 374, 681, 522, 664, 6, 654, 556, 211, 45,
+ /* 2270 */ 364, 487, 566, 560, 296, 559, 409, 81, 71, 587,
+ /* 2280 */ 586, 550,
};
static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 4, 81, 82, 83, 84, 85, 86, 87, 4, 58,
@@ -583,162 +589,168 @@ static const YYCODETYPE yy_lookahead[] = {
/* 1110 */ 172, 173, 13, 62, 63, 64, 65, 159, 97, 68,
/* 1120 */ 69, 70, 71, 72, 73, 74, 75, 177, 77, 78,
/* 1130 */ 79, 80, 81, 82, 83, 84, 85, 86, 87, 97,
- /* 1140 */ 190, 185, 104, 219, 260, 261, 104, 13, 97, 62,
+ /* 1140 */ 190, 185, 104, 219, 260, 261, 104, 97, 97, 62,
/* 1150 */ 63, 64, 65, 106, 107, 68, 69, 70, 71, 72,
/* 1160 */ 73, 74, 75, 116, 77, 78, 79, 80, 81, 82,
- /* 1170 */ 83, 84, 85, 86, 87, 219, 97, 138, 139, 62,
- /* 1180 */ 63, 64, 65, 104, 97, 68, 69, 70, 71, 72,
+ /* 1170 */ 83, 84, 85, 86, 87, 219, 4, 138, 139, 62,
+ /* 1180 */ 63, 64, 65, 25, 97, 68, 69, 70, 71, 72,
/* 1190 */ 73, 74, 75, 243, 77, 78, 79, 80, 81, 82,
- /* 1200 */ 83, 84, 85, 86, 87, 185, 55, 4, 197, 25,
- /* 1210 */ 96, 62, 63, 64, 65, 98, 205, 68, 69, 70,
- /* 1220 */ 71, 72, 73, 74, 75, 30, 77, 78, 79, 80,
- /* 1230 */ 81, 82, 83, 84, 85, 86, 87, 4, 89, 219,
- /* 1240 */ 89, 4, 62, 63, 64, 65, 144, 13, 68, 69,
- /* 1250 */ 70, 71, 72, 73, 74, 75, 97, 77, 78, 79,
- /* 1260 */ 80, 81, 82, 83, 84, 85, 86, 87, 4, 89,
- /* 1270 */ 97, 97, 104, 89, 62, 63, 64, 65, 104, 15,
- /* 1280 */ 68, 69, 70, 71, 72, 73, 74, 75, 191, 77,
+ /* 1200 */ 83, 84, 85, 86, 87, 185, 13, 185, 197, 96,
+ /* 1210 */ 13, 62, 63, 64, 65, 98, 205, 68, 69, 70,
+ /* 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,
/* 1290 */ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
- /* 1300 */ 177, 177, 177, 177, 177, 4, 42, 185, 185, 106,
- /* 1310 */ 186, 187, 97, 190, 190, 190, 190, 190, 177, 104,
- /* 1320 */ 117, 198, 199, 59, 198, 199, 99, 177, 64, 4,
- /* 1330 */ 99, 190, 235, 209, 83, 211, 96, 100, 101, 106,
- /* 1340 */ 190, 219, 219, 106, 107, 81, 82, 4, 198, 199,
- /* 1350 */ 117, 4, 88, 191, 191, 232, 233, 97, 232, 233,
- /* 1360 */ 96, 97, 15, 236, 237, 101, 177, 103, 243, 96,
- /* 1370 */ 106, 107, 4, 177, 251, 111, 4, 251, 177, 190,
- /* 1380 */ 4, 191, 118, 119, 120, 121, 190, 198, 199, 42,
- /* 1390 */ 4, 190, 7, 135, 4, 201, 11, 235, 235, 198,
- /* 1400 */ 199, 251, 101, 97, 254, 201, 59, 106, 107, 177,
- /* 1410 */ 97, 64, 4, 181, 252, 97, 152, 32, 154, 155,
- /* 1420 */ 156, 232, 190, 177, 17, 235, 101, 181, 81, 82,
- /* 1430 */ 38, 106, 107, 232, 4, 88, 190, 4, 177, 243,
- /* 1440 */ 251, 98, 4, 96, 97, 15, 252, 177, 101, 106,
- /* 1450 */ 103, 190, 251, 106, 107, 4, 252, 132, 111, 4,
- /* 1460 */ 190, 96, 6, 162, 4, 118, 119, 120, 121, 101,
- /* 1470 */ 38, 96, 42, 101, 106, 107, 97, 101, 106, 107,
- /* 1480 */ 96, 38, 106, 107, 141, 96, 118, 101, 115, 59,
- /* 1490 */ 118, 101, 106, 107, 64, 4, 106, 107, 237, 152,
- /* 1500 */ 177, 154, 155, 156, 118, 96, 177, 177, 118, 133,
- /* 1510 */ 177, 81, 82, 190, 106, 107, 4, 177, 88, 190,
- /* 1520 */ 190, 198, 199, 190, 129, 4, 96, 15, 198, 199,
- /* 1530 */ 190, 101, 64, 103, 101, 98, 106, 107, 103, 106,
- /* 1540 */ 107, 111, 123, 12, 106, 107, 276, 142, 118, 119,
- /* 1550 */ 120, 121, 101, 128, 42, 177, 101, 106, 107, 181,
- /* 1560 */ 71, 106, 107, 71, 177, 157, 106, 107, 190, 153,
- /* 1570 */ 177, 59, 89, 118, 251, 139, 64, 190, 4, 146,
- /* 1580 */ 22, 251, 152, 190, 154, 155, 156, 47, 158, 177,
- /* 1590 */ 152, 100, 89, 81, 82, 39, 123, 106, 107, 177,
- /* 1600 */ 88, 141, 190, 39, 177, 276, 161, 96, 96, 97,
- /* 1610 */ 198, 199, 190, 101, 104, 103, 165, 190, 106, 107,
- /* 1620 */ 198, 199, 143, 111, 37, 198, 199, 106, 107, 95,
- /* 1630 */ 118, 119, 120, 121, 96, 63, 64, 65, 4, 118,
- /* 1640 */ 68, 69, 70, 71, 72, 73, 74, 75, 103, 77,
- /* 1650 */ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
- /* 1660 */ 4, 177, 97, 251, 152, 91, 154, 155, 156, 93,
- /* 1670 */ 4, 15, 177, 251, 190, 177, 177, 97, 251, 177,
- /* 1680 */ 106, 107, 198, 199, 238, 190, 177, 95, 190, 190,
- /* 1690 */ 177, 36, 190, 198, 199, 4, 198, 199, 42, 190,
- /* 1700 */ 198, 199, 4, 190, 177, 177, 177, 198, 199, 177,
- /* 1710 */ 252, 198, 199, 189, 273, 59, 90, 190, 190, 190,
- /* 1720 */ 64, 204, 190, 204, 275, 198, 199, 198, 199, 177,
- /* 1730 */ 198, 199, 177, 180, 177, 251, 181, 81, 82, 275,
- /* 1740 */ 106, 107, 190, 176, 88, 190, 251, 190, 178, 251,
- /* 1750 */ 198, 199, 96, 251, 49, 177, 177, 101, 176, 103,
- /* 1760 */ 251, 127, 106, 107, 251, 104, 177, 111, 190, 190,
- /* 1770 */ 60, 177, 106, 107, 118, 119, 120, 121, 251, 190,
- /* 1780 */ 251, 4, 91, 251, 190, 178, 177, 198, 199, 91,
- /* 1790 */ 176, 212, 198, 199, 177, 183, 177, 106, 107, 190,
- /* 1800 */ 184, 177, 56, 251, 106, 107, 177, 190, 152, 190,
- /* 1810 */ 154, 155, 156, 177, 190, 198, 199, 198, 199, 190,
- /* 1820 */ 177, 212, 198, 199, 221, 177, 190, 176, 162, 227,
- /* 1830 */ 177, 177, 138, 190, 198, 199, 177, 258, 190, 151,
- /* 1840 */ 251, 198, 199, 190, 190, 251, 198, 199, 228, 190,
- /* 1850 */ 177, 198, 199, 177, 4, 148, 177, 198, 199, 229,
- /* 1860 */ 177, 177, 230, 190, 149, 252, 190, 258, 251, 190,
- /* 1870 */ 251, 198, 199, 190, 190, 251, 177, 198, 199, 177,
- /* 1880 */ 147, 198, 199, 106, 107, 150, 4, 251, 231, 190,
- /* 1890 */ 177, 87, 190, 177, 251, 177, 212, 198, 199, 251,
- /* 1900 */ 198, 199, 4, 190, 251, 177, 190, 177, 190, 64,
- /* 1910 */ 251, 198, 199, 96, 198, 199, 198, 199, 190, 4,
- /* 1920 */ 190, 4, 177, 146, 251, 4, 198, 199, 198, 199,
- /* 1930 */ 251, 259, 203, 87, 251, 190, 255, 203, 177, 4,
- /* 1940 */ 158, 177, 258, 198, 199, 177, 4, 241, 99, 4,
- /* 1950 */ 251, 190, 177, 251, 190, 177, 106, 107, 190, 198,
- /* 1960 */ 199, 241, 198, 199, 251, 190, 99, 251, 190, 251,
- /* 1970 */ 177, 177, 177, 198, 199, 4, 198, 199, 4, 251,
- /* 1980 */ 4, 251, 132, 190, 190, 190, 4, 200, 106, 107,
- /* 1990 */ 223, 198, 199, 198, 199, 177, 251, 4, 177, 4,
- /* 2000 */ 118, 4, 181, 177, 106, 107, 123, 181, 190, 4,
- /* 2010 */ 139, 190, 251, 200, 4, 251, 190, 4, 208, 4,
- /* 2020 */ 31, 106, 107, 106, 107, 177, 251, 106, 107, 251,
- /* 2030 */ 177, 4, 177, 118, 181, 118, 181, 200, 190, 118,
- /* 2040 */ 202, 106, 107, 190, 251, 190, 251, 122, 106, 107,
- /* 2050 */ 203, 106, 107, 177, 177, 177, 177, 181, 200, 208,
- /* 2060 */ 118, 177, 164, 118, 200, 200, 190, 190, 190, 190,
- /* 2070 */ 200, 100, 177, 177, 190, 200, 203, 106, 107, 99,
- /* 2080 */ 106, 107, 106, 107, 177, 190, 190, 152, 106, 107,
- /* 2090 */ 180, 99, 118, 177, 180, 177, 264, 190, 241, 106,
- /* 2100 */ 107, 106, 107, 106, 107, 100, 190, 241, 190, 133,
- /* 2110 */ 99, 106, 107, 118, 27, 100, 106, 107, 158, 106,
- /* 2120 */ 107, 106, 107, 177, 177, 265, 227, 177, 146, 177,
- /* 2130 */ 177, 177, 99, 106, 107, 215, 190, 190, 62, 99,
- /* 2140 */ 190, 99, 190, 190, 190, 96, 215, 250, 180, 241,
- /* 2150 */ 99, 227, 180, 241, 99, 217, 60, 99, 165, 99,
- /* 2160 */ 163, 217, 152, 99, 99, 152, 217, 241, 217, 99,
- /* 2170 */ 268, 18, 268, 241, 99, 241, 99, 99, 16, 152,
- /* 2180 */ 224, 270, 201, 226, 261, 256, 201, 210, 261, 206,
- /* 2190 */ 242, 227, 202, 175, 224, 240, 263, 191, 191, 191,
- /* 2200 */ 242, 242, 262, 191, 216, 239, 222, 207, 207, 207,
- /* 2210 */ 274, 55, 198, 277, 253, 198, 277, 277, 277, 277,
- /* 2220 */ 211,
+ /* 1300 */ 235, 62, 63, 64, 65, 83, 104, 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,
+ /* 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, 177, 37, 106,
+ /* 1700 */ 107, 198, 199, 106, 107, 141, 177, 95, 190, 177,
+ /* 1710 */ 190, 177, 36, 59, 252, 118, 198, 199, 64, 190,
+ /* 1720 */ 127, 177, 190, 152, 190, 154, 155, 156, 4, 189,
+ /* 1730 */ 198, 199, 198, 199, 190, 81, 82, 251, 4, 177,
+ /* 1740 */ 4, 212, 88, 4, 238, 177, 273, 275, 90, 177,
+ /* 1750 */ 96, 15, 190, 275, 251, 101, 212, 103, 190, 4,
+ /* 1760 */ 106, 107, 190, 176, 4, 111, 198, 199, 176, 251,
+ /* 1770 */ 198, 199, 118, 119, 120, 121, 177, 204, 42, 4,
+ /* 1780 */ 177, 4, 204, 251, 181, 251, 176, 258, 177, 190,
+ /* 1790 */ 177, 177, 181, 190, 177, 59, 276, 198, 199, 237,
+ /* 1800 */ 64, 190, 258, 190, 190, 176, 152, 190, 154, 155,
+ /* 1810 */ 156, 198, 199, 177, 49, 198, 199, 81, 82, 251,
+ /* 1820 */ 178, 178, 4, 251, 88, 177, 190, 180, 183, 181,
+ /* 1830 */ 106, 107, 96, 15, 198, 199, 177, 101, 190, 103,
+ /* 1840 */ 106, 107, 106, 107, 4, 106, 107, 111, 4, 190,
+ /* 1850 */ 251, 60, 177, 104, 118, 119, 120, 121, 177, 221,
+ /* 1860 */ 42, 106, 107, 184, 251, 190, 106, 107, 251, 56,
+ /* 1870 */ 151, 190, 133, 198, 199, 138, 152, 59, 227, 198,
+ /* 1880 */ 199, 106, 107, 106, 107, 228, 148, 251, 152, 177,
+ /* 1890 */ 154, 155, 156, 118, 177, 118, 229, 149, 164, 81,
+ /* 1900 */ 82, 146, 190, 230, 177, 177, 88, 190, 181, 177,
+ /* 1910 */ 198, 199, 150, 231, 96, 198, 199, 190, 190, 101,
+ /* 1920 */ 177, 103, 190, 163, 106, 107, 251, 177, 4, 111,
+ /* 1930 */ 198, 199, 251, 190, 147, 87, 118, 119, 120, 121,
+ /* 1940 */ 190, 198, 199, 177, 100, 177, 106, 107, 198, 199,
+ /* 1950 */ 106, 107, 252, 64, 203, 96, 190, 259, 190, 87,
+ /* 1960 */ 203, 255, 158, 251, 198, 199, 198, 199, 251, 177,
+ /* 1970 */ 152, 241, 154, 155, 156, 177, 99, 177, 177, 177,
+ /* 1980 */ 177, 241, 190, 251, 181, 177, 99, 223, 190, 177,
+ /* 1990 */ 190, 190, 190, 190, 251, 139, 198, 199, 190, 198,
+ /* 2000 */ 199, 251, 190, 123, 208, 165, 198, 199, 177, 177,
+ /* 2010 */ 198, 199, 177, 181, 177, 177, 177, 251, 31, 251,
+ /* 2020 */ 181, 190, 190, 200, 200, 190, 200, 190, 190, 190,
+ /* 2030 */ 106, 107, 177, 198, 199, 177, 198, 199, 202, 4,
+ /* 2040 */ 241, 122, 118, 200, 4, 190, 200, 99, 190, 251,
+ /* 2050 */ 203, 177, 251, 198, 199, 177, 198, 199, 177, 251,
+ /* 2060 */ 4, 177, 4, 251, 190, 181, 200, 4, 190, 177,
+ /* 2070 */ 177, 190, 198, 199, 190, 208, 198, 199, 203, 198,
+ /* 2080 */ 199, 4, 190, 190, 4, 177, 251, 4, 200, 251,
+ /* 2090 */ 198, 199, 177, 180, 177, 177, 4, 177, 190, 177,
+ /* 2100 */ 200, 4, 99, 180, 4, 190, 251, 190, 190, 251,
+ /* 2110 */ 190, 177, 190, 198, 199, 198, 199, 177, 198, 199,
+ /* 2120 */ 198, 199, 177, 177, 190, 251, 241, 177, 99, 251,
+ /* 2130 */ 190, 27, 251, 264, 158, 190, 190, 227, 198, 199,
+ /* 2140 */ 190, 106, 107, 251, 198, 199, 106, 107, 198, 199,
+ /* 2150 */ 99, 265, 215, 118, 99, 62, 99, 250, 118, 215,
+ /* 2160 */ 96, 180, 106, 107, 106, 107, 251, 241, 251, 106,
+ /* 2170 */ 107, 251, 177, 251, 118, 177, 118, 100, 99, 227,
+ /* 2180 */ 100, 118, 180, 106, 107, 190, 106, 107, 190, 106,
+ /* 2190 */ 107, 251, 100, 99, 241, 177, 217, 251, 106, 107,
+ /* 2200 */ 177, 251, 60, 106, 107, 177, 106, 107, 190, 177,
+ /* 2210 */ 177, 177, 99, 190, 177, 177, 217, 99, 190, 99,
+ /* 2220 */ 177, 217, 190, 190, 190, 217, 177, 190, 190, 99,
+ /* 2230 */ 241, 99, 268, 190, 18, 152, 268, 241, 99, 190,
+ /* 2240 */ 99, 241, 99, 270, 16, 224, 226, 261, 201, 152,
+ /* 2250 */ 256, 261, 152, 240, 242, 201, 206, 242, 210, 242,
+ /* 2260 */ 175, 202, 191, 227, 191, 224, 191, 191, 262, 253,
+ /* 2270 */ 263, 274, 207, 207, 222, 207, 216, 55, 239, 198,
+ /* 2280 */ 198, 211,
};
#define YY_SHIFT_USE_DFLT (-81)
#define YY_SHIFT_COUNT (434)
#define YY_SHIFT_MIN (-80)
-#define YY_SHIFT_MAX (2162)
+#define YY_SHIFT_MAX (2228)
static const short yy_shift_ofst[] = {
- /* 0 */ 1184, -4, 201, 1151, 819, 1512, 1512, 689, 361, 1430,
- /* 10 */ 1656, 1656, 770, 364, 364, 157, 81, 179, 1347, 1264,
- /* 20 */ 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656,
- /* 30 */ 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656,
- /* 40 */ 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656,
- /* 50 */ 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 370, 798,
- /* 60 */ 181, 370, 2010, 2010, 2010, 2010, 2010, 887, 887, 565,
- /* 70 */ 277, 4, 1455, 1451, 1433, 1376, 1390, 1386, 1372, 1368,
- /* 80 */ 1325, 448, 1237, 2013, 2013, 2027, 439, 2013, 2015, 2010,
+ /* 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,
+ /* 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, 1736, 1654, 1818, 370, 798,
+ /* 60 */ 181, 370, 2083, 2083, 2083, 2083, 2083, 887, 887, 565,
+ /* 70 */ 277, 4, 1510, 1492, 1458, 1375, 1449, 1434, 1431, 1427,
+ /* 80 */ 1379, 448, 1399, 2097, 2097, 2100, 439, 2097, 2092, 2083,
/* 90 */ 565, 1039, 538, 538, 735, 84, 44, 171, 859, 775,
- /* 100 */ 906, 773, 910, 636, 1301, 5, 450, 5, 443, 413,
- /* 110 */ 185, 2005, 1995, 1997, 1993, 1982, 1976, 1974, 1971, 1945,
- /* 120 */ 1666, 1942, 1935, 1921, 1917, 1915, 1898, 1850, 1491, 1882,
- /* 130 */ 1047, 1634, 1521, 902, 140, 1343, 1343, 1777, 1460, 1343,
- /* 140 */ 1438, 780, 1408, 349, 562, 216, 620, 1698, 1691, 1574,
- /* 150 */ 90, 829, 829, 829, 872, 544, 2156, 2156, 2156, 2156,
- /* 160 */ 2156, -81, -81, 459, 619, 619, 619, 619, 619, 619,
+ /* 100 */ 906, 773, 910, 636, 1172, 5, 450, 5, 443, 413,
+ /* 110 */ 185, 2080, 1924, 1760, 1840, 1755, 1739, 2063, 2077, 2058,
+ /* 120 */ 1525, 2056, 1724, 2040, 2035, 1777, 1734, 1517, 1844, 1775,
+ /* 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, 2222, 2222, 2222, 2222,
+ /* 160 */ 2222, -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, 1212, 1572, 509, 509,
- /* 190 */ -60, -38, -38, -38, -38, -38, 578, -80, 314, 87,
+ /* 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, 1385, 1233, 1203, 206, 908, 424, 400, 25,
- /* 220 */ 729, 729, 679, 1215, -2, 855, 729, 442, 346, 855,
- /* 230 */ 750, 750, 187, -9, 169, 2162, 2078, 2077, 2075, 2153,
- /* 240 */ 2153, 2070, 2065, 2096, 2064, 2096, 2060, 2096, 2058, 2096,
- /* 250 */ 2055, 1710, 1688, 2051, 1710, 2076, 2049, 2042, 2040, 2076,
- /* 260 */ 1688, 2033, 1960, 2087, 2011, 1710, 1992, 1710, 1980, 1817,
- /* 270 */ 1883, 1883, 1883, 1883, 1989, 1817, 1883, 1925, 1883, 1989,
- /* 280 */ 1883, 1883, 1871, 1867, 1849, 1782, 1817, 1846, 1817, 1845,
- /* 290 */ 1804, 1735, 1733, 1715, 1707, 1688, 1694, 1746, 1661, 1710,
- /* 300 */ 1705, 1705, 1626, 1626, 1626, 1626, -81, -81, -81, -81,
+ /* 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, 2228, 2143, 2141, 2139, 2216,
+ /* 240 */ 2216, 2132, 2130, 2142, 2120, 2142, 2118, 2142, 2113, 2142,
+ /* 250 */ 2094, 1791, 1719, 2079, 1791, 2093, 2064, 2057, 2055, 2093,
+ /* 260 */ 1719, 2051, 1976, 2104, 2029, 1791, 2003, 1791, 1948, 1859,
+ /* 270 */ 1880, 1880, 1880, 1880, 1987, 1859, 1880, 1919, 1880, 1987,
+ /* 280 */ 1880, 1880, 1856, 1887, 1877, 1804, 1859, 1872, 1859, 1889,
+ /* 290 */ 1848, 1762, 1787, 1748, 1738, 1719, 1737, 1813, 1749, 1791,
+ /* 300 */ 1765, 1765, 1658, 1658, 1658, 1658, -81, -81, -81, -81,
/* 310 */ -81, -81, -81, -81, -81, -81, 564, 79, 158, 45,
- /* 320 */ 702, 243, -49, 398, 1174, 1079, 1042, 984, 788, 2,
- /* 330 */ 471, -20, 758, 678, 344, 144, -44, 1655, 1587, 1576,
- /* 340 */ 1592, 1580, 1565, 1545, 1538, 1479, 1534, 1511, 1473, 1445,
- /* 350 */ 1564, 1510, 1556, 1540, 1558, 1503, 1483, 1436, 1416, 1492,
- /* 360 */ 1489, 1425, 1405, 1531, 1419, 1437, 1435, 1468, 1395, 1373,
- /* 370 */ 1409, 1443, 1389, 1384, 1379, 1375, 1432, 1456, 1365, 1392,
- /* 380 */ 1407, 1318, 1313, 1306, 1168, 1258, 1273, 1260, 1240, 1168,
- /* 390 */ 1251, 1231, 1227, 1102, 1173, 1159, 1195, 1234, 1114, 993,
- /* 400 */ 1134, 1038, 1099, 993, 990, 937, 846, 895, 870, 848,
+ /* 320 */ 702, 243, -49, 398, 1362, 1321, 1042, 984, 788, 2,
+ /* 330 */ 471, -20, 758, 678, 344, 144, -44, 1676, 1661, 1601,
+ /* 340 */ 1612, 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,
@@ -746,40 +758,40 @@ static const short yy_shift_ofst[] = {
#define YY_REDUCE_USE_DFLT (-100)
#define YY_REDUCE_COUNT (315)
#define YY_REDUCE_MIN (-99)
-#define YY_REDUCE_MAX (2018)
+#define YY_REDUCE_MAX (2085)
static const short yy_reduce_ofst[] = {
- /* 0 */ 615, 1123, 699, -99, 764, 1126, 189, 705, 1201, 1150,
- /* 10 */ 1189, 261, 196, 884, 599, 1124, 1795, 1793, 1778, 1775,
- /* 20 */ 1764, 1761, 1745, 1730, 1728, 1718, 1716, 1713, 1702, 1699,
- /* 30 */ 1683, 1679, 1673, 1659, 1653, 1648, 1643, 1636, 1624, 1619,
- /* 40 */ 1617, 1594, 1589, 1552, 1532, 1529, 1527, 1513, 1509, 1502,
- /* 50 */ 1498, 1495, 1484, 1427, 1422, 1412, 1330, 1323, 490, 1127,
- /* 60 */ 214, 769, 1684, 1609, 1579, 124, 67, 596, 175, 547,
- /* 70 */ 1162, 1261, 1876, 1855, 1853, 1826, 1821, 1555, 1378, 1246,
- /* 80 */ 1232, 1329, 203, 1196, 1125, 131, 347, 950, 1270, 195,
- /* 90 */ 885, 265, 1204, 1194, 125, 377, 1011, 1954, 1953, 1916,
- /* 100 */ 1654, 1654, 1952, 1950, 1947, 697, 1946, 11, 1654, 1918,
- /* 110 */ 1916, 1907, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1896,
- /* 120 */ 1654, 1654, 1895, 1654, 1654, 1884, 1654, 1654, 1654, 1879,
- /* 130 */ 1878, 1877, 1848, 1818, 1794, 1190, 1163, 1768, 1333, 1097,
- /* 140 */ 1676, 1654, 1629, 1578, 1557, 1528, 632, 1499, 1393, 1387,
- /* 150 */ 1340, 1141, 666, 489, 938, 1122, 1020, 956, 924, 791,
- /* 160 */ 763, 746, 205, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
- /* 170 */ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
- /* 180 */ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458,
- /* 190 */ 1458, 1458, 1458, 1458, 1458, 1458, 1458, 1458, 2009, 2017,
- /* 200 */ 2014, 1458, 1936, 1936, 2002, 2001, 2000, 1966, 1988, 1961,
- /* 210 */ 1984, 1933, 1940, 2012, 2008, 2007, 2006, 1970, 2018, 1964,
- /* 220 */ 1959, 1958, 1990, 1977, 1983, 1985, 1948, 1955, 1929, 1981,
- /* 230 */ 1927, 1923, 1458, 1957, 1956, 1911, 1857, 1934, 1932, 1904,
- /* 240 */ 1902, 1926, 1857, 1951, 1857, 1949, 1857, 1944, 1857, 1938,
- /* 250 */ 1912, 1972, 1924, 1908, 1968, 1931, 1897, 1857, 1857, 1920,
- /* 260 */ 1899, 1857, 1860, 1832, 1866, 1914, 1857, 1910, 1857, 1873,
- /* 270 */ 1875, 1870, 1865, 1864, 1851, 1847, 1858, 1838, 1837, 1810,
- /* 280 */ 1813, 1787, 1767, 1720, 1706, 1681, 1734, 1672, 1729, 1613,
- /* 290 */ 1458, 1657, 1632, 1630, 1620, 1602, 1603, 1616, 1612, 1553,
- /* 300 */ 1607, 1570, 1651, 1614, 1582, 1567, 1464, 1449, 1441, 1519,
- /* 310 */ 1517, 1446, 1458, 1458, 1458, 1524,
+ /* 0 */ 615, 1195, 699, -99, 764, 1138, 189, 705, 1259, 1218,
+ /* 10 */ 1201, 261, 196, 884, 599, 1187, 1950, 1946, 1940, 1922,
+ /* 20 */ 1920, 1917, 1915, 1892, 1881, 1878, 1874, 1858, 1855, 1838,
+ /* 30 */ 1835, 1812, 1808, 1801, 1798, 1768, 1766, 1750, 1743, 1732,
+ /* 40 */ 1717, 1712, 1681, 1675, 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, 1562, 1884, 1839, 1832, 1803, 1727, 1648, 1611, 1603,
+ /* 80 */ 1270, 1520, 203, 1346, 1255, 131, 347, 950, 1397, 195,
+ /* 90 */ 885, 265, 1134, 1132, 125, 377, 1011, 2049, 2043, 2028,
+ /* 100 */ 1792, 1792, 2038, 2037, 2034, 697, 2033, 11, 1792, 2032,
+ /* 110 */ 2028, 2023, 1792, 1792, 1792, 1792, 1792, 1792, 1792, 2018,
+ /* 120 */ 1792, 1792, 1998, 1792, 1792, 1995, 1792, 1792, 1792, 1945,
+ /* 130 */ 1934, 1918, 1908, 1893, 1837, 1141, 1140, 1831, 1802, 1065,
+ /* 140 */ 1800, 1792, 1728, 1659, 1614, 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, 2070, 2082,
+ /* 200 */ 2081, 1462, 1997, 1997, 2068, 2066, 2065, 2039, 2060, 2016,
+ /* 210 */ 2052, 2007, 2006, 2076, 2075, 2073, 2071, 2041, 2085, 2036,
+ /* 220 */ 2017, 2015, 2059, 2048, 2050, 2054, 2012, 2013, 1994, 2047,
+ /* 230 */ 1990, 1986, 1462, 2020, 2021, 1973, 1799, 2000, 1996, 1968,
+ /* 240 */ 1964, 1989, 1799, 2008, 1799, 2004, 1799, 1999, 1799, 1979,
+ /* 250 */ 1953, 2002, 1952, 1926, 1981, 1944, 1907, 1799, 1799, 1937,
+ /* 260 */ 1910, 1799, 1886, 1869, 1885, 1923, 1799, 1913, 1799, 1875,
+ /* 270 */ 1900, 1888, 1866, 1846, 1867, 1847, 1843, 1836, 1826, 1796,
+ /* 280 */ 1824, 1823, 1764, 1740, 1730, 1706, 1757, 1698, 1751, 1700,
+ /* 290 */ 1462, 1682, 1673, 1667, 1657, 1651, 1638, 1679, 1645, 1647,
+ /* 300 */ 1643, 1642, 1629, 1610, 1592, 1587, 1478, 1472, 1473, 1578,
+ /* 310 */ 1573, 1506, 1462, 1462, 1462, 1540,
};
static const YYACTIONTYPE yy_default[] = {
/* 0 */ 729, 1037, 1142, 1142, 1026, 1026, 1026, 1142, 1026, 1026,
@@ -787,7 +799,7 @@ static const YYACTIONTYPE yy_default[] = {
/* 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, 1026, 1148, 894,
+ /* 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,
@@ -800,8 +812,8 @@ static const YYACTIONTYPE yy_default[] = {
/* 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, 988, 1000, 987,
- /* 190 */ 995, 1004, 1015, 999, 996, 990, 989, 991, 1148, 1148,
+ /* 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,
@@ -1447,7 +1459,7 @@ static const char *const yyRuleName[] = {
/* 288 */ "exprx ::= RAISE LP raisetype COMMA nm RP",
/* 289 */ "exprx ::= nm DOT",
/* 290 */ "exprx ::= nm DOT nm DOT",
- /* 291 */ "exprx ::= expr not_opt BETWEEN expr",
+ /* 291 */ "exprx ::= expr not_opt BETWEEN expr AND",
/* 292 */ "exprx ::= CASE case_operand case_exprlist case_else",
/* 293 */ "exprx ::= expr not_opt IN LP exprlist",
/* 294 */ "exprx ::= expr not_opt IN ID_DB",
@@ -2504,7 +2516,7 @@ static const struct {
{ 251, 6 },
{ 251, 2 },
{ 251, 4 },
- { 251, 4 },
+ { 251, 5 },
{ 251, 4 },
{ 251, 5 },
{ 251, 4 },
@@ -4359,12 +4371,12 @@ static void yy_reduce(
parserContext->minorErrorBeforeNextToken("Syntax error");
}
break;
- case 291: /* exprx ::= expr not_opt BETWEEN expr */
+ case 291: /* exprx ::= expr not_opt BETWEEN expr AND */
{
yygotominor.yy490 = new SqliteExpr();
- delete yymsp[-2].minor.yy237;
- delete yymsp[-3].minor.yy490;
- delete yymsp[0].minor.yy490;
+ delete yymsp[-3].minor.yy237;
+ delete yymsp[-4].minor.yy490;
+ delete yymsp[-1].minor.yy490;
objectForTokens = yygotominor.yy490;
parserContext->minorErrorBeforeNextToken("Syntax error");
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
index 31a66a2..a249f6e 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
@@ -1711,7 +1711,7 @@ exprx(X) ::= nm(N1) DOT nm(N2) DOT. {
parserContext->minorErrorBeforeNextToken("Syntax error");
}
exprx(X) ::= expr(E1) not_opt(N) BETWEEN
- expr(E2). [BETWEEN] {
+ expr(E2) AND. {
X = new SqliteExpr();
delete N;
delete E1;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/token.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/token.cpp
index 5e186dd..d3e05f1 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/token.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/token.cpp
@@ -434,40 +434,50 @@ bool TokenList::remove(Token::Type type)
return true;
}
-void TokenList::trimLeft()
+TokenList& TokenList::trimLeft()
{
while (size() > 0 && first()->isWhitespace())
removeFirst();
+
+ return *this;
}
-void TokenList::trimRight()
+TokenList& TokenList::trimRight()
{
while (size() > 0 && last()->isWhitespace())
removeLast();
+
+ return *this;
}
-void TokenList::trim()
+TokenList& TokenList::trim()
{
trimLeft();
trimRight();
+ return *this;
}
-void TokenList::trimLeft(Token::Type type, const QString& alsoTrim)
+TokenList& TokenList::trimLeft(Token::Type type, const QString& alsoTrim)
{
while (size() > 0 && (first()->isWhitespace() || (first()->type == type && first()->value == alsoTrim)))
removeFirst();
+
+ return *this;
}
-void TokenList::trimRight(Token::Type type, const QString& alsoTrim)
+TokenList& TokenList::trimRight(Token::Type type, const QString& alsoTrim)
{
while (size() > 0 && (last()->isWhitespace() || (last()->type == type && last()->value == alsoTrim)))
removeLast();
+
+ return *this;
}
-void TokenList::trim(Token::Type type, const QString& alsoTrim)
+TokenList& TokenList::trim(Token::Type type, const QString& alsoTrim)
{
trimLeft(type, alsoTrim);
trimRight(type, alsoTrim);
+ return *this;
}
TokenList TokenList::filter(Token::Type type) const
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/token.h b/SQLiteStudio3/coreSQLiteStudio/parser/token.h
index 1090bd4..222ce1a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/token.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/token.h
@@ -574,21 +574,21 @@ class API_EXPORT TokenList : public QList<TokenPtr>
*
* White-space tokens are tested with Token::isWhitespace().
*/
- void trimLeft();
+ TokenList &trimLeft();
/**
* @brief Removes all white-space tokens from the end of the list.
*
* White-space tokens are tested with Token::isWhitespace().
*/
- void trimRight();
+ TokenList &trimRight();
/**
* @brief Removes all white-space tokens from both the beginning and the end of the list.
*
* White-space tokens are tested with Token::isWhitespace().
*/
- void trim();
+ TokenList &trim();
/**
* @brief Removes all tokens that match given criteria from the beginning of the list.
@@ -598,7 +598,7 @@ class API_EXPORT TokenList : public QList<TokenPtr>
* This method is an extension to the regular trimLeft(). It removes white-space tokens,
* as well as tokens that are of given \p type and have given \p value (both conditions must be met).
*/
- void trimLeft(Token::Type type, const QString& alsoTrim);
+ TokenList &trimLeft(Token::Type type, const QString& alsoTrim);
/**
* @brief Removes all tokens that match given criteria from the end of the list.
@@ -608,7 +608,7 @@ class API_EXPORT TokenList : public QList<TokenPtr>
* This method is an extension to the regular trimRight(). It removes white-space tokens,
* as well as tokens that are of given \p type and have given \p value (both conditions must be met).
*/
- void trimRight(Token::Type type, const QString& alsoTrim);
+ TokenList &trimRight(Token::Type type, const QString& alsoTrim);
/**
* @brief Removes all tokens that match given criteria from the beginning and the end of the list.
@@ -618,7 +618,7 @@ class API_EXPORT TokenList : public QList<TokenPtr>
* This method is an extension to the regular trim(). It removes white-space tokens,
* as well as tokens that are of given \p type and have given \p value (both conditions must be met).
*/
- void trim(Token::Type type, const QString& alsoTrim);
+ TokenList &trim(Token::Type type, const QString& alsoTrim);
/**
* @brief Creates list of tokens from this list, letting through only tokens of given type.
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/plugintype.h b/SQLiteStudio3/coreSQLiteStudio/plugins/plugintype.h
index 1002ac8..d5d9d91 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/plugintype.h
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/plugintype.h
@@ -5,6 +5,7 @@
#include <QList>
#include <QString>
#include <QObject>
+#include <typeinfo>
class Plugin;
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/functionmanager.h b/SQLiteStudio3/coreSQLiteStudio/services/functionmanager.h
index b848c93..2581b4f 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/functionmanager.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/functionmanager.h
@@ -7,6 +7,7 @@
#include <QSharedPointer>
#include <QObject>
#include <QStringList>
+#include <functional>
class Db;
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.cpp b/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.cpp
index dae8238..66620f3 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.cpp
@@ -153,7 +153,7 @@ void UpdateManager::handleAvailableUpdatesReply(QNetworkReply* reply)
void UpdateManager::getUpdatesMetadata(QNetworkReply*& replyStoragePointer)
{
#ifndef NO_AUTO_UPDATES
- if (!isPlatformEligibleForUpdate() || replyStoragePointer)
+ if (!CFG_CORE.General.CheckUpdatesOnStartup.get() || !isPlatformEligibleForUpdate() || replyStoragePointer)
return;
QUrlQuery query;
diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
index 10d1bd5..c253583 100644
--- a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
@@ -38,7 +38,7 @@
DEFINE_SINGLETON(SQLiteStudio)
-static const int sqlitestudioVersion = 29906;
+static const int sqlitestudioVersion = 30000;
SQLiteStudio::SQLiteStudio()
{
diff --git a/SQLiteStudio3/dirs.pri b/SQLiteStudio3/dirs.pri
index be8479e..537d0c7 100644
--- a/SQLiteStudio3/dirs.pri
+++ b/SQLiteStudio3/dirs.pri
@@ -1,7 +1,10 @@
-DESTDIR = $$PWD/../output/SQLiteStudio
-OBJECTS_DIR = $$PWD/../output/build
-MOC_DIR = $$PWD/../output/build
-UI_DIR = $$PWD/../output/build
+OUTPUT_DIR_NAME = output
+export(OUTPUT_DIR_NAME)
+
+DESTDIR = $$PWD/../$$OUTPUT_DIR_NAME/SQLiteStudio
+OBJECTS_DIR = $$PWD/../$$OUTPUT_DIR_NAME/build
+MOC_DIR = $$PWD/../$$OUTPUT_DIR_NAME/build
+UI_DIR = $$PWD/../$$OUTPUT_DIR_NAME/build
LIBS += -L$$DESTDIR
@@ -21,7 +24,7 @@ INCLUDEPATH += $$PWD/coreSQLiteStudio
DEPENDPATH += $$PWD/coreSQLiteStudio
contains(QT, gui): {
- INCLUDEPATH += $$PWD/guiSQLiteStudio $$PWD/../output/build/guiSQLiteStudio
+ INCLUDEPATH += $$PWD/guiSQLiteStudio $$PWD/../$$OUTPUT_DIR_NAME/build/guiSQLiteStudio
DEPENDPATH += $$PWD/guiSQLiteStudio
}
@@ -35,3 +38,14 @@ portable {
LIBS += -L$$DESTDIR/lib
}
}
+
+unix: {
+ isEmpty(LIBDIR) {
+ LIBDIR = /usr/lib
+ }
+ export(LIBDIR)
+ isEmpty(BINDIR) {
+ BINDIR = /usr/bin
+ }
+ export(BINDIR)
+}
diff --git a/SQLiteStudio3/docs/sqlitestudio_logo.png b/SQLiteStudio3/docs/sqlitestudio_logo.png
index 3361499..d2138ea 100644
--- a/SQLiteStudio3/docs/sqlitestudio_logo.png
+++ b/SQLiteStudio3/docs/sqlitestudio_logo.png
Binary files differ
diff --git a/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h b/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h
index 4df7d5e..8ee4636 100644
--- a/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h
+++ b/SQLiteStudio3/guiSQLiteStudio/common/datawidgetmapper.h
@@ -3,6 +3,7 @@
#include <QObject>
#include <QHash>
+#include <functional>
class QAbstractItemModel;
diff --git a/SQLiteStudio3/guiSQLiteStudio/common/verifiablewizardpage.h b/SQLiteStudio3/guiSQLiteStudio/common/verifiablewizardpage.h
index 8912258..4fdb5f9 100644
--- a/SQLiteStudio3/guiSQLiteStudio/common/verifiablewizardpage.h
+++ b/SQLiteStudio3/guiSQLiteStudio/common/verifiablewizardpage.h
@@ -3,6 +3,7 @@
#include "guiSQLiteStudio_global.h"
#include <QWizardPage>
+#include <functional>
class GUI_API_EXPORT VerifiableWizardPage : public QWizardPage
{
diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp
index 98baaa9..8e137a4 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp
@@ -1484,15 +1484,24 @@ void DbTree::deleteItems(const QList<DbTreeItem*>& itemsToDelete)
return;
// Deleting items
+ QSet<Db*> deletedDatabases;
QSet<Db*> databasesToRefresh;
for (DbTreeItem* item : items)
{
+ if (item->getType() == DbTreeItem::Type::DB)
+ deletedDatabases << item->getDb();
+
databasesToRefresh << item->getDb();
deleteItem(item);
}
for (Db* dbToRefresh : databasesToRefresh)
+ {
+ if (deletedDatabases.contains(dbToRefresh))
+ continue;
+
DBTREE->refreshSchema(dbToRefresh);
+ }
}
void DbTree::refreshSchemas()
diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp
index 8a71a10..281510f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.cpp
@@ -1152,7 +1152,7 @@ void DbTreeModel::moveOrCopyDbObjects(const QList<DbTreeItem*>& srcItems, DbTree
bool DbTreeModel::confirmReferencedTables(const QStringList& tables)
{
QMessageBox::StandardButton result = QMessageBox::question(MAINWINDOW, tr("Referenced tables"),
- tr("Do you want to include following referenced tables as well:\n%1").arg(tables.join(", ")));
+ tr("Do you want to include following referenced tables as well:\n%1").arg(tables.join(", ")));
return result == QMessageBox::Yes;
}
@@ -1180,7 +1180,7 @@ bool DbTreeModel::confirmConversion(const QList<QPair<QString, QString> >& diffs
return dialog.exec() == QDialog::Accepted;
}
-bool DbTreeModel::confirmConversionErrors(const QHash<QString,QSet<QString>>& errors)
+bool DbTreeModel::confirmConversionErrors(const QHash<QString, QSet<QString> >& errors)
{
ErrorsConfirmDialog dialog(MAINWINDOW);
dialog.setTopLabel(tr("Following error occurred while converting SQL statements to the target SQLite version:"));
@@ -1188,6 +1188,7 @@ bool DbTreeModel::confirmConversionErrors(const QHash<QString,QSet<QString>>& er
dialog.setErrors(errors);
return dialog.exec() == QDialog::Accepted;
}
+
bool DbTreeModel::getIgnoreDbLoadedSignal() const
{
return ignoreDbLoadedSignal;
diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.h b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.h
index c92fa2c..ee97e87 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtreemodel.h
@@ -89,8 +89,8 @@ class GUI_API_EXPORT DbTreeModel : public QStandardItemModel
static bool confirmReferencedTables(const QStringList& tables);
static bool resolveNameConflict(QString& nameInConflict);
- static bool confirmConversion(const QList<QPair<QString,QString>>& diffs);
- static bool confirmConversionErrors(const QHash<QString, QSet<QString> >& errors);
+ static bool confirmConversion(const QList<QPair<QString, QString>>& diffs);
+ static bool confirmConversionErrors(const QHash<QString, QSet<QString>>& errors);
static const QString toolTipTableTmp;
static const QString toolTipHdrRowTmp;
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp
index 8f5d433..7ab9c67 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp
@@ -119,9 +119,9 @@ void BugDialog::updateState()
ui->currentLoginLabel->setToolTip(tr("Reporting as an unregistered user, using e-mail address."));
ui->currentLoginLabel->setPixmap(ICONS.USER_UNKNOWN);
ui->emailEdit->setEnabled(true);
- ui->emailEdit->clear();
ui->loginButton->setText(tr("Log in"));
ui->loginButton->setIcon(ICONS.USER);
+ validate();
}
else
{
diff --git a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro
index ac3cb5b..2195415 100644
--- a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro
+++ b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro
@@ -361,4 +361,9 @@ RESOURCES += \
OTHER_FILES +=
+unix: {
+ target.path = $$LIBDIR
+ INSTALLS += target
+}
+
LIBS += -lcoreSQLiteStudio
diff --git a/SQLiteStudio3/guiSQLiteStudio/img/sqlitestudio_logo.png b/SQLiteStudio3/guiSQLiteStudio/img/sqlitestudio_logo.png
new file mode 100644
index 0000000..d2138ea
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/img/sqlitestudio_logo.png
Binary files differ
diff --git a/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp
index c53d95c..df8799b 100644
--- a/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp
@@ -520,7 +520,10 @@ MdiWindow* MainWindow::restoreWindowSession(const QVariant &windowSessions)
// Add the window to MDI area and restore its session
MdiWindow* window = ui->mdiArea->addSubWindow(mdiChild);
if (!window->restoreSession(winSessionHash))
+ {
+ window->setCloseWithoutSessionSaving(true);
delete window;
+ }
return window;
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp
index dafd108..0e8d298 100644
--- a/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/mdiwindow.cpp
@@ -28,7 +28,7 @@ MdiWindow::~MdiWindow()
if (SQLITESTUDIO->getImmediateQuit())
return;
- if (!MAINWINDOW->isClosingApp())
+ if (!closeWithoutSessionSaving && !MAINWINDOW->isClosingApp())
MAINWINDOW->pushClosedWindowSessionValue(saveSession());
mdiArea->windowDestroyed(this);
@@ -199,3 +199,13 @@ bool MdiWindow::confirmClose()
return (msgBox.exec() == QMessageBox::Yes);
}
+bool MdiWindow::getCloseWithoutSessionSaving() const
+{
+ return closeWithoutSessionSaving;
+}
+
+void MdiWindow::setCloseWithoutSessionSaving(bool value)
+{
+ closeWithoutSessionSaving = value;
+}
+
diff --git a/SQLiteStudio3/guiSQLiteStudio/mdiwindow.h b/SQLiteStudio3/guiSQLiteStudio/mdiwindow.h
index fd6c4dc..7003425 100644
--- a/SQLiteStudio3/guiSQLiteStudio/mdiwindow.h
+++ b/SQLiteStudio3/guiSQLiteStudio/mdiwindow.h
@@ -28,12 +28,16 @@ class GUI_API_EXPORT MdiWindow : public QMdiSubWindow
void changeEvent(QEvent *event);
void closeEvent(QCloseEvent* e);
+ bool getCloseWithoutSessionSaving() const;
+ void setCloseWithoutSessionSaving(bool value);
+
private:
bool confirmClose();
QPointer<QWidget> lastFocusedWidget;
MdiArea* mdiArea = nullptr;
bool dbBeingClosed = false;
+ bool closeWithoutSessionSaving = false;
private slots:
void dbAboutToBeDisconnected(Db* db, bool& deny);
diff --git a/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp b/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp
index 915ca9a..ba797f6 100644
--- a/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp
@@ -31,10 +31,11 @@ QAction* TaskBar::addTask(const QIcon& icon, const QString& text)
QAction* action = QToolBar::addAction(icon, text);
tasks << action;
QToolButton* btn = getToolButton(action);
- btn->setMaximumWidth(400);
if (!btn)
return action;
+ btn->setMaximumWidth(400);
+ btn->installEventFilter(this);
taskGroup.addAction(action);
connect(btn, SIGNAL(pressed()), this, SLOT(mousePressed()));
return action;
@@ -204,6 +205,21 @@ void TaskBar::dropEvent(QDropEvent *event)
event->acceptProposedAction();
}
+bool TaskBar::eventFilter(QObject* obj, QEvent* event)
+{
+ if (event->type() == QEvent::MouseButtonPress && dynamic_cast<QMouseEvent*>(event)->button() == Qt::MiddleButton)
+ {
+ QToolButton* btn = dynamic_cast<QToolButton*>(obj);
+ if (btn && btn->defaultAction())
+ {
+ btn->defaultAction()->trigger();
+ MDIAREA->closeActiveSubWindow();
+ return true;
+ }
+ }
+ return QObject::eventFilter(obj, event);
+}
+
void TaskBar::dragTaskTo(QAction* task, const QPoint& position)
{
int idx = getDropPositionIndex(task, position);
diff --git a/SQLiteStudio3/guiSQLiteStudio/taskbar.h b/SQLiteStudio3/guiSQLiteStudio/taskbar.h
index e858f7b..2cf6d56 100644
--- a/SQLiteStudio3/guiSQLiteStudio/taskbar.h
+++ b/SQLiteStudio3/guiSQLiteStudio/taskbar.h
@@ -30,6 +30,7 @@ class GUI_API_EXPORT TaskBar : public QToolBar
void dragEnterEvent(QDragEnterEvent* event);
void dragMoveEvent(QDragMoveEvent* event);
void dropEvent(QDropEvent* event);
+ bool eventFilter(QObject *obj, QEvent *event);
private:
void init();
diff --git a/SQLiteStudio3/guiSQLiteStudio/uiloader.h b/SQLiteStudio3/guiSQLiteStudio/uiloader.h
index 5d16bcb..e016b6c 100644
--- a/SQLiteStudio3/guiSQLiteStudio/uiloader.h
+++ b/SQLiteStudio3/guiSQLiteStudio/uiloader.h
@@ -6,6 +6,7 @@
#include <QHash>
#include <QStack>
#include <QXmlDefaultHandler>
+#include <functional>
class UiLoaderPropertyHandler;
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp
index d54a359..a37f387 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp
@@ -19,6 +19,7 @@
#include "dialogs/ddlpreviewdialog.h"
#include "uiconfig.h"
#include "services/config.h"
+#include "services/codeformatter.h"
#include <QPushButton>
#include <QProgressBar>
#include <QDebug>
@@ -407,6 +408,12 @@ void ViewWindow::applyInitialTab()
ui->tabWidget->setCurrentIndex(0);
}
+QString ViewWindow::getCurrentDdl() const
+{
+ static_qstring(ddlTpl, "CREATE VIEW %1 AS %2");
+ return ddlTpl.arg(wrapObjIfNeeded(ui->nameEdit->text(), db->getDialect())).arg(ui->queryEdit->toPlainText());
+}
+
void ViewWindow::addTrigger()
{
DbObjectDialogs dialogs(db, this);
@@ -653,13 +660,14 @@ void ViewWindow::parseDdl()
createView->dialect = db->getDialect();
}
originalCreateView = SqliteCreateViewPtr::create(*createView);
- originalQuery = originalCreateView->select->detokenize();
+
+ // Replacing \r\n with \n, cause \r\n can be carried over from version 2.x.x, which did this incorrectly.
+ originalQuery = originalCreateView->select->detokenize().replace("\r\n", "\n");
}
void ViewWindow::updateDdlTab()
{
- QString ddl = "CREATE VIEW %1 AS %2";
- ui->ddlEdit->setPlainText(ddl.arg(wrapObjIfNeeded(ui->nameEdit->text(), db->getDialect())).arg(ui->queryEdit->toPlainText()));
+ ui->ddlEdit->setPlainText(FORMATTER->format("sql", getCurrentDdl(), db));
}
bool ViewWindow::isModified() const
@@ -711,13 +719,22 @@ void ViewWindow::executeStructureChanges()
QStringList sqls;
QList<bool> sqlMandatoryFlags;
- createView->rebuildTokens();
+ QString theDdl = getCurrentDdl();
if (!existingView)
{
- sqls << createView->detokenize();
+ sqls << theDdl;
}
else
{
+ Parser parser(db->getDialect());
+ if (!parser.parse(theDdl))
+ {
+ qCritical() << "Could not re-parse the view for executing it:" << parser.getErrorString();
+ notifyError(tr("The view code could not be parsed properly for execution. This is a SQLiteStudio's bug. Please report it."));
+ return;
+ }
+
+ createView = parser.getQueries().first().dynamicCast<SqliteCreateView>();
if (viewModifier)
delete viewModifier;
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.h b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.h
index 6b50135..62e1218 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.h
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.h
@@ -102,6 +102,7 @@ class GUI_API_EXPORT ViewWindow : public MdiChild
void executeStructureChanges();
QString getCurrentTrigger() const;
void applyInitialTab();
+ QString getCurrentDdl() const;
Db* db = nullptr;
QString database;
diff --git a/SQLiteStudio3/plugins.pri b/SQLiteStudio3/plugins.pri
index 30fd709..19665ef 100644
--- a/SQLiteStudio3/plugins.pri
+++ b/SQLiteStudio3/plugins.pri
@@ -1,9 +1,11 @@
+include($$PWD/dirs.pri)
+
CONFIG += c++11 plugin
-DESTDIR = $$PWD/../output/SQLiteStudio/plugins
-OBJECTS_DIR = $$PWD/../output/build
-MOC_DIR = $$PWD/../output/build
-UI_DIR = $$PWD/../output/build
+DESTDIR = $$PWD/../$$OUTPUT_DIR_NAME/SQLiteStudio/plugins
+OBJECTS_DIR = $$PWD/../$$OUTPUT_DIR_NAME/build
+MOC_DIR = $$PWD/../$$OUTPUT_DIR_NAME/build
+UI_DIR = $$PWD/../$$OUTPUT_DIR_NAME/build
INCLUDEPATH += $$PWD/coreSQLiteStudio
DEPENDPATH += $$PWD/coreSQLiteStudio
@@ -22,7 +24,7 @@ contains(QT, gui) {
win32: {
INCLUDEPATH += $$PWD/../../include
- LIBS += -L$$PWD/../../lib -L$$DESTDIR/.. -lcoreSQLiteStudio -L$$PWD/../output/SQLiteStudio/plugins
+ LIBS += -L$$PWD/../../lib -L$$DESTDIR/.. -lcoreSQLiteStudio -L$$PWD/../$$OUTPUT_DIR_NAME/SQLiteStudio/plugins
defineTest(pluginDep) {
linker_flag_parts = -l $$1
@@ -61,7 +63,7 @@ unix: {
export(LIBS)
}
- target.path = /usr/lib/sqlitestudio
+ target.path = $$LIBDIR/sqlitestudio
INSTALLS += target
}
@@ -78,10 +80,10 @@ linux: {
}
macx: {
- GUI_APP = $$PWD/../output/SQLiteStudio/SQLiteStudio.app/Contents/MacOS/SQLiteStudio
+ GUI_APP = $$PWD/../$$OUTPUT_DIR_NAME/SQLiteStudio/SQLiteStudio.app/Contents/MacOS/SQLiteStudio
export (GUI_APP)
- LIBS += -L$$PWD/../output/SQLiteStudio -lcoreSQLiteStudio
+ LIBS += -L$$PWD/../$$OUTPUT_DIR_NAME/SQLiteStudio -lcoreSQLiteStudio
INCLUDEPATH += $$PWD/../../include
LIBS += -L$$PWD/../../lib -L$$DESTDIR
QMAKE_CXXFLAGS += -stdlib=libc++ -mmacosx-version-min=10.7
diff --git a/SQLiteStudio3/sqlitestudio/sqlitestudio.pro b/SQLiteStudio3/sqlitestudio/sqlitestudio.pro
index 07be99c..3293122 100644
--- a/SQLiteStudio3/sqlitestudio/sqlitestudio.pro
+++ b/SQLiteStudio3/sqlitestudio/sqlitestudio.pro
@@ -44,3 +44,8 @@ macx: {
OTHER_FILES += \
windows.rc \
SQLiteStudio.exe.manifest
+
+unix: {
+ target.path = $$BINDIR
+ INSTALLS += target
+}
diff --git a/SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.pro b/SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.pro
index 1b11aa2..2fcf30a 100644
--- a/SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.pro
+++ b/SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.pro
@@ -93,3 +93,9 @@ HEADERS += \
commands/clicommandtree.h \
clicompleter.h \
commands/clicommanddesc.h
+
+unix: {
+ target.path = $$BINDIR
+ INSTALLS += target
+}
+