aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2015-02-22 14:06:38 -0500
committerLibravatarUnit 193 <unit193@ubuntu.com>2015-02-22 14:06:38 -0500
commit6d42c08a54f15ddfdd8ee73643e3ddf8907bccc2 (patch)
tree0a6554677b6a7fea5c81134c0804f0acdb00e632 /SQLiteStudio3/coreSQLiteStudio
parenta0cf2bb71de2b70a2b293c4ce907ecaaf24275bf (diff)
parent306d6d3ca9c9ad774d19135681a7f9805f77035f (diff)
Merge tag 'upstream/3.0.3'
Upstream version 3.0.3 # gpg: Signature made Sun 22 Feb 2015 02:06:37 PM EST using RSA key ID EBE9BD91 # gpg: Good signature from "Unit 193 <unit193@gmail.com>" # gpg: aka "Unit 193 <unit193@ninthfloor.org>" # gpg: aka "Unit 193 <unit193@ubuntu.com>" # gpg: aka "Unit 193 <unit193@ninthfloor.com>"
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio')
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt25
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/TODO.txt3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp26
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/completionhelper.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.cpp10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.cpp6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.cpp7
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro27
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/coresqlitestudio.qrc2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/db.h6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp47
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h21
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordatasources.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/log.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp536
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y7
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp718
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y8
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.h3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/Key.h3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.h3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.h3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/config.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp49
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp36
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.cpp8
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp76
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/tablemodifier.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations.cpp12
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations.h13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.qmbin0 -> 23 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts1278
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.qmbin0 -> 23 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts1278
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.qmbin0 -> 41796 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts1283
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qmbin41506 -> 41932 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts75
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.qmbin0 -> 23 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts1278
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.qmbin0 -> 40771 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts1284
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qmbin0 -> 27 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts1278
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.qm1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts1278
56 files changed, 9952 insertions, 771 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt b/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt
index c890b69..fe7a977 100644
--- a/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt
+++ b/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt
@@ -1,3 +1,28 @@
+[3.0.3]
+ * [ADDED]: Added visual validation indicators to DbDialog, so user is informed why the "Ok" button is disabled at the moment.
+ * [ADDED]: Russian translation.
+ * [ADDED]: French translation.
+ * [ADDED]: #2770 Added SQLite 3 version used by application in the Environment tab of the About dialog.
+ * [CHANGE]: Language translations located in a separate directory have now higher precedense, than translations compiled in, so it's possible to test updated translations "on the fly".
+ * [BUGFIX]: Fixed support for "function(DISTINCT args)" in Enterprise formatter.
+ * [BUGFIX]: #2753 Fixed parsing TEMP and IF NOT EXISTS in CREATE TABLE statement.
+ * [BUGFIX]: #2755 Fixed error checking for recurrent expression with LIKE/GLOB operator in it.
+ * [BUGFIX]: Switched error message from simple method error to smart method error in QueryExecutor to avoid misleading messages.
+ * [BUGFIX]: #2760 Fixed marking "unique" in index dialog when opening existing unique index.
+ * [BUGFIX]: #2757 Fixed int64 rounding problem.
+ * [BUGFIX]: #2767 Fixed NOT NULL dialog in column dialog, so it doesn't convert to UNIQUE.
+ * [BUGFIX]: #2763 Fixed possibility of adding 2 same databases to the list.
+ * [BUGFIX]: Fixed copying values from Environment tab of the About dialog.
+ * [BUGFIX]: #2774 Fixed handling triggers (when modifying table) in foreign tables, triggers referencing table in its subqueries, etc.
+ * [BUGFIX]: Fixed executing SELECT in SQLite2 for columns that need wrapping.
+ * [BUGFIX]: Fixed editing data for tables transparently attached in the SQL query.
+ * [BUGFIX]: Fixed Shortcut titles translation in configuration dialog.
+ * [BUGFIX]: Fixed aggregate functions, so initial and final codes are executed, not only the per-step code.
+ * [BUGFIX]: #2781 Portable configuration directory can now be either in the running directory, or in applications directory. It's auto-detected.
+ * [BUGFIX]: Optimized loading huge data sets into data grid. It's faster and the progress bar acts more smoothly.
+ * [BUGFIX]: Shortcut for closing current window is now displayed in the context menu for taskbar.
+ * [BUGFIX]: "Skip first line" option in CSV import renamed to "First line represents CSV columns". Maybe this time it won't confused anyone.
+
[3.0.2]
* [ADDED]: Full support for the interface translations.
* [ADDED]: Polish translation.
diff --git a/SQLiteStudio3/coreSQLiteStudio/TODO.txt b/SQLiteStudio3/coreSQLiteStudio/TODO.txt
index 458d550..055898c 100644
--- a/SQLiteStudio3/coreSQLiteStudio/TODO.txt
+++ b/SQLiteStudio3/coreSQLiteStudio/TODO.txt
@@ -1,6 +1,5 @@
-* 3.0.1:
-
* Next versions:
+- small useful features: generating template queries from context menu for table/view, from data view.
- commiting DataView should be async
- syntax checkers as services - per language
- code assistants as services - per language
diff --git a/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp b/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp
index 99eb334..528df73 100644
--- a/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp
@@ -1029,9 +1029,6 @@ void CompletionHelper::parseFullSql()
{
Dialect dialect = db->getDialect();
- Parser parser(dialect);
- parser.setLemonDebug(enableLemonDebug);
-
QString sql = fullSql;
// Selecting query at cursor position
@@ -1046,11 +1043,30 @@ void CompletionHelper::parseFullSql()
query += ";";
// Parsing query
- if (parser.parse(query, true) && !parser.getQueries().isEmpty())
+ Parser parser(dialect);
+ parser.setLemonDebug(enableLemonDebug);
+ if (tryToParse(&parser, query))
+ return;
+
+ // Second try - handling open parenthesis for expr (which could not be handled by the grammar, because of bug #2755)
+ parser.setLemonDebug(false); // avoid spamming with lemon debug
+ QString truncatedSql = sql.left(cursorPosition);
+ query = getQueryWithPosition(truncatedSql, cursorPosition, dialect);
+ query += ");";
+
+ if (tryToParse(&parser, query))
+ return;
+}
+
+bool CompletionHelper::tryToParse(Parser* parser, const QString& query)
+{
+ if (parser->parse(query, true) && !parser->getQueries().isEmpty())
{
- parsedQuery = parser.getQueries().first();
+ parsedQuery = parser->getQueries().first();
originalParsedQuery = SqliteQueryPtr(dynamic_cast<SqliteQuery*>(parsedQuery->clone()));
+ return true;
}
+ return false;
}
void CompletionHelper::sort(QList<ExpectedTokenPtr> &resultsSoFar)
diff --git a/SQLiteStudio3/coreSQLiteStudio/completionhelper.h b/SQLiteStudio3/coreSQLiteStudio/completionhelper.h
index 2cb3c01..5c656c2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/completionhelper.h
+++ b/SQLiteStudio3/coreSQLiteStudio/completionhelper.h
@@ -118,6 +118,7 @@ class API_EXPORT CompletionHelper : public QObject
void filterDuplicates(QList<ExpectedTokenPtr> &results);
bool isFilterType(Token::Type type);
void parseFullSql();
+ bool tryToParse(Parser* parser, const QString& query);
void sort(QList<ExpectedTokenPtr> &results);
void extractPreviousIdTokens(const TokenList& parsedTokens);
void extractQueryAdditionalInfo();
diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.cpp b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.cpp
index a79e08a..1a63776 100644
--- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.cpp
@@ -34,6 +34,16 @@ QHash<QString, CfgEntry *> &CfgCategory::getEntries()
return childs;
}
+void CfgCategory::translateTitle()
+{
+ // This needs to be "QObject::tr" and not just "tr", because this guarantees proper message context for retranslating
+ // titles for objects initialized in global scope (as CfgCategories are).
+ title = QObject::tr(title.toUtf8().constData());
+ for (CfgEntry* entry : childs)
+ entry->translateTitle();
+
+}
+
void CfgCategory::reset()
{
for (CfgEntry* entry : childs)
diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.h b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.h
index 2a6ccaf..45197d6 100644
--- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.h
+++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.h
@@ -23,6 +23,7 @@ class API_EXPORT CfgCategory : public QObject
QString toString() const;
operator QString() const;
QHash<QString,CfgEntry*>& getEntries();
+ void translateTitle();
void reset();
void savepoint(bool transaction = false);
void restore();
diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.cpp b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.cpp
index 6a5f6a4..9a91ea8 100644
--- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.cpp
@@ -99,6 +99,12 @@ QString CfgEntry::getTitle() const
return title;
}
+void CfgEntry::translateTitle()
+{
+ // This needs to be "QObject::tr" and not just "tr". See CfgCategory::translateTitle() for details.
+ title = QObject::tr(title.toUtf8().constData());
+}
+
void CfgEntry::reset()
{
set(getDefultValue());
diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.h b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.h
index 92b2a5f..4c1bbb0 100644
--- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.h
+++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.h
@@ -29,6 +29,7 @@ class API_EXPORT CfgEntry : public QObject
void defineDefaultValueFunction(DefaultValueProviderFunc func);
QString getFullKey() const;
QString getTitle() const;
+ void translateTitle();
void reset();
bool isPersistable() const;
bool isPersisted() const;
diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.cpp b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.cpp
index 72fc0d0..480b4cc 100644
--- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.cpp
@@ -55,6 +55,13 @@ QHash<QString, CfgCategory *> &CfgMain::getCategories()
return childs;
}
+void CfgMain::translateTitle()
+{
+ title = QObject::tr(title.toUtf8().constData());
+ for (CfgCategory* ctg : childs)
+ ctg->translateTitle();
+}
+
void CfgMain::reset()
{
for (CfgCategory* ctg : childs)
diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.h b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.h
index bc9490d..d42f03b 100644
--- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.h
+++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.h
@@ -22,6 +22,7 @@ class API_EXPORT CfgMain
static QList<CfgMain*> getPersistableInstances();
QHash<QString,CfgCategory*>& getCategories();
+ void translateTitle();
void reset();
void savepoint(bool transaction = false);
void restore();
diff --git a/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro b/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
index e58e2a8..84cd818 100644
--- a/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
+++ b/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
@@ -19,7 +19,12 @@ TEMPLATE = lib
win32 {
LIBS += -lpsapi $$PWD/../../../lib/libquazip.a
- DISTFILES += qt.conf
+
+ THE_FILE = $$PWD/qt.conf
+ THE_DEST = $${DESTDIR}
+ THE_FILE ~= s,/,\\,g
+ THE_DEST ~= s,/,\\,g
+ QMAKE_POST_LINK += $$QMAKE_COPY $$THE_FILE $$THE_DEST $$escape_expand(\\n\\t)
}
linux: {
@@ -45,7 +50,14 @@ portable {
CONFIG += c++11
QMAKE_CXXFLAGS += -pedantic
-TRANSLATIONS += translations/coreSQLiteStudio_pl.ts
+TRANSLATIONS += translations/coreSQLiteStudio_zh_CN.ts \
+ translations/coreSQLiteStudio_sk.ts \
+ translations/coreSQLiteStudio_de.ts \
+ translations/coreSQLiteStudio_ru.ts \
+ translations/coreSQLiteStudio_pt_BR.ts \
+ translations/coreSQLiteStudio_fr.ts \
+ translations/coreSQLiteStudio_es.ts \
+ translations/coreSQLiteStudio_pl.ts
SOURCES += sqlitestudio.cpp \
returncode.cpp \
@@ -422,3 +434,14 @@ FORMS += \
RESOURCES += \
coresqlitestudio.qrc
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SQLiteStudio3/coreSQLiteStudio/coresqlitestudio.qrc b/SQLiteStudio3/coreSQLiteStudio/coresqlitestudio.qrc
index 6f2f925..3ad28a9 100644
--- a/SQLiteStudio3/coreSQLiteStudio/coresqlitestudio.qrc
+++ b/SQLiteStudio3/coreSQLiteStudio/coresqlitestudio.qrc
@@ -20,5 +20,7 @@
</qresource>
<qresource prefix="/msg">
<file>translations/coreSQLiteStudio_pl.qm</file>
+ <file>translations/coreSQLiteStudio_ru.qm</file>
+ <file>translations/coreSQLiteStudio_fr.qm</file>
</qresource>
</RCC>
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h
index c521bfa..9b27dc3 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h
@@ -352,7 +352,7 @@ void AbstractDb2<T>::storeResult(sqlite_func* func, const QVariant& result, bool
case QVariant::UInt:
case QVariant::LongLong:
{
- sqlite_set_result_int(func, result.toInt());
+ sqlite_set_result_int(func, result.toLongLong());
break;
}
case QVariant::Double:
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/db.h b/SQLiteStudio3/coreSQLiteStudio/db/db.h
index 7d10a05..e11a844 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/db.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/db.h
@@ -501,7 +501,8 @@ class API_EXPORT Db : public QObject, public Interruptable
* @brief Attaches given database to this database.
* @param otherDb Other registered database object.
* @param silent If true, no errors or warnings will be reported to the NotifyManager (they will still appear in logs).
- * @return Name of the attached database (it's not the symbolic name of the other database, it's a name you would use in <tt>ATTACH 'name'</tt> statement).
+ * @return Name of the attached database (it's not the symbolic name of the other database, it's a name you would use in <tt>ATTACH 'name'</tt> statement),
+ * or null string if error occurred.
*
* This is convinent method to attach other registered databases to this database. It generates attached database name, so it doesn't conflict
* with other - already attached - database names, attaches the database with that name and returns that name to you, so you can refer to it in queries.
@@ -583,7 +584,8 @@ class API_EXPORT Db : public QObject, public Interruptable
* @return Database type label.
*
* The database type label is used on UI to tell user what database it is (SQLite 3, SQLite 2, Encrypted SQLite 3, etc).
- * This is defined by DbPlugin.
+ * This is usually the same as DbPlugin::getTitle(), but getTitle() is used in list of plugins in configuration dialog,
+ * while getTypeLabel() is used on databases list.
*/
virtual QString getTypeLabel() = 0;
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp
index 97b3f1d..9fc49df 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp
@@ -107,6 +107,8 @@ void QueryExecutor::executeChain()
}
}
+ requiredDbAttaches = context->dbNameToAttach.leftValues();
+
// We're done.
clearChain();
@@ -433,6 +435,7 @@ void QueryExecutor::simpleExecutionFinished(SqlQueryPtr results)
context->executionTime = QDateTime::currentMSecsSinceEpoch() - simpleExecutionStartTime;
context->rowsAffected = results->rowsAffected();
context->totalRowsReturned = 0;
+ requiredDbAttaches = context->dbNameToAttach.leftValues();
executionMutex.lock();
executionInProgress = false;
@@ -538,6 +541,12 @@ bool QueryExecutor::handleRowCountingResults(quint32 asyncId, SqlQueryPtr result
return true;
}
+
+const QStringList& QueryExecutor::getRequiredDbAttaches() const
+{
+ return requiredDbAttaches;
+}
+
bool QueryExecutor::getNoMetaColumns() const
{
return noMetaColumns;
@@ -550,32 +559,24 @@ void QueryExecutor::setNoMetaColumns(bool value)
void QueryExecutor::handleErrorsFromSmartAndSimpleMethods(SqlQueryPtr results)
{
- QString simpleText = results->getErrorText();
-
- // Smart text may contain messages from steps before the actual execution, but they will have negative error code.
- // Positive error code means that the error came directly from SQLite.
- QString smartText = context->errorCodeFromSmartExecution > 0 ? context->errorMessageFromSmartExecution : QString();
-
- if (simpleText.contains("no such") && smartText.contains("no such"))
- {
- // This happens if user refers to invalid column in attached database.
- // Smart execution will tell "no such column: xxx", while simple method will tell:
- // "no such table: attach.table". In that case we're more interested in smart method message.
- // This also applies to views.
- error(context->errorCodeFromSmartExecution, smartText);
- return;
- }
-
- if (simpleText.contains("no such") && smartText.contains("ambiguous"))
+ UNUSED(results);
+ // It turns out that currently smart execution error has more sense to be displayed to user than the simple execution error,
+ // so we're ignoring error from simple method, because it's usually misleading.
+ // The case when simple method error is more true than smart method error is very rare nowdays.
+ // Just rename attach names in the message.
+ QString msg = context->errorMessageFromSmartExecution;
+ QString match;
+ QString replaceName;
+ Dialect dialect = db->getDialect();
+ for (const QString& attachName : context->dbNameToAttach.rightValues())
{
- // This happens when smart execution raised "amigous column name" or something like that,
- // but simple method failed to work because of transparent database attaching. We prefer smart method error.
- error(context->errorCodeFromSmartExecution, smartText);
- return;
+ match = attachName + ".";
+ replaceName = wrapObjIfNeeded(context->dbNameToAttach.valueByRight(attachName), dialect) + ".";
+ while (msg.contains(match))
+ msg.replace(match, replaceName);
}
- // No special case, use simple method error
- error(results->getErrorCode(), simpleText);
+ error(context->errorCodeFromSmartExecution, msg);
}
void QueryExecutor::releaseResultsAndCleanup()
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h
index 72c7fed..c6d7701 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h
@@ -344,10 +344,19 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
{
/**
* @brief Database name that the table with this row ID is in.
+ *
+ * It's the actual database name as SQLite sees it. That means it is a "main", or any attach name.
*/
QString database;
/**
+ * @brief Symbolic database name as listed in databases list.
+ *
+ * It can be empty if database was not explicitly passed in the query.
+ */
+ QString dbName;
+
+ /**
* @brief Table name that the row ID is for.
*/
QString table;
@@ -1018,6 +1027,8 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
*/
void releaseResultsAndCleanup();
+ const QStringList& getRequiredDbAttaches() const;
+
private:
/**
* @brief Executes query.
@@ -1280,6 +1291,16 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
bool noMetaColumns = false;
/**
+ * @brief List of required databases to attach.
+ *
+ * List of database names (symbolic names, as they appear on the list) that needs to be
+ * attached to access all columns returned by the most recent successful execution.
+ *
+ * This is set after every successful execution.
+ */
+ QStringList requiredDbAttaches;
+
+ /**
* @brief Chain of executor steps.
*
* Executor step list is set up by setupExecutionChain() and cleaned up after
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp
index 55203e4..9307d13 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp
@@ -60,7 +60,7 @@ QHash<SelectResolver::Table,QHash<QString,QString>> QueryExecutorAddRowIds::addR
}
// Getting all tables we need to get ROWID for
- SelectResolver resolver(db, select->tokens.detokenize());
+ SelectResolver resolver(db, select->tokens.detokenize(), context->dbNameToAttach);
resolver.resolveMultiCore = false; // multicore subselects result in not editable columns, skip them
QSet<SelectResolver::Table> tables = resolver.resolveTables(core);
@@ -177,6 +177,7 @@ bool QueryExecutorAddRowIds::addResultColumns(SqliteSelect::Core* core, const Se
{
// Query executor result column description
QueryExecutor::ResultRowIdColumnPtr queryExecutorResCol = QueryExecutor::ResultRowIdColumnPtr::create();
+ queryExecutorResCol->dbName = table.originalDatabase;
queryExecutorResCol->database = table.database;
queryExecutorResCol->table = table.table;
queryExecutorResCol->tableAlias = table.alias;
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp
index bce1304..6acfb6f 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp
@@ -289,10 +289,10 @@ QString QueryExecutorColumns::getAliasedColumnNameForSqlite2(const QueryExecutor
if (context->dbNameToAttach.containsLeft(resCol->database, Qt::CaseInsensitive))
colNameParts << context->dbNameToAttach.valueByLeft(resCol->database, Qt::CaseInsensitive);
else
- colNameParts << resCol->database;
+ colNameParts << wrapObjIfNeeded(resCol->database, dialect);
}
- colNameParts << resCol->table;
+ colNameParts << wrapObjIfNeeded(resCol->table, dialect);
}
- colNameParts << resCol->column;
+ colNameParts << wrapObjIfNeeded(resCol->column, dialect);
return colNameParts.join(".");
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordatasources.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordatasources.cpp
index 9a5c1c2..31cda9e 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordatasources.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordatasources.cpp
@@ -14,7 +14,7 @@ bool QueryExecutorDataSources::exec()
if (select->coreSelects.first()->valuesMode)
return true;
- SelectResolver resolver(db, select->tokens.detokenize());
+ SelectResolver resolver(db, select->tokens.detokenize(), context->dbNameToAttach);
resolver.resolveMultiCore = false; // multicore subselects result in not editable columns, skip them
SqliteSelect::Core* core = select->coreSelects.first();
diff --git a/SQLiteStudio3/coreSQLiteStudio/log.h b/SQLiteStudio3/coreSQLiteStudio/log.h
index f866c93..dddb513 100644
--- a/SQLiteStudio3/coreSQLiteStudio/log.h
+++ b/SQLiteStudio3/coreSQLiteStudio/log.h
@@ -2,7 +2,7 @@
#define LOG_H
#include "db/db.h"
-#include "guiSQLiteStudio_global.h"
+#include "coreSQLiteStudio_global.h"
#include <QString>
#include <QHash>
#include <QList>
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp
index 656444a..5b65904 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp
@@ -165,7 +165,7 @@ typedef union {
#define sqlite2_parseARG_FETCH ParserContext* parserContext = yypParser->parserContext
#define sqlite2_parseARG_STORE yypParser->parserContext = parserContext
#define YYNSTATE 584
-#define YYNRULE 353
+#define YYNRULE 352
#define YYFALLBACK 1
#define YY_NO_ACTION (YYNSTATE+YYNRULE+2)
#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1)
@@ -241,16 +241,16 @@ static const YYMINORTYPE yyzerominor = { 0 };
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, 852, 125, 58, 575, 179, 852, 574, 63, 143,
+ /* 20 */ 15, 851, 125, 58, 575, 179, 851, 574, 63, 143,
/* 30 */ 401, 581, 328, 26, 84, 569, 114, 322, 573, 519,
- /* 40 */ 518, 852, 852, 35, 852, 852, 852, 852, 852, 852,
- /* 50 */ 852, 852, 852, 852, 852, 852, 852, 852, 852, 32,
- /* 60 */ 33, 852, 852, 852, 852, 320, 379, 34, 240, 238,
+ /* 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, 871, 266, 187, 580, 517, 168, 328, 505, 343,
+ /* 110 */ 187, 870, 266, 187, 580, 517, 168, 328, 505, 343,
/* 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, 32, 33, 481, 547, 322, 215,
@@ -258,23 +258,23 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 39, 39, 39, 38,
- /* 190 */ 523, 562, 60, 255, 714, 569, 714, 714, 853, 570,
- /* 200 */ 271, 714, 502, 853, 500, 714, 570, 714, 714, 714,
+ /* 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, 44, 45,
- /* 220 */ 330, 42, 42, 530, 530, 223, 853, 853, 43, 43,
+ /* 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, 41, 41, 41, 41, 40, 40, 39,
/* 270 */ 39, 39, 38, 552, 40, 40, 39, 39, 39, 38,
- /* 280 */ 853, 3, 568, 567, 187, 853, 512, 500, 219, 568,
+ /* 280 */ 852, 3, 568, 567, 187, 852, 512, 500, 219, 568,
/* 290 */ 567, 17, 496, 156, 322, 345, 519, 518, 569, 292,
- /* 300 */ 44, 45, 330, 42, 42, 530, 530, 223, 853, 853,
+ /* 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, 853, 100, 308, 306,
- /* 330 */ 305, 853, 448, 447, 418, 418, 316, 245, 568, 567,
- /* 340 */ 304, 938, 122, 344, 1, 582, 44, 45, 330, 42,
- /* 350 */ 42, 530, 530, 223, 853, 853, 43, 43, 43, 43,
+ /* 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, 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,
@@ -287,14 +287,14 @@ static const YYACTIONTYPE yy_action[] = {
/* 450 */ 523, 524, 569, 336, 335, 285, 781, 549, 548, 550,
/* 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, 851, 337, 426, 337, 455, 851, 613,
+ /* 480 */ 560, 774, 774, 850, 337, 426, 337, 455, 850, 613,
/* 490 */ 774, 181, 774, 774, 774, 143, 523, 143, 30, 531,
- /* 500 */ 614, 13, 523, 851, 851, 851, 851, 851, 851, 851,
- /* 510 */ 851, 851, 851, 851, 851, 851, 851, 851, 851, 851,
- /* 520 */ 851, 851, 851, 851, 851, 851, 851, 853, 500, 460,
- /* 530 */ 357, 320, 853, 318, 75, 570, 401, 570, 311, 251,
+ /* 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, 44, 45, 330,
- /* 550 */ 42, 42, 530, 530, 223, 853, 853, 43, 43, 43,
+ /* 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,
@@ -305,14 +305,14 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 920,
+ /* 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, 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, 920, 570, 323, 514, 570, 222, 44, 45, 330,
+ /* 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,
@@ -324,7 +324,7 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 860, 212, 43,
+ /* 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,
@@ -339,7 +339,7 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 863, 516, 32, 33, 523, 570, 538, 336,
+ /* 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,
@@ -347,7 +347,7 @@ static const YYACTIONTYPE yy_action[] = {
/* 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,
+ /* 1080 */ 380, 35, 10, 568, 567, 479, 34, 489, 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,
@@ -356,7 +356,7 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 861, 456, 473, 568, 567, 570, 413, 532,
+ /* 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,
@@ -367,7 +367,7 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 863, 568, 567, 417, 523, 338,
+ /* 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,
@@ -411,8 +411,8 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 939, 37, 412,
- /* 1730 */ 165, 433, 939, 939, 939, 327, 299,
+ /* 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,
@@ -664,61 +664,61 @@ static const short yy_reduce_ofst[] = {
/* 250 */ 1242,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 589, 937, 937, 863, 904, 852, 852, 852, 937, 937,
- /* 10 */ 730, 937, 852, 852, 852, 937, 852, 852, 852, 852,
- /* 20 */ 852, 852, 852, 852, 852, 852, 852, 852, 852, 852,
- /* 30 */ 852, 852, 852, 852, 852, 852, 852, 852, 852, 852,
- /* 40 */ 852, 852, 852, 852, 852, 852, 852, 841, 724, 608,
- /* 50 */ 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
- /* 60 */ 616, 720, 730, 937, 937, 937, 937, 790, 777, 768,
- /* 70 */ 937, 800, 800, 783, 679, 937, 800, 756, 752, 937,
- /* 80 */ 839, 937, 937, 731, 937, 839, 937, 937, 937, 937,
- /* 90 */ 937, 791, 784, 778, 769, 937, 937, 937, 937, 937,
- /* 100 */ 937, 937, 937, 937, 720, 720, 937, 720, 937, 937,
- /* 110 */ 937, 840, 594, 937, 883, 937, 937, 937, 937, 937,
- /* 120 */ 937, 605, 589, 937, 937, 937, 710, 736, 773, 761,
- /* 130 */ 864, 857, 858, 856, 853, 853, 853, 853, 853, 844,
- /* 140 */ 853, 853, 853, 853, 823, 816, 827, 815, 831, 826,
- /* 150 */ 818, 817, 819, 937, 937, 937, 937, 723, 937, 937,
- /* 160 */ 937, 820, 937, 789, 698, 937, 911, 693, 601, 618,
- /* 170 */ 937, 937, 937, 937, 937, 937, 937, 772, 670, 756,
- /* 180 */ 645, 738, 756, 859, 937, 937, 721, 708, 756, 935,
- /* 190 */ 932, 935, 739, 683, 739, 739, 739, 681, 739, 683,
- /* 200 */ 796, 739, 739, 683, 772, 739, 919, 916, 739, 739,
- /* 210 */ 872, 681, 681, 681, 681, 662, 937, 872, 681, 739,
- /* 220 */ 937, 739, 937, 853, 821, 752, 762, 748, 760, 757,
- /* 230 */ 772, 937, 681, 681, 662, 681, 681, 665, 593, 593,
+ /* 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, 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,
+ /* 80 */ 839, 936, 936, 731, 936, 839, 936, 936, 936, 936,
+ /* 90 */ 936, 791, 784, 778, 769, 936, 936, 936, 936, 936,
+ /* 100 */ 936, 936, 936, 936, 720, 720, 936, 720, 936, 936,
+ /* 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, 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,
+ /* 180 */ 645, 738, 756, 858, 936, 936, 721, 708, 756, 934,
+ /* 190 */ 931, 934, 739, 683, 739, 739, 739, 681, 739, 683,
+ /* 200 */ 796, 739, 739, 683, 772, 739, 918, 915, 739, 739,
+ /* 210 */ 871, 681, 681, 681, 681, 662, 936, 871, 681, 739,
+ /* 220 */ 936, 739, 936, 852, 821, 752, 762, 748, 760, 757,
+ /* 230 */ 772, 936, 681, 681, 662, 681, 681, 665, 593, 593,
/* 240 */ 593, 681, 593, 649, 649, 726, 830, 829, 828, 822,
- /* 250 */ 629, 865, 937, 937, 937, 937, 937, 937, 937, 937,
- /* 260 */ 937, 937, 937, 937, 937, 937, 937, 937, 937, 763,
- /* 270 */ 937, 937, 937, 937, 937, 937, 937, 937, 937, 882,
- /* 280 */ 937, 937, 937, 937, 937, 937, 915, 914, 937, 937,
- /* 290 */ 937, 937, 937, 937, 937, 937, 937, 937, 903, 937,
- /* 300 */ 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
- /* 310 */ 937, 937, 937, 937, 937, 937, 937, 937, 758, 937,
- /* 320 */ 862, 843, 701, 851, 937, 937, 937, 937, 937, 842,
- /* 330 */ 854, 810, 937, 749, 937, 809, 806, 808, 611, 937,
- /* 340 */ 937, 937, 937, 937, 586, 590, 936, 934, 933, 931,
- /* 350 */ 891, 890, 889, 887, 896, 895, 894, 893, 892, 888,
- /* 360 */ 886, 885, 884, 881, 787, 775, 766, 697, 930, 928,
- /* 370 */ 929, 880, 878, 879, 696, 695, 692, 691, 690, 870,
- /* 380 */ 869, 867, 866, 868, 604, 907, 910, 909, 908, 913,
- /* 390 */ 912, 905, 918, 917, 922, 926, 925, 924, 923, 921,
- /* 400 */ 902, 795, 794, 792, 797, 788, 793, 780, 786, 785,
- /* 410 */ 776, 779, 684, 771, 767, 770, 906, 694, 603, 741,
+ /* 250 */ 629, 864, 936, 936, 936, 936, 936, 936, 936, 936,
+ /* 260 */ 936, 936, 936, 936, 936, 936, 936, 936, 936, 763,
+ /* 270 */ 936, 936, 936, 936, 936, 936, 936, 936, 936, 881,
+ /* 280 */ 936, 936, 936, 936, 936, 936, 914, 913, 936, 936,
+ /* 290 */ 936, 936, 936, 936, 936, 936, 936, 936, 902, 936,
+ /* 300 */ 936, 936, 936, 936, 936, 936, 936, 936, 936, 936,
+ /* 310 */ 936, 936, 936, 936, 936, 936, 936, 936, 758, 936,
+ /* 320 */ 861, 843, 701, 850, 936, 936, 936, 936, 936, 842,
+ /* 330 */ 853, 810, 936, 749, 936, 809, 806, 808, 611, 936,
+ /* 340 */ 936, 936, 936, 936, 586, 590, 935, 933, 932, 930,
+ /* 350 */ 890, 889, 888, 886, 895, 894, 893, 892, 891, 887,
+ /* 360 */ 885, 884, 883, 880, 787, 775, 766, 697, 929, 927,
+ /* 370 */ 928, 879, 877, 878, 696, 695, 692, 691, 690, 869,
+ /* 380 */ 868, 866, 865, 867, 604, 906, 909, 908, 907, 912,
+ /* 390 */ 911, 904, 917, 916, 921, 925, 924, 923, 922, 920,
+ /* 400 */ 901, 795, 794, 792, 797, 788, 793, 780, 786, 785,
+ /* 410 */ 776, 779, 684, 771, 767, 770, 905, 694, 603, 741,
/* 420 */ 602, 607, 668, 669, 677, 680, 675, 678, 674, 673,
/* 430 */ 672, 676, 671, 667, 610, 609, 623, 621, 622, 620,
/* 440 */ 619, 617, 639, 638, 635, 637, 634, 636, 633, 632,
- /* 450 */ 631, 630, 628, 661, 647, 646, 875, 877, 876, 874,
- /* 460 */ 873, 654, 653, 659, 658, 657, 656, 652, 655, 651,
+ /* 450 */ 631, 630, 628, 661, 647, 646, 874, 876, 875, 873,
+ /* 460 */ 872, 654, 653, 659, 658, 657, 656, 652, 655, 651,
/* 470 */ 650, 648, 644, 814, 813, 807, 835, 707, 706, 715,
/* 480 */ 713, 712, 711, 747, 746, 745, 744, 743, 742, 735,
/* 490 */ 733, 729, 728, 734, 732, 727, 719, 717, 718, 716,
/* 500 */ 612, 802, 799, 801, 798, 737, 725, 722, 709, 751,
- /* 510 */ 753, 855, 845, 834, 846, 740, 832, 833, 704, 703,
- /* 520 */ 702, 854, 851, 847, 927, 838, 850, 837, 836, 825,
- /* 530 */ 824, 812, 848, 849, 811, 750, 765, 899, 898, 901,
- /* 540 */ 900, 897, 764, 625, 624, 705, 700, 699, 805, 804,
+ /* 510 */ 753, 854, 844, 834, 845, 740, 832, 833, 704, 703,
+ /* 520 */ 702, 853, 850, 846, 926, 838, 849, 837, 836, 825,
+ /* 530 */ 824, 812, 847, 848, 811, 750, 765, 898, 897, 900,
+ /* 540 */ 899, 896, 764, 625, 624, 705, 700, 699, 805, 804,
/* 550 */ 803, 643, 755, 754, 642, 664, 663, 660, 641, 640,
/* 560 */ 627, 626, 606, 600, 599, 598, 597, 615, 614, 613,
/* 570 */ 611, 596, 595, 689, 688, 687, 686, 685, 682, 592,
@@ -1258,99 +1258,98 @@ static const char *const yyRuleName[] = {
/* 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 ::= LP expr",
- /* 261 */ "exprx ::= expr not_opt IN ID_DB",
- /* 262 */ "exprx ::= expr not_opt IN nm DOT ID_TAB",
- /* 263 */ "exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN",
- /* 264 */ "exprx ::= nm DOT ID_TAB|ID_COL",
- /* 265 */ "exprx ::= nm DOT nm DOT ID_COL",
- /* 266 */ "exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP",
- /* 267 */ "expr ::= exprx",
- /* 268 */ "expr ::=",
- /* 269 */ "not_opt ::=",
- /* 270 */ "not_opt ::= NOT",
- /* 271 */ "likeop ::= LIKE|GLOB",
- /* 272 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 273 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 274 */ "case_else ::= ELSE expr",
- /* 275 */ "case_else ::=",
- /* 276 */ "case_operand ::= exprx",
- /* 277 */ "case_operand ::=",
- /* 278 */ "exprlist ::= nexprlist",
- /* 279 */ "exprlist ::=",
- /* 280 */ "nexprlist ::= nexprlist COMMA expr",
- /* 281 */ "nexprlist ::= exprx",
- /* 282 */ "cmd ::= CREATE uniqueflag INDEX nm ON nm dbnm LP idxlist RP onconf",
- /* 283 */ "cmd ::= CREATE uniqueflag INDEX nm dbnm ON ID_TAB",
- /* 284 */ "cmd ::= CREATE uniqueflag INDEX nm DOT ID_IDX_NEW",
- /* 285 */ "cmd ::= CREATE uniqueflag INDEX ID_DB|ID_IDX_NEW",
- /* 286 */ "uniqueflag ::= UNIQUE",
- /* 287 */ "uniqueflag ::=",
- /* 288 */ "idxlist_opt ::=",
- /* 289 */ "idxlist_opt ::= LP idxlist RP",
- /* 290 */ "idxlist ::= idxlist COMMA idxlist_single",
- /* 291 */ "idxlist ::= idxlist_single",
- /* 292 */ "idxlist_single ::= nm sortorder",
- /* 293 */ "idxlist_single ::= ID_COL",
- /* 294 */ "cmd ::= DROP INDEX fullname",
- /* 295 */ "cmd ::= DROP INDEX nm DOT ID_IDX",
- /* 296 */ "cmd ::= DROP INDEX ID_DB|ID_IDX",
- /* 297 */ "cmd ::= COPY orconf nm dbnm FROM nm USING DELIMITERS STRING",
- /* 298 */ "cmd ::= COPY orconf nm dbnm FROM nm",
- /* 299 */ "cmd ::= VACUUM",
- /* 300 */ "cmd ::= VACUUM nm",
- /* 301 */ "cmd ::= PRAGMA ids",
- /* 302 */ "cmd ::= PRAGMA nm EQ nmnum",
- /* 303 */ "cmd ::= PRAGMA nm LP nmnum RP",
- /* 304 */ "cmd ::= PRAGMA nm EQ minus_num",
- /* 305 */ "cmd ::= PRAGMA nm LP minus_num RP",
- /* 306 */ "cmd ::= PRAGMA nm DOT ID_PRAGMA",
- /* 307 */ "cmd ::= PRAGMA ID_DB|ID_PRAGMA",
- /* 308 */ "nmnum ::= plus_num",
- /* 309 */ "nmnum ::= nm",
- /* 310 */ "nmnum ::= ON",
- /* 311 */ "nmnum ::= DELETE",
- /* 312 */ "nmnum ::= DEFAULT",
- /* 313 */ "plus_num ::= PLUS number",
- /* 314 */ "plus_num ::= number",
- /* 315 */ "minus_num ::= MINUS number",
- /* 316 */ "number ::= INTEGER",
- /* 317 */ "number ::= FLOAT",
- /* 318 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list END",
- /* 319 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause",
- /* 320 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list",
- /* 321 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON ID_TAB|ID_DB",
- /* 322 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm DOT ID_TAB",
- /* 323 */ "cmd ::= CREATE temp TRIGGER ID_TRIG_NEW",
- /* 324 */ "trigger_time ::= BEFORE",
- /* 325 */ "trigger_time ::= AFTER",
- /* 326 */ "trigger_time ::= INSTEAD OF",
- /* 327 */ "trigger_time ::=",
- /* 328 */ "trigger_event ::= DELETE",
- /* 329 */ "trigger_event ::= INSERT",
- /* 330 */ "trigger_event ::= UPDATE",
- /* 331 */ "trigger_event ::= UPDATE OF inscollist",
- /* 332 */ "foreach_clause ::=",
- /* 333 */ "foreach_clause ::= FOR EACH ROW",
- /* 334 */ "foreach_clause ::= FOR EACH STATEMENT",
- /* 335 */ "when_clause ::=",
- /* 336 */ "when_clause ::= WHEN expr",
- /* 337 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
- /* 338 */ "trigger_cmd_list ::= trigger_cmd SEMI",
- /* 339 */ "trigger_cmd ::= update_stmt",
- /* 340 */ "trigger_cmd ::= insert_stmt",
- /* 341 */ "trigger_cmd ::= delete_stmt",
- /* 342 */ "trigger_cmd ::= select_stmt",
- /* 343 */ "raisetype ::= ROLLBACK|ABORT|FAIL",
- /* 344 */ "cmd ::= DROP TRIGGER fullname",
- /* 345 */ "cmd ::= DROP TRIGGER nm DOT ID_TRIG",
- /* 346 */ "cmd ::= DROP TRIGGER ID_DB|ID_TRIG",
- /* 347 */ "cmd ::= ATTACH database_kw_opt ids AS ids key_opt",
- /* 348 */ "key_opt ::=",
- /* 349 */ "key_opt ::= USING ids",
- /* 350 */ "database_kw_opt ::= DATABASE",
- /* 351 */ "database_kw_opt ::=",
- /* 352 */ "cmd ::= DETACH database_kw_opt nm",
+ /* 260 */ "exprx ::= expr not_opt IN ID_DB",
+ /* 261 */ "exprx ::= expr not_opt IN nm DOT ID_TAB",
+ /* 262 */ "exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN",
+ /* 263 */ "exprx ::= nm DOT ID_TAB|ID_COL",
+ /* 264 */ "exprx ::= nm DOT nm DOT ID_COL",
+ /* 265 */ "exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP",
+ /* 266 */ "expr ::= exprx",
+ /* 267 */ "expr ::=",
+ /* 268 */ "not_opt ::=",
+ /* 269 */ "not_opt ::= NOT",
+ /* 270 */ "likeop ::= LIKE|GLOB",
+ /* 271 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 272 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 273 */ "case_else ::= ELSE expr",
+ /* 274 */ "case_else ::=",
+ /* 275 */ "case_operand ::= exprx",
+ /* 276 */ "case_operand ::=",
+ /* 277 */ "exprlist ::= nexprlist",
+ /* 278 */ "exprlist ::=",
+ /* 279 */ "nexprlist ::= nexprlist COMMA expr",
+ /* 280 */ "nexprlist ::= exprx",
+ /* 281 */ "cmd ::= CREATE uniqueflag INDEX nm ON nm dbnm LP idxlist RP onconf",
+ /* 282 */ "cmd ::= CREATE uniqueflag INDEX nm dbnm ON ID_TAB",
+ /* 283 */ "cmd ::= CREATE uniqueflag INDEX nm DOT ID_IDX_NEW",
+ /* 284 */ "cmd ::= CREATE uniqueflag INDEX ID_DB|ID_IDX_NEW",
+ /* 285 */ "uniqueflag ::= UNIQUE",
+ /* 286 */ "uniqueflag ::=",
+ /* 287 */ "idxlist_opt ::=",
+ /* 288 */ "idxlist_opt ::= LP idxlist RP",
+ /* 289 */ "idxlist ::= idxlist COMMA idxlist_single",
+ /* 290 */ "idxlist ::= idxlist_single",
+ /* 291 */ "idxlist_single ::= nm sortorder",
+ /* 292 */ "idxlist_single ::= ID_COL",
+ /* 293 */ "cmd ::= DROP INDEX fullname",
+ /* 294 */ "cmd ::= DROP INDEX nm DOT ID_IDX",
+ /* 295 */ "cmd ::= DROP INDEX ID_DB|ID_IDX",
+ /* 296 */ "cmd ::= COPY orconf nm dbnm FROM nm USING DELIMITERS STRING",
+ /* 297 */ "cmd ::= COPY orconf nm dbnm FROM nm",
+ /* 298 */ "cmd ::= VACUUM",
+ /* 299 */ "cmd ::= VACUUM nm",
+ /* 300 */ "cmd ::= PRAGMA ids",
+ /* 301 */ "cmd ::= PRAGMA nm EQ nmnum",
+ /* 302 */ "cmd ::= PRAGMA nm LP nmnum RP",
+ /* 303 */ "cmd ::= PRAGMA nm EQ minus_num",
+ /* 304 */ "cmd ::= PRAGMA nm LP minus_num RP",
+ /* 305 */ "cmd ::= PRAGMA nm DOT ID_PRAGMA",
+ /* 306 */ "cmd ::= PRAGMA ID_DB|ID_PRAGMA",
+ /* 307 */ "nmnum ::= plus_num",
+ /* 308 */ "nmnum ::= nm",
+ /* 309 */ "nmnum ::= ON",
+ /* 310 */ "nmnum ::= DELETE",
+ /* 311 */ "nmnum ::= DEFAULT",
+ /* 312 */ "plus_num ::= PLUS number",
+ /* 313 */ "plus_num ::= number",
+ /* 314 */ "minus_num ::= MINUS number",
+ /* 315 */ "number ::= INTEGER",
+ /* 316 */ "number ::= FLOAT",
+ /* 317 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list END",
+ /* 318 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause",
+ /* 319 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list",
+ /* 320 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON ID_TAB|ID_DB",
+ /* 321 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm DOT ID_TAB",
+ /* 322 */ "cmd ::= CREATE temp TRIGGER ID_TRIG_NEW",
+ /* 323 */ "trigger_time ::= BEFORE",
+ /* 324 */ "trigger_time ::= AFTER",
+ /* 325 */ "trigger_time ::= INSTEAD OF",
+ /* 326 */ "trigger_time ::=",
+ /* 327 */ "trigger_event ::= DELETE",
+ /* 328 */ "trigger_event ::= INSERT",
+ /* 329 */ "trigger_event ::= UPDATE",
+ /* 330 */ "trigger_event ::= UPDATE OF inscollist",
+ /* 331 */ "foreach_clause ::=",
+ /* 332 */ "foreach_clause ::= FOR EACH ROW",
+ /* 333 */ "foreach_clause ::= FOR EACH STATEMENT",
+ /* 334 */ "when_clause ::=",
+ /* 335 */ "when_clause ::= WHEN expr",
+ /* 336 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
+ /* 337 */ "trigger_cmd_list ::= trigger_cmd SEMI",
+ /* 338 */ "trigger_cmd ::= update_stmt",
+ /* 339 */ "trigger_cmd ::= insert_stmt",
+ /* 340 */ "trigger_cmd ::= delete_stmt",
+ /* 341 */ "trigger_cmd ::= select_stmt",
+ /* 342 */ "raisetype ::= ROLLBACK|ABORT|FAIL",
+ /* 343 */ "cmd ::= DROP TRIGGER fullname",
+ /* 344 */ "cmd ::= DROP TRIGGER nm DOT ID_TRIG",
+ /* 345 */ "cmd ::= DROP TRIGGER ID_DB|ID_TRIG",
+ /* 346 */ "cmd ::= ATTACH database_kw_opt ids AS ids key_opt",
+ /* 347 */ "key_opt ::=",
+ /* 348 */ "key_opt ::= USING ids",
+ /* 349 */ "database_kw_opt ::= DATABASE",
+ /* 350 */ "database_kw_opt ::=",
+ /* 351 */ "cmd ::= DETACH database_kw_opt nm",
};
#endif /* NDEBUG */
@@ -2220,7 +2219,6 @@ static const struct {
{ 221, 5 },
{ 221, 4 },
{ 221, 5 },
- { 221, 2 },
{ 221, 4 },
{ 221, 6 },
{ 221, 1 },
@@ -2396,10 +2394,10 @@ static void yy_reduce(
{yygotominor.yy91 = new ParserStubExplain(true, false);}
break;
case 7: /* cmdx ::= cmd */
- case 339: /* trigger_cmd ::= update_stmt */ yytestcase(yyruleno==339);
- case 340: /* trigger_cmd ::= insert_stmt */ yytestcase(yyruleno==340);
- case 341: /* trigger_cmd ::= delete_stmt */ yytestcase(yyruleno==341);
- case 342: /* trigger_cmd ::= select_stmt */ yytestcase(yyruleno==342);
+ case 338: /* trigger_cmd ::= update_stmt */ yytestcase(yyruleno==338);
+ case 339: /* trigger_cmd ::= insert_stmt */ yytestcase(yyruleno==339);
+ case 340: /* trigger_cmd ::= delete_stmt */ yytestcase(yyruleno==340);
+ case 341: /* trigger_cmd ::= select_stmt */ yytestcase(yyruleno==341);
{yygotominor.yy203 = yymsp[0].minor.yy203;}
break;
case 8: /* cmd ::= BEGIN trans_opt onconf */
@@ -2467,8 +2465,8 @@ static void yy_reduce(
case 16: /* cmd ::= CREATE temp TABLE fullname LP columnlist conslist_opt RP */
{
yygotominor.yy203 = new SqliteCreateTable(
- *(yymsp[-6].minor.yy226),
false,
+ *(yymsp[-6].minor.yy226),
yymsp[-4].minor.yy120->name1,
yymsp[-4].minor.yy120->name2,
*(yymsp[-2].minor.yy42),
@@ -2484,8 +2482,8 @@ static void yy_reduce(
case 17: /* cmd ::= CREATE temp TABLE fullname AS select */
{
yygotominor.yy203 = new SqliteCreateTable(
- *(yymsp[-4].minor.yy226),
false,
+ *(yymsp[-4].minor.yy226),
yymsp[-2].minor.yy120->name1,
yymsp[-2].minor.yy120->name2,
yymsp[0].minor.yy153
@@ -2502,7 +2500,7 @@ static void yy_reduce(
break;
case 19: /* cmd ::= CREATE temp TABLE ID_DB|ID_TAB_NEW */
case 110: /* cmd ::= CREATE temp VIEW ID_VIEW_NEW */ yytestcase(yyruleno==110);
- case 323: /* cmd ::= CREATE temp TRIGGER ID_TRIG_NEW */ yytestcase(yyruleno==323);
+ case 322: /* cmd ::= CREATE temp TRIGGER ID_TRIG_NEW */ yytestcase(yyruleno==322);
{ yy_destructor(yypParser,157,&yymsp[-2].minor);
}
break;
@@ -2599,9 +2597,9 @@ static void yy_reduce(
break;
case 40: /* signed ::= plus_num */
case 41: /* signed ::= minus_num */ yytestcase(yyruleno==41);
- case 308: /* nmnum ::= plus_num */ yytestcase(yyruleno==308);
- case 313: /* plus_num ::= PLUS number */ yytestcase(yyruleno==313);
- case 314: /* plus_num ::= number */ yytestcase(yyruleno==314);
+ case 307: /* nmnum ::= plus_num */ yytestcase(yyruleno==307);
+ case 312: /* plus_num ::= PLUS number */ yytestcase(yyruleno==312);
+ case 313: /* plus_num ::= number */ yytestcase(yyruleno==313);
{yygotominor.yy69 = yymsp[0].minor.yy69;}
break;
case 42: /* carglist ::= carglist ccons */
@@ -2849,15 +2847,15 @@ static void yy_reduce(
}
break;
case 85: /* tconscomma ::= COMMA */
- case 270: /* not_opt ::= NOT */ yytestcase(yyruleno==270);
- case 286: /* uniqueflag ::= UNIQUE */ yytestcase(yyruleno==286);
- case 350: /* database_kw_opt ::= DATABASE */ yytestcase(yyruleno==350);
+ case 269: /* not_opt ::= NOT */ yytestcase(yyruleno==269);
+ case 285: /* uniqueflag ::= UNIQUE */ yytestcase(yyruleno==285);
+ case 349: /* database_kw_opt ::= DATABASE */ yytestcase(yyruleno==349);
{yygotominor.yy291 = new bool(true);}
break;
case 86: /* tconscomma ::= */
- case 269: /* not_opt ::= */ yytestcase(yyruleno==269);
- case 287: /* uniqueflag ::= */ yytestcase(yyruleno==287);
- case 351: /* database_kw_opt ::= */ yytestcase(yyruleno==351);
+ case 268: /* not_opt ::= */ yytestcase(yyruleno==268);
+ case 286: /* uniqueflag ::= */ yytestcase(yyruleno==286);
+ case 350: /* database_kw_opt ::= */ yytestcase(yyruleno==350);
{yygotominor.yy291 = new bool(false);}
break;
case 87: /* tcons ::= CONSTRAINT nm */
@@ -2961,15 +2959,15 @@ static void yy_reduce(
case 187: /* delete_stmt ::= DELETE FROM ID_DB|ID_TAB */ yytestcase(yyruleno==187);
case 195: /* update_stmt ::= UPDATE orconf nm DOT ID_TAB */ yytestcase(yyruleno==195);
case 196: /* update_stmt ::= UPDATE orconf ID_DB|ID_TAB */ yytestcase(yyruleno==196);
- case 264: /* exprx ::= nm DOT ID_TAB|ID_COL */ yytestcase(yyruleno==264);
- case 284: /* cmd ::= CREATE uniqueflag INDEX nm DOT ID_IDX_NEW */ yytestcase(yyruleno==284);
- case 285: /* cmd ::= CREATE uniqueflag INDEX ID_DB|ID_IDX_NEW */ yytestcase(yyruleno==285);
- case 295: /* cmd ::= DROP INDEX nm DOT ID_IDX */ yytestcase(yyruleno==295);
- case 296: /* cmd ::= DROP INDEX ID_DB|ID_IDX */ yytestcase(yyruleno==296);
- case 306: /* cmd ::= PRAGMA nm DOT ID_PRAGMA */ yytestcase(yyruleno==306);
- case 307: /* cmd ::= PRAGMA ID_DB|ID_PRAGMA */ yytestcase(yyruleno==307);
- case 345: /* cmd ::= DROP TRIGGER nm DOT ID_TRIG */ yytestcase(yyruleno==345);
- case 346: /* cmd ::= DROP TRIGGER ID_DB|ID_TRIG */ yytestcase(yyruleno==346);
+ case 263: /* exprx ::= nm DOT ID_TAB|ID_COL */ yytestcase(yyruleno==263);
+ case 283: /* cmd ::= CREATE uniqueflag INDEX nm DOT ID_IDX_NEW */ yytestcase(yyruleno==283);
+ case 284: /* cmd ::= CREATE uniqueflag INDEX ID_DB|ID_IDX_NEW */ yytestcase(yyruleno==284);
+ case 294: /* cmd ::= DROP INDEX nm DOT ID_IDX */ yytestcase(yyruleno==294);
+ case 295: /* cmd ::= DROP INDEX ID_DB|ID_IDX */ yytestcase(yyruleno==295);
+ case 305: /* cmd ::= PRAGMA nm DOT ID_PRAGMA */ yytestcase(yyruleno==305);
+ case 306: /* cmd ::= PRAGMA ID_DB|ID_PRAGMA */ yytestcase(yyruleno==306);
+ case 344: /* cmd ::= DROP TRIGGER nm DOT ID_TRIG */ yytestcase(yyruleno==344);
+ case 345: /* cmd ::= DROP TRIGGER ID_DB|ID_TRIG */ yytestcase(yyruleno==345);
{ yy_destructor(yypParser,156,&yymsp[-2].minor);
}
break;
@@ -3341,11 +3339,11 @@ static void yy_reduce(
{yygotominor.yy389 = new SqliteSortOrder(SqliteSortOrder::null);}
break;
case 173: /* groupby_opt ::= */
- case 279: /* exprlist ::= */ yytestcase(yyruleno==279);
+ case 278: /* exprlist ::= */ yytestcase(yyruleno==278);
{yygotominor.yy231 = new ParserExprList();}
break;
case 174: /* groupby_opt ::= GROUP BY nexprlist */
- case 278: /* exprlist ::= nexprlist */ yytestcase(yyruleno==278);
+ case 277: /* exprlist ::= nexprlist */ yytestcase(yyruleno==277);
{yygotominor.yy231 = yymsp[0].minor.yy231;}
break;
case 175: /* groupby_opt ::= GROUP BY */
@@ -3356,18 +3354,18 @@ static void yy_reduce(
break;
case 176: /* having_opt ::= */
case 188: /* where_opt ::= */ yytestcase(yyruleno==188);
- case 275: /* case_else ::= */ yytestcase(yyruleno==275);
- case 277: /* case_operand ::= */ yytestcase(yyruleno==277);
- case 335: /* when_clause ::= */ yytestcase(yyruleno==335);
- case 348: /* key_opt ::= */ yytestcase(yyruleno==348);
+ case 274: /* case_else ::= */ yytestcase(yyruleno==274);
+ case 276: /* case_operand ::= */ yytestcase(yyruleno==276);
+ case 334: /* when_clause ::= */ yytestcase(yyruleno==334);
+ case 347: /* key_opt ::= */ yytestcase(yyruleno==347);
{yygotominor.yy192 = nullptr;}
break;
case 177: /* having_opt ::= HAVING expr */
case 189: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==189);
- case 267: /* expr ::= exprx */ yytestcase(yyruleno==267);
- case 274: /* case_else ::= ELSE expr */ yytestcase(yyruleno==274);
- case 276: /* case_operand ::= exprx */ yytestcase(yyruleno==276);
- case 336: /* when_clause ::= WHEN expr */ yytestcase(yyruleno==336);
+ case 266: /* expr ::= exprx */ yytestcase(yyruleno==266);
+ case 273: /* case_else ::= ELSE expr */ yytestcase(yyruleno==273);
+ case 275: /* case_operand ::= exprx */ yytestcase(yyruleno==275);
+ case 335: /* when_clause ::= WHEN expr */ yytestcase(yyruleno==335);
{yygotominor.yy192 = yymsp[0].minor.yy192;}
break;
case 178: /* limit_opt ::= */
@@ -3919,68 +3917,60 @@ static void yy_reduce(
parserContext->minorErrorBeforeNextToken("Syntax error");
}
break;
- case 260: /* exprx ::= LP expr */
-{
- yygotominor.yy192 = new SqliteExpr();
- yygotominor.yy192->initSubExpr(yymsp[0].minor.yy192);
- objectForTokens = yygotominor.yy192;
- parserContext->minorErrorBeforeNextToken("Syntax error");
- }
- break;
- case 261: /* exprx ::= expr not_opt IN ID_DB */
+ case 260: /* exprx ::= expr not_opt IN ID_DB */
{ yy_destructor(yypParser,177,&yymsp[-3].minor);
}
break;
- case 262: /* exprx ::= expr not_opt IN nm DOT ID_TAB */
- case 263: /* exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN */ yytestcase(yyruleno==263);
+ case 261: /* exprx ::= expr not_opt IN nm DOT ID_TAB */
+ case 262: /* exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN */ yytestcase(yyruleno==262);
{ yy_destructor(yypParser,177,&yymsp[-5].minor);
yy_destructor(yypParser,156,&yymsp[-2].minor);
}
break;
- case 265: /* exprx ::= nm DOT nm DOT ID_COL */
- case 266: /* exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP */ yytestcase(yyruleno==266);
+ case 264: /* exprx ::= nm DOT nm DOT ID_COL */
+ case 265: /* exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP */ yytestcase(yyruleno==265);
{ yy_destructor(yypParser,156,&yymsp[-4].minor);
yy_destructor(yypParser,156,&yymsp[-2].minor);
}
break;
- case 268: /* expr ::= */
+ case 267: /* expr ::= */
{
yygotominor.yy192 = new SqliteExpr();
objectForTokens = yygotominor.yy192;
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 271: /* likeop ::= LIKE|GLOB */
+ case 270: /* likeop ::= LIKE|GLOB */
{yygotominor.yy41 = new SqliteExpr::LikeOp(SqliteExpr::likeOp(yymsp[0].minor.yy0->value));}
break;
- case 272: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ case 271: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
{
yymsp[-4].minor.yy231->append(yymsp[-2].minor.yy192);
yymsp[-4].minor.yy231->append(yymsp[0].minor.yy192);
yygotominor.yy231 = yymsp[-4].minor.yy231;
}
break;
- case 273: /* case_exprlist ::= WHEN expr THEN expr */
+ case 272: /* case_exprlist ::= WHEN expr THEN expr */
{
yygotominor.yy231 = new ParserExprList();
yygotominor.yy231->append(yymsp[-2].minor.yy192);
yygotominor.yy231->append(yymsp[0].minor.yy192);
}
break;
- case 280: /* nexprlist ::= nexprlist COMMA expr */
+ case 279: /* nexprlist ::= nexprlist COMMA expr */
{
yymsp[-2].minor.yy231->append(yymsp[0].minor.yy192);
yygotominor.yy231 = yymsp[-2].minor.yy231;
DONT_INHERIT_TOKENS("nexprlist");
}
break;
- case 281: /* nexprlist ::= exprx */
+ case 280: /* nexprlist ::= exprx */
{
yygotominor.yy231 = new ParserExprList();
yygotominor.yy231->append(yymsp[0].minor.yy192);
}
break;
- case 282: /* cmd ::= CREATE uniqueflag INDEX nm ON nm dbnm LP idxlist RP onconf */
+ case 281: /* cmd ::= CREATE uniqueflag INDEX nm ON nm dbnm LP idxlist RP onconf */
{
yygotominor.yy203 = new SqliteCreateIndex(
*(yymsp[-9].minor.yy291),
@@ -4000,31 +3990,31 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 283: /* cmd ::= CREATE uniqueflag INDEX nm dbnm ON ID_TAB */
+ case 282: /* cmd ::= CREATE uniqueflag INDEX nm dbnm ON ID_TAB */
{ yy_destructor(yypParser,156,&yymsp[-3].minor);
}
break;
- case 288: /* idxlist_opt ::= */
+ case 287: /* idxlist_opt ::= */
{yygotominor.yy63 = new ParserIndexedColumnList();}
break;
- case 289: /* idxlist_opt ::= LP idxlist RP */
+ case 288: /* idxlist_opt ::= LP idxlist RP */
{yygotominor.yy63 = yymsp[-1].minor.yy63;}
break;
- case 290: /* idxlist ::= idxlist COMMA idxlist_single */
+ case 289: /* idxlist ::= idxlist COMMA idxlist_single */
{
yymsp[-2].minor.yy63->append(yymsp[0].minor.yy428);
yygotominor.yy63 = yymsp[-2].minor.yy63;
DONT_INHERIT_TOKENS("idxlist");
}
break;
- case 291: /* idxlist ::= idxlist_single */
+ case 290: /* idxlist ::= idxlist_single */
{
yygotominor.yy63 = new ParserIndexedColumnList();
yygotominor.yy63->append(yymsp[0].minor.yy428);
}
break;
- case 292: /* idxlist_single ::= nm sortorder */
- case 293: /* idxlist_single ::= ID_COL */ yytestcase(yyruleno==293);
+ case 291: /* idxlist_single ::= nm sortorder */
+ case 292: /* idxlist_single ::= ID_COL */ yytestcase(yyruleno==292);
{
SqliteIndexedColumn* obj =
new SqliteIndexedColumn(
@@ -4038,14 +4028,14 @@ static void yy_reduce(
objectForTokens = yygotominor.yy428;
}
break;
- case 294: /* cmd ::= DROP INDEX fullname */
+ case 293: /* cmd ::= DROP INDEX fullname */
{
yygotominor.yy203 = new SqliteDropIndex(false, yymsp[0].minor.yy120->name1, yymsp[0].minor.yy120->name2);
delete yymsp[0].minor.yy120;
objectForTokens = yygotominor.yy203;
}
break;
- case 297: /* cmd ::= COPY orconf nm dbnm FROM nm USING DELIMITERS STRING */
+ case 296: /* cmd ::= COPY orconf nm dbnm FROM nm USING DELIMITERS STRING */
{
yygotominor.yy203 = new SqliteCopy(
*(yymsp[-7].minor.yy418),
@@ -4061,7 +4051,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 298: /* cmd ::= COPY orconf nm dbnm FROM nm */
+ case 297: /* cmd ::= COPY orconf nm dbnm FROM nm */
{
yygotominor.yy203 = new SqliteCopy(
*(yymsp[-4].minor.yy418),
@@ -4076,28 +4066,28 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 299: /* cmd ::= VACUUM */
+ case 298: /* cmd ::= VACUUM */
{
yygotominor.yy203 = new SqliteVacuum();
objectForTokens = yygotominor.yy203;
}
break;
- case 300: /* cmd ::= VACUUM nm */
+ case 299: /* cmd ::= VACUUM nm */
{
yygotominor.yy203 = new SqliteVacuum(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
objectForTokens = yygotominor.yy203;
}
break;
- case 301: /* cmd ::= PRAGMA ids */
+ case 300: /* cmd ::= PRAGMA ids */
{
yygotominor.yy203 = new SqlitePragma(*(yymsp[0].minor.yy319), QString::null);
delete yymsp[0].minor.yy319;
objectForTokens = yygotominor.yy203;
}
break;
- case 302: /* cmd ::= PRAGMA nm EQ nmnum */
- case 304: /* cmd ::= PRAGMA nm EQ minus_num */ yytestcase(yyruleno==304);
+ case 301: /* cmd ::= PRAGMA nm EQ nmnum */
+ case 303: /* cmd ::= PRAGMA nm EQ minus_num */ yytestcase(yyruleno==303);
{
yygotominor.yy203 = new SqlitePragma(*(yymsp[-2].minor.yy319), QString::null, *(yymsp[0].minor.yy69), true);
delete yymsp[-2].minor.yy319;
@@ -4105,8 +4095,8 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 303: /* cmd ::= PRAGMA nm LP nmnum RP */
- case 305: /* cmd ::= PRAGMA nm LP minus_num RP */ yytestcase(yyruleno==305);
+ case 302: /* cmd ::= PRAGMA nm LP nmnum RP */
+ case 304: /* cmd ::= PRAGMA nm LP minus_num RP */ yytestcase(yyruleno==304);
{
yygotominor.yy203 = new SqlitePragma(*(yymsp[-3].minor.yy319), QString::null, *(yymsp[-1].minor.yy69), false);
delete yymsp[-3].minor.yy319;
@@ -4114,18 +4104,18 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 309: /* nmnum ::= nm */
+ case 308: /* nmnum ::= nm */
{
yygotominor.yy69 = new QVariant(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
}
break;
- case 310: /* nmnum ::= ON */
- case 311: /* nmnum ::= DELETE */ yytestcase(yyruleno==311);
- case 312: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==312);
+ case 309: /* nmnum ::= ON */
+ case 310: /* nmnum ::= DELETE */ yytestcase(yyruleno==310);
+ case 311: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==311);
{yygotominor.yy69 = new QVariant(yymsp[0].minor.yy0->value);}
break;
- case 315: /* minus_num ::= MINUS number */
+ case 314: /* minus_num ::= MINUS number */
{
if (yymsp[0].minor.yy69->type() == QVariant::Double)
*(yymsp[0].minor.yy69) = -(yymsp[0].minor.yy69->toDouble());
@@ -4137,13 +4127,13 @@ static void yy_reduce(
yygotominor.yy69 = yymsp[0].minor.yy69;
}
break;
- case 316: /* number ::= INTEGER */
+ case 315: /* number ::= INTEGER */
{yygotominor.yy69 = new QVariant(QVariant(yymsp[0].minor.yy0->value).toLongLong());}
break;
- case 317: /* number ::= FLOAT */
+ case 316: /* number ::= FLOAT */
{yygotominor.yy69 = new QVariant(QVariant(yymsp[0].minor.yy0->value).toDouble());}
break;
- case 318: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list END */
+ case 317: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list END */
{
yygotominor.yy203 = new SqliteCreateTrigger(
*(yymsp[-12].minor.yy226),
@@ -4168,7 +4158,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 319: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause */
+ case 318: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause */
{
QList<SqliteQuery *> CL;
@@ -4195,7 +4185,7 @@ static void yy_reduce(
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 320: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list */
+ case 319: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list */
{
yygotominor.yy203 = new SqliteCreateTrigger(
*(yymsp[-11].minor.yy226),
@@ -4221,14 +4211,14 @@ static void yy_reduce(
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 321: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON ID_TAB|ID_DB */
+ case 320: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON ID_TAB|ID_DB */
{ yy_destructor(yypParser,157,&yymsp[-6].minor);
yy_destructor(yypParser,156,&yymsp[-4].minor);
yy_destructor(yypParser,232,&yymsp[-3].minor);
yy_destructor(yypParser,233,&yymsp[-2].minor);
}
break;
- case 322: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm DOT ID_TAB */
+ case 321: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm DOT ID_TAB */
{ yy_destructor(yypParser,157,&yymsp[-8].minor);
yy_destructor(yypParser,156,&yymsp[-6].minor);
yy_destructor(yypParser,232,&yymsp[-5].minor);
@@ -4236,76 +4226,76 @@ static void yy_reduce(
yy_destructor(yypParser,156,&yymsp[-2].minor);
}
break;
- case 324: /* trigger_time ::= BEFORE */
+ case 323: /* trigger_time ::= BEFORE */
{yygotominor.yy372 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::BEFORE);}
break;
- case 325: /* trigger_time ::= AFTER */
+ case 324: /* trigger_time ::= AFTER */
{yygotominor.yy372 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::AFTER);}
break;
- case 326: /* trigger_time ::= INSTEAD OF */
+ case 325: /* trigger_time ::= INSTEAD OF */
{yygotominor.yy372 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::INSTEAD_OF);}
break;
- case 327: /* trigger_time ::= */
+ case 326: /* trigger_time ::= */
{yygotominor.yy372 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::null);}
break;
- case 328: /* trigger_event ::= DELETE */
+ case 327: /* trigger_event ::= DELETE */
{
yygotominor.yy151 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::DELETE);
objectForTokens = yygotominor.yy151;
}
break;
- case 329: /* trigger_event ::= INSERT */
+ case 328: /* trigger_event ::= INSERT */
{
yygotominor.yy151 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::INSERT);
objectForTokens = yygotominor.yy151;
}
break;
- case 330: /* trigger_event ::= UPDATE */
+ case 329: /* trigger_event ::= UPDATE */
{
yygotominor.yy151 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::UPDATE);
objectForTokens = yygotominor.yy151;
}
break;
- case 331: /* trigger_event ::= UPDATE OF inscollist */
+ case 330: /* trigger_event ::= UPDATE OF inscollist */
{
yygotominor.yy151 = new SqliteCreateTrigger::Event(*(yymsp[0].minor.yy207));
delete yymsp[0].minor.yy207;
objectForTokens = yygotominor.yy151;
}
break;
- case 332: /* foreach_clause ::= */
+ case 331: /* foreach_clause ::= */
{yygotominor.yy83 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::null);}
break;
- case 333: /* foreach_clause ::= FOR EACH ROW */
+ case 332: /* foreach_clause ::= FOR EACH ROW */
{yygotominor.yy83 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::FOR_EACH_ROW);}
break;
- case 334: /* foreach_clause ::= FOR EACH STATEMENT */
+ case 333: /* foreach_clause ::= FOR EACH STATEMENT */
{yygotominor.yy83 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::FOR_EACH_STATEMENT);}
break;
- case 337: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ case 336: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
{
yymsp[-2].minor.yy270->append(yymsp[-1].minor.yy203);
yygotominor.yy270 = yymsp[-2].minor.yy270;
DONT_INHERIT_TOKENS("trigger_cmd_list");
}
break;
- case 338: /* trigger_cmd_list ::= trigger_cmd SEMI */
+ case 337: /* trigger_cmd_list ::= trigger_cmd SEMI */
{
yygotominor.yy270 = new ParserQueryList();
yygotominor.yy270->append(yymsp[-1].minor.yy203);
}
break;
- case 343: /* raisetype ::= ROLLBACK|ABORT|FAIL */
+ case 342: /* raisetype ::= ROLLBACK|ABORT|FAIL */
{yygotominor.yy0 = yymsp[0].minor.yy0;}
break;
- case 344: /* cmd ::= DROP TRIGGER fullname */
+ case 343: /* cmd ::= DROP TRIGGER fullname */
{
yygotominor.yy203 = new SqliteDropTrigger(false, yymsp[0].minor.yy120->name1, yymsp[0].minor.yy120->name2);
delete yymsp[0].minor.yy120;
objectForTokens = yygotominor.yy203;
}
break;
- case 347: /* cmd ::= ATTACH database_kw_opt ids AS ids key_opt */
+ case 346: /* cmd ::= ATTACH database_kw_opt ids AS ids key_opt */
{
SqliteExpr* e1 = new SqliteExpr();
SqliteExpr* e2 = new SqliteExpr();
@@ -4318,7 +4308,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 349: /* key_opt ::= USING ids */
+ case 348: /* key_opt ::= USING ids */
{
SqliteExpr* e = new SqliteExpr();
e->initLiteral(*(yymsp[0].minor.yy319));
@@ -4326,7 +4316,7 @@ static void yy_reduce(
yygotominor.yy192 = e;
}
break;
- case 352: /* cmd ::= DETACH database_kw_opt nm */
+ case 351: /* cmd ::= DETACH database_kw_opt nm */
{
SqliteExpr* e = new SqliteExpr();
e->initLiteral(*(yymsp[0].minor.yy319));
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y
index 2fd9c0d..d6ee4f7 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y
@@ -184,8 +184,8 @@ cmd(X) ::= CREATE temp(T) TABLE
LP columnlist(CL)
conslist_opt(CS) RP. {
X = new SqliteCreateTable(
- *(T),
false,
+ *(T),
N->name1,
N->name2,
*(CL),
@@ -201,8 +201,8 @@ cmd(X) ::= CREATE temp(T) TABLE
fullname(N)
AS select(S). {
X = new SqliteCreateTable(
- *(T),
false,
+ *(T),
N->name1,
N->name2,
S
@@ -1586,12 +1586,15 @@ exprx(X) ::= expr(E) not_opt(N) IN LP
objectForTokens = X;
parserContext->minorErrorBeforeNextToken("Syntax error");
}
+/*
+This introduces premature reduce for LP-expr and causes bug #2755
exprx(X) ::= LP expr(E). {
X = new SqliteExpr();
X->initSubExpr(E);
objectForTokens = X;
parserContext->minorErrorBeforeNextToken("Syntax error");
}
+*/
exprx ::= expr not_opt IN ID_DB. [IN] {}
exprx ::= expr not_opt IN nm DOT
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
index 7e4f3c0..646c533 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
@@ -170,7 +170,7 @@ typedef union {
#define sqlite3_parseARG_FETCH ParserContext* parserContext = yypParser->parserContext
#define sqlite3_parseARG_STORE yypParser->parserContext = parserContext
#define YYNSTATE 724
-#define YYNRULE 425
+#define YYNRULE 424
#define YYFALLBACK 1
#define YY_NO_ACTION (YYNSTATE+YYNRULE+2)
#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1)
@@ -246,22 +246,22 @@ static const YYMINORTYPE yyzerominor = { 0 };
static const YYACTIONTYPE yy_action[] = {
/* 0 */ 431, 48, 48, 47, 47, 47, 46, 216, 716, 339,
/* 10 */ 643, 425, 51, 51, 51, 51, 44, 49, 49, 49,
- /* 20 */ 49, 48, 48, 47, 47, 47, 46, 216, 721, 1027,
- /* 30 */ 1027, 643, 131, 580, 51, 51, 51, 51, 411, 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, 1027, 1027,
- /* 60 */ 41, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
- /* 70 */ 1027, 1027, 563, 1027, 1027, 1027, 1027, 38, 39, 1027,
- /* 80 */ 1027, 1027, 1027, 1027, 40, 431, 528, 385, 716, 595,
+ /* 50 */ 579, 81, 58, 643, 157, 685, 301, 282, 1026, 1026,
+ /* 60 */ 41, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
+ /* 70 */ 1026, 1026, 563, 1026, 1026, 1026, 1026, 38, 39, 1026,
+ /* 80 */ 1026, 1026, 1026, 1026, 40, 431, 528, 385, 716, 595,
/* 90 */ 594, 280, 4, 377, 716, 630, 425, 642, 608, 422,
/* 100 */ 12, 134, 687, 429, 562, 609, 483, 690, 331, 279,
/* 110 */ 714, 713, 564, 565, 642, 689, 688, 687, 235, 506,
/* 120 */ 60, 320, 610, 411, 47, 47, 47, 46, 216, 122,
- /* 130 */ 243, 213, 247, 59, 1143, 1143, 486, 609, 607, 603,
+ /* 130 */ 243, 213, 247, 59, 1142, 1142, 486, 609, 607, 603,
/* 140 */ 685, 306, 485, 584, 716, 41, 507, 509, 642, 508,
/* 150 */ 676, 9, 642, 144, 95, 281, 379, 276, 378, 132,
/* 160 */ 297, 716, 38, 39, 601, 200, 199, 7, 355, 40,
- /* 170 */ 884, 307, 1135, 274, 249, 716, 17, 4, 884, 1135,
+ /* 170 */ 884, 307, 1134, 274, 249, 716, 17, 4, 884, 1134,
/* 180 */ 56, 717, 642, 431, 422, 884, 329, 687, 429, 716,
/* 190 */ 687, 643, 690, 687, 425, 690, 714, 713, 690, 642,
/* 200 */ 689, 688, 687, 689, 688, 687, 689, 688, 687, 98,
@@ -269,16 +269,16 @@ static const YYACTIONTYPE yy_action[] = {
/* 220 */ 716, 411, 239, 884, 303, 582, 512, 581, 884, 884,
/* 230 */ 884, 884, 884, 642, 643, 676, 9, 642, 685, 217,
/* 240 */ 245, 673, 102, 41, 287, 300, 714, 713, 67, 302,
- /* 250 */ 148, 307, 1134, 151, 306, 484, 81, 715, 97, 1134,
+ /* 250 */ 148, 307, 1133, 151, 306, 484, 81, 715, 97, 1133,
/* 260 */ 38, 39, 551, 714, 713, 771, 130, 40, 946, 376,
/* 270 */ 373, 372, 447, 46, 216, 4, 946, 714, 713, 334,
/* 280 */ 642, 682, 422, 946, 606, 687, 429, 371, 448, 447,
/* 290 */ 690, 714, 713, 304, 265, 146, 267, 642, 689, 688,
/* 300 */ 687, 287, 68, 677, 691, 255, 362, 259, 359, 692,
- /* 310 */ 1028, 1028, 682, 946, 715, 946, 946, 447, 698, 234,
+ /* 310 */ 1027, 1027, 682, 946, 715, 946, 946, 447, 698, 234,
/* 320 */ 386, 715, 714, 713, 773, 651, 946, 946, 946, 946,
/* 330 */ 110, 642, 317, 676, 9, 642, 222, 677, 299, 52,
- /* 340 */ 53, 426, 289, 1028, 1028, 675, 675, 50, 50, 51,
+ /* 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,
@@ -293,27 +293,27 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 1028, 1028, 13, 931, 672, 931, 931, 54,
+ /* 490 */ 576, 88, 1027, 1027, 13, 931, 672, 931, 931, 54,
/* 500 */ 575, 678, 42, 368, 37, 401, 35, 381, 931, 1,
/* 510 */ 931, 931, 641, 642, 634, 676, 9, 642, 661, 714,
- /* 520 */ 713, 52, 53, 426, 289, 1028, 1028, 675, 675, 50,
+ /* 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, 1028, 1028, 426, 289, 693, 613, 675, 675, 50,
+ /* 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, 1026, 1026, 81,
- /* 600 */ 52, 53, 426, 289, 1028, 1028, 675, 675, 50, 50,
+ /* 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, 1026, 1026, 1026, 1026,
- /* 630 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
- /* 640 */ 716, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
- /* 650 */ 1026, 1026, 1028, 1028, 357, 49, 49, 49, 49, 48,
+ /* 620 */ 48, 47, 47, 47, 46, 216, 1025, 1025, 1025, 1025,
+ /* 630 */ 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
+ /* 640 */ 716, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
+ /* 650 */ 1025, 1025, 1027, 1027, 357, 49, 49, 49, 49, 48,
/* 660 */ 48, 47, 47, 47, 46, 216, 288, 552, 714, 713,
/* 670 */ 495, 682, 298, 662, 346, 153, 538, 69, 694, 715,
- /* 680 */ 715, 52, 53, 426, 289, 1028, 1028, 675, 675, 50,
- /* 690 */ 50, 51, 51, 51, 51, 1095, 49, 49, 49, 49,
+ /* 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,
@@ -321,12 +321,12 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 1095, 21, 716, 627, 459, 716, 1080, 716,
- /* 780 */ 647, 1046, 140, 89, 716, 1150, 154, 435, 2, 715,
+ /* 770 */ 216, 158, 1094, 21, 716, 627, 459, 716, 1079, 716,
+ /* 780 */ 647, 1045, 140, 89, 716, 1149, 154, 435, 2, 715,
/* 790 */ 424, 671, 670, 396, 460, 461, 954, 52, 53, 426,
/* 800 */ 289, 573, 716, 675, 675, 50, 50, 51, 51, 51,
/* 810 */ 51, 321, 49, 49, 49, 49, 48, 48, 47, 47,
- /* 820 */ 47, 46, 216, 431, 1109, 81, 206, 205, 204, 52,
+ /* 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,
@@ -334,17 +334,17 @@ static const YYACTIONTYPE yy_action[] = {
/* 870 */ 667, 609, 724, 434, 81, 656, 714, 713, 685, 714,
/* 880 */ 713, 714, 713, 41, 528, 272, 714, 713, 610, 349,
/* 890 */ 528, 450, 89, 677, 12, 633, 633, 338, 636, 609,
- /* 900 */ 38, 39, 649, 609, 714, 713, 716, 40, 1143, 1143,
+ /* 900 */ 38, 39, 649, 609, 714, 713, 716, 40, 1142, 1142,
/* 910 */ 716, 524, 682, 581, 716, 4, 610, 468, 60, 450,
/* 920 */ 642, 208, 422, 506, 60, 687, 429, 677, 32, 109,
/* 930 */ 690, 609, 500, 501, 352, 714, 713, 642, 689, 688,
/* 940 */ 687, 428, 900, 900, 467, 466, 552, 465, 421, 383,
- /* 950 */ 507, 509, 142, 508, 430, 440, 69, 1143, 1143, 715,
+ /* 950 */ 507, 509, 142, 508, 430, 440, 69, 1142, 1142, 715,
/* 960 */ 444, 722, 686, 182, 646, 714, 713, 645, 231, 230,
/* 970 */ 437, 642, 356, 676, 9, 642, 417, 444, 52, 53,
/* 980 */ 426, 289, 91, 91, 675, 675, 50, 50, 51, 51,
/* 990 */ 51, 51, 644, 49, 49, 49, 49, 48, 48, 47,
- /* 1000 */ 47, 47, 46, 216, 1035, 444, 668, 667, 714, 713,
+ /* 1000 */ 47, 47, 46, 216, 1034, 444, 668, 667, 714, 713,
/* 1010 */ 91, 453, 714, 713, 682, 641, 714, 713, 324, 202,
/* 1020 */ 52, 53, 426, 289, 446, 680, 675, 675, 50, 50,
/* 1030 */ 51, 51, 51, 51, 639, 49, 49, 49, 49, 48,
@@ -367,10 +367,10 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 1110, 91,
+ /* 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, 1108,
+ /* 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,
@@ -395,7 +395,7 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 714, 429, 716, 714, 713, 690, 279, 716,
+ /* 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,
@@ -408,9 +408,9 @@ static const YYACTIONTYPE yy_action[] = {
/* 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, 1036, 682, 531,
+ /* 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, 1038, 425,
+ /* 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,
@@ -794,59 +794,59 @@ static const short yy_reduce_ofst[] = {
/* 310 */ 1573, 1506, 1462, 1462, 1462, 1540,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 729, 1038, 1143, 1143, 1027, 1027, 1027, 1143, 1027, 1027,
- /* 10 */ 1027, 1027, 900, 1149, 1149, 1149, 1027, 1027, 1027, 1027,
- /* 20 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
- /* 30 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
- /* 40 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
- /* 50 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1015, 1149, 894,
- /* 60 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 774,
- /* 70 */ 890, 900, 1149, 1149, 1149, 1149, 1149, 962, 949, 940,
- /* 80 */ 1149, 1149, 1149, 972, 972, 955, 842, 972, 1149, 1149,
- /* 90 */ 1149, 1149, 928, 928, 1028, 1149, 766, 1113, 1118, 1013,
- /* 100 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 901, 1149,
- /* 110 */ 1013, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
- /* 120 */ 1149, 963, 956, 950, 941, 1149, 1149, 1149, 1149, 1149,
- /* 130 */ 1149, 1149, 1149, 1149, 1149, 890, 890, 1149, 1149, 890,
- /* 140 */ 1149, 1149, 1149, 1014, 1149, 1149, 763, 1149, 1149, 1149,
- /* 150 */ 735, 1059, 1149, 1149, 729, 1143, 1143, 1143, 1143, 1143,
- /* 160 */ 1143, 1136, 880, 935, 906, 945, 933, 937, 1039, 1032,
- /* 170 */ 1033, 1031, 936, 1028, 1028, 1028, 1028, 1028, 1028, 1028,
- /* 180 */ 1028, 1028, 1018, 1028, 1028, 1028, 1028, 1028, 988, 1000,
- /* 190 */ 987, 995, 1004, 999, 996, 990, 989, 991, 1149, 1149,
- /* 200 */ 1149, 992, 1149, 1149, 1149, 1149, 1149, 893, 1149, 1149,
- /* 210 */ 864, 1149, 1087, 1149, 1149, 776, 1149, 878, 738, 944,
- /* 220 */ 918, 918, 809, 833, 798, 928, 918, 908, 1034, 928,
- /* 230 */ 1149, 1149, 993, 891, 878, 1127, 909, 909, 909, 1112,
- /* 240 */ 1112, 909, 909, 855, 909, 855, 909, 855, 909, 855,
+ /* 0 */ 729, 1037, 1142, 1142, 1026, 1026, 1026, 1142, 1026, 1026,
+ /* 10 */ 1026, 1026, 900, 1148, 1148, 1148, 1026, 1026, 1026, 1026,
+ /* 20 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
+ /* 30 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
+ /* 40 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
+ /* 50 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1015, 1148, 894,
+ /* 60 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 774,
+ /* 70 */ 890, 900, 1148, 1148, 1148, 1148, 1148, 962, 949, 940,
+ /* 80 */ 1148, 1148, 1148, 972, 972, 955, 842, 972, 1148, 1148,
+ /* 90 */ 1148, 1148, 928, 928, 1027, 1148, 766, 1112, 1117, 1013,
+ /* 100 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 901, 1148,
+ /* 110 */ 1013, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+ /* 120 */ 1148, 963, 956, 950, 941, 1148, 1148, 1148, 1148, 1148,
+ /* 130 */ 1148, 1148, 1148, 1148, 1148, 890, 890, 1148, 1148, 890,
+ /* 140 */ 1148, 1148, 1148, 1014, 1148, 1148, 763, 1148, 1148, 1148,
+ /* 150 */ 735, 1058, 1148, 1148, 729, 1142, 1142, 1142, 1142, 1142,
+ /* 160 */ 1142, 1135, 880, 935, 906, 945, 933, 937, 1038, 1031,
+ /* 170 */ 1032, 1030, 936, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
+ /* 180 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 988, 1000,
+ /* 190 */ 987, 995, 1004, 999, 996, 990, 989, 991, 1148, 1148,
+ /* 200 */ 1148, 992, 1148, 1148, 1148, 1148, 1148, 893, 1148, 1148,
+ /* 210 */ 864, 1148, 1086, 1148, 1148, 776, 1148, 878, 738, 944,
+ /* 220 */ 918, 918, 809, 833, 798, 928, 918, 908, 1033, 928,
+ /* 230 */ 1148, 1148, 993, 891, 878, 1126, 909, 909, 909, 1111,
+ /* 240 */ 1111, 909, 909, 855, 909, 855, 909, 855, 909, 855,
/* 250 */ 909, 760, 944, 909, 760, 846, 968, 909, 909, 846,
- /* 260 */ 944, 909, 1094, 1092, 909, 760, 909, 760, 909, 1047,
- /* 270 */ 844, 844, 844, 844, 825, 1047, 844, 809, 844, 825,
- /* 280 */ 844, 844, 1149, 909, 909, 1149, 1047, 1053, 1047, 1028,
- /* 290 */ 994, 934, 922, 932, 929, 944, 1149, 757, 828, 760,
- /* 300 */ 746, 746, 734, 734, 734, 734, 1140, 1140, 1136, 811,
- /* 310 */ 811, 896, 1003, 1002, 1001, 785, 1040, 1149, 1149, 1149,
- /* 320 */ 1149, 1149, 1149, 1061, 1149, 1149, 1149, 1149, 1149, 1149,
- /* 330 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 730, 1149,
- /* 340 */ 1149, 1149, 1149, 1149, 1130, 1149, 1149, 1149, 1149, 1149,
- /* 350 */ 1149, 1091, 1090, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
- /* 360 */ 1149, 1149, 1149, 1079, 1149, 1149, 1149, 1149, 1149, 1149,
- /* 370 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
- /* 380 */ 1149, 1149, 1149, 1149, 867, 869, 1149, 1149, 1149, 868,
- /* 390 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 930,
- /* 400 */ 1149, 923, 1149, 1037, 1149, 1017, 1026, 1149, 1149, 1149,
- /* 410 */ 1149, 1149, 1016, 1149, 1149, 1149, 1145, 1149, 1149, 1149,
- /* 420 */ 1144, 1149, 1149, 1149, 1149, 1149, 1029, 980, 1149, 979,
- /* 430 */ 978, 769, 1149, 744, 1149, 726, 731, 1129, 1126, 1128,
- /* 440 */ 1123, 1124, 1122, 1125, 1121, 1119, 1120, 1117, 1115, 1114,
- /* 450 */ 1116, 1111, 1107, 1067, 1065, 1063, 1072, 1071, 1070, 1069,
- /* 460 */ 1068, 1064, 1062, 1066, 1060, 959, 947, 938, 862, 1106,
- /* 470 */ 1104, 1105, 1058, 1056, 1057, 861, 860, 859, 854, 853,
- /* 480 */ 852, 851, 1133, 1142, 1141, 1139, 1138, 1137, 1131, 1132,
- /* 490 */ 1045, 1044, 1042, 1041, 1043, 762, 1083, 1086, 1085, 1084,
- /* 500 */ 1089, 1088, 1081, 1093, 1098, 1097, 1102, 1101, 1100, 1099,
- /* 510 */ 1096, 1078, 967, 966, 964, 969, 961, 960, 965, 952,
- /* 520 */ 958, 957, 948, 951, 847, 943, 939, 942, 863, 1082,
+ /* 260 */ 944, 909, 1093, 1091, 909, 760, 909, 760, 909, 1046,
+ /* 270 */ 844, 844, 844, 844, 825, 1046, 844, 809, 844, 825,
+ /* 280 */ 844, 844, 1148, 909, 909, 1148, 1046, 1052, 1046, 1027,
+ /* 290 */ 994, 934, 922, 932, 929, 944, 1148, 757, 828, 760,
+ /* 300 */ 746, 746, 734, 734, 734, 734, 1139, 1139, 1135, 811,
+ /* 310 */ 811, 896, 1003, 1002, 1001, 785, 1039, 1148, 1148, 1148,
+ /* 320 */ 1148, 1148, 1148, 1060, 1148, 1148, 1148, 1148, 1148, 1148,
+ /* 330 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 730, 1148,
+ /* 340 */ 1148, 1148, 1148, 1148, 1129, 1148, 1148, 1148, 1148, 1148,
+ /* 350 */ 1148, 1090, 1089, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+ /* 360 */ 1148, 1148, 1148, 1078, 1148, 1148, 1148, 1148, 1148, 1148,
+ /* 370 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
+ /* 380 */ 1148, 1148, 1148, 1148, 867, 869, 1148, 1148, 1148, 868,
+ /* 390 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 930,
+ /* 400 */ 1148, 923, 1148, 1036, 1148, 1017, 1025, 1148, 1148, 1148,
+ /* 410 */ 1148, 1148, 1016, 1148, 1148, 1148, 1144, 1148, 1148, 1148,
+ /* 420 */ 1143, 1148, 1148, 1148, 1148, 1148, 1028, 980, 1148, 979,
+ /* 430 */ 978, 769, 1148, 744, 1148, 726, 731, 1128, 1125, 1127,
+ /* 440 */ 1122, 1123, 1121, 1124, 1120, 1118, 1119, 1116, 1114, 1113,
+ /* 450 */ 1115, 1110, 1106, 1066, 1064, 1062, 1071, 1070, 1069, 1068,
+ /* 460 */ 1067, 1063, 1061, 1065, 1059, 959, 947, 938, 862, 1105,
+ /* 470 */ 1103, 1104, 1057, 1055, 1056, 861, 860, 859, 854, 853,
+ /* 480 */ 852, 851, 1132, 1141, 1140, 1138, 1137, 1136, 1130, 1131,
+ /* 490 */ 1044, 1043, 1041, 1040, 1042, 762, 1082, 1085, 1084, 1083,
+ /* 500 */ 1088, 1087, 1080, 1092, 1097, 1096, 1101, 1100, 1099, 1098,
+ /* 510 */ 1095, 1077, 967, 966, 964, 969, 961, 960, 965, 952,
+ /* 520 */ 958, 957, 948, 951, 847, 943, 939, 942, 863, 1081,
/* 530 */ 858, 857, 856, 761, 756, 911, 755, 754, 765, 831,
/* 540 */ 832, 840, 843, 838, 841, 837, 836, 835, 839, 834,
/* 550 */ 830, 768, 767, 775, 824, 802, 800, 799, 803, 816,
@@ -857,12 +857,12 @@ static const YYACTIONTYPE yy_default[] = {
/* 600 */ 883, 882, 881, 917, 916, 915, 914, 913, 912, 905,
/* 610 */ 903, 899, 898, 904, 902, 920, 921, 919, 897, 889,
/* 620 */ 887, 888, 886, 974, 971, 973, 970, 907, 895, 892,
- /* 630 */ 879, 925, 924, 1030, 1019, 1008, 1020, 910, 1007, 1005,
- /* 640 */ 1029, 1026, 1021, 1103, 1025, 1012, 1011, 1010, 1148, 1146,
- /* 650 */ 1147, 1050, 1052, 1055, 1054, 1051, 927, 926, 1049, 1048,
- /* 660 */ 1009, 984, 781, 779, 780, 1075, 1074, 1077, 1076, 1073,
- /* 670 */ 783, 782, 778, 777, 998, 997, 982, 1022, 1023, 981,
- /* 680 */ 1024, 983, 770, 873, 866, 976, 975, 808, 807, 806,
+ /* 630 */ 879, 925, 924, 1029, 1018, 1008, 1019, 910, 1007, 1005,
+ /* 640 */ 1028, 1025, 1020, 1102, 1024, 1012, 1011, 1010, 1147, 1145,
+ /* 650 */ 1146, 1049, 1051, 1054, 1053, 1050, 927, 926, 1048, 1047,
+ /* 660 */ 1009, 984, 781, 779, 780, 1074, 1073, 1076, 1075, 1072,
+ /* 670 */ 783, 782, 778, 777, 998, 997, 982, 1021, 1022, 981,
+ /* 680 */ 1023, 983, 770, 873, 866, 976, 975, 808, 807, 806,
/* 690 */ 805, 877, 876, 787, 801, 786, 784, 764, 759, 758,
/* 700 */ 753, 751, 748, 750, 747, 752, 749, 745, 743, 742,
/* 710 */ 741, 740, 739, 773, 772, 771, 769, 737, 736, 733,
@@ -1462,137 +1462,136 @@ static const char *const yyRuleName[] = {
/* 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 ::= LP expr",
- /* 295 */ "exprx ::= expr not_opt IN ID_DB",
- /* 296 */ "exprx ::= expr not_opt IN nm DOT ID_TAB",
- /* 297 */ "exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN",
- /* 298 */ "exprx ::= nm DOT ID_TAB|ID_COL",
- /* 299 */ "exprx ::= nm DOT nm DOT ID_COL",
- /* 300 */ "exprx ::= expr COLLATE ID_COLLATE",
- /* 301 */ "exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP",
- /* 302 */ "expr ::= exprx",
- /* 303 */ "expr ::=",
- /* 304 */ "not_opt ::=",
- /* 305 */ "not_opt ::= NOT",
- /* 306 */ "likeop ::= LIKE_KW|MATCH",
- /* 307 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 308 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 309 */ "case_else ::= ELSE expr",
- /* 310 */ "case_else ::=",
- /* 311 */ "case_operand ::= exprx",
- /* 312 */ "case_operand ::=",
- /* 313 */ "exprlist ::= nexprlist",
- /* 314 */ "exprlist ::=",
- /* 315 */ "nexprlist ::= nexprlist COMMA expr",
- /* 316 */ "nexprlist ::= exprx",
- /* 317 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt",
- /* 318 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB",
- /* 319 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW",
- /* 320 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW",
- /* 321 */ "uniqueflag ::= UNIQUE",
- /* 322 */ "uniqueflag ::=",
- /* 323 */ "idxlist_opt ::=",
- /* 324 */ "idxlist_opt ::= LP idxlist RP",
- /* 325 */ "idxlist ::= idxlist COMMA idxlist_single",
- /* 326 */ "idxlist ::= idxlist_single",
- /* 327 */ "idxlist_single ::= nm collate sortorder",
- /* 328 */ "idxlist_single ::= ID_COL",
- /* 329 */ "collate ::=",
- /* 330 */ "collate ::= COLLATE ids",
- /* 331 */ "collate ::= COLLATE ID_COLLATE",
- /* 332 */ "cmd ::= DROP INDEX ifexists fullname",
- /* 333 */ "cmd ::= DROP INDEX ifexists nm DOT ID_IDX",
- /* 334 */ "cmd ::= DROP INDEX ifexists ID_DB|ID_IDX",
- /* 335 */ "cmd ::= VACUUM",
- /* 336 */ "cmd ::= VACUUM nm",
- /* 337 */ "cmd ::= PRAGMA nm dbnm",
- /* 338 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
- /* 339 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
- /* 340 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
- /* 341 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
- /* 342 */ "cmd ::= PRAGMA nm DOT ID_PRAGMA",
- /* 343 */ "cmd ::= PRAGMA ID_DB|ID_PRAGMA",
- /* 344 */ "nmnum ::= plus_num",
- /* 345 */ "nmnum ::= nm",
- /* 346 */ "nmnum ::= ON",
- /* 347 */ "nmnum ::= DELETE",
- /* 348 */ "nmnum ::= DEFAULT",
- /* 349 */ "plus_num ::= PLUS number",
- /* 350 */ "plus_num ::= number",
- /* 351 */ "minus_num ::= MINUS number",
- /* 352 */ "number ::= INTEGER",
- /* 353 */ "number ::= FLOAT",
- /* 354 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END",
- /* 355 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause",
- /* 356 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list",
- /* 357 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB",
- /* 358 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW",
- /* 359 */ "cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW",
- /* 360 */ "trigger_time ::= BEFORE",
- /* 361 */ "trigger_time ::= AFTER",
- /* 362 */ "trigger_time ::= INSTEAD OF",
- /* 363 */ "trigger_time ::=",
- /* 364 */ "trigger_event ::= DELETE",
- /* 365 */ "trigger_event ::= INSERT",
- /* 366 */ "trigger_event ::= UPDATE",
- /* 367 */ "trigger_event ::= UPDATE OF inscollist",
- /* 368 */ "foreach_clause ::=",
- /* 369 */ "foreach_clause ::= FOR EACH ROW",
- /* 370 */ "when_clause ::=",
- /* 371 */ "when_clause ::= WHEN expr",
- /* 372 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
- /* 373 */ "trigger_cmd_list ::= trigger_cmd SEMI",
- /* 374 */ "trigger_cmd_list ::= SEMI",
- /* 375 */ "trigger_cmd ::= update_stmt",
- /* 376 */ "trigger_cmd ::= insert_stmt",
- /* 377 */ "trigger_cmd ::= delete_stmt",
- /* 378 */ "trigger_cmd ::= select_stmt",
- /* 379 */ "raisetype ::= ROLLBACK|ABORT|FAIL",
- /* 380 */ "cmd ::= DROP TRIGGER ifexists fullname",
- /* 381 */ "cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG",
- /* 382 */ "cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG",
- /* 383 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
- /* 384 */ "cmd ::= DETACH database_kw_opt expr",
- /* 385 */ "key_opt ::=",
- /* 386 */ "key_opt ::= KEY expr",
- /* 387 */ "database_kw_opt ::= DATABASE",
- /* 388 */ "database_kw_opt ::=",
- /* 389 */ "cmd ::= REINDEX",
- /* 390 */ "cmd ::= REINDEX nm dbnm",
- /* 391 */ "cmd ::= REINDEX ID_COLLATE",
- /* 392 */ "cmd ::= REINDEX nm DOT ID_TAB|ID_IDX",
- /* 393 */ "cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB",
- /* 394 */ "cmd ::= ANALYZE",
- /* 395 */ "cmd ::= ANALYZE nm dbnm",
- /* 396 */ "cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX",
- /* 397 */ "cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB",
- /* 398 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 399 */ "cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column",
- /* 400 */ "cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW",
- /* 401 */ "cmd ::= ALTER TABLE nm DOT ID_TAB",
- /* 402 */ "cmd ::= ALTER TABLE ID_DB|ID_TAB",
- /* 403 */ "kwcolumn_opt ::=",
- /* 404 */ "kwcolumn_opt ::= COLUMNKW",
- /* 405 */ "cmd ::= create_vtab",
- /* 406 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm",
- /* 407 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP",
- /* 408 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW",
- /* 409 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW",
- /* 410 */ "vtabarglist ::= vtabarg",
- /* 411 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
- /* 412 */ "vtabarg ::=",
- /* 413 */ "vtabarg ::= vtabarg vtabargtoken",
- /* 414 */ "vtabargtoken ::= ANY",
- /* 415 */ "vtabargtoken ::= LP anylist RP",
- /* 416 */ "anylist ::=",
- /* 417 */ "anylist ::= anylist LP anylist RP",
- /* 418 */ "anylist ::= anylist ANY",
- /* 419 */ "with ::=",
- /* 420 */ "with ::= WITH wqlist",
- /* 421 */ "with ::= WITH RECURSIVE wqlist",
- /* 422 */ "wqlist ::= nm idxlist_opt AS LP select RP",
- /* 423 */ "wqlist ::= wqlist COMMA nm idxlist_opt AS LP select RP",
- /* 424 */ "wqlist ::= ID_TAB_NEW",
+ /* 294 */ "exprx ::= expr not_opt IN ID_DB",
+ /* 295 */ "exprx ::= expr not_opt IN nm DOT ID_TAB",
+ /* 296 */ "exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN",
+ /* 297 */ "exprx ::= nm DOT ID_TAB|ID_COL",
+ /* 298 */ "exprx ::= nm DOT nm DOT ID_COL",
+ /* 299 */ "exprx ::= expr COLLATE ID_COLLATE",
+ /* 300 */ "exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP",
+ /* 301 */ "expr ::= exprx",
+ /* 302 */ "expr ::=",
+ /* 303 */ "not_opt ::=",
+ /* 304 */ "not_opt ::= NOT",
+ /* 305 */ "likeop ::= LIKE_KW|MATCH",
+ /* 306 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 307 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 308 */ "case_else ::= ELSE expr",
+ /* 309 */ "case_else ::=",
+ /* 310 */ "case_operand ::= exprx",
+ /* 311 */ "case_operand ::=",
+ /* 312 */ "exprlist ::= nexprlist",
+ /* 313 */ "exprlist ::=",
+ /* 314 */ "nexprlist ::= nexprlist COMMA expr",
+ /* 315 */ "nexprlist ::= exprx",
+ /* 316 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt",
+ /* 317 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB",
+ /* 318 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW",
+ /* 319 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW",
+ /* 320 */ "uniqueflag ::= UNIQUE",
+ /* 321 */ "uniqueflag ::=",
+ /* 322 */ "idxlist_opt ::=",
+ /* 323 */ "idxlist_opt ::= LP idxlist RP",
+ /* 324 */ "idxlist ::= idxlist COMMA idxlist_single",
+ /* 325 */ "idxlist ::= idxlist_single",
+ /* 326 */ "idxlist_single ::= nm collate sortorder",
+ /* 327 */ "idxlist_single ::= ID_COL",
+ /* 328 */ "collate ::=",
+ /* 329 */ "collate ::= COLLATE ids",
+ /* 330 */ "collate ::= COLLATE ID_COLLATE",
+ /* 331 */ "cmd ::= DROP INDEX ifexists fullname",
+ /* 332 */ "cmd ::= DROP INDEX ifexists nm DOT ID_IDX",
+ /* 333 */ "cmd ::= DROP INDEX ifexists ID_DB|ID_IDX",
+ /* 334 */ "cmd ::= VACUUM",
+ /* 335 */ "cmd ::= VACUUM nm",
+ /* 336 */ "cmd ::= PRAGMA nm dbnm",
+ /* 337 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
+ /* 338 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
+ /* 339 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
+ /* 340 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
+ /* 341 */ "cmd ::= PRAGMA nm DOT ID_PRAGMA",
+ /* 342 */ "cmd ::= PRAGMA ID_DB|ID_PRAGMA",
+ /* 343 */ "nmnum ::= plus_num",
+ /* 344 */ "nmnum ::= nm",
+ /* 345 */ "nmnum ::= ON",
+ /* 346 */ "nmnum ::= DELETE",
+ /* 347 */ "nmnum ::= DEFAULT",
+ /* 348 */ "plus_num ::= PLUS number",
+ /* 349 */ "plus_num ::= number",
+ /* 350 */ "minus_num ::= MINUS number",
+ /* 351 */ "number ::= INTEGER",
+ /* 352 */ "number ::= FLOAT",
+ /* 353 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END",
+ /* 354 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause",
+ /* 355 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list",
+ /* 356 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB",
+ /* 357 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW",
+ /* 358 */ "cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW",
+ /* 359 */ "trigger_time ::= BEFORE",
+ /* 360 */ "trigger_time ::= AFTER",
+ /* 361 */ "trigger_time ::= INSTEAD OF",
+ /* 362 */ "trigger_time ::=",
+ /* 363 */ "trigger_event ::= DELETE",
+ /* 364 */ "trigger_event ::= INSERT",
+ /* 365 */ "trigger_event ::= UPDATE",
+ /* 366 */ "trigger_event ::= UPDATE OF inscollist",
+ /* 367 */ "foreach_clause ::=",
+ /* 368 */ "foreach_clause ::= FOR EACH ROW",
+ /* 369 */ "when_clause ::=",
+ /* 370 */ "when_clause ::= WHEN expr",
+ /* 371 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
+ /* 372 */ "trigger_cmd_list ::= trigger_cmd SEMI",
+ /* 373 */ "trigger_cmd_list ::= SEMI",
+ /* 374 */ "trigger_cmd ::= update_stmt",
+ /* 375 */ "trigger_cmd ::= insert_stmt",
+ /* 376 */ "trigger_cmd ::= delete_stmt",
+ /* 377 */ "trigger_cmd ::= select_stmt",
+ /* 378 */ "raisetype ::= ROLLBACK|ABORT|FAIL",
+ /* 379 */ "cmd ::= DROP TRIGGER ifexists fullname",
+ /* 380 */ "cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG",
+ /* 381 */ "cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG",
+ /* 382 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
+ /* 383 */ "cmd ::= DETACH database_kw_opt expr",
+ /* 384 */ "key_opt ::=",
+ /* 385 */ "key_opt ::= KEY expr",
+ /* 386 */ "database_kw_opt ::= DATABASE",
+ /* 387 */ "database_kw_opt ::=",
+ /* 388 */ "cmd ::= REINDEX",
+ /* 389 */ "cmd ::= REINDEX nm dbnm",
+ /* 390 */ "cmd ::= REINDEX ID_COLLATE",
+ /* 391 */ "cmd ::= REINDEX nm DOT ID_TAB|ID_IDX",
+ /* 392 */ "cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB",
+ /* 393 */ "cmd ::= ANALYZE",
+ /* 394 */ "cmd ::= ANALYZE nm dbnm",
+ /* 395 */ "cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX",
+ /* 396 */ "cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB",
+ /* 397 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 398 */ "cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column",
+ /* 399 */ "cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW",
+ /* 400 */ "cmd ::= ALTER TABLE nm DOT ID_TAB",
+ /* 401 */ "cmd ::= ALTER TABLE ID_DB|ID_TAB",
+ /* 402 */ "kwcolumn_opt ::=",
+ /* 403 */ "kwcolumn_opt ::= COLUMNKW",
+ /* 404 */ "cmd ::= create_vtab",
+ /* 405 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm",
+ /* 406 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP",
+ /* 407 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW",
+ /* 408 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW",
+ /* 409 */ "vtabarglist ::= vtabarg",
+ /* 410 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
+ /* 411 */ "vtabarg ::=",
+ /* 412 */ "vtabarg ::= vtabarg vtabargtoken",
+ /* 413 */ "vtabargtoken ::= ANY",
+ /* 414 */ "vtabargtoken ::= LP anylist RP",
+ /* 415 */ "anylist ::=",
+ /* 416 */ "anylist ::= anylist LP anylist RP",
+ /* 417 */ "anylist ::= anylist ANY",
+ /* 418 */ "with ::=",
+ /* 419 */ "with ::= WITH wqlist",
+ /* 420 */ "with ::= WITH RECURSIVE wqlist",
+ /* 421 */ "wqlist ::= nm idxlist_opt AS LP select RP",
+ /* 422 */ "wqlist ::= wqlist COMMA nm idxlist_opt AS LP select RP",
+ /* 423 */ "wqlist ::= ID_TAB_NEW",
};
#endif /* NDEBUG */
@@ -2520,7 +2519,6 @@ static const struct {
{ 251, 5 },
{ 251, 4 },
{ 251, 5 },
- { 251, 2 },
{ 251, 4 },
{ 251, 6 },
{ 251, 1 },
@@ -2737,11 +2735,11 @@ static void yy_reduce(
{yygotominor.yy225 = new ParserStubExplain(true, true);}
break;
case 8: /* cmdx ::= cmd */
- case 375: /* trigger_cmd ::= update_stmt */ yytestcase(yyruleno==375);
- case 376: /* trigger_cmd ::= insert_stmt */ yytestcase(yyruleno==376);
- case 377: /* trigger_cmd ::= delete_stmt */ yytestcase(yyruleno==377);
- case 378: /* trigger_cmd ::= select_stmt */ yytestcase(yyruleno==378);
- case 405: /* cmd ::= create_vtab */ yytestcase(yyruleno==405);
+ case 374: /* trigger_cmd ::= update_stmt */ yytestcase(yyruleno==374);
+ case 375: /* trigger_cmd ::= insert_stmt */ yytestcase(yyruleno==375);
+ case 376: /* trigger_cmd ::= delete_stmt */ yytestcase(yyruleno==376);
+ case 377: /* trigger_cmd ::= select_stmt */ yytestcase(yyruleno==377);
+ case 404: /* cmd ::= create_vtab */ yytestcase(yyruleno==404);
{yygotominor.yy399 = yymsp[0].minor.yy399;}
break;
case 9: /* cmd ::= BEGIN transtype trans_opt */
@@ -2830,10 +2828,10 @@ static void yy_reduce(
case 86: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==86);
case 108: /* tconscomma ::= COMMA */ yytestcase(yyruleno==108);
case 130: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==130);
- case 305: /* not_opt ::= NOT */ yytestcase(yyruleno==305);
- case 321: /* uniqueflag ::= UNIQUE */ yytestcase(yyruleno==321);
- case 387: /* database_kw_opt ::= DATABASE */ yytestcase(yyruleno==387);
- case 403: /* kwcolumn_opt ::= */ yytestcase(yyruleno==403);
+ case 304: /* not_opt ::= NOT */ yytestcase(yyruleno==304);
+ case 320: /* uniqueflag ::= UNIQUE */ yytestcase(yyruleno==320);
+ case 386: /* database_kw_opt ::= DATABASE */ yytestcase(yyruleno==386);
+ case 402: /* kwcolumn_opt ::= */ yytestcase(yyruleno==402);
{yygotominor.yy237 = new bool(true);}
break;
case 22: /* savepoint_opt ::= */
@@ -2841,10 +2839,10 @@ static void yy_reduce(
case 85: /* autoinc ::= */ yytestcase(yyruleno==85);
case 109: /* tconscomma ::= */ yytestcase(yyruleno==109);
case 131: /* ifexists ::= */ yytestcase(yyruleno==131);
- case 304: /* not_opt ::= */ yytestcase(yyruleno==304);
- case 322: /* uniqueflag ::= */ yytestcase(yyruleno==322);
- case 388: /* database_kw_opt ::= */ yytestcase(yyruleno==388);
- case 404: /* kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==404);
+ case 303: /* not_opt ::= */ yytestcase(yyruleno==303);
+ case 321: /* uniqueflag ::= */ yytestcase(yyruleno==321);
+ case 387: /* database_kw_opt ::= */ yytestcase(yyruleno==387);
+ case 403: /* kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==403);
{yygotominor.yy237 = new bool(false);}
break;
case 23: /* cmd ::= SAVEPOINT nm */
@@ -2882,8 +2880,8 @@ static void yy_reduce(
case 29: /* cmd ::= CREATE temp TABLE ifnotexists fullname LP columnlist conslist_opt RP table_options */
{
yygotominor.yy399 = new SqliteCreateTable(
- *(yymsp[-8].minor.yy376),
*(yymsp[-6].minor.yy237),
+ *(yymsp[-8].minor.yy376),
yymsp[-5].minor.yy66->name1,
yymsp[-5].minor.yy66->name2,
*(yymsp[-3].minor.yy118),
@@ -2902,8 +2900,8 @@ static void yy_reduce(
case 30: /* cmd ::= CREATE temp TABLE ifnotexists fullname AS select */
{
yygotominor.yy399 = new SqliteCreateTable(
- *(yymsp[-5].minor.yy376),
*(yymsp[-3].minor.yy237),
+ *(yymsp[-5].minor.yy376),
yymsp[-2].minor.yy66->name1,
yymsp[-2].minor.yy66->name2,
yymsp[0].minor.yy123
@@ -2916,22 +2914,22 @@ static void yy_reduce(
break;
case 31: /* cmd ::= CREATE temp TABLE ifnotexists nm DOT ID_TAB_NEW */
case 133: /* cmd ::= CREATE temp VIEW ifnotexists nm DOT ID_VIEW_NEW */ yytestcase(yyruleno==133);
- case 358: /* cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW */ yytestcase(yyruleno==358);
+ case 357: /* cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW */ yytestcase(yyruleno==357);
{ yy_destructor(yypParser,179,&yymsp[-5].minor);
yy_destructor(yypParser,177,&yymsp[-2].minor);
}
break;
case 32: /* cmd ::= CREATE temp TABLE ifnotexists ID_DB|ID_TAB_NEW */
case 134: /* cmd ::= CREATE temp VIEW ifnotexists ID_DB|ID_VIEW_NEW */ yytestcase(yyruleno==134);
- case 359: /* cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW */ yytestcase(yyruleno==359);
+ case 358: /* cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW */ yytestcase(yyruleno==358);
{ yy_destructor(yypParser,179,&yymsp[-3].minor);
}
break;
case 33: /* table_options ::= */
case 185: /* dbnm ::= */ yytestcase(yyruleno==185);
- case 329: /* collate ::= */ yytestcase(yyruleno==329);
- case 412: /* vtabarg ::= */ yytestcase(yyruleno==412);
- case 416: /* anylist ::= */ yytestcase(yyruleno==416);
+ case 328: /* collate ::= */ yytestcase(yyruleno==328);
+ case 411: /* vtabarg ::= */ yytestcase(yyruleno==411);
+ case 415: /* anylist ::= */ yytestcase(yyruleno==415);
{yygotominor.yy211 = new QString();}
break;
case 34: /* table_options ::= WITHOUT nm */
@@ -2976,8 +2974,8 @@ static void yy_reduce(
case 47: /* nm ::= id */ yytestcase(yyruleno==47);
case 55: /* typename ::= ids */ yytestcase(yyruleno==55);
case 186: /* dbnm ::= DOT nm */ yytestcase(yyruleno==186);
- case 330: /* collate ::= COLLATE ids */ yytestcase(yyruleno==330);
- case 331: /* collate ::= COLLATE ID_COLLATE */ yytestcase(yyruleno==331);
+ case 329: /* collate ::= COLLATE ids */ yytestcase(yyruleno==329);
+ case 330: /* collate ::= COLLATE ID_COLLATE */ yytestcase(yyruleno==330);
{yygotominor.yy211 = yymsp[0].minor.yy211;}
break;
case 45: /* id ::= ID */
@@ -3037,9 +3035,9 @@ static void yy_reduce(
break;
case 58: /* signed ::= plus_num */
case 59: /* signed ::= minus_num */ yytestcase(yyruleno==59);
- case 344: /* nmnum ::= plus_num */ yytestcase(yyruleno==344);
- case 349: /* plus_num ::= PLUS number */ yytestcase(yyruleno==349);
- case 350: /* plus_num ::= number */ yytestcase(yyruleno==350);
+ case 343: /* nmnum ::= plus_num */ yytestcase(yyruleno==343);
+ case 348: /* plus_num ::= PLUS number */ yytestcase(yyruleno==348);
+ case 349: /* plus_num ::= number */ yytestcase(yyruleno==349);
{yygotominor.yy21 = yymsp[0].minor.yy21;}
break;
case 60: /* carglist ::= carglist ccons */
@@ -3204,9 +3202,9 @@ static void yy_reduce(
}
break;
case 84: /* term ::= STRING|BLOB */
- case 346: /* nmnum ::= ON */ yytestcase(yyruleno==346);
- case 347: /* nmnum ::= DELETE */ yytestcase(yyruleno==347);
- case 348: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==348);
+ case 345: /* nmnum ::= ON */ yytestcase(yyruleno==345);
+ case 346: /* nmnum ::= DELETE */ yytestcase(yyruleno==346);
+ case 347: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==347);
{yygotominor.yy21 = new QVariant(yymsp[0].minor.yy0->value);}
break;
case 87: /* refargs ::= */
@@ -3391,23 +3389,23 @@ static void yy_reduce(
case 179: /* singlesrc ::= ID_DB|ID_TAB */ yytestcase(yyruleno==179);
case 180: /* singlesrc ::= nm DOT ID_VIEW */ yytestcase(yyruleno==180);
case 181: /* singlesrc ::= ID_DB|ID_VIEW */ yytestcase(yyruleno==181);
- case 298: /* exprx ::= nm DOT ID_TAB|ID_COL */ yytestcase(yyruleno==298);
- case 319: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW */ yytestcase(yyruleno==319);
- case 320: /* cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW */ yytestcase(yyruleno==320);
- case 333: /* cmd ::= DROP INDEX ifexists nm DOT ID_IDX */ yytestcase(yyruleno==333);
- case 334: /* cmd ::= DROP INDEX ifexists ID_DB|ID_IDX */ yytestcase(yyruleno==334);
- case 342: /* cmd ::= PRAGMA nm DOT ID_PRAGMA */ yytestcase(yyruleno==342);
- case 343: /* cmd ::= PRAGMA ID_DB|ID_PRAGMA */ yytestcase(yyruleno==343);
- case 381: /* cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG */ yytestcase(yyruleno==381);
- case 382: /* cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG */ yytestcase(yyruleno==382);
- case 392: /* cmd ::= REINDEX nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==392);
- case 393: /* cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==393);
- case 396: /* cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==396);
- case 397: /* cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==397);
- case 401: /* cmd ::= ALTER TABLE nm DOT ID_TAB */ yytestcase(yyruleno==401);
- case 402: /* cmd ::= ALTER TABLE ID_DB|ID_TAB */ yytestcase(yyruleno==402);
- case 408: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW */ yytestcase(yyruleno==408);
- case 409: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW */ yytestcase(yyruleno==409);
+ case 297: /* exprx ::= nm DOT ID_TAB|ID_COL */ yytestcase(yyruleno==297);
+ case 318: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW */ yytestcase(yyruleno==318);
+ case 319: /* cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW */ yytestcase(yyruleno==319);
+ case 332: /* cmd ::= DROP INDEX ifexists nm DOT ID_IDX */ yytestcase(yyruleno==332);
+ case 333: /* cmd ::= DROP INDEX ifexists ID_DB|ID_IDX */ yytestcase(yyruleno==333);
+ case 341: /* cmd ::= PRAGMA nm DOT ID_PRAGMA */ yytestcase(yyruleno==341);
+ case 342: /* cmd ::= PRAGMA ID_DB|ID_PRAGMA */ yytestcase(yyruleno==342);
+ case 380: /* cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG */ yytestcase(yyruleno==380);
+ case 381: /* cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG */ yytestcase(yyruleno==381);
+ case 391: /* cmd ::= REINDEX nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==391);
+ case 392: /* cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==392);
+ case 395: /* cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==395);
+ case 396: /* cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==396);
+ case 400: /* cmd ::= ALTER TABLE nm DOT ID_TAB */ yytestcase(yyruleno==400);
+ case 401: /* cmd ::= ALTER TABLE ID_DB|ID_TAB */ yytestcase(yyruleno==401);
+ case 407: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW */ yytestcase(yyruleno==407);
+ case 408: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW */ yytestcase(yyruleno==408);
{ yy_destructor(yypParser,177,&yymsp[-2].minor);
}
break;
@@ -3803,11 +3801,11 @@ static void yy_reduce(
{yygotominor.yy226 = new SqliteSortOrder(SqliteSortOrder::null);}
break;
case 205: /* groupby_opt ::= */
- case 314: /* exprlist ::= */ yytestcase(yyruleno==314);
+ case 313: /* exprlist ::= */ yytestcase(yyruleno==313);
{yygotominor.yy13 = new ParserExprList();}
break;
case 206: /* groupby_opt ::= GROUP BY nexprlist */
- case 313: /* exprlist ::= nexprlist */ yytestcase(yyruleno==313);
+ case 312: /* exprlist ::= nexprlist */ yytestcase(yyruleno==312);
{yygotominor.yy13 = yymsp[0].minor.yy13;}
break;
case 207: /* groupby_opt ::= GROUP BY */
@@ -3818,19 +3816,19 @@ static void yy_reduce(
break;
case 208: /* having_opt ::= */
case 220: /* where_opt ::= */ yytestcase(yyruleno==220);
- case 310: /* case_else ::= */ yytestcase(yyruleno==310);
- case 312: /* case_operand ::= */ yytestcase(yyruleno==312);
- case 370: /* when_clause ::= */ yytestcase(yyruleno==370);
- case 385: /* key_opt ::= */ yytestcase(yyruleno==385);
+ case 309: /* case_else ::= */ yytestcase(yyruleno==309);
+ case 311: /* case_operand ::= */ yytestcase(yyruleno==311);
+ case 369: /* when_clause ::= */ yytestcase(yyruleno==369);
+ case 384: /* key_opt ::= */ yytestcase(yyruleno==384);
{yygotominor.yy490 = nullptr;}
break;
case 209: /* having_opt ::= HAVING expr */
case 221: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==221);
- case 302: /* expr ::= exprx */ yytestcase(yyruleno==302);
- case 309: /* case_else ::= ELSE expr */ yytestcase(yyruleno==309);
- case 311: /* case_operand ::= exprx */ yytestcase(yyruleno==311);
- case 371: /* when_clause ::= WHEN expr */ yytestcase(yyruleno==371);
- case 386: /* key_opt ::= KEY expr */ yytestcase(yyruleno==386);
+ case 301: /* expr ::= exprx */ yytestcase(yyruleno==301);
+ case 308: /* case_else ::= ELSE expr */ yytestcase(yyruleno==308);
+ case 310: /* case_operand ::= exprx */ yytestcase(yyruleno==310);
+ case 370: /* when_clause ::= WHEN expr */ yytestcase(yyruleno==370);
+ case 385: /* key_opt ::= KEY expr */ yytestcase(yyruleno==385);
{yygotominor.yy490 = yymsp[0].minor.yy490;}
break;
case 210: /* limit_opt ::= */
@@ -4403,72 +4401,64 @@ static void yy_reduce(
parserContext->minorErrorBeforeNextToken("Syntax error");
}
break;
- case 294: /* exprx ::= LP expr */
-{
- yygotominor.yy490 = new SqliteExpr();
- yygotominor.yy490->initSubExpr(yymsp[0].minor.yy490);
- objectForTokens = yygotominor.yy490;
- parserContext->minorErrorBeforeNextToken("Syntax error");
- }
- break;
- case 295: /* exprx ::= expr not_opt IN ID_DB */
+ case 294: /* exprx ::= expr not_opt IN ID_DB */
{ yy_destructor(yypParser,199,&yymsp[-3].minor);
}
break;
- case 296: /* exprx ::= expr not_opt IN nm DOT ID_TAB */
- case 297: /* exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN */ yytestcase(yyruleno==297);
+ case 295: /* exprx ::= expr not_opt IN nm DOT ID_TAB */
+ case 296: /* exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN */ yytestcase(yyruleno==296);
{ yy_destructor(yypParser,199,&yymsp[-5].minor);
yy_destructor(yypParser,177,&yymsp[-2].minor);
}
break;
- case 299: /* exprx ::= nm DOT nm DOT ID_COL */
+ case 298: /* exprx ::= nm DOT nm DOT ID_COL */
{ yy_destructor(yypParser,177,&yymsp[-4].minor);
yy_destructor(yypParser,177,&yymsp[-2].minor);
}
break;
- case 300: /* exprx ::= expr COLLATE ID_COLLATE */
- case 301: /* exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP */ yytestcase(yyruleno==301);
+ case 299: /* exprx ::= expr COLLATE ID_COLLATE */
+ case 300: /* exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP */ yytestcase(yyruleno==300);
{ yy_destructor(yypParser,199,&yymsp[-2].minor);
}
break;
- case 303: /* expr ::= */
+ case 302: /* expr ::= */
{
yygotominor.yy490 = new SqliteExpr();
objectForTokens = yygotominor.yy490;
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 306: /* likeop ::= LIKE_KW|MATCH */
+ case 305: /* likeop ::= LIKE_KW|MATCH */
{yygotominor.yy374 = new SqliteExpr::LikeOp(SqliteExpr::likeOp(yymsp[0].minor.yy0->value));}
break;
- case 307: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ case 306: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
{
yymsp[-4].minor.yy13->append(yymsp[-2].minor.yy490);
yymsp[-4].minor.yy13->append(yymsp[0].minor.yy490);
yygotominor.yy13 = yymsp[-4].minor.yy13;
}
break;
- case 308: /* case_exprlist ::= WHEN expr THEN expr */
+ case 307: /* case_exprlist ::= WHEN expr THEN expr */
{
yygotominor.yy13 = new ParserExprList();
yygotominor.yy13->append(yymsp[-2].minor.yy490);
yygotominor.yy13->append(yymsp[0].minor.yy490);
}
break;
- case 315: /* nexprlist ::= nexprlist COMMA expr */
+ case 314: /* nexprlist ::= nexprlist COMMA expr */
{
yymsp[-2].minor.yy13->append(yymsp[0].minor.yy490);
yygotominor.yy13 = yymsp[-2].minor.yy13;
DONT_INHERIT_TOKENS("nexprlist");
}
break;
- case 316: /* nexprlist ::= exprx */
+ case 315: /* nexprlist ::= exprx */
{
yygotominor.yy13 = new ParserExprList();
yygotominor.yy13->append(yymsp[0].minor.yy490);
}
break;
- case 317: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt */
+ case 316: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt */
{
yygotominor.yy399 = new SqliteCreateIndex(
*(yymsp[-10].minor.yy237),
@@ -4488,31 +4478,31 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 318: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB */
+ case 317: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB */
{ yy_destructor(yypParser,177,&yymsp[-3].minor);
}
break;
- case 323: /* idxlist_opt ::= */
+ case 322: /* idxlist_opt ::= */
{yygotominor.yy139 = new ParserIndexedColumnList();}
break;
- case 324: /* idxlist_opt ::= LP idxlist RP */
+ case 323: /* idxlist_opt ::= LP idxlist RP */
{yygotominor.yy139 = yymsp[-1].minor.yy139;}
break;
- case 325: /* idxlist ::= idxlist COMMA idxlist_single */
+ case 324: /* idxlist ::= idxlist COMMA idxlist_single */
{
yymsp[-2].minor.yy139->append(yymsp[0].minor.yy90);
yygotominor.yy139 = yymsp[-2].minor.yy139;
DONT_INHERIT_TOKENS("idxlist");
}
break;
- case 326: /* idxlist ::= idxlist_single */
+ case 325: /* idxlist ::= idxlist_single */
{
yygotominor.yy139 = new ParserIndexedColumnList();
yygotominor.yy139->append(yymsp[0].minor.yy90);
}
break;
- case 327: /* idxlist_single ::= nm collate sortorder */
- case 328: /* idxlist_single ::= ID_COL */ yytestcase(yyruleno==328);
+ case 326: /* idxlist_single ::= nm collate sortorder */
+ case 327: /* idxlist_single ::= ID_COL */ yytestcase(yyruleno==327);
{
SqliteIndexedColumn* obj =
new SqliteIndexedColumn(
@@ -4527,7 +4517,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy90;
}
break;
- case 332: /* cmd ::= DROP INDEX ifexists fullname */
+ case 331: /* cmd ::= DROP INDEX ifexists fullname */
{
yygotominor.yy399 = new SqliteDropIndex(*(yymsp[-1].minor.yy237), yymsp[0].minor.yy66->name1, yymsp[0].minor.yy66->name2);
delete yymsp[-1].minor.yy237;
@@ -4535,20 +4525,20 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 335: /* cmd ::= VACUUM */
+ case 334: /* cmd ::= VACUUM */
{
yygotominor.yy399 = new SqliteVacuum();
objectForTokens = yygotominor.yy399;
}
break;
- case 336: /* cmd ::= VACUUM nm */
+ case 335: /* cmd ::= VACUUM nm */
{
yygotominor.yy399 = new SqliteVacuum(*(yymsp[0].minor.yy211));
delete yymsp[0].minor.yy211;
objectForTokens = yygotominor.yy399;
}
break;
- case 337: /* cmd ::= PRAGMA nm dbnm */
+ case 336: /* cmd ::= PRAGMA nm dbnm */
{
yygotominor.yy399 = new SqlitePragma(*(yymsp[-1].minor.yy211), *(yymsp[0].minor.yy211));
delete yymsp[-1].minor.yy211;
@@ -4556,8 +4546,8 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 338: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
- case 340: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ yytestcase(yyruleno==340);
+ case 337: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
+ case 339: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ yytestcase(yyruleno==339);
{
yygotominor.yy399 = new SqlitePragma(*(yymsp[-3].minor.yy211), *(yymsp[-2].minor.yy211), *(yymsp[0].minor.yy21), true);
delete yymsp[-3].minor.yy211;
@@ -4566,8 +4556,8 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 339: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
- case 341: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ yytestcase(yyruleno==341);
+ case 338: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ case 340: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ yytestcase(yyruleno==340);
{
yygotominor.yy399 = new SqlitePragma(*(yymsp[-4].minor.yy211), *(yymsp[-3].minor.yy211), *(yymsp[-1].minor.yy21), false);
delete yymsp[-4].minor.yy211;
@@ -4576,13 +4566,13 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 345: /* nmnum ::= nm */
+ case 344: /* nmnum ::= nm */
{
yygotominor.yy21 = new QVariant(*(yymsp[0].minor.yy211));
delete yymsp[0].minor.yy211;
}
break;
- case 351: /* minus_num ::= MINUS number */
+ case 350: /* minus_num ::= MINUS number */
{
if (yymsp[0].minor.yy21->type() == QVariant::Double)
*(yymsp[0].minor.yy21) = -(yymsp[0].minor.yy21->toDouble());
@@ -4594,13 +4584,13 @@ static void yy_reduce(
yygotominor.yy21 = yymsp[0].minor.yy21;
}
break;
- case 352: /* number ::= INTEGER */
+ case 351: /* number ::= INTEGER */
{yygotominor.yy21 = new QVariant(QVariant(yymsp[0].minor.yy0->value).toLongLong());}
break;
- case 353: /* number ::= FLOAT */
+ case 352: /* number ::= FLOAT */
{yygotominor.yy21 = new QVariant(QVariant(yymsp[0].minor.yy0->value).toDouble());}
break;
- case 354: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END */
+ case 353: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END */
{
yygotominor.yy399 = new SqliteCreateTrigger(
*(yymsp[-13].minor.yy376),
@@ -4626,7 +4616,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 355: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause */
+ case 354: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause */
{
QList<SqliteQuery *> CL;
@@ -4654,7 +4644,7 @@ static void yy_reduce(
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 356: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list */
+ case 355: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list */
{
yygotominor.yy399 = new SqliteCreateTrigger(
*(yymsp[-12].minor.yy376),
@@ -4681,79 +4671,79 @@ static void yy_reduce(
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 357: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB */
+ case 356: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB */
{ yy_destructor(yypParser,179,&yymsp[-8].minor);
yy_destructor(yypParser,177,&yymsp[-5].minor);
yy_destructor(yypParser,262,&yymsp[-3].minor);
yy_destructor(yypParser,263,&yymsp[-2].minor);
}
break;
- case 360: /* trigger_time ::= BEFORE */
+ case 359: /* trigger_time ::= BEFORE */
{yygotominor.yy152 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::BEFORE);}
break;
- case 361: /* trigger_time ::= AFTER */
+ case 360: /* trigger_time ::= AFTER */
{yygotominor.yy152 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::AFTER);}
break;
- case 362: /* trigger_time ::= INSTEAD OF */
+ case 361: /* trigger_time ::= INSTEAD OF */
{yygotominor.yy152 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::INSTEAD_OF);}
break;
- case 363: /* trigger_time ::= */
+ case 362: /* trigger_time ::= */
{yygotominor.yy152 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::null);}
break;
- case 364: /* trigger_event ::= DELETE */
+ case 363: /* trigger_event ::= DELETE */
{
yygotominor.yy309 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::DELETE);
objectForTokens = yygotominor.yy309;
}
break;
- case 365: /* trigger_event ::= INSERT */
+ case 364: /* trigger_event ::= INSERT */
{
yygotominor.yy309 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::INSERT);
objectForTokens = yygotominor.yy309;
}
break;
- case 366: /* trigger_event ::= UPDATE */
+ case 365: /* trigger_event ::= UPDATE */
{
yygotominor.yy309 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::UPDATE);
objectForTokens = yygotominor.yy309;
}
break;
- case 367: /* trigger_event ::= UPDATE OF inscollist */
+ case 366: /* trigger_event ::= UPDATE OF inscollist */
{
yygotominor.yy309 = new SqliteCreateTrigger::Event(*(yymsp[0].minor.yy445));
delete yymsp[0].minor.yy445;
objectForTokens = yygotominor.yy309;
}
break;
- case 368: /* foreach_clause ::= */
+ case 367: /* foreach_clause ::= */
{yygotominor.yy409 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::null);}
break;
- case 369: /* foreach_clause ::= FOR EACH ROW */
+ case 368: /* foreach_clause ::= FOR EACH ROW */
{yygotominor.yy409 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::FOR_EACH_ROW);}
break;
- case 372: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ case 371: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
{
yymsp[-2].minor.yy214->append(yymsp[-1].minor.yy399);
yygotominor.yy214 = yymsp[-2].minor.yy214;
DONT_INHERIT_TOKENS("trigger_cmd_list");
}
break;
- case 373: /* trigger_cmd_list ::= trigger_cmd SEMI */
+ case 372: /* trigger_cmd_list ::= trigger_cmd SEMI */
{
yygotominor.yy214 = new ParserQueryList();
yygotominor.yy214->append(yymsp[-1].minor.yy399);
}
break;
- case 374: /* trigger_cmd_list ::= SEMI */
+ case 373: /* trigger_cmd_list ::= SEMI */
{
yygotominor.yy214 = new ParserQueryList();
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 379: /* raisetype ::= ROLLBACK|ABORT|FAIL */
+ case 378: /* raisetype ::= ROLLBACK|ABORT|FAIL */
{yygotominor.yy0 = yymsp[0].minor.yy0;}
break;
- case 380: /* cmd ::= DROP TRIGGER ifexists fullname */
+ case 379: /* cmd ::= DROP TRIGGER ifexists fullname */
{
yygotominor.yy399 = new SqliteDropTrigger(*(yymsp[-1].minor.yy237), yymsp[0].minor.yy66->name1, yymsp[0].minor.yy66->name2);
delete yymsp[-1].minor.yy237;
@@ -4761,25 +4751,25 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 383: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ case 382: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
{
yygotominor.yy399 = new SqliteAttach(*(yymsp[-4].minor.yy237), yymsp[-3].minor.yy490, yymsp[-1].minor.yy490, yymsp[0].minor.yy490);
delete yymsp[-4].minor.yy237;
objectForTokens = yygotominor.yy399;
}
break;
- case 384: /* cmd ::= DETACH database_kw_opt expr */
+ case 383: /* cmd ::= DETACH database_kw_opt expr */
{
yygotominor.yy399 = new SqliteDetach(*(yymsp[-1].minor.yy237), yymsp[0].minor.yy490);
delete yymsp[-1].minor.yy237;
objectForTokens = yygotominor.yy399;
}
break;
- case 389: /* cmd ::= REINDEX */
+ case 388: /* cmd ::= REINDEX */
{yygotominor.yy399 = new SqliteReindex();}
break;
- case 390: /* cmd ::= REINDEX nm dbnm */
- case 391: /* cmd ::= REINDEX ID_COLLATE */ yytestcase(yyruleno==391);
+ case 389: /* cmd ::= REINDEX nm dbnm */
+ case 390: /* cmd ::= REINDEX ID_COLLATE */ yytestcase(yyruleno==390);
{
yygotominor.yy399 = new SqliteReindex(*(yymsp[-1].minor.yy211), *(yymsp[0].minor.yy211));
delete yymsp[-1].minor.yy211;
@@ -4787,13 +4777,13 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 394: /* cmd ::= ANALYZE */
+ case 393: /* cmd ::= ANALYZE */
{
yygotominor.yy399 = new SqliteAnalyze();
objectForTokens = yygotominor.yy399;
}
break;
- case 395: /* cmd ::= ANALYZE nm dbnm */
+ case 394: /* cmd ::= ANALYZE nm dbnm */
{
yygotominor.yy399 = new SqliteAnalyze(*(yymsp[-1].minor.yy211), *(yymsp[0].minor.yy211));
delete yymsp[-1].minor.yy211;
@@ -4801,7 +4791,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 398: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
+ case 397: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
{
yygotominor.yy399 = new SqliteAlterTable(
yymsp[-3].minor.yy66->name1,
@@ -4813,7 +4803,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 399: /* cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column */
+ case 398: /* cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column */
{
yygotominor.yy399 = new SqliteAlterTable(
yymsp[-3].minor.yy66->name1,
@@ -4826,11 +4816,11 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 400: /* cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW */
+ case 399: /* cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW */
{ yy_destructor(yypParser,181,&yymsp[-3].minor);
}
break;
- case 406: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ case 405: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm */
{
yygotominor.yy399 = new SqliteCreateVirtualTable(
*(yymsp[-4].minor.yy237),
@@ -4845,7 +4835,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 407: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP */
+ case 406: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP */
{
yygotominor.yy399 = new SqliteCreateVirtualTable(
*(yymsp[-7].minor.yy237),
@@ -4862,14 +4852,14 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 410: /* vtabarglist ::= vtabarg */
+ case 409: /* vtabarglist ::= vtabarg */
{
yygotominor.yy445 = new ParserStringList();
yygotominor.yy445->append((yymsp[0].minor.yy211)->mid(1)); // mid(1) to skip the first whitespace added in vtabarg
delete yymsp[0].minor.yy211;
}
break;
- case 411: /* vtabarglist ::= vtabarglist COMMA vtabarg */
+ case 410: /* vtabarglist ::= vtabarglist COMMA vtabarg */
{
yymsp[-2].minor.yy445->append((yymsp[0].minor.yy211)->mid(1)); // mid(1) to skip the first whitespace added in vtabarg
yygotominor.yy445 = yymsp[-2].minor.yy445;
@@ -4877,19 +4867,19 @@ static void yy_reduce(
DONT_INHERIT_TOKENS("vtabarglist");
}
break;
- case 413: /* vtabarg ::= vtabarg vtabargtoken */
+ case 412: /* vtabarg ::= vtabarg vtabargtoken */
{
yymsp[-1].minor.yy211->append(" "+ *(yymsp[0].minor.yy211));
yygotominor.yy211 = yymsp[-1].minor.yy211;
delete yymsp[0].minor.yy211;
}
break;
- case 414: /* vtabargtoken ::= ANY */
+ case 413: /* vtabargtoken ::= ANY */
{
yygotominor.yy211 = new QString(yymsp[0].minor.yy0->value);
}
break;
- case 415: /* vtabargtoken ::= LP anylist RP */
+ case 414: /* vtabargtoken ::= LP anylist RP */
{
yygotominor.yy211 = new QString("(");
yygotominor.yy211->append(*(yymsp[-1].minor.yy211));
@@ -4897,7 +4887,7 @@ static void yy_reduce(
delete yymsp[-1].minor.yy211;
}
break;
- case 417: /* anylist ::= anylist LP anylist RP */
+ case 416: /* anylist ::= anylist LP anylist RP */
{
yygotominor.yy211 = yymsp[-3].minor.yy211;
yygotominor.yy211->append("(");
@@ -4907,37 +4897,37 @@ static void yy_reduce(
DONT_INHERIT_TOKENS("anylist");
}
break;
- case 418: /* anylist ::= anylist ANY */
+ case 417: /* anylist ::= anylist ANY */
{
yygotominor.yy211 = yymsp[-1].minor.yy211;
yygotominor.yy211->append(yymsp[0].minor.yy0->value);
DONT_INHERIT_TOKENS("anylist");
}
break;
- case 419: /* with ::= */
+ case 418: /* with ::= */
{yygotominor.yy367 = nullptr;}
break;
- case 420: /* with ::= WITH wqlist */
+ case 419: /* with ::= WITH wqlist */
{
yygotominor.yy367 = yymsp[0].minor.yy367;
objectForTokens = yygotominor.yy367;
}
break;
- case 421: /* with ::= WITH RECURSIVE wqlist */
+ case 420: /* with ::= WITH RECURSIVE wqlist */
{
yygotominor.yy367 = yymsp[0].minor.yy367;
yygotominor.yy367->recursive = true;
objectForTokens = yygotominor.yy367;
}
break;
- case 422: /* wqlist ::= nm idxlist_opt AS LP select RP */
+ case 421: /* wqlist ::= nm idxlist_opt AS LP select RP */
{
yygotominor.yy367 = SqliteWith::append(*(yymsp[-5].minor.yy211), *(yymsp[-4].minor.yy139), yymsp[-1].minor.yy123);
delete yymsp[-5].minor.yy211;
delete yymsp[-4].minor.yy139;
}
break;
- case 423: /* wqlist ::= wqlist COMMA nm idxlist_opt AS LP select RP */
+ case 422: /* wqlist ::= wqlist COMMA nm idxlist_opt AS LP select RP */
{
yygotominor.yy367 = SqliteWith::append(yymsp[-7].minor.yy367, *(yymsp[-5].minor.yy211), *(yymsp[-4].minor.yy139), yymsp[-1].minor.yy123);
delete yymsp[-5].minor.yy211;
@@ -4945,7 +4935,7 @@ static void yy_reduce(
DONT_INHERIT_TOKENS("wqlist");
}
break;
- case 424: /* wqlist ::= ID_TAB_NEW */
+ case 423: /* wqlist ::= ID_TAB_NEW */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
yygotominor.yy367 = new SqliteWith();
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
index 65a4dd7..0353e2c 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
@@ -248,8 +248,8 @@ cmd(X) ::= CREATE temp(T) TABLE
conslist_opt(CS) RP
table_options(F). {
X = new SqliteCreateTable(
- *(T),
*(E),
+ *(T),
N->name1,
N->name2,
*(CL),
@@ -268,8 +268,8 @@ cmd(X) ::= CREATE temp(T) TABLE
ifnotexists(E) fullname(N)
AS select(S). {
X = new SqliteCreateTable(
- *(T),
*(E),
+ *(T),
N->name1,
N->name2,
S
@@ -1738,12 +1738,16 @@ exprx(X) ::= expr(E) not_opt(N) IN LP
objectForTokens = X;
parserContext->minorErrorBeforeNextToken("Syntax error");
}
+/*
+This introduces premature reduce for LP-expr and causes bug #2755
exprx(X) ::= LP expr(E). {
X = new SqliteExpr();
X->initSubExpr(E);
objectForTokens = X;
parserContext->minorErrorBeforeNextToken("Syntax error");
}
+*/
+
exprx ::= expr not_opt IN ID_DB. [IN] {}
exprx ::= expr not_opt IN nm DOT
ID_TAB. [IN] {}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp
index 4f248b0..ba2ea37 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp
@@ -77,7 +77,7 @@ StatementTokenBuilder& StatementTokenBuilder::withFloat(double value)
return with(Token::FLOAT, QString::number(value));
}
-StatementTokenBuilder& StatementTokenBuilder::withInteger(int value)
+StatementTokenBuilder& StatementTokenBuilder::withInteger(qint64 value)
{
return with(Token::INTEGER, QString::number(value));
}
@@ -168,10 +168,10 @@ StatementTokenBuilder& StatementTokenBuilder::withLiteralValue(const QVariant& v
}
}
- value.toInt(&ok);
+ qint64 longVal = value.toLongLong(&ok);
if (ok)
{
- withInteger(value.toInt());
+ withInteger(longVal);
return *this;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.h b/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.h
index fcf23be..3d748ad 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.h
@@ -138,7 +138,7 @@ class StatementTokenBuilder
* @param value Value for the token.
* @return Reference to the builder for the further building.
*/
- StatementTokenBuilder& withInteger(int value);
+ StatementTokenBuilder& withInteger(qint64 value);
/**
* @brief Adds bind parameter token.
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.h b/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.h
index c78dc11..6d59c7a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.h
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.h
@@ -110,11 +110,12 @@
#ifndef BIGINT_H_
#define BIGINT_H_
+#include "coreSQLiteStudio_global.h"
#include <iostream> //ostream, istream
#include <cmath> //sqrt()
#include <string> //ToString(), BigInt(std::string)
-class BigInt
+class API_EXPORT BigInt
{
private:
/* An array of digits stored right to left,
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/Key.h b/SQLiteStudio3/coreSQLiteStudio/rsa/Key.h
index b193e2c..f1d2ee6 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/Key.h
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/Key.h
@@ -34,9 +34,10 @@
#define KEY_H_
#include "BigInt.h"
+#include "coreSQLiteStudio_global.h"
#include <iostream>
-class Key
+class API_EXPORT Key
{
private:
BigInt modulus;
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.h b/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.h
index 929ffe9..153195a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.h
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.h
@@ -32,10 +32,11 @@
#ifndef KEYPAIR_H_
#define KEYPAIR_H_
+#include "coreSQLiteStudio_global.h"
#include "Key.h"
#include <iostream>
-class KeyPair
+class API_EXPORT KeyPair
{
private:
const Key privateKey;
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.h b/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.h
index 8a9dfac..64ee9f6 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.h
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.h
@@ -30,9 +30,10 @@
#ifndef PRIMEGENERATOR_H_
#define PRIMEGENERATOR_H_
+#include "coreSQLiteStudio_global.h"
#include "BigInt.h"
-class PrimeGenerator
+class API_EXPORT PrimeGenerator
{
private:
/* Generates a random "number" such as 1 <= "number" < "top".
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/config.h b/SQLiteStudio3/coreSQLiteStudio/services/config.h
index 6e1fd95..c7bebf3 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/config.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/config.h
@@ -162,6 +162,8 @@ class API_EXPORT Config : public QObject
virtual void commit() = 0;
virtual void rollback() = 0;
+ virtual QString getSqlite3Version() const = 0;
+
signals:
void massSaveBegins();
void massSaveCommited();
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp
index bbfec32..046993f 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp
@@ -13,6 +13,7 @@
#include <QRegExp>
#include <QDateTime>
#include <QSysInfo>
+#include <QCoreApplication>
#include <QtConcurrent/QtConcurrentRun>
static_qstring(DB_FILE_NAME, "settings3");
@@ -28,6 +29,8 @@ void ConfigImpl::init()
initDbFile();
initTables();
+ sqlite3Version = db->exec("SELECT sqlite_version()")->getSingleCell().toString();
+
connect(this, SIGNAL(sqlHistoryRefreshNeeded()), this, SLOT(refreshSqlHistory()));
connect(this, SIGNAL(ddlHistoryRefreshNeeded()), this, SLOT(refreshDdlHistory()));
}
@@ -175,6 +178,11 @@ QString ConfigImpl::getLastErrorString() const
return msg;
}
+QString ConfigImpl::getSqlite3Version() const
+{
+ return sqlite3Version;
+}
+
QList<ConfigImpl::CfgDbPtr> ConfigImpl::dbList()
{
QList<CfgDbPtr> entries;
@@ -467,23 +475,42 @@ QString ConfigImpl::getConfigPath()
QString ConfigImpl::getPortableConfigPath()
{
+ QStringList paths = QStringList({"./sqlitestudio-cfg", qApp->applicationDirPath() + "/sqlitestudio-cfg"});
+ QSet<QString> pathSet;
+ QDir dir;
+ for (const QString& path : paths)
+ {
+ dir = QDir(path);
+ pathSet << dir.absolutePath();
+ }
+
+ QString potentialPath;
QFileInfo file;
- QDir dir("./sqlitestudio-cfg");
+ for (const QString& path : pathSet)
+ {
+ dir = QDir(path);
+ file = QFileInfo(dir.absolutePath());
+ if (!file.exists())
+ {
+ if (potentialPath.isNull())
+ potentialPath = dir.absolutePath();
- file = QFileInfo(dir.absolutePath());
- if (!file.exists())
- return dir.absolutePath();
+ continue;
+ }
- if (!file.isDir() || !file.isReadable() || !file.isWritable())
- return QString::null;
+ if (!file.isDir() || !file.isReadable() || !file.isWritable())
+ continue;
- foreach (file, dir.entryInfoList())
- {
- if (!file.isReadable() || !file.isWritable())
- return QString::null;
+ foreach (file, dir.entryInfoList())
+ {
+ if (!file.isReadable() || !file.isWritable())
+ continue;
+ }
+
+ return dir.absolutePath();
}
- return dir.absolutePath();
+ return potentialPath;
}
void ConfigImpl::initTables()
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h
index 63d1e1f..3bdb7a5 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h
@@ -36,6 +36,7 @@ class API_EXPORT ConfigImpl : public Config
bool removeDb(const QString& name);
bool isDbInConfig(const QString& name);
QString getLastErrorString() const;
+ QString getSqlite3Version() const;
/**
* @brief Provides list of all registered databases.
@@ -120,6 +121,7 @@ class API_EXPORT ConfigImpl : public Config
SqlHistoryModel* sqlHistoryModel = nullptr;
DdlHistoryModel* ddlHistoryModel = nullptr;
QMutex sqlHistoryMutex;
+ QString sqlite3Version;
public slots:
void refreshDdlHistory();
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp
index 43fc953..70aa568 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp
@@ -12,6 +12,7 @@
#include <QPluginLoader>
#include <QDebug>
#include <QUrl>
+#include <QDir>
#include <db/invaliddb.h>
DbManagerImpl::DbManagerImpl(QObject *parent) :
@@ -46,7 +47,13 @@ bool DbManagerImpl::addDb(const QString &name, const QString &path, const QHash<
if (getByName(name))
{
qWarning() << "Tried to add database with name that was already on the list:" << name;
- return false; // db with this name exists
+ return false;
+ }
+
+ if (getByPath(path))
+ {
+ qWarning() << "Tried to add database with path that was already on the list:" << path;
+ return false;
}
QString errorMessage;
@@ -74,24 +81,27 @@ bool DbManagerImpl::updateDb(Db* db, const QString &name, const QString &path, c
return false;
}
+ QDir pathDir(path);
+ QString normalizedPath = pathDir.absolutePath();
+
listLock.lockForWrite();
nameToDb.remove(db->getName(), Qt::CaseInsensitive);
pathToDb.remove(db->getPath());
- bool pathDifferent = db->getPath() != path;
+ bool pathDifferent = db->getPath() != normalizedPath;
QString oldName = db->getName();
db->setName(name);
- db->setPath(path);
+ db->setPath(normalizedPath);
db->setConnectionOptions(options);
bool result = false;
if (permanent)
{
if (CFG->isDbInConfig(oldName))
- result = CFG->updateDb(oldName, name, path, options);
+ result = CFG->updateDb(oldName, name, normalizedPath, options);
else
- result = CFG->addDb(name, path, options);
+ result = CFG->addDb(name, normalizedPath, options);
}
else if (CFG->isDbInConfig(name)) // switched "permanent" off?
result = CFG->removeDb(name);
@@ -105,7 +115,7 @@ bool DbManagerImpl::updateDb(Db* db, const QString &name, const QString &path, c
db = reloadedDb;
nameToDb[name] = db;
- pathToDb[path] = db;
+ pathToDb[normalizedPath] = db;
listLock.unlock();
@@ -138,14 +148,17 @@ void DbManagerImpl::removeDbByName(const QString &name, Qt::CaseSensitivity cs)
void DbManagerImpl::removeDbByPath(const QString &path)
{
+ // Using QDir to normalize separator
+ QDir pathDir(path);
+
listLock.lockForRead();
- bool contains = pathToDb.contains(path);
+ bool contains = pathToDb.contains(pathDir.absolutePath());
listLock.unlock();
if (!contains)
return;
listLock.lockForWrite();
- Db* db = pathToDb[path];
+ Db* db = pathToDb[pathDir.absolutePath()];
removeDbInternal(db);
listLock.unlock();
@@ -230,7 +243,9 @@ Db* DbManagerImpl::getByName(const QString &name, Qt::CaseSensitivity cs)
Db* DbManagerImpl::getByPath(const QString &path)
{
- return pathToDb.value(path);
+ // Using QDir to normalize separator
+ QDir pathDir(path);
+ return pathToDb.value(pathDir.absolutePath());
}
Db* DbManagerImpl::createInMemDb()
@@ -369,12 +384,13 @@ Db* DbManagerImpl::createDb(const QString &name, const QString &path, const QHas
Db* db = nullptr;
QStringList messages;
QString message;
+ QDir pathDir(path); // Using QDir to normalize separator
foreach (dbPlugin, dbPlugins)
{
if (options.contains("plugin") && options["plugin"] != dbPlugin->getName())
continue;
- db = dbPlugin->getInstance(name, path, options, &message);
+ db = dbPlugin->getInstance(name, pathDir.absolutePath(), options, &message);
if (!db)
{
messages << message;
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.cpp
index c94e4c2..da732bd 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.cpp
@@ -147,9 +147,9 @@ void FunctionManagerImpl::evaluateScriptAggregateInitial(ScriptFunction* func, D
aggregateStorage["context"] = QVariant::fromValue(ctx);
if (dbAwarePlugin)
- dbAwarePlugin->evaluate(ctx, func->code, {}, db, false);
+ dbAwarePlugin->evaluate(ctx, func->initCode, {}, db, false);
else
- plugin->evaluate(ctx, func->code, {});
+ plugin->evaluate(ctx, func->initCode, {});
if (plugin->hasError(ctx))
{
@@ -203,9 +203,9 @@ QVariant FunctionManagerImpl::evaluateScriptAggregateFinal(ScriptFunction* func,
QVariant result;
if (dbAwarePlugin)
- result = dbAwarePlugin->evaluate(ctx, func->code, {}, db, false);
+ result = dbAwarePlugin->evaluate(ctx, func->finalCode, {}, db, false);
else
- result = plugin->evaluate(ctx, func->code, {});
+ result = plugin->evaluate(ctx, func->finalCode, {});
if (plugin->hasError(ctx))
{
diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
index 8ff4f0d..2d2bbd3 100644
--- a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
@@ -39,7 +39,7 @@
DEFINE_SINGLETON(SQLiteStudio)
-static const int sqlitestudioVersion = 30002;
+static const int sqlitestudioVersion = 30003;
SQLiteStudio::SQLiteStudio()
{
diff --git a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp
index d064cb1..8dc36ee 100644
--- a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp
@@ -111,11 +111,13 @@ void TableModifier::handleFks(const QString& tempTableName)
subModifier.usedTempTableNames = usedTempTableNames;
subModifier.tableColMap = tableColMap;
+ subModifier.triggerNameToDdlMap = triggerNameToDdlMap;
subModifier.existingColumns = existingColumns;
subModifier.newName = newName;
subModifier.subHandleFks(originalTable, tempTableName);
sqls += subModifier.generateSqls();
modifiedTables << fkTable;
+ triggerNameToDdlMap = subModifier.triggerNameToDdlMap;
modifiedTables += subModifier.getModifiedTables();
modifiedIndexes += subModifier.getModifiedIndexes();
@@ -390,10 +392,67 @@ void TableModifier::handleTriggers()
void TableModifier::handleTrigger(SqliteCreateTriggerPtr trigger)
{
- handleName(originalTable, trigger->table);
- if (trigger->event->type == SqliteCreateTrigger::Event::UPDATE_OF)
- handleColumnNames(trigger->event->columnNames);
+ trigger->rebuildTokens();
+ QString originalQueryString = trigger->detokenize();
+ bool forThisTable = (originalTable.compare(trigger->table, Qt::CaseInsensitive) == 0);
+ bool alreadyProcessedOnce = modifiedTriggers.contains(trigger->trigger, Qt::CaseInsensitive);
+
+ if (forThisTable)
+ {
+ // Those routines should run only for trigger targeted for originalTable.
+ handleName(originalTable, trigger->table);
+ if (trigger->event->type == SqliteCreateTrigger::Event::UPDATE_OF)
+ handleColumnNames(trigger->event->columnNames);
+ }
+
+ if (alreadyProcessedOnce)
+ {
+ // The trigger was already modified by handling of some referencing table.
+ QString oldDdl = triggerNameToDdlMap[trigger->trigger];
+ Parser parser(dialect);
+ trigger = parser.parse<SqliteCreateTrigger>(oldDdl);
+ if (!trigger)
+ {
+ qCritical() << "Could not parse old (already processed once) trigger. Parser error:" << parser.getErrorString() << ", Old DDL: " << oldDdl;
+ warnings << QObject::tr("There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.")
+ .arg(trigger->trigger);
+ return;
+ }
+ }
+
+ handleTriggerQueries(trigger);
+
+ trigger->rebuildTokens();
+ QString newQueryString = trigger->detokenize();
+ if (originalQueryString == newQueryString && !forThisTable)
+ return; // No query modification was made and trigger is not deleted by this table drop.
+
+ if (trigger->event->type == SqliteCreateTrigger::Event::UPDATE_OF && trigger->event->columnNames.size() == 0)
+ {
+ warnings << QObject::tr("All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.").arg(trigger->trigger);
+ return;
+ }
+
+ if (alreadyProcessedOnce)
+ {
+ // We will add new sql to list, at the end, so it's executed after all tables were altered.
+ sqls.removeOne(triggerNameToDdlMap[trigger->trigger]);
+ }
+
+ if (!forThisTable)
+ {
+ // If this is for other table, than trigger might be still existing, cause altering this table will not delete trigger.
+ sqls << QString("DROP TRIGGER IF EXISTS %1").arg(wrapObjIfNeeded(trigger->trigger, dialect));
+ }
+
+ sqls << newQueryString;
+ modifiedTriggers << trigger->trigger;
+ triggerNameToDdlMap[trigger->trigger] = newQueryString;
+}
+
+void TableModifier::handleTriggerQueries(SqliteCreateTriggerPtr trigger)
+{
SqliteQuery* newQuery = nullptr;
QList<SqliteQuery*> newQueries;
foreach (SqliteQuery* query, trigger->queries)
@@ -406,17 +465,6 @@ void TableModifier::handleTrigger(SqliteCreateTriggerPtr trigger)
errors << QObject::tr("Cannot not update trigger %1 according to table %2 modification.").arg(trigger->trigger, originalTable);
}
trigger->queries = newQueries;
-
- if (trigger->event->type == SqliteCreateTrigger::Event::UPDATE_OF && trigger->event->columnNames.size() == 0)
- {
- warnings << QObject::tr("All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.").arg(trigger->trigger);
- }
- else
- {
- trigger->rebuildTokens();
- sqls << trigger->detokenize();
- modifiedTriggers << trigger->trigger;
- }
}
void TableModifier::handleViews()
diff --git a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h
index 62af492..d3977ee 100644
--- a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h
+++ b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h
@@ -42,6 +42,7 @@ class API_EXPORT TableModifier
void handleIndex(SqliteCreateIndexPtr index);
void handleTriggers();
void handleTrigger(SqliteCreateTriggerPtr trigger);
+ void handleTriggerQueries(SqliteCreateTriggerPtr trigger);
void handleViews();
void handleView(SqliteCreateViewPtr view);
SqliteQuery* handleTriggerQuery(SqliteQuery* query, const QString& trigName);
@@ -105,6 +106,7 @@ class API_EXPORT TableModifier
QString newName;
QStringList existingColumns;
QHash<QString, QString> tableColMap;
+ QHash<QString, QString> triggerNameToDdlMap;
QStringList modifiedTables;
QStringList modifiedIndexes;
QStringList modifiedTriggers;
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations.cpp b/SQLiteStudio3/coreSQLiteStudio/translations.cpp
index 56dc5f6..362d4fa 100644
--- a/SQLiteStudio3/coreSQLiteStudio/translations.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/translations.cpp
@@ -7,7 +7,7 @@
#include <QRegularExpression>
QHash<QString,QTranslator*> SQLITESTUDIO_TRANSLATIONS;
-QStringList SQLITESTUDIO_TRANSLATION_DIRS = QStringList({":/msg", ":/msg/translations", "msg", "translations"});
+QStringList SQLITESTUDIO_TRANSLATION_DIRS = QStringList({"msg", "translations", ":/msg", ":/msg/translations"});
void loadTranslation(const QString& baseName)
{
@@ -106,3 +106,13 @@ QMap<QString,QString> getAvailableLanguages()
return langs;
}
+
+void setDefaultLanguage(const QString& lang)
+{
+ CFG_CORE.General.Language.set(lang);
+}
+
+QString getConfigLanguageDefault()
+{
+ return CFG_CORE.General.Language.getDefultValue().toString();
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations.h b/SQLiteStudio3/coreSQLiteStudio/translations.h
index c130064..4ae6231 100644
--- a/SQLiteStudio3/coreSQLiteStudio/translations.h
+++ b/SQLiteStudio3/coreSQLiteStudio/translations.h
@@ -1,18 +1,21 @@
#ifndef TRANSLATIONS_H
#define TRANSLATIONS_H
+#include "coreSQLiteStudio_global.h"
#include <QString>
#include <QMap>
-void loadTranslations(const QStringList& baseNames);
-void loadTranslation(const QString& baseName);
-void unloadTranslation(const QString& baseName);
+API_EXPORT void loadTranslations(const QStringList& baseNames);
+API_EXPORT void loadTranslation(const QString& baseName);
+API_EXPORT void unloadTranslation(const QString& baseName);
+API_EXPORT void setDefaultLanguage(const QString& lang);
+API_EXPORT QString getConfigLanguageDefault();
/**
* @brief Provides list of translations as code names.
* @return List of available translations in their code names (pl, pt, de, ...).
*/
-QStringList getAvailableTranslations();
+API_EXPORT QStringList getAvailableTranslations();
/**
* @brief Provides list of languages and their code names.
@@ -20,6 +23,6 @@ QStringList getAvailableTranslations();
*
* As the result is a QMap, it comes sorted by a translated names of languages.
*/
-QMap<QString, QString> getAvailableLanguages();
+API_EXPORT QMap<QString, QString> getAvailableLanguages();
#endif // TRANSLATIONS_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.qm
new file mode 100644
index 0000000..9dad8df
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.qm
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts
new file mode 100644
index 0000000..7656d3b
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts
@@ -0,0 +1,1278 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de_DE">
+<context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="306"/>
+ <location filename="../db/abstractdb.cpp" line="323"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="603"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>BugReporter</name>
+ <message>
+ <location filename="../services/bugreporter.cpp" line="46"/>
+ <source>Invalid login or password</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="35"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="41"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="47"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="74"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="134"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="196"/>
+ <source>New row reference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="203"/>
+ <source>Old row reference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>New table name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="211"/>
+ <source>New index name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="214"/>
+ <source>New view name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="217"/>
+ <source>New trigger name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="220"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="223"/>
+ <source>transaction name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="226"/>
+ <source>New column name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="229"/>
+ <source>Column data type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="232"/>
+ <source>Constraint name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="245"/>
+ <source>Error message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="289"/>
+ <source>Collation name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="304"/>
+ <source>Any word</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="485"/>
+ <source>Default database</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="486"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="63"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="125"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="299"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="328"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="301"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="330"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="483"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="402"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="412"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <location filename="../dbobjectorganizer.cpp" line="412"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="426"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="447"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="466"/>
+ <location filename="../dbobjectorganizer.cpp" line="473"/>
+ <location filename="../dbobjectorganizer.cpp" line="496"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="535"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="542"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="547"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="552"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbVersionConverter</name>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="923"/>
+ <source>Target file exists, but could not be overwritten.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="942"/>
+ <source>Could not find proper database plugin to create target database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="1176"/>
+ <source>Error while converting database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="65"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="67"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="69"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="71"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="116"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="175"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="275"/>
+ <location filename="../exportworker.cpp" line="326"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="482"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="490"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="506"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="232"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="341"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="365"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="417"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="459"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="477"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="93"/>
+ <source>Imported data to the table &apos;%1&apos; successfully.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="48"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="93"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="98"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="116"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="152"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="541"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="552"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="561"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="577"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="730"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="15"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="88"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="12"/>
+ <source>Random number</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="12"/>
+ <source>Random text</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="13"/>
+ <source>Script</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="56"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="65"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../db/abstractdb2.h" line="199"/>
+ <location filename="../db/abstractdb3.h" line="356"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb2.h" line="796"/>
+ <location filename="../db/abstractdb3.h" line="1082"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="376"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="137"/>
+ <location filename="../dbversionconverter.cpp" line="142"/>
+ <location filename="../dbversionconverter.cpp" line="195"/>
+ <location filename="../dbversionconverter.cpp" line="240"/>
+ <location filename="../dbversionconverter.cpp" line="245"/>
+ <location filename="../dbversionconverter.cpp" line="253"/>
+ <location filename="../dbversionconverter.cpp" line="331"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="201"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="424"/>
+ <source>Could not parse statement: %1
+Error details: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="435"/>
+ <location filename="../dbversionconverter.cpp" line="461"/>
+ <location filename="../dbversionconverter.cpp" line="482"/>
+ <location filename="../dbversionconverter.cpp" line="515"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="488"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="756"/>
+ <source>SQLite %1 does not support current date or time clauses in expressions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="767"/>
+ <location filename="../dbversionconverter.cpp" line="770"/>
+ <location filename="../dbversionconverter.cpp" line="781"/>
+ <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="109"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="2170"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="4461"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="5076"/>
+ <source>Syntax error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="30"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="91"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="53"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="77"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="88"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="40"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="58"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="80"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="112"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="113"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="307"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="617"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="288"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="289"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="290"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="291"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="292"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="293"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="294"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="107"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="379"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="418"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="465"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="433"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="483"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <location filename="../tablemodifier.cpp" line="601"/>
+ <location filename="../tablemodifier.cpp" line="619"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="25"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="34"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="82"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="132"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="174"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="182"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="264"/>
+ <location filename="../db/queryexecutor.cpp" line="538"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="449"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="30"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="129"/>
+ <source>An error occurred while checking for updates: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="142"/>
+ <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="173"/>
+ <source>An error occurred while reading updates metadata: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="186"/>
+ <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="193"/>
+ <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="204"/>
+ <source>There was no updates to download. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="239"/>
+ <source>Downloading: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="245"/>
+ <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="253"/>
+ <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="274"/>
+ <source>Installing updates.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="285"/>
+ <source>Could not copy current application directory into %1 directory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="338"/>
+ <source>Could not create directory %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="346"/>
+ <source>Could not rename directory %1 to %2.
+Details: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="350"/>
+ <source>Cannot not rename directory %1 to %2.
+Details: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="358"/>
+ <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="363"/>
+ <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="442"/>
+ <source>Could not unpack component %1 into %2 directory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="553"/>
+ <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="560"/>
+ <source>Could not execute final updating steps as root: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <location filename="../services/updatemanager.cpp" line="611"/>
+ <location filename="../services/updatemanager.cpp" line="621"/>
+ <source>Could not execute final updating steps as admin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <source>Cannot create temporary directory for updater.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <source>Cannot create updater script file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="631"/>
+ <source>Updating canceled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="659"/>
+ <source>Could not execute final updating steps as administrator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="671"/>
+ <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="677"/>
+ <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="694"/>
+ <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="730"/>
+ <source>Could not run new version for continuing update.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="815"/>
+ <source>Package not in tar.gz format, cannot install: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="822"/>
+ <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="831"/>
+ <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="850"/>
+ <source>Package not in zip format, cannot install: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="857"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="871"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="921"/>
+ <location filename="../services/updatemanager.cpp" line="930"/>
+ <source>Could not rename directory %1 to %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="943"/>
+ <source>Could not delete directory %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="959"/>
+ <source>Error executing update command: %1
+Error message: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="1026"/>
+ <source>An error occurred while downloading updates: %1. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.qm
new file mode 100644
index 0000000..9dad8df
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.qm
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts
new file mode 100644
index 0000000..420d0bb
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts
@@ -0,0 +1,1278 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es_ES">
+<context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="306"/>
+ <location filename="../db/abstractdb.cpp" line="323"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="603"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>BugReporter</name>
+ <message>
+ <location filename="../services/bugreporter.cpp" line="46"/>
+ <source>Invalid login or password</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="35"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="41"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="47"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="74"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="134"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="196"/>
+ <source>New row reference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="203"/>
+ <source>Old row reference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>New table name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="211"/>
+ <source>New index name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="214"/>
+ <source>New view name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="217"/>
+ <source>New trigger name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="220"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="223"/>
+ <source>transaction name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="226"/>
+ <source>New column name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="229"/>
+ <source>Column data type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="232"/>
+ <source>Constraint name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="245"/>
+ <source>Error message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="289"/>
+ <source>Collation name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="304"/>
+ <source>Any word</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="485"/>
+ <source>Default database</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="486"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="63"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="125"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="299"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="328"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="301"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="330"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="483"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="402"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="412"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <location filename="../dbobjectorganizer.cpp" line="412"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="426"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="447"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="466"/>
+ <location filename="../dbobjectorganizer.cpp" line="473"/>
+ <location filename="../dbobjectorganizer.cpp" line="496"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="535"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="542"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="547"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="552"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbVersionConverter</name>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="923"/>
+ <source>Target file exists, but could not be overwritten.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="942"/>
+ <source>Could not find proper database plugin to create target database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="1176"/>
+ <source>Error while converting database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="65"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="67"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="69"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="71"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="116"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="175"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="275"/>
+ <location filename="../exportworker.cpp" line="326"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="482"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="490"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="506"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="232"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="341"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="365"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="417"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="459"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="477"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="93"/>
+ <source>Imported data to the table &apos;%1&apos; successfully.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="48"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="93"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="98"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="116"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="152"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="541"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="552"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="561"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="577"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="730"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="15"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="88"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="12"/>
+ <source>Random number</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="12"/>
+ <source>Random text</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="13"/>
+ <source>Script</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="56"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="65"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../db/abstractdb2.h" line="199"/>
+ <location filename="../db/abstractdb3.h" line="356"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb2.h" line="796"/>
+ <location filename="../db/abstractdb3.h" line="1082"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="376"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="137"/>
+ <location filename="../dbversionconverter.cpp" line="142"/>
+ <location filename="../dbversionconverter.cpp" line="195"/>
+ <location filename="../dbversionconverter.cpp" line="240"/>
+ <location filename="../dbversionconverter.cpp" line="245"/>
+ <location filename="../dbversionconverter.cpp" line="253"/>
+ <location filename="../dbversionconverter.cpp" line="331"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="201"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="424"/>
+ <source>Could not parse statement: %1
+Error details: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="435"/>
+ <location filename="../dbversionconverter.cpp" line="461"/>
+ <location filename="../dbversionconverter.cpp" line="482"/>
+ <location filename="../dbversionconverter.cpp" line="515"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="488"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="756"/>
+ <source>SQLite %1 does not support current date or time clauses in expressions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="767"/>
+ <location filename="../dbversionconverter.cpp" line="770"/>
+ <location filename="../dbversionconverter.cpp" line="781"/>
+ <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="109"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="2170"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="4461"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="5076"/>
+ <source>Syntax error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="30"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="91"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="53"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="77"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="88"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="40"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="58"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="80"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="112"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="113"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="307"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="617"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="288"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="289"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="290"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="291"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="292"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="293"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="294"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="107"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="379"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="418"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="465"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="433"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="483"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <location filename="../tablemodifier.cpp" line="601"/>
+ <location filename="../tablemodifier.cpp" line="619"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="25"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="34"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="82"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="132"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="174"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="182"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="264"/>
+ <location filename="../db/queryexecutor.cpp" line="538"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="449"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="30"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="129"/>
+ <source>An error occurred while checking for updates: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="142"/>
+ <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="173"/>
+ <source>An error occurred while reading updates metadata: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="186"/>
+ <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="193"/>
+ <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="204"/>
+ <source>There was no updates to download. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="239"/>
+ <source>Downloading: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="245"/>
+ <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="253"/>
+ <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="274"/>
+ <source>Installing updates.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="285"/>
+ <source>Could not copy current application directory into %1 directory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="338"/>
+ <source>Could not create directory %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="346"/>
+ <source>Could not rename directory %1 to %2.
+Details: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="350"/>
+ <source>Cannot not rename directory %1 to %2.
+Details: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="358"/>
+ <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="363"/>
+ <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="442"/>
+ <source>Could not unpack component %1 into %2 directory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="553"/>
+ <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="560"/>
+ <source>Could not execute final updating steps as root: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <location filename="../services/updatemanager.cpp" line="611"/>
+ <location filename="../services/updatemanager.cpp" line="621"/>
+ <source>Could not execute final updating steps as admin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <source>Cannot create temporary directory for updater.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <source>Cannot create updater script file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="631"/>
+ <source>Updating canceled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="659"/>
+ <source>Could not execute final updating steps as administrator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="671"/>
+ <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="677"/>
+ <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="694"/>
+ <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="730"/>
+ <source>Could not run new version for continuing update.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="815"/>
+ <source>Package not in tar.gz format, cannot install: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="822"/>
+ <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="831"/>
+ <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="850"/>
+ <source>Package not in zip format, cannot install: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="857"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="871"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="921"/>
+ <location filename="../services/updatemanager.cpp" line="930"/>
+ <source>Could not rename directory %1 to %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="943"/>
+ <source>Could not delete directory %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="959"/>
+ <source>Error executing update command: %1
+Error message: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="1026"/>
+ <source>An error occurred while downloading updates: %1. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.qm
new file mode 100644
index 0000000..a0b0a53
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.qm
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts
new file mode 100644
index 0000000..46e3abc
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts
@@ -0,0 +1,1283 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr_FR">
+<context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="306"/>
+ <location filename="../db/abstractdb.cpp" line="323"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Impossible d&apos;exécuter la requête sur une base de données fermée.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="603"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Erreur base de données attachée %1:%2</translation>
+ </message>
+</context>
+<context>
+ <name>BugReporter</name>
+ <message>
+ <location filename="../services/bugreporter.cpp" line="46"/>
+ <source>Invalid login or password</source>
+ <translation>Identifiant ou mot de passe incorrect</translation>
+ </message>
+</context>
+<context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="35"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>La base de données pour exécuter des requêtes n&apos;était pas définie.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="41"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>La base de données pour exécuter des requêtes n&apos;est pas ouverte.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="47"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Impossible d&apos;initialiser une transaction de la base de données:%1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="74"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Interruption</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="134"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Impossible d&apos;enregistrer la transaction de la base de données:%1</translation>
+ </message>
+</context>
+<context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="196"/>
+ <source>New row reference</source>
+ <translation>Nouvelle référence de ligne</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="203"/>
+ <source>Old row reference</source>
+ <translation>Anncienne référence de ligne</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>New table name</source>
+ <translation>Nouveau nom de table</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="211"/>
+ <source>New index name</source>
+ <translation>Nouveau nom d&apos;index</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="214"/>
+ <source>New view name</source>
+ <translation>Nouveau nom de vue</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="217"/>
+ <source>New trigger name</source>
+ <translation>Nouveau nom de déclencheur</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="220"/>
+ <source>Table or column alias</source>
+ <translation>Table ou alias colonne</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="223"/>
+ <source>transaction name</source>
+ <translation>Nom de transaction</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="226"/>
+ <source>New column name</source>
+ <translation>Nouveau nom de colonne</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="229"/>
+ <source>Column data type</source>
+ <translation>Type de données de la colonne</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="232"/>
+ <source>Constraint name</source>
+ <translation>Nom de la contrainte</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="245"/>
+ <source>Error message</source>
+ <translation>Message d&apos;erreur</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="289"/>
+ <source>Collation name</source>
+ <translation>Nom de la collation</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="304"/>
+ <source>Any word</source>
+ <translation>N&apos;importe quel mot</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="485"/>
+ <source>Default database</source>
+ <translation>Base de données par défaut</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="486"/>
+ <source>Temporary objects database</source>
+ <translation>Objets temporaires de base de données</translation>
+ </message>
+</context>
+<context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="63"/>
+ <source>Could not add database %1: %2</source>
+ <translation>Impossible d&apos;ajouter une base de données %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="125"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>La base de données %1 ne peut ëtre mise à jour à cause de l&apos;erreur: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="299"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="328"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Le fichier de la base de données n&apos;existe pas.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="301"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="330"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="483"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>Aucun plugin supporté chargé.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="402"/>
+ <source>Database could not be initialized.</source>
+ <translation>La base de données ne peut être initialisée.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="412"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>Aucun pilote de base de données approprié trouvé.</translation>
+ </message>
+</context>
+<context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <location filename="../dbobjectorganizer.cpp" line="412"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>Erreur lors de la creation de la table de la base de données: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <source>Could not parse table.</source>
+ <translation>Impossible d&apos;analyser la table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="426"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation>La base de données %1 ne peut être attachée à la base de données %2, aussi les données de la table %3 seront copiées avec SQLiteStudio comme interpréteur. Cette méthode est lente pour des tables importantes, SVP soyer patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="447"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation>Erreur lors de la copie des données vers la table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="466"/>
+ <location filename="../dbobjectorganizer.cpp" line="473"/>
+ <location filename="../dbobjectorganizer.cpp" line="496"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation>Erreur lors de la copie des données de la table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="535"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation>Erreur à la création de la vue %1: %2
+Tables, index, déclencheurs et vues copiés de la base de données %3 seront maintenus.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="542"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation>Erreur lors de la création de la vue de la base de données:%1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="547"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation>Erreur lors de la création de l&apos;index de la base de données:%1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="552"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation>Erreur lors de la création du déclencheur de la base de données:%1</translation>
+ </message>
+</context>
+<context>
+ <name>DbVersionConverter</name>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="923"/>
+ <source>Target file exists, but could not be overwritten.</source>
+ <translation>Le fichier cible existe, mais ne peut être remplacé.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="942"/>
+ <source>Could not find proper database plugin to create target database.</source>
+ <translation>Impossible de trouver le plugin correct pour créer la base de données cible.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="1176"/>
+ <source>Error while converting database: %1</source>
+ <translation>Erreur lors de la conversion de la base de données: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="65"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>Nom de la base</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="67"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>Fichier de la base</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="69"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>Date d&apos;exécution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="71"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>Modifications</translation>
+ </message>
+</context>
+<context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation>Plugin d&apos;export %1 ne supporte pas l&apos;exportation de la requête.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation>Plugin d&apos;export %1 ne supporte pas l&apos;exportation de la table.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation>Plugin d&apos;export %1 ne supporte pas l&apos;exportation de la base de données.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation>Format d&apos;export %1 n&apos;est pas supporté. Les formats supportés sont: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>Export vers le presse-papier avec succés.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation>Export vers le fichier &apos;%1&apos; avec succès.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>Export avec succès.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation>Impossible d&apos;exporter vers le fichier &apos;%1&apos;. Le fichier ne peut être ouvert en écriture.</translation>
+ </message>
+</context>
+<context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="116"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>Erreur lors de l&apos;exportation des résultats de la requête:%1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="175"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation>Erreur lors de la totalisation des données de colonne issu de la requête: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="275"/>
+ <location filename="../exportworker.cpp" line="326"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation>Impossible d&apos;analyser %1 afin de l&apos;exporter. Celle-ci sera excluse de l&apos;exportation.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="482"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation>Erreur lors de la lecture des données à exporter de la table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="490"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation>Erreur lors du comptage des données à exporter de la table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="506"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation>Erreur lors de la totalisation des données à exporter de la table %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="232"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation>Nombre de paramètres invalide de la fonction%1. Attendu %2, obtenu %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="341"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation>Fonction inconnue avec SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation>La fonction %1(%2) est référencée avec le langage %3, mais le plugin supportant ce langage n&apos;est actuellement pas chargé.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="365"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>Expression invalide: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="417"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>Impossible d&apos;ouvrir en lecture le ficher %1:%2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>Impossible d&apos;ouvrir en écriture le ficher %1:%2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="459"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>Erreur lors de l&apos;écriture du fichier %1:%2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="477"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation>Langage script non supporté: %1</translation>
+ </message>
+</context>
+<context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation>Impossible d&apos;initialiser le paramètre texte por l&apos;export. Utulisation du paramètre par défaut: %1</translation>
+ </message>
+</context>
+<context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="93"/>
+ <source>Imported data to the table &apos;%1&apos; successfully.</source>
+ <translation>Importation des données de la table &apos;%1&apos; réussie.</translation>
+ </message>
+</context>
+<context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation>Aucune colonne fournie par le plugin d&apos;importation.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation>Impossible d&apos;initialiser la transaction d&apos;import de données: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="48"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation>Impossible d&apos;enregistrer la transaction d&apos;import de données: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="93"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation>La table %1 a moins de colonnes que de données à importer. Les colonnes supplèmentaires seront ignorées.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="98"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation>La table %1 a plus de colonnes que de colonnes de données à importer. Certaines colonnes de la table seront vides.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="116"/>
+ <source>Could not create table to import to: %1</source>
+ <translation>Impossible de créer la table d&apos;import: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="152"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Error while importing data: %1</source>
+ <translation>Erreur lors de l&apos;import des données: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>Transaction interrompue.</translation>
+ </message>
+</context>
+<context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="541"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>Chargement impossible du plugin %1 celui-ci est en conflit avec le plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="552"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation>Chargement impossible du plugin %1, les dépendances n&apos;ont pa été chargées: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="561"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation>Chargement impossible du plugin %1, Détails de l&apos;erreur: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="577"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation>Chargement impossible du plugin %1 (erreur à initialisation du plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="730"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>min %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>max %1</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>Constante</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>Valeur constante:</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="15"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>Dictionnaire</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>Fichier du dictionnaire</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>Extrait du dictionnaire</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>Mot séparateur</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>Espace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>Fin de ligne</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>Méthode d&apos;utilisation des mots</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>Trié</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>Aléatoire</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="88"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>Table &apos;%1&apos; remplie avec succès.</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="12"/>
+ <source>Random number</source>
+ <translation>Nombre aléatoire</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>Préfixe constant</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>Aucun préfixe</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>Valeur minimale</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>Valeur maximale</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>Suffixe constant</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>Aucun suffixe</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="12"/>
+ <source>Random text</source>
+ <translation>Text aléatoire</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation>Utilisez des caractères de la table standard:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>Longueur minimun</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation>Caractères de a à z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>Caractère alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>Carctères numériques de 0 à 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>Numérique</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation>Espace, tabulation et retour chariot.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>Espace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation>Inclus ci dessus et tous les autres.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>Binaire</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>Utilisez les catactères de ma table personalisée:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>Longueur maximum</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation>Si vous saisissez plusieurs fois le même caractère, la sécurité est faible.</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="13"/>
+ <source>Script</source>
+ <translation>Script</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation>Code d&apos;initialisation (optionel)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation>Code par étape</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>Langage</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>Aide</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>Séquence</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>Valeur de départ:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>Incrément:</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation>Impossible d&apos;initialiser la transaction pour remplir la table.Détails de l&apos;erreur %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="56"/>
+ <source>Error while populating table: %1</source>
+ <translation>Erreur lors du remplissage de la table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="65"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>Impossible d&apos;enregistrer la transaction après le remplissage de la table. Erreur %1</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../db/abstractdb2.h" line="199"/>
+ <location filename="../db/abstractdb3.h" line="356"/>
+ <source>Could not open database: %1</source>
+ <translation>Impossible d&apos;ouvrir la base de données: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb2.h" line="796"/>
+ <location filename="../db/abstractdb3.h" line="1082"/>
+ <source>Result set expired or no row available.</source>
+ <translation>Terminé ou aucune ligne valide.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="376"/>
+ <source>Could not close database: %1</source>
+ <translation>Impossible de clore la base de bonnées: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="137"/>
+ <location filename="../dbversionconverter.cpp" line="142"/>
+ <location filename="../dbversionconverter.cpp" line="195"/>
+ <location filename="../dbversionconverter.cpp" line="240"/>
+ <location filename="../dbversionconverter.cpp" line="245"/>
+ <location filename="../dbversionconverter.cpp" line="253"/>
+ <location filename="../dbversionconverter.cpp" line="331"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
+ <translation>SQLite %1 ne supporte pas l&apos;instruction &apos;%2&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="201"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
+ <translation>SQLite %1 ne supporte pas l&apos;instruction &apos;%2&apos;, mais la table normale peut être créée à la place si vous confirmez.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="424"/>
+ <source>Could not parse statement: %1
+Error details: %2</source>
+ <translation>Impossible d&apos;analyser l&apos;instruction: %1
+Détails erreur: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="435"/>
+ <location filename="../dbversionconverter.cpp" line="461"/>
+ <location filename="../dbversionconverter.cpp" line="482"/>
+ <location filename="../dbversionconverter.cpp" line="515"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
+ <translation>SQLite %1 ne supporte pas la clause &apos;%2&apos;. Impossible de convertir l&apos;instruction &apos;%3&apos; avec cette clause.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="488"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
+ <translation>SQLite %1 ne supporte pas la clause &apos;%2&apos; de l&apos;instruction &apos;%3&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="756"/>
+ <source>SQLite %1 does not support current date or time clauses in expressions.</source>
+ <translation>SQLite %1 ne supporte pas la clause date ou l&apos;heure actuelle dans l&apos;expression.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="767"/>
+ <location filename="../dbversionconverter.cpp" line="770"/>
+ <location filename="../dbversionconverter.cpp" line="781"/>
+ <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
+ <translation>SQLite %1 ne supporte pas la clause &apos;%2&apos; dans l&apos;expression.</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="109"/>
+ <source>Could not attach database %1: %2</source>
+ <translation>Impossible d&apos;attacher la base de données %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>Requête imcomplète.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="2170"/>
+ <source>Parser stack overflow</source>
+ <translation>Analyse dépassement pile</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="4461"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="5076"/>
+ <source>Syntax error</source>
+ <translation>Erreur de syntaxe </translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="30"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation>Impossible d&apos;ouvrir en lecture le fichier dictionnaire %1.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="91"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation>Le fichier dictionnaire doit exister et être en lecture.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="53"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation>La valeur maximum ne peut être inférieure à la valeur minimum.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="77"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation>Longueur maximum ne peut être inférieure à la longueur minimum.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="88"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation>La table des caractères personalisés ne peut être vide.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="40"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation>Impossible de trouver le plugin supportant le script: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="58"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation>Erreur à l&apos;initialisation du code de remplissage: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="80"/>
+ <source>Error while executing populating code: %1</source>
+ <translation>Erreur à l&apos;exécution du code de remplissage: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="112"/>
+ <source>Select implementation language.</source>
+ <translation>Sélectionnez l&apos;application langage.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="113"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation>L&apos;application de code ne peut être vide.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="307"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation>Impossible de résoudre la source de données pour la colonnes: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="617"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
+ <translation>Impossible d&apos;initialiser le fichier de configuration. Aucune modification et les requêtes seront perdues après redémarrage. Essayez d&apos;initialiser le fichier avec cette localisation: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="288"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>Objectif général</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="289"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>Support base de données</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="290"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Format code</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="291"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Langages script</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="292"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>Export</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="293"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>Import</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="294"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Peuplement de la table</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="107"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>La table %1 référence la table %2, mais la clé étrangère ne pourra être mise à jour pour la nouvelle table à cause de problèmes lors de l&apos;analyse DDL de la table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="379"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>Toutes les colonnes indéxées par l&apos;indexe %1 sont faites. L&apos;indexe ne sera pas recréé après la modification de la table.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="418"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="465"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>Impossible de mettre à jour le déclencheur%1 selon la modification de la table %2.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="433"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>Toutes les colonnes couvertes par le déclencheur %1 sont faites. Le déclencheur ne sera pas recréé après la modification de la table.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="483"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>Impossible de mettre à jour les modifications de la vue %1 issue de la table %2
+La vue restera telque.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <location filename="../tablemodifier.cpp" line="601"/>
+ <location filename="../tablemodifier.cpp" line="619"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation>Il y a un problème à la mise à jour l&apos;instruction %1 avec le déclencheur %2. Une partie de l&apos;instruction SELECT référençant la table %3 ne ppermet pas sa modification. La mise à jour manuelle du déclencheur est nécessaire.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="25"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation>Impossible d&apos;analyser le DDL de création de vue. Détails: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="34"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation>L&apos;expression CREATE VIEW est fausse. C&apos;est: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="82"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation>SQLiteStudio ne peut résoudre les colonnes résultant de la nouvelle vue, d&apos;où le déclencheur en cause ne pourra être indiqué pendant le process.</translation>
+ </message>
+</context>
+<context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="132"/>
+ <source>Execution interrupted.</source>
+ <translation>Exécution interrompue.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="174"/>
+ <source>Database is not open.</source>
+ <translation>La base de données n&apos;est ouverte.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="182"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>Une seule requête peut être exécutée à la fois.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="264"/>
+ <location filename="../db/queryexecutor.cpp" line="538"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>Une erreur s&apos;est produite à l&apos;exécution de la requête count(*), la recherche des données est arrêtée. Erreur de la base de données:%1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="449"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation>SQLiteStudio ne peut extraire des métadonnées d&apos;une requête. Les résultats ne peut être affichés.</translation>
+ </message>
+</context>
+<context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
+ <translation>Aucune base de données validedans le context actuel, plutôtutiliser la commande QtScript %1.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>Erreur de %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="30"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>Base de données</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Date d&apos;exécution</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Temps passé</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Lignes affectées</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+</context>
+<context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="129"/>
+ <source>An error occurred while checking for updates: %1.</source>
+ <translation>Une erreur est apparue lors du contrôle pour la mise à jour:%1.
+</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="142"/>
+ <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
+ <translation>Impossible de vérifier la mise à jour, car le serveur a répondu avec un message invalide. Il est possible d&apos;ignorer le warning.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="173"/>
+ <source>An error occurred while reading updates metadata: %1.</source>
+ <translation>Erreur lors de la lecture de mise des méta données: %1.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="186"/>
+ <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
+ <translation>Impossibles de télécharger les mises à jour, car le serveur répond avec un format de message invalide. Vous pover essayer plus tard ou télécharger et mettre à jour manuellement. Voir &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="193"/>
+ <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
+ <translation>Impossible de créer un répertoire temporaire pour télécharger la mise à jour. Mise à jour abandonnée.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="204"/>
+ <source>There was no updates to download. Updating aborted.</source>
+ <translation>Il n&apos;y a aucune mise à jour à télécharger. Mise à jour abandonnée.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="239"/>
+ <source>Downloading: %1</source>
+ <translation>Téléchargement: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="245"/>
+ <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
+ <translation>Impossible de déterminer le fichier de mise à jour URL: %1.Mise à jour abandonnée.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="253"/>
+ <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
+ <translation>Erreur à l&apos;ouverture du fichier %1 pour l&apos;écriture: %2. Mise à jour abandonnée.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="274"/>
+ <source>Installing updates.</source>
+ <translation>Installation des mises jour.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="285"/>
+ <source>Could not copy current application directory into %1 directory.</source>
+ <translation>Impossible de copier le répertoire de l&apos;application courante dans %1.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="338"/>
+ <source>Could not create directory %1.</source>
+ <translation>Impossible de créer le répertoire: %1.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="346"/>
+ <source>Could not rename directory %1 to %2.
+Details: %3</source>
+ <translation>Impossible de renommer le répertoire %1 en %2. Détails: %3</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="350"/>
+ <source>Cannot not rename directory %1 to %2.
+Details: %3</source>
+ <translation>Impossible de renommer le répertoire %1 en %2.Détails: %3</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="358"/>
+ <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
+ <translation>Impossible de déplacer le répertoire %1 vers %2 d&apos;où l&apos;impossibilité de restaurer le répertoire original. SQLiteStudio est maintenant localisé: %3</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="363"/>
+ <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
+ <translation>Impossible de renommer le répertoire %1 en %2, retour vers la version originale SQLiteStudio.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="442"/>
+ <source>Could not unpack component %1 into %2 directory.</source>
+ <translation>Impossible d&apos;extraire le composant %1 dans le répertoire %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="553"/>
+ <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
+ <translation>Impossible d&apos;élever les autorisations pour lancer la mise à jour en tantque root. Bloqué: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="560"/>
+ <source>Could not execute final updating steps as root: %1</source>
+ <translation>Impossible de finaliser la mis à jour en tant que root: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <location filename="../services/updatemanager.cpp" line="611"/>
+ <location filename="../services/updatemanager.cpp" line="621"/>
+ <source>Could not execute final updating steps as admin: %1</source>
+ <translation>Impossible de finaliser la mis à jour en tant que admin: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <source>Cannot create temporary directory for updater.</source>
+ <translation>Impossible de créer un répertoire temporaire pour la mise à jour.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <source>Cannot create updater script file.</source>
+ <translation>impossible de créer le fichier du scripte de mise à jour.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="631"/>
+ <source>Updating canceled.</source>
+ <translation>Mise à jour suspendue.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="659"/>
+ <source>Could not execute final updating steps as administrator.</source>
+ <translation>Impossible de finaliser la mis à jour en tant qu&apos;administrateur.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="671"/>
+ <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
+ <translation>Impossible de finaliser la mis à jour en tant qu&apos;administrateur. Délai d&apos;attente de lancement dépassé.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="677"/>
+ <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
+ <translation>Impossible de finaliser la mis à jour en tant qu&apos;administrateur. Délai d&apos;attente d&apos;opération dépassé.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="694"/>
+ <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
+ <translation>Impossible de nettoyer le répertoire temporaire %1. Vous pouver le supprimer manuellement plutard.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="730"/>
+ <source>Could not run new version for continuing update.</source>
+ <translation>Impossible de lancer la nouvelle version afin de continuer la mise à jour.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="815"/>
+ <source>Package not in tar.gz format, cannot install: %1</source>
+ <translation>Installation impossible un paquet n&apos;est pas au format tar.zg: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="822"/>
+ <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
+ <translation>Le paquet %1 ne peut être installé, celui-ci ne pouvant déplacé dans le répertoire: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="831"/>
+ <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
+ <translation>Le paquet %1 ne peut être installé, celui-ci ne pouvant décompressé: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="850"/>
+ <source>Package not in zip format, cannot install: %1</source>
+ <translation>Installation impossible, un paquet est manquant: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="857"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
+ <translation>Le paquet %1 ne peut être installé, celui-ci ne pouvant décompressé dans le répertoire %2: %3</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="871"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
+ <translation>Le paquet %1 ne peut être installé, celui-ci ne pouvant décompressé dans le répertoire: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="921"/>
+ <location filename="../services/updatemanager.cpp" line="930"/>
+ <source>Could not rename directory %1 to %2.</source>
+ <translation>Impossible de renommer le répertoire %1 en %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="943"/>
+ <source>Could not delete directory %1.</source>
+ <translation>Impossible de supprimer le répertoire %1.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="959"/>
+ <source>Error executing update command: %1
+Error message: %2</source>
+ <translation>Erreur d&apos;exécution de la commande de mise à jour: %1
+Message d&apos;erreur: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="1026"/>
+ <source>An error occurred while downloading updates: %1. Updating aborted.</source>
+ <translation>Erreur lors du téléchargement de la mise à jour: %1. Mise à jour abandonnée.</translation>
+ </message>
+</context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qm
index 8011cf1..8d09cfa 100644
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qm
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qm
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts
index dc64023..9ca5ff5 100644
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts
@@ -5,12 +5,12 @@
<name>AbstractDb</name>
<message>
<location filename="../db/abstractdb.cpp" line="306"/>
- <location filename="../db/abstractdb.cpp" line="324"/>
+ <location filename="../db/abstractdb.cpp" line="323"/>
<source>Cannot execute query on closed database.</source>
<translation>Nie można wykonać zapytania na zamkniętej bazie danych.</translation>
</message>
<message>
- <location filename="../db/abstractdb.cpp" line="605"/>
+ <location filename="../db/abstractdb.cpp" line="603"/>
<source>Error attaching database %1: %2</source>
<translation>Błąd podczas dołączania bazy danych %1: %2</translation>
</message>
@@ -142,35 +142,35 @@
<context>
<name>DbManagerImpl</name>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="56"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="63"/>
<source>Could not add database %1: %2</source>
<translation>Nie udało się dodać bazę danych %1: %2</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="115"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="125"/>
<source>Database %1 could not be updated, because of an error: %2</source>
<translation>Nie udało się zaktualizować baza danych %1 z powodu błędu: %2</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="284"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="313"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="299"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="328"/>
<source>Database file doesn&apos;t exist.</source>
<translation>Plik bazy danych nie istnieje.</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="286"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="315"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="467"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="301"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="330"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="483"/>
<source>No supporting plugin loaded.</source>
<translation>Nie załadowano obsługującej wtyczki.</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="402"/>
<source>Database could not be initialized.</source>
<translation>Nie udało się zainicjalizować bazy danych.</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="396"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="412"/>
<source>No suitable database driver plugin found.</source>
<translation>Nie znaleziono odpowiedniej wtyczki sterownika.</translation>
</message>
@@ -830,14 +830,14 @@ Szczegóły błędu: %2</translation>
<translation>Niekompletne zapytanie.</translation>
</message>
<message>
- <location filename="../parser/sqlite2_parse.cpp" line="1905"/>
- <location filename="../parser/sqlite3_parse.cpp" line="2171"/>
+ <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="2170"/>
<source>Parser stack overflow</source>
<translation>Przeciążenie stosu analizatora.</translation>
</message>
<message>
- <location filename="../parser/sqlite2_parse.cpp" line="4471"/>
- <location filename="../parser/sqlite3_parse.cpp" line="5086"/>
+ <location filename="../parser/sqlite2_parse.cpp" line="4461"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="5076"/>
<source>Syntax error</source>
<translation>Błąd składni</translation>
</message>
@@ -897,7 +897,7 @@ Szczegóły błędu: %2</translation>
<translation>Nie znaleziono źródła danych dla kolumny: %1</translation>
</message>
<message>
- <location filename="../services/impl/configimpl.cpp" line="590"/>
+ <location filename="../services/impl/configimpl.cpp" line="617"/>
<source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
<translation>Nie udało się zainicjalizować pliku konfiguracyjnego. Jakiekolwiek zmiany w konfiguracji i historia zapytań będą utracone po zrestartowaniu aplikacji. Próbowano zainicjalizować plik konfiguracyjny w następujących lokalizacjach: %1.</translation>
</message>
@@ -944,36 +944,41 @@ Szczegóły błędu: %2</translation>
<translation>Zaludnianie tabel</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="106"/>
+ <location filename="../tablemodifier.cpp" line="107"/>
<source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
<translation>Tabela %1 odwołuje się do tabeli %2, ale definicja klucza obcego nie zostanie zaktualizowane dla definicji nowej tabeli w związku z problemami przy analizowaniu DDL tabeli %3.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="373"/>
+ <location filename="../tablemodifier.cpp" line="379"/>
<source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
<translation>Wszystkie kolumny indeksowane przez indeks %1 już nie istnieją. Indeks ten nie będzie odtworzony po modyfikacji tabeli.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="402"/>
+ <location filename="../tablemodifier.cpp" line="418"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation>Wystąpił problem z poprawnym przetworzeniem wyzwalacza %1. Może on zostać zaktualizowany tylko częściowo i będzie wymagał twojej uwagi.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="465"/>
<source>Cannot not update trigger %1 according to table %2 modification.</source>
<translation>Nie można zaktualizować wyzwalacza %1 zgodnie z modyfikacjami tabeli %2.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="408"/>
+ <location filename="../tablemodifier.cpp" line="433"/>
<source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
<translation>Wszystkie kolumny obsługiwane przez wyzwalacz %1 już nie istnieją. Wyzwalacz ten nie będzie odtworzony po modyfikacji tabeli.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="431"/>
+ <location filename="../tablemodifier.cpp" line="483"/>
<source>Cannot not update view %1 according to table %2 modifications.
The view will remain as it is.</source>
<translation>Nie można zaktualizować widoku %1 w związku z modyfikacjami tabeli %2.
Widok pozostanie nienaruszony.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="528"/>
- <location filename="../tablemodifier.cpp" line="549"/>
- <location filename="../tablemodifier.cpp" line="567"/>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <location filename="../tablemodifier.cpp" line="601"/>
+ <location filename="../tablemodifier.cpp" line="619"/>
<source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
<translation>Jest problem ze zaktualizowaniem zapytania %1 w wyzwalaczu %2. Jedeno z podzapytań SELECT, które może odwoływać się do tabeli %2 nie może być poprawnie zmodyfikowane. Ręczna aktualizacja tego wyzwalacza może być niezbędna.</translation>
</message>
@@ -993,19 +998,19 @@ Widok pozostanie nienaruszony.</translation>
<translation>SQLiteStudio nie było w stanie określić kolumn zwracanych przez nowy widok, w związku z czym nie może określić które wyzwalacze mogą się nie powieść podczas procesu odtwarzania.</translation>
</message>
<message>
- <location filename="../db/abstractdb2.h" line="198"/>
- <location filename="../db/abstractdb3.h" line="355"/>
+ <location filename="../db/abstractdb2.h" line="199"/>
+ <location filename="../db/abstractdb3.h" line="356"/>
<source>Could not open database: %1</source>
<translation>Nie udało się otworzyć bazy danych: %1</translation>
</message>
<message>
- <location filename="../db/abstractdb3.h" line="375"/>
+ <location filename="../db/abstractdb3.h" line="376"/>
<source>Could not close database: %1</source>
<translation>Nie udało się zamknąć bazy danych: %1</translation>
</message>
<message>
- <location filename="../db/abstractdb2.h" line="791"/>
- <location filename="../db/abstractdb3.h" line="1078"/>
+ <location filename="../db/abstractdb2.h" line="796"/>
+ <location filename="../db/abstractdb3.h" line="1082"/>
<source>Result set expired or no row available.</source>
<translation>Wyniki zapytania są nieaktualne, lub nie ma dostępnych wierszy.</translation>
</message>
@@ -1020,28 +1025,28 @@ Widok pozostanie nienaruszony.</translation>
<context>
<name>QueryExecutor</name>
<message>
- <location filename="../db/queryexecutor.cpp" line="130"/>
+ <location filename="../db/queryexecutor.cpp" line="132"/>
<source>Execution interrupted.</source>
<translation>Wykonywanie przerwane.</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="172"/>
+ <location filename="../db/queryexecutor.cpp" line="174"/>
<source>Database is not open.</source>
<translation>Baza danych nie jest otwarta.</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="180"/>
+ <location filename="../db/queryexecutor.cpp" line="182"/>
<source>Only one query can be executed simultaneously.</source>
<translation>Tylko jedno zapytanie może być wykonywane w danym momencie.</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="262"/>
- <location filename="../db/queryexecutor.cpp" line="535"/>
+ <location filename="../db/queryexecutor.cpp" line="264"/>
+ <location filename="../db/queryexecutor.cpp" line="538"/>
<source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
<translation>Wystąpił błąd podczas wykonywania zapytania count(*), przez co stronicowanie danych będzie wyłączone. Szczegóły błędy z bazy danych: %1</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="446"/>
+ <location filename="../db/queryexecutor.cpp" line="449"/>
<source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
<translation>SQLiteStudio nie mogło uzyskać metadanych z zapytania. Nie będzie można edytować wyników zapytania.</translation>
</message>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.qm
new file mode 100644
index 0000000..c02994c
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.qm
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts
new file mode 100644
index 0000000..5c08361
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts
@@ -0,0 +1,1278 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pt_BR">
+<context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="306"/>
+ <location filename="../db/abstractdb.cpp" line="323"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="603"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>BugReporter</name>
+ <message>
+ <location filename="../services/bugreporter.cpp" line="46"/>
+ <source>Invalid login or password</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="35"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="41"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="47"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="74"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="134"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="196"/>
+ <source>New row reference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="203"/>
+ <source>Old row reference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>New table name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="211"/>
+ <source>New index name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="214"/>
+ <source>New view name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="217"/>
+ <source>New trigger name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="220"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="223"/>
+ <source>transaction name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="226"/>
+ <source>New column name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="229"/>
+ <source>Column data type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="232"/>
+ <source>Constraint name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="245"/>
+ <source>Error message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="289"/>
+ <source>Collation name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="304"/>
+ <source>Any word</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="485"/>
+ <source>Default database</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="486"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="63"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="125"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="299"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="328"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="301"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="330"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="483"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="402"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="412"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <location filename="../dbobjectorganizer.cpp" line="412"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="426"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="447"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="466"/>
+ <location filename="../dbobjectorganizer.cpp" line="473"/>
+ <location filename="../dbobjectorganizer.cpp" line="496"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="535"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="542"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="547"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="552"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbVersionConverter</name>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="923"/>
+ <source>Target file exists, but could not be overwritten.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="942"/>
+ <source>Could not find proper database plugin to create target database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="1176"/>
+ <source>Error while converting database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="65"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="67"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="69"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="71"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="116"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="175"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="275"/>
+ <location filename="../exportworker.cpp" line="326"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="482"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="490"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="506"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="232"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="341"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="365"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="417"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="459"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="477"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="93"/>
+ <source>Imported data to the table &apos;%1&apos; successfully.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="48"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="93"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="98"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="116"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="152"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="541"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="552"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="561"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="577"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="730"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="15"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="88"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="12"/>
+ <source>Random number</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="12"/>
+ <source>Random text</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="13"/>
+ <source>Script</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="56"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="65"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../db/abstractdb2.h" line="199"/>
+ <location filename="../db/abstractdb3.h" line="356"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb2.h" line="796"/>
+ <location filename="../db/abstractdb3.h" line="1082"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="376"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="137"/>
+ <location filename="../dbversionconverter.cpp" line="142"/>
+ <location filename="../dbversionconverter.cpp" line="195"/>
+ <location filename="../dbversionconverter.cpp" line="240"/>
+ <location filename="../dbversionconverter.cpp" line="245"/>
+ <location filename="../dbversionconverter.cpp" line="253"/>
+ <location filename="../dbversionconverter.cpp" line="331"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="201"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="424"/>
+ <source>Could not parse statement: %1
+Error details: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="435"/>
+ <location filename="../dbversionconverter.cpp" line="461"/>
+ <location filename="../dbversionconverter.cpp" line="482"/>
+ <location filename="../dbversionconverter.cpp" line="515"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="488"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="756"/>
+ <source>SQLite %1 does not support current date or time clauses in expressions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="767"/>
+ <location filename="../dbversionconverter.cpp" line="770"/>
+ <location filename="../dbversionconverter.cpp" line="781"/>
+ <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="109"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="2170"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="4461"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="5076"/>
+ <source>Syntax error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="30"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="91"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="53"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="77"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="88"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="40"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="58"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="80"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="112"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="113"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="307"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="617"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="288"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="289"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="290"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="291"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="292"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="293"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="294"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="107"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="379"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="418"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="465"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="433"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="483"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <location filename="../tablemodifier.cpp" line="601"/>
+ <location filename="../tablemodifier.cpp" line="619"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="25"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="34"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="82"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="132"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="174"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="182"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="264"/>
+ <location filename="../db/queryexecutor.cpp" line="538"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="449"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="30"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="129"/>
+ <source>An error occurred while checking for updates: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="142"/>
+ <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="173"/>
+ <source>An error occurred while reading updates metadata: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="186"/>
+ <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="193"/>
+ <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="204"/>
+ <source>There was no updates to download. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="239"/>
+ <source>Downloading: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="245"/>
+ <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="253"/>
+ <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="274"/>
+ <source>Installing updates.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="285"/>
+ <source>Could not copy current application directory into %1 directory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="338"/>
+ <source>Could not create directory %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="346"/>
+ <source>Could not rename directory %1 to %2.
+Details: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="350"/>
+ <source>Cannot not rename directory %1 to %2.
+Details: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="358"/>
+ <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="363"/>
+ <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="442"/>
+ <source>Could not unpack component %1 into %2 directory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="553"/>
+ <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="560"/>
+ <source>Could not execute final updating steps as root: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <location filename="../services/updatemanager.cpp" line="611"/>
+ <location filename="../services/updatemanager.cpp" line="621"/>
+ <source>Could not execute final updating steps as admin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <source>Cannot create temporary directory for updater.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <source>Cannot create updater script file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="631"/>
+ <source>Updating canceled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="659"/>
+ <source>Could not execute final updating steps as administrator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="671"/>
+ <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="677"/>
+ <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="694"/>
+ <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="730"/>
+ <source>Could not run new version for continuing update.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="815"/>
+ <source>Package not in tar.gz format, cannot install: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="822"/>
+ <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="831"/>
+ <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="850"/>
+ <source>Package not in zip format, cannot install: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="857"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="871"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="921"/>
+ <location filename="../services/updatemanager.cpp" line="930"/>
+ <source>Could not rename directory %1 to %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="943"/>
+ <source>Could not delete directory %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="959"/>
+ <source>Error executing update command: %1
+Error message: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="1026"/>
+ <source>An error occurred while downloading updates: %1. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.qm
new file mode 100644
index 0000000..0b3d737
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.qm
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts
new file mode 100644
index 0000000..6890ba9
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts
@@ -0,0 +1,1284 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru_RU">
+<context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="306"/>
+ <location filename="../db/abstractdb.cpp" line="323"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Ðевозможно выполнить Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ñ€Ð¸ закрытой базе данных.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="603"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¸ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ñ‹ данных %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>BugReporter</name>
+ <message>
+ <location filename="../services/bugreporter.cpp" line="46"/>
+ <source>Invalid login or password</source>
+ <translation>Ðеправильный логин или пароль</translation>
+ </message>
+</context>
+<context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="35"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>Ðе указана база данных Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="41"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>Ðе открыта база данных Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="47"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Ðевозможно начать транзакцию. ПодробноÑти: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="74"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Прервано</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="134"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Ðевозможно завершить транзакцию. ПодробноÑти: %1</translation>
+ </message>
+</context>
+<context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="196"/>
+ <source>New row reference</source>
+ <translation>ÐÐ¾Ð²Ð°Ñ ÑÑылка на Ñтроку</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="203"/>
+ <source>Old row reference</source>
+ <translation>Ð¡Ñ‚Ð°Ñ€Ð°Ñ ÑÑылка на Ñтроку</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>New table name</source>
+ <translation>Ðовое Ð¸Ð¼Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="211"/>
+ <source>New index name</source>
+ <translation>Ðовое Ð¸Ð¼Ñ Ð¸Ð½Ð´ÐµÐºÑа</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="214"/>
+ <source>New view name</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="217"/>
+ <source>New trigger name</source>
+ <translation>Ðовое Ð¸Ð¼Ñ Ñ‚Ñ€Ð¸Ð³Ð³ÐµÑ€Ð°</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="220"/>
+ <source>Table or column alias</source>
+ <translation>ПÑевдоним таблицы или Ñтолбца</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="223"/>
+ <source>transaction name</source>
+ <translation>Ð¸Ð¼Ñ Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ð¸</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="226"/>
+ <source>New column name</source>
+ <translation>Ðовое Ð¸Ð¼Ñ Ñтолбца</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="229"/>
+ <source>Column data type</source>
+ <translation>Тип данных Ñтолбца</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="232"/>
+ <source>Constraint name</source>
+ <translation>Ð˜Ð¼Ñ Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="245"/>
+ <source>Error message</source>
+ <translation>Сообщение об ошибке</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="289"/>
+ <source>Collation name</source>
+ <translation>Ð˜Ð¼Ñ ÑравнениÑ</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="304"/>
+ <source>Any word</source>
+ <translation>Любое Ñлово</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="485"/>
+ <source>Default database</source>
+ <translation>База данных по умолчанию</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="486"/>
+ <source>Temporary objects database</source>
+ <translation>База данных временных объектов</translation>
+ </message>
+</context>
+<context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="63"/>
+ <source>Could not add database %1: %2</source>
+ <translation>Ðе удалоÑÑŒ добавить базу данных %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="125"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>Ðевозможно обновить базу данных %1 из-за ошибки: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="299"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="328"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Файл базы данных не ÑущеÑтвует.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="301"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="330"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="483"/>
+ <source>No supporting plugin loaded.</source>
+ <translatorcomment>Unclear error string. Checking the source didn&apos;t help.</translatorcomment>
+ <translation>Модуль поддержки не загружен.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="402"/>
+ <source>Database could not be initialized.</source>
+ <translation>Ðевозможно инициализировать базу данных.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="412"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>Ðе найден подходÑщий драйвер базы данных.</translation>
+ </message>
+</context>
+<context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <location filename="../dbobjectorganizer.cpp" line="412"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>Ошибка при Ñоздании таблицы в целевой базе данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <source>Could not parse table.</source>
+ <translation>Ðевозможно проанализировать Ñтруктуру таблицы.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="426"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation>Ðевозможно приÑоединить базу данных %1 к базе данных %2, поÑтому данные таблицы %3 будут Ñкопированы при поÑредничеÑтве SQLiteStudio. Этот метод может быть медленным Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ñ… таблиц, так что наберитеÑÑŒ терпениÑ.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="447"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation>Ошибка при копировании данных из таблицы %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="466"/>
+ <location filename="../dbobjectorganizer.cpp" line="473"/>
+ <location filename="../dbobjectorganizer.cpp" line="496"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation>Ошибка при копировании данных в таблицу %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="535"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation>Ошибка при удалении иÑходного предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ %1: %2
+Таблицы, индекÑÑ‹, триггеры и предÑтавлениÑ, Ñкопированные в базу данных %3, ÑохранÑÑ‚ÑÑ.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="542"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation>Ошибка при Ñоздании предÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² целевой базе данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="547"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation>Ошибка при Ñоздании индекÑа в целевой базе данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="552"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation>Ошибка при Ñоздании триггера в целевой базе данных: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DbVersionConverter</name>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="923"/>
+ <source>Target file exists, but could not be overwritten.</source>
+ <translation>Целевой файл ÑущеÑтвует, но не может быть перезапиÑан.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="942"/>
+ <source>Could not find proper database plugin to create target database.</source>
+ <translation>Ðевозможно найти подходÑщий модуль Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð¹ базы данных.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="1176"/>
+ <source>Error while converting database: %1</source>
+ <translation>Ошибка при конвертации базы данных: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="65"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>Ð˜Ð¼Ñ Ð±Ð°Ð·Ñ‹ данных</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="67"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>Файл базы данных</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="69"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>Дата выполнениÑ</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="71"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>ИзменениÑ</translation>
+ </message>
+</context>
+<context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation>Модуль ÑкÑпорта %1 не поддерживает ÑкÑпорт результатов запроÑа.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation>Модуль ÑкÑпорта %1 не поддерживает ÑкÑпорт таблиц.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation>Модуль ÑкÑпорта %1 не поддерживает ÑкÑпорт баз данных.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation>Формат ÑкÑпорта %1 не поддерживаетÑÑ. Поддерживаемые форматы: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>ЭкÑпорт в буфер обмена уÑпешно выполнен.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation>ЭкÑпорт в файл %1 уÑпешно выполнен.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>ЭкÑпорт уÑпешно выполнен.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation>Ðевозможно выполнить ÑкÑпорт в файл %1. Ðе удалоÑÑŒ открыть файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи.</translation>
+ </message>
+</context>
+<context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="116"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>Ошибка при ÑкÑпорте результатов запроÑа: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="175"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation>Ошибка при подÑчёте ширины Ñтолбца данных Ð´Ð»Ñ ÑкÑпорта результатов запроÑа: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="275"/>
+ <location filename="../exportworker.cpp" line="326"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation>Ðевозможно проанализировать Ñтруктуру %1. Данный объект будет иÑключён при выполнении ÑкÑпорта.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="482"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation>Ошибка при Ñчитывании данных Ð´Ð»Ñ ÑкÑпорта из таблицы %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="490"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation>Ошибка при подÑчёте количеÑтва данных Ð´Ð»Ñ ÑкÑпорта из таблицы %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="506"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation>Ошибка при подÑчёте ширины Ñтолбца данных Ð´Ð»Ñ ÑкÑпорта из таблицы %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="232"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation>Ðеверное количеÑтво аргументов Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ &apos;%1&apos;. Ожидаемое количеÑтво: %2, передано: %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="341"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation>Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ Ð½Ðµ зарегиÑтрирована в SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation>Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ %1(%2) зарегиÑтрирована Ð´Ð»Ñ Ñзыка %3, однако модуль поддержки Ñтого Ñзыка на данный момент не загружен.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="365"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>Ðеверный шаблон регулÑрного выражениÑ: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="417"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>Ðевозможно открыть файл %1 Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>Ðевозможно открыть файл %1 Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="459"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>Ошибка при запиÑи в файл %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="477"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation>Ðеподдерживаемый Ñкриптовый Ñзык: %1</translation>
+ </message>
+</context>
+<context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation>Ðевозможно инициализировать текÑтовый кодек Ð´Ð»Ñ ÑкÑпорта. ИÑпользуетÑÑ ÐºÐ¾Ð´ÐµÐº по умолчанию: %1</translation>
+ </message>
+</context>
+<context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="93"/>
+ <source>Imported data to the table &apos;%1&apos; successfully.</source>
+ <translation>Импорт данных в таблицу &apos;%1&apos; выполнен уÑпешно.</translation>
+ </message>
+</context>
+<context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation>Модуль импорта не обнаружил ни одного Ñтолбца.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation>Ðевозможно начать транзакцию Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð° данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="48"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation>Ðевозможно завершить транзакцию Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="93"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation>Ð’ таблице &apos;%1&apos; Ñтолбцов меньше, чем в импортируемых данных. Лишние Ñтолбцы будут проигнорированы.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="98"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation>Ð’ таблице &apos;%1&apos; Ñтолбцов больше, чем в импортируемых данных. ÐедоÑтающие Ñтолбцы будут оÑтавлены пуÑтыми.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="116"/>
+ <source>Could not create table to import to: %1</source>
+ <translation>Ðевозможно Ñоздать таблицу Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾Ñ€Ñ‚Ð°: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="152"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Error while importing data: %1</source>
+ <translation>Ошибка при импорте данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>Прервано.</translation>
+ </message>
+</context>
+<context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="541"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>Ðевозможно загрузить модуль %1, так как он конфликтует Ñ Ð¼Ð¾Ð´ÑƒÐ»ÐµÐ¼ %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="552"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation>Ðевозможно загрузить модуль %1, так как не загружен необходимый ему модуль: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="561"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation>Ðевозможно загрузить модуль %1. ПодробноÑти ошибки: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="577"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation>Ðевозможно загрузить модуль %1 (ошибка при инициализации модулÑ).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="730"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>минимальнаÑ: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>макÑимальнаÑ: %1</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>КонÑтанта</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>Значение конÑтанты:</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="15"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>Словарь</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>Файл ÑловарÑ</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>Выберите файл ÑловарÑ</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>Разделитель Ñлов</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>Пробел</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>ÐŸÐµÑ€ÐµÐ½Ð¾Ñ Ñтроки</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>СпоÑоб иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñлов</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>По порÑдку</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>Случайным образом</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="88"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>Таблица &apos;%1&apos; уÑпешно заполнена.</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="12"/>
+ <source>Random number</source>
+ <translation>Случайное чиÑло</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>ÐŸÑ€ÐµÑ„Ð¸ÐºÑ ÐºÐ¾Ð½Ñтанты</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>Без префикÑа</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>Минимальное значение</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>МакÑимальное значение</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>Ð¡ÑƒÑ„Ñ„Ð¸ÐºÑ ÐºÐ¾Ð½Ñтанты</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>Без ÑуффикÑа</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="12"/>
+ <source>Random text</source>
+ <translation>Случайный текÑÑ‚</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation>ИÑпользовать Ñимволы из Ñтандартных наборов:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation>Буквы от a до z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>Буквенный</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>Цифры от 0 до 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>Цифровой</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation>Пробел, табулÑÑ†Ð¸Ñ Ð¸ Ñимвол переноÑа Ñтроки.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>Ðепечатаемые Ñимволы</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation>Включает вÑе вышеперечиÑленные и вÑе оÑтальные.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>Бинарный</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>ИÑпользовать Ñимволы из моего набора:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð°</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation>При указании одного Ñимвола неÑколько раз, вероÑтноÑть его иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ð²Ð°ÐµÑ‚ÑÑ.</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="13"/>
+ <source>Script</source>
+ <translation>Скрипт</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation>Инициализирующий код (необÑзательно)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation>Код Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ шага</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>Язык</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>Помощь</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>ПоÑледовательноÑть</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>Ðачальное значение:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>Шаг:</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation>Ðевозможно начать транзакцию Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹. ПодробноÑти ошибки: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="56"/>
+ <source>Error while populating table: %1</source>
+ <translation>Ошибка при заполнении таблицы: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="65"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>Ðевозможно завершить транзакцию поÑле Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ‹. ПодробноÑти ошибки: %1</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../db/abstractdb2.h" line="199"/>
+ <location filename="../db/abstractdb3.h" line="356"/>
+ <source>Could not open database: %1</source>
+ <translation>Ðевозможно открыть базу данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb2.h" line="796"/>
+ <location filename="../db/abstractdb3.h" line="1082"/>
+ <source>Result set expired or no row available.</source>
+ <translation>Ð ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð¸Ñ€ÑƒÑŽÑ‰Ð°Ñ Ð²Ñ‹Ð±Ð¾Ñ€ÐºÐ° уÑтарела или ни одна Ñтрока не доÑтупна.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="376"/>
+ <source>Could not close database: %1</source>
+ <translation>Ðевозможно закрыть базу данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="137"/>
+ <location filename="../dbversionconverter.cpp" line="142"/>
+ <location filename="../dbversionconverter.cpp" line="195"/>
+ <location filename="../dbversionconverter.cpp" line="240"/>
+ <location filename="../dbversionconverter.cpp" line="245"/>
+ <location filename="../dbversionconverter.cpp" line="253"/>
+ <location filename="../dbversionconverter.cpp" line="331"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
+ <translation>SQLite %1 не поддерживает конÑтрукцию &apos;%2&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="201"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
+ <translation>SQLite %1 не поддерживает конÑтрукцию &apos;%2&apos;, однако можно Ñоздать обычную таблицу, еÑли вы продолжите.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="424"/>
+ <source>Could not parse statement: %1
+Error details: %2</source>
+ <translation>Ðевозможно проанализировать Ñтруктуру конÑтрукции: %1 ПодробноÑти ошибки: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="435"/>
+ <location filename="../dbversionconverter.cpp" line="461"/>
+ <location filename="../dbversionconverter.cpp" line="482"/>
+ <location filename="../dbversionconverter.cpp" line="515"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
+ <translation>SQLite %1 не поддерживает оператор &apos;%2&apos;. Ðевозможно Ñконвертировать конÑтрукцию &apos;%3&apos; Ñ Ñтим оператором.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="488"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
+ <translation>SQLite %1 не поддерживает оператор &apos;%2&apos; в конÑтрукции &apos;%3&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="756"/>
+ <source>SQLite %1 does not support current date or time clauses in expressions.</source>
+ <translation>SQLite %1 не поддерживает операторы текущей даты и текущего времени в выражениÑÑ….</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="767"/>
+ <location filename="../dbversionconverter.cpp" line="770"/>
+ <location filename="../dbversionconverter.cpp" line="781"/>
+ <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
+ <translation>SQLite %1 не поддерживает оператор &apos;%2&apos; в выражениÑÑ….</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="109"/>
+ <source>Could not attach database %1: %2</source>
+ <translation>Ðе удалоÑÑŒ приÑоединить базу данных %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>Ðезавершённый запроÑ.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="2170"/>
+ <source>Parser stack overflow</source>
+ <translation>Переполнение Ñтека анализатора</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="4461"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="5076"/>
+ <source>Syntax error</source>
+ <translation>СинтакÑичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="30"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation>Ðевозможно открыть файл ÑÐ»Ð¾Ð²Ð°Ñ€Ñ %1 Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="91"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation>Файл ÑÐ»Ð¾Ð²Ð°Ñ€Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑущеÑтвовать и быть доÑтупным Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="53"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation>МакÑимальное значение не может быть меньше минимального.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="77"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation>МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° не может быть меньше минимальной.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="88"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation>Произвольный набор Ñимволов не может быть пуÑтым.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="40"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation>Ðевозможно найти модуль поддержки Ñкриптового Ñзыка: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="58"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation>Ошибка при выполнении инициализирующего кода заполнениÑ: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="80"/>
+ <source>Error while executing populating code: %1</source>
+ <translation>Ошибка при выполнении кода заполнениÑ: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="112"/>
+ <source>Select implementation language.</source>
+ <translation>Выберите Ñзык реализации.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="113"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation>ЗаполнÑющий код не может быть пуÑтым.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="307"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation>Ðевозможно определить иÑточник данных Ð´Ð»Ñ Ñтолбца: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="617"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
+ <translation>Ðевозможно инициализировать файл конфигурации. Любые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ и иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов будут утерÑны поÑле перезапуÑка приложениÑ. Попытки инициализации файла предпринималиÑÑŒ в Ñледующих меÑтах: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="288"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>Общего назначениÑ</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="289"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>Поддержка баз данных</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="290"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Форматирование кода</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="291"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Скриптовые Ñзыки</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="292"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>ЭкÑпорт</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="293"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>Импорт</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="294"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Заполнение таблиц</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="107"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>Таблица %1 ÑÑылаетÑÑ Ð½Ð° таблицу %2, но опиÑание внешнего ключа не будет обновлено Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ таблицы из-за проблем Ñ Ð°Ð½Ð°Ð»Ð¸Ð·Ð¾Ð¼ DDL таблицы %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="379"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>Ð’Ñе Ñтолбцы, проиндекÑированные индекÑом %1, удалены. Ð˜Ð½Ð´ÐµÐºÑ Ð½Ðµ будет воÑÑоздан поÑле модификации таблицы.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="418"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="465"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>Ðевозможно обновить триггер %1 в ÑоответÑтвии Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸ÐµÐ¹ таблицы %2.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="433"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>Ð’Ñе Ñтолбцы, затронутые в триггере %1, удалены. Триггер не будет воÑÑоздан поÑле модификации таблицы.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="483"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>Ðевозможно обновить предÑтавление %1 в ÑоответÑтвии Ñ Ð¼Ð¾Ð´Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñми таблицы %2.
+ПредÑтавление оÑтанетÑÑ ÐºÐ°Ðº еÑть.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <location filename="../tablemodifier.cpp" line="601"/>
+ <location filename="../tablemodifier.cpp" line="619"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation>Возникла проблема при обновлении конÑтрукции %1 внутри триггера %2. Одна из вложенных конÑтрукций SELECT, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ ÑÑылаетÑÑ Ð½Ð° таблицу %3, не может быть корректно модифицирована. Возможно необходима Ñ€ÑƒÑ‡Ð½Ð°Ñ Ð¿Ñ€Ð°Ð²ÐºÐ° триггера.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="25"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation>Ðевозможно проанализировать DDL Ñоздаваемого предÑтавлениÑ. ПодробноÑти: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="34"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation>Проанализированный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ ÑвлÑетÑÑ Ð·Ð°Ð¿Ñ€Ð¾Ñом CREATE VIEW. Тип запроÑа: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="82"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation>SQLiteStudio не удалоÑÑŒ определить Ñтолбцы, возвращаемые новым предÑтавлением, поÑтому невозможно указать, какие триггеры могут ÑломатьÑÑ Ð² процеÑÑе воÑÑозданиÑ.</translation>
+ </message>
+</context>
+<context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="132"/>
+ <source>Execution interrupted.</source>
+ <translation>Выполнение прервано.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="174"/>
+ <source>Database is not open.</source>
+ <translation>База данных не открыта.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="182"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>Одновременно может быть выполнен только один запроÑ.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="264"/>
+ <location filename="../db/queryexecutor.cpp" line="538"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>Возникла ошибка при выполнении запроÑа count(*), поÑтому разбивка данных по Ñтраницам отключена. Детали ошибки из базы данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="449"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation>SQLiteStudio не удалоÑÑŒ извлечь метаданные из запроÑа. Результаты Ð½ÐµÐ»ÑŒÐ·Ñ Ð±ÑƒÐ´ÐµÑ‚ редактировать.</translation>
+ </message>
+</context>
+<context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
+ <translation>При вызове команды QtScript %1 в текущем контекÑте нет доÑтупных баз данных.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>Ошибка в команде %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="30"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>База данных</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Дата выполнениÑ</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Затраченное времÑ</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Затронуто Ñтрок</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+</context>
+<context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="129"/>
+ <source>An error occurred while checking for updates: %1.</source>
+ <translation>При проверке обновлений возникла ошибка: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="142"/>
+ <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
+ <translation>Ðевозможно проверить наличие обновлений, так как ответ Ñервера имеет некорректный формат. Это предупреждение можно проигнорировать.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="173"/>
+ <source>An error occurred while reading updates metadata: %1.</source>
+ <translation>При чтении метаданных об обновлениÑÑ… возникла ошибка: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="186"/>
+ <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
+ <translation>Ðевозможно загрузить обновлениÑ, так как ответ Ñервера имеет некорректный формат. Ð’Ñ‹ можете попробовать Ñнова позже или Ñкачать и уÑтановить Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ. ПодробноÑти Ñмотрите в &lt;a href=&quot;%1&quot;&gt;РуководÑтве пользователÑ&lt;/a&gt;.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="193"/>
+ <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
+ <translation>Ðевозможно Ñоздать временный каталог Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ обновлениÑ. Обновление прервано.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="204"/>
+ <source>There was no updates to download. Updating aborted.</source>
+ <translation>Ðет обновлений Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸. Обновление прервано.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="239"/>
+ <source>Downloading: %1</source>
+ <translation>Загрузка: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="245"/>
+ <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
+ <translation>Ðевозможно определить Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° из URL обновлениÑ. Обновление прервано.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="253"/>
+ <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
+ <translation>Ðе удалоÑÑŒ открыть файл %1 Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи: %2. Обновление прервано.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="274"/>
+ <source>Installing updates.</source>
+ <translation>УÑтановка обновлений.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="285"/>
+ <source>Could not copy current application directory into %1 directory.</source>
+ <translation>Ðевозможно Ñкопировать текущий каталог Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² каталог %1.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="338"/>
+ <source>Could not create directory %1.</source>
+ <translation>Ðевозможно Ñоздать каталог %1.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="346"/>
+ <source>Could not rename directory %1 to %2.
+Details: %3</source>
+ <translation>Ðевозможно переименовать каталог %1 в %2.
+ПодробноÑти: %3</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="350"/>
+ <source>Cannot not rename directory %1 to %2.
+Details: %3</source>
+ <translation>Ðевозможно переименовать каталог %1 в %2.
+ПодробноÑти: %3</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="358"/>
+ <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
+ <translation>Ðевозможно перемеÑтить каталог %1 в %2, а также не удалоÑÑŒ воÑÑтановить оригинальный каталог, поÑтому оригинальный каталог SQLiteStudio теперь раÑположен в: %3</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="363"/>
+ <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
+ <translation>Ðевозможно переименовать каталог %1 в %2. ВоÑÑтановлена Ð¸Ð·Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ SQLiteStudio.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="442"/>
+ <source>Could not unpack component %1 into %2 directory.</source>
+ <translation>Ðевозможно раÑпаковать компонент %1 в каталог %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="553"/>
+ <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
+ <translation>Ðевозможно найти приложение Ð¿Ð¾Ð²Ñ‹ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð²Ð¸Ð»ÐµÐ³Ð¸Ð¹ Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ root. Были иÑпробованы: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="560"/>
+ <source>Could not execute final updating steps as root: %1</source>
+ <translation>Ðевозможно выполнить финальные шаги Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ root: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <location filename="../services/updatemanager.cpp" line="611"/>
+ <location filename="../services/updatemanager.cpp" line="621"/>
+ <source>Could not execute final updating steps as admin: %1</source>
+ <translation>Ðевозможно выполнить финальные шаги Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ админиÑтратора: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <source>Cannot create temporary directory for updater.</source>
+ <translation>Ðевозможно Ñоздать временный каталог Ð´Ð»Ñ ÑƒÑтановщика обновлений.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <source>Cannot create updater script file.</source>
+ <translation>Ðевозможно Ñоздать файл Ñкрипта обновлениÑ.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="631"/>
+ <source>Updating canceled.</source>
+ <translation>Обновление отменено.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="659"/>
+ <source>Could not execute final updating steps as administrator.</source>
+ <translation>Ðевозможно выполнить финальные шаги Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ админиÑтратора.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="671"/>
+ <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
+ <translation>Ðевозможно выполнить финальные шаги Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ админиÑтратора. Превышен тайм-аут запуÑка программы обновлениÑ.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="677"/>
+ <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
+ <translation>Ðевозможно выполнить финальные шаги Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ админиÑтратора. Превышен тайм-аут операции программы обновлениÑ.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="694"/>
+ <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
+ <translation>Ðевозможно очиÑтить временный каталог %1. Ð’Ñ‹ можете удалить его вручную в любое времÑ.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="730"/>
+ <source>Could not run new version for continuing update.</source>
+ <translation>Ðевозможно запуÑтить новую верÑию Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="815"/>
+ <source>Package not in tar.gz format, cannot install: %1</source>
+ <translation>Пакет не в формате tar.gz, уÑтановка невозможна: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="822"/>
+ <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
+ <translation>Пакет %1 не может быть уÑтановлен, так как невозможно перенеÑти его в каталог: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="831"/>
+ <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
+ <translation>Пакет %1 не может быть уÑтановлен, так как его невозможно раÑпаковать: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="850"/>
+ <source>Package not in zip format, cannot install: %1</source>
+ <translation>Пакет не в формате zip, уÑтановка невозможна: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="857"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
+ <translation>Пакет %1 не может быть уÑтановлен, так как его невозможно раÑпаковать в каталог %2: %3</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="871"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
+ <translation>Пакет %1 не может быть уÑтановлен, так как его невозможно раÑпаковать в каталог: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="921"/>
+ <location filename="../services/updatemanager.cpp" line="930"/>
+ <source>Could not rename directory %1 to %2.</source>
+ <translation>Ðевозможно переименовать каталог %1 в %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="943"/>
+ <source>Could not delete directory %1.</source>
+ <translation>Ðевозможно удалить каталог %1.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="959"/>
+ <source>Error executing update command: %1
+Error message: %2</source>
+ <translation>Ошибка при выполнении команды обновлениÑ: %1
+Сообщение об ошибке: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="1026"/>
+ <source>An error occurred while downloading updates: %1. Updating aborted.</source>
+ <translation>При загрузке обновлений произошла ошибка: %1. Обновление прервано.</translation>
+ </message>
+</context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qm
new file mode 100644
index 0000000..1776294
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qm
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts
new file mode 100644
index 0000000..497b7fe
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts
@@ -0,0 +1,1278 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="sk_SK">
+<context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="306"/>
+ <location filename="../db/abstractdb.cpp" line="323"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="603"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>BugReporter</name>
+ <message>
+ <location filename="../services/bugreporter.cpp" line="46"/>
+ <source>Invalid login or password</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="35"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="41"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="47"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="74"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="134"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="196"/>
+ <source>New row reference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="203"/>
+ <source>Old row reference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>New table name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="211"/>
+ <source>New index name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="214"/>
+ <source>New view name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="217"/>
+ <source>New trigger name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="220"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="223"/>
+ <source>transaction name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="226"/>
+ <source>New column name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="229"/>
+ <source>Column data type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="232"/>
+ <source>Constraint name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="245"/>
+ <source>Error message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="289"/>
+ <source>Collation name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="304"/>
+ <source>Any word</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="485"/>
+ <source>Default database</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="486"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="63"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="125"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="299"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="328"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="301"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="330"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="483"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="402"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="412"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <location filename="../dbobjectorganizer.cpp" line="412"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="426"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="447"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="466"/>
+ <location filename="../dbobjectorganizer.cpp" line="473"/>
+ <location filename="../dbobjectorganizer.cpp" line="496"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="535"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="542"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="547"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="552"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbVersionConverter</name>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="923"/>
+ <source>Target file exists, but could not be overwritten.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="942"/>
+ <source>Could not find proper database plugin to create target database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="1176"/>
+ <source>Error while converting database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="65"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="67"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="69"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="71"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="116"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="175"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="275"/>
+ <location filename="../exportworker.cpp" line="326"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="482"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="490"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="506"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="232"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="341"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="365"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="417"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="459"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="477"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="93"/>
+ <source>Imported data to the table &apos;%1&apos; successfully.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="48"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="93"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="98"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="116"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="152"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="541"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="552"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="561"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="577"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="730"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="15"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="88"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="12"/>
+ <source>Random number</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="12"/>
+ <source>Random text</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="13"/>
+ <source>Script</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="56"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="65"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../db/abstractdb2.h" line="199"/>
+ <location filename="../db/abstractdb3.h" line="356"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb2.h" line="796"/>
+ <location filename="../db/abstractdb3.h" line="1082"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="376"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="137"/>
+ <location filename="../dbversionconverter.cpp" line="142"/>
+ <location filename="../dbversionconverter.cpp" line="195"/>
+ <location filename="../dbversionconverter.cpp" line="240"/>
+ <location filename="../dbversionconverter.cpp" line="245"/>
+ <location filename="../dbversionconverter.cpp" line="253"/>
+ <location filename="../dbversionconverter.cpp" line="331"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="201"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="424"/>
+ <source>Could not parse statement: %1
+Error details: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="435"/>
+ <location filename="../dbversionconverter.cpp" line="461"/>
+ <location filename="../dbversionconverter.cpp" line="482"/>
+ <location filename="../dbversionconverter.cpp" line="515"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="488"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="756"/>
+ <source>SQLite %1 does not support current date or time clauses in expressions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="767"/>
+ <location filename="../dbversionconverter.cpp" line="770"/>
+ <location filename="../dbversionconverter.cpp" line="781"/>
+ <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="109"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="2170"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="4461"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="5076"/>
+ <source>Syntax error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="30"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="91"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="53"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="77"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="88"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="40"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="58"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="80"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="112"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="113"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="307"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="617"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="288"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="289"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="290"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="291"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="292"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="293"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="294"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="107"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="379"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="418"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="465"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="433"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="483"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <location filename="../tablemodifier.cpp" line="601"/>
+ <location filename="../tablemodifier.cpp" line="619"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="25"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="34"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="82"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="132"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="174"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="182"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="264"/>
+ <location filename="../db/queryexecutor.cpp" line="538"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="449"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="30"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="129"/>
+ <source>An error occurred while checking for updates: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="142"/>
+ <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="173"/>
+ <source>An error occurred while reading updates metadata: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="186"/>
+ <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="193"/>
+ <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="204"/>
+ <source>There was no updates to download. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="239"/>
+ <source>Downloading: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="245"/>
+ <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="253"/>
+ <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="274"/>
+ <source>Installing updates.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="285"/>
+ <source>Could not copy current application directory into %1 directory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="338"/>
+ <source>Could not create directory %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="346"/>
+ <source>Could not rename directory %1 to %2.
+Details: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="350"/>
+ <source>Cannot not rename directory %1 to %2.
+Details: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="358"/>
+ <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="363"/>
+ <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="442"/>
+ <source>Could not unpack component %1 into %2 directory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="553"/>
+ <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="560"/>
+ <source>Could not execute final updating steps as root: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <location filename="../services/updatemanager.cpp" line="611"/>
+ <location filename="../services/updatemanager.cpp" line="621"/>
+ <source>Could not execute final updating steps as admin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <source>Cannot create temporary directory for updater.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <source>Cannot create updater script file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="631"/>
+ <source>Updating canceled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="659"/>
+ <source>Could not execute final updating steps as administrator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="671"/>
+ <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="677"/>
+ <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="694"/>
+ <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="730"/>
+ <source>Could not run new version for continuing update.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="815"/>
+ <source>Package not in tar.gz format, cannot install: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="822"/>
+ <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="831"/>
+ <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="850"/>
+ <source>Package not in zip format, cannot install: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="857"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="871"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="921"/>
+ <location filename="../services/updatemanager.cpp" line="930"/>
+ <source>Could not rename directory %1 to %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="943"/>
+ <source>Could not delete directory %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="959"/>
+ <source>Error executing update command: %1
+Error message: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="1026"/>
+ <source>An error occurred while downloading updates: %1. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.qm
new file mode 100644
index 0000000..be651ee
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.qm
@@ -0,0 +1 @@
+<¸dÊÍ!¿`¡½Ý \ No newline at end of file
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts
new file mode 100644
index 0000000..0cfd10d
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts
@@ -0,0 +1,1278 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh_CN">
+<context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="306"/>
+ <location filename="../db/abstractdb.cpp" line="323"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="603"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>BugReporter</name>
+ <message>
+ <location filename="../services/bugreporter.cpp" line="46"/>
+ <source>Invalid login or password</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="35"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="41"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="47"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="74"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="134"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="196"/>
+ <source>New row reference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="203"/>
+ <source>Old row reference</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>New table name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="211"/>
+ <source>New index name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="214"/>
+ <source>New view name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="217"/>
+ <source>New trigger name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="220"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="223"/>
+ <source>transaction name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="226"/>
+ <source>New column name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="229"/>
+ <source>Column data type</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="232"/>
+ <source>Constraint name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="245"/>
+ <source>Error message</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="289"/>
+ <source>Collation name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="304"/>
+ <source>Any word</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="485"/>
+ <source>Default database</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="486"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="63"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="125"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="299"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="328"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="301"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="330"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="483"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="402"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="412"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <location filename="../dbobjectorganizer.cpp" line="412"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="380"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="426"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="447"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="466"/>
+ <location filename="../dbobjectorganizer.cpp" line="473"/>
+ <location filename="../dbobjectorganizer.cpp" line="496"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="535"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="542"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="547"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="552"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DbVersionConverter</name>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="923"/>
+ <source>Target file exists, but could not be overwritten.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="942"/>
+ <source>Could not find proper database plugin to create target database.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="1176"/>
+ <source>Error while converting database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="65"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="67"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="69"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="71"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="116"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="175"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="275"/>
+ <location filename="../exportworker.cpp" line="326"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="482"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="490"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="506"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="232"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="341"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="365"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="417"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="459"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="477"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="93"/>
+ <source>Imported data to the table &apos;%1&apos; successfully.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="48"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="93"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="98"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="116"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="152"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="541"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="552"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="561"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="577"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="730"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="15"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="88"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="12"/>
+ <source>Random number</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="12"/>
+ <source>Random text</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="13"/>
+ <source>Script</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="56"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="65"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../db/abstractdb2.h" line="199"/>
+ <location filename="../db/abstractdb3.h" line="356"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb2.h" line="796"/>
+ <location filename="../db/abstractdb3.h" line="1082"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="376"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="137"/>
+ <location filename="../dbversionconverter.cpp" line="142"/>
+ <location filename="../dbversionconverter.cpp" line="195"/>
+ <location filename="../dbversionconverter.cpp" line="240"/>
+ <location filename="../dbversionconverter.cpp" line="245"/>
+ <location filename="../dbversionconverter.cpp" line="253"/>
+ <location filename="../dbversionconverter.cpp" line="331"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="201"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="424"/>
+ <source>Could not parse statement: %1
+Error details: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="435"/>
+ <location filename="../dbversionconverter.cpp" line="461"/>
+ <location filename="../dbversionconverter.cpp" line="482"/>
+ <location filename="../dbversionconverter.cpp" line="515"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="488"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="756"/>
+ <source>SQLite %1 does not support current date or time clauses in expressions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="767"/>
+ <location filename="../dbversionconverter.cpp" line="770"/>
+ <location filename="../dbversionconverter.cpp" line="781"/>
+ <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="109"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="2170"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="4461"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="5076"/>
+ <source>Syntax error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="30"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="91"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="53"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="77"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="88"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="40"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="58"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="80"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="112"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="113"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="307"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="617"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="288"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="289"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="290"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="291"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="292"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="293"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="294"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="107"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="379"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="418"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="465"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="433"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="483"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <location filename="../tablemodifier.cpp" line="601"/>
+ <location filename="../tablemodifier.cpp" line="619"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="25"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="34"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="82"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="132"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="174"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="182"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="264"/>
+ <location filename="../db/queryexecutor.cpp" line="538"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="449"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="30"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="129"/>
+ <source>An error occurred while checking for updates: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="142"/>
+ <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="173"/>
+ <source>An error occurred while reading updates metadata: %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="186"/>
+ <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="193"/>
+ <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="204"/>
+ <source>There was no updates to download. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="239"/>
+ <source>Downloading: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="245"/>
+ <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="253"/>
+ <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="274"/>
+ <source>Installing updates.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="285"/>
+ <source>Could not copy current application directory into %1 directory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="338"/>
+ <source>Could not create directory %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="346"/>
+ <source>Could not rename directory %1 to %2.
+Details: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="350"/>
+ <source>Cannot not rename directory %1 to %2.
+Details: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="358"/>
+ <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="363"/>
+ <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="442"/>
+ <source>Could not unpack component %1 into %2 directory.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="553"/>
+ <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="560"/>
+ <source>Could not execute final updating steps as root: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <location filename="../services/updatemanager.cpp" line="611"/>
+ <location filename="../services/updatemanager.cpp" line="621"/>
+ <source>Could not execute final updating steps as admin: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <source>Cannot create temporary directory for updater.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <source>Cannot create updater script file.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="631"/>
+ <source>Updating canceled.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="659"/>
+ <source>Could not execute final updating steps as administrator.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="671"/>
+ <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="677"/>
+ <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="694"/>
+ <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="730"/>
+ <source>Could not run new version for continuing update.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="815"/>
+ <source>Package not in tar.gz format, cannot install: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="822"/>
+ <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="831"/>
+ <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="850"/>
+ <source>Package not in zip format, cannot install: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="857"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="871"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="921"/>
+ <location filename="../services/updatemanager.cpp" line="930"/>
+ <source>Could not rename directory %1 to %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="943"/>
+ <source>Could not delete directory %1.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="959"/>
+ <source>Error executing update command: %1
+Error message: %2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="1026"/>
+ <source>An error occurred while downloading updates: %1. Updating aborted.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>