From 9618f0ebbf4b88045247c01ce8c8f58203508ebf Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Tue, 12 May 2015 16:19:40 -0400 Subject: Imported Upstream version 3.0.6 --- SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt | 27 ++++ SQLiteStudio3/coreSQLiteStudio/TODO.txt | 29 +--- .../coreSQLiteStudio/common/utils_sql.cpp | 2 +- SQLiteStudio3/coreSQLiteStudio/csvformat.cpp | 5 + SQLiteStudio3/coreSQLiteStudio/csvformat.h | 3 + SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp | 54 ++++++- SQLiteStudio3/coreSQLiteStudio/datatype.cpp | 4 +- SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h | 3 +- SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h | 4 +- .../coreSQLiteStudio/db/queryexecutor.cpp | 18 ++- SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h | 2 +- .../queryexecutorsteps/queryexecutoraddrowids.cpp | 40 ++++-- .../db/queryexecutorsteps/queryexecutoraddrowids.h | 4 +- .../db/queryexecutorsteps/queryexecutorexecute.cpp | 28 ++++ .../db/queryexecutorsteps/queryexecutorexecute.h | 3 + .../queryexecutorreplaceviews.cpp | 7 +- .../coreSQLiteStudio/db/stdsqlite3driver.h | 1 + SQLiteStudio3/coreSQLiteStudio/importworker.cpp | 2 +- .../coreSQLiteStudio/parser/ast/sqliteexpr.cpp | 2 +- .../coreSQLiteStudio/parser/ast/sqliterollback.cpp | 3 +- SQLiteStudio3/coreSQLiteStudio/selectresolver.cpp | 42 +++--- SQLiteStudio3/coreSQLiteStudio/selectresolver.h | 2 +- .../coreSQLiteStudio/services/impl/configimpl.cpp | 51 +++---- .../coreSQLiteStudio/services/impl/configimpl.h | 2 +- .../services/impl/dbmanagerimpl.cpp | 42 ------ .../services/impl/pluginmanagerimpl.cpp | 4 +- .../coreSQLiteStudio/services/updatemanager.cpp | 14 +- .../coreSQLiteStudio/services/updatemanager.h | 7 +- SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp | 8 +- SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h | 6 + SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp | 9 ++ .../translations/coreSQLiteStudio_de.ts | 156 ++++++++++---------- .../translations/coreSQLiteStudio_es.ts | 156 ++++++++++---------- .../translations/coreSQLiteStudio_fr.ts | 156 ++++++++++---------- .../translations/coreSQLiteStudio_pl.ts | 156 ++++++++++---------- .../translations/coreSQLiteStudio_pt_BR.ts | 156 ++++++++++---------- .../translations/coreSQLiteStudio_ru.ts | 156 ++++++++++---------- .../translations/coreSQLiteStudio_sk.qm | Bin 3538 -> 4601 bytes .../translations/coreSQLiteStudio_sk.ts | 158 ++++++++++----------- .../translations/coreSQLiteStudio_zh_CN.ts | 156 ++++++++++---------- 40 files changed, 902 insertions(+), 776 deletions(-) (limited to 'SQLiteStudio3/coreSQLiteStudio') diff --git a/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt b/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt index 384fd8a..a94955a 100644 --- a/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt +++ b/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt @@ -1,3 +1,30 @@ +[3.0.6] + * [ADDED]: #2740 Option to configure whether bottom dock area (with status field) should extend to left border, or should it leave space for database list. + * [ADDED]: #2819 Introduced "compact layout" as an option (enabled by default) to minimize all margins on the interface. + * [ADDED]: CSS console for SQLiteStudio (under F11 key) to allow customizing all aspects UI look and feel at a low level. + * [ADDED]: #2805 The 'Save SQL' action in SQL editor now uses the same file if repeated, unless user picks 'select file to save' from drop-down menu. + * [ADDED]: #2801 Added option to select where to position the new inserted row - above/below selected row, or at the end of data view. + * [CHANGE]: Database list is by default from top to bottom, making the status field placed next to the database list, instead of being below it. + * [BUGFIX]: Fixed 'rows affected' counter when using transactions and executing everything at once. + * [BUGFIX]: Fixed importing from CSV with empty (NULL) values in last column of last data row. + * [BUGFIX]: #2853 Allow '$' character as a part of an identifier. + * [BUGFIX]: #2846 Fixed crash when executing query on a database after just removed other database from the list. + * [BUGFIX]: #2856 Fixed not working updates manual checking if automatic checking was disabled. + * [BUGFIX]: #2863 Fixed config dialog to honor DbTree presentation options (sorting, labels) immediately, no manual refreshing required. + * [BUGFIX]: #2862 Fixed loading SQL scripts into editor when using Chinese language. + * [BUGFIX]: #2855 Automatic updates are now enabled only for portable build and are disabled by default for other builds. + * [BUGFIX]: #2867 Fixed support for "ISNULL" in query execution. + * [BUGFIX]: Fixed synchronization bug in DbSqlite2 plugin causing random crashes. + * [BUGFIX]: Views are recreated after table modification only if they really need to be updated according to the table change. + * [BUGFIX]: Fixed querying selects with numerous subselects with '*' operators for result columns. + * [BUGFIX]: #2868 Global configuration directory is not created (even empty) when using portable configuration. + * [BUGFIX]: #2866 Fixed Search dialog in SQL editor to honor changes of the searched value during the single session of searching. + * [BUGFIX]: Fixed importing from data source that provides columns with special characters - they are no longer splitted to column name and datatype. + * [BUGFIX]: Fixed problem with keyboard focus for syntax completer under Gnome 3. + * [BUGFIX]: #2872 'Enter' key in table name of import dialog now triggers 'Next' action, not clearing the table name. + * [BUGFIX]: #2864 & #2791 Fixed synchronouse execution in QueryExecutor, which also fixes the misterious bug in export dialog, causing empty files being exported. + * [BUGFIX]: Fixed encoding detection and connection testing for SQLite2. + [3.0.5] * [ADDED]: #2831 Ported 'Erase table data' feature (in table's context menu) from version 2.1.5. * [CHANGE]: Data view has now a 'cover' with progress bar when commiting more changes at once. This eliminates weird GUI freeze when commiting lots of new/deleted rows. diff --git a/SQLiteStudio3/coreSQLiteStudio/TODO.txt b/SQLiteStudio3/coreSQLiteStudio/TODO.txt index d18c16a..e6f699e 100644 --- a/SQLiteStudio3/coreSQLiteStudio/TODO.txt +++ b/SQLiteStudio3/coreSQLiteStudio/TODO.txt @@ -1,21 +1,25 @@ * Outstanding features for 3.1: +- migrate updates engine to Qt Install Framework +- loadable extensions full support - BLOB preview engine based on plugins - ERD plugin - DB compare plugin - Foreign Key value suggestions in GridView -- code templates +- Foreign Key previews in subframes - executing query with bind params -- migrate updates engine to Qt Install Framework +- comments support in formatter * Next versions: - object names (columns, tables, etc) in dialogs should be validated against suffix/prefix whitespaces and if they appear, user should be asked for confirmation - small useful features: generating template queries from context menu for table/view, from data view. +- code templates - commiting DataView should be async - syntax checkers as services - per language - code assistants as services - per language - specialized validation of expressions for DEFAULT constraint. - "recovery" after failed startup - detecting if previous start crashed and if yes, propose cleaning of configuration. - tcl highlighter +- highlighting occurrences of the same object in the query when cursor is on it - plugin to do performance testing - plugins to generate artifacts - qtscript syntax checker @@ -54,24 +58,3 @@ UNIT TESTS: * Advanced syntax error checks: - many idxColumns are not allowed for column FK - autoincrement not allowed for not integer type - - - - - - - - - -Qt mingw: -Not an easy task. I got Perl, Python, Ruby and MinGw/bin in path and -use this line - -configure -opensource -confirm-license -platform win32-g++ -make libs --qt-libjpeg -qt-libpng -no-openssl -no-icu -qt-zlib -qt-pcre --no-iconv -nomake examples -nomake tests -qt-style-windowsxp --qt-style-windowsvista -opengl -desktop - -Qt linux: -./configure -no-icu -nomake examples -nomake tests -no-dbus -opensource -skip webkit -skip quickcontrols -prefix /home/spakowane/qt5.3.1/output diff --git a/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp b/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp index 20ac736..3ace551 100644 --- a/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp @@ -10,7 +10,7 @@ #include #include -QString invalidIdCharacters = "[]()$\"'@*.,+-=/%&|:; \t\n<>"; +QString invalidIdCharacters = "[]()\"'@*.,+-=/%&|:; \t\n<>"; QHash > wrapperChars; QList sqlite3Wrappers; QList sqlite2Wrappers; diff --git a/SQLiteStudio3/coreSQLiteStudio/csvformat.cpp b/SQLiteStudio3/coreSQLiteStudio/csvformat.cpp index 2876b88..f5daa60 100644 --- a/SQLiteStudio3/coreSQLiteStudio/csvformat.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/csvformat.cpp @@ -11,3 +11,8 @@ CsvFormat::CsvFormat(const QString& columnSeparator, const QString& rowSeparator columnSeparator(columnSeparator), rowSeparator(rowSeparator) { } + +CsvFormat::CsvFormat(const QString& columnSeparator, const QString& rowSeparator, bool strictRowSeparator, bool strictColumnSeparator) : + columnSeparator(columnSeparator), rowSeparator(rowSeparator), strictColumnSeparator(strictColumnSeparator), strictRowSeparator(strictRowSeparator) +{ +} diff --git a/SQLiteStudio3/coreSQLiteStudio/csvformat.h b/SQLiteStudio3/coreSQLiteStudio/csvformat.h index c569147..5ce00ad 100644 --- a/SQLiteStudio3/coreSQLiteStudio/csvformat.h +++ b/SQLiteStudio3/coreSQLiteStudio/csvformat.h @@ -8,9 +8,12 @@ struct API_EXPORT CsvFormat { CsvFormat(); CsvFormat(const QString& columnSeparator, const QString& rowSeparator); + CsvFormat(const QString& columnSeparator, const QString& rowSeparator, bool strictRowSeparator, bool strictColumnSeparator); QString columnSeparator; QString rowSeparator; + bool strictColumnSeparator = false; + bool strictRowSeparator = false; static const CsvFormat DEFAULT; }; diff --git a/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp b/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp index 7d7d20b..c89074f 100644 --- a/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp @@ -35,6 +35,38 @@ QString CsvSerializer::serialize(const QStringList& data, const CsvFormat& forma return outputCells.join(format.columnSeparator); } +template +bool isCsvColumnSeparator(const T& data, int pos, const CsvFormat& format) +{ + if (!format.strictColumnSeparator && format.columnSeparator.contains(data[pos])) + return true; + + for (const QChar& c : format.columnSeparator) + { + if (c != data[pos++]) + return false; + } + + return true; +} + +template +bool isCsvRowSeparator(const T& data, int& pos, const CsvFormat& format) +{ + if (!format.strictRowSeparator && format.rowSeparator.contains(data[pos])) + return true; + + int localPos = pos; + for (const QChar& c : format.rowSeparator) + { + if (localPos >= data.size() || c != data[localPos++]) + return false; + } + + pos = localPos - 1; + return true; +} + template QList> typedDeserialize(const T& data, const CsvFormat& format) { @@ -58,23 +90,33 @@ QList> typedDeserialize(const T& data, const CsvFormat& format) } else if (quotes && c == '"' ) { - if (pos + 1 < data.length() && data[pos+1] == '"' ) + if (pos + 1 < data.length()) { - field += c; - pos++; + if (data[pos+1] == '"' ) + { + field += c; + pos++; + } + else + { + quotes = false; + } } else { - quotes = false; + if (field.length() == 0) + cells << field; + + quotes = false; } } - else if (!quotes && format.columnSeparator.contains(c)) + else if (!quotes && isCsvColumnSeparator(data, pos, format)) { cells << field; field.clear(); sepAsLast = true; } - else if (!quotes && format.rowSeparator.contains(c)) + else if (!quotes && isCsvRowSeparator(data, pos, format)) { cells << field; rows << cells; diff --git a/SQLiteStudio3/coreSQLiteStudio/datatype.cpp b/SQLiteStudio3/coreSQLiteStudio/datatype.cpp index 613e6dc..d90a6b0 100644 --- a/SQLiteStudio3/coreSQLiteStudio/datatype.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/datatype.cpp @@ -2,7 +2,7 @@ #include #include -QList DataType::values = [=]() -> QList +QList DataType::values = []() -> QList { QList list; QMetaEnum metaEnum = DataType::staticMetaObject.enumerator(0); @@ -19,7 +19,7 @@ QList DataType::values = [=]() -> QList return list; }(); -const QStringList DataType::names = [=]() -> QStringList +const QStringList DataType::names = []() -> QStringList { QStringList list; QMetaEnum metaEnum = DataType::staticMetaObject.enumerator(0); diff --git a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h index 0620a7d..5b95f61 100644 --- a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h +++ b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h @@ -109,7 +109,6 @@ class AbstractDb2 : public AbstractDb int colCount = -1; QStringList colNames; QList nextRowValues; - int affected = 0; bool rowAvailable = false; }; @@ -725,6 +724,8 @@ SqlResultsRowPtr AbstractDb2::Query::nextInternal() if (!rowAvailable || db.isNull()) return SqlResultsRowPtr(); + ReadWriteLocker locker(&(db->dbOperLock), query, Dialect::Sqlite2, flags.testFlag(Db::Flag::NO_LOCK)); + Row* row = new Row; row->init(colNames, nextRowValues); diff --git a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h index fe37d5e..e7b0a4b 100644 --- a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h +++ b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h @@ -107,7 +107,6 @@ class AbstractDb3 : public AbstractDb QString errorMessage; int colCount = 0; QStringList colNames; - int affected = 0; bool rowAvailable = false; }; @@ -1076,13 +1075,14 @@ int AbstractDb3::Query::fetchFirst() for (int i = 0; i < colCount; i++) colNames << QString::fromUtf8(T::column_name(stmt, i)); + int changesBefore = T::total_changes(db->dbHandle); rowAvailable = true; int res = fetchNext(); affected = 0; if (res == T::OK) { - affected = T::changes(db->dbHandle); + affected = T::total_changes(db->dbHandle) - changesBefore; insertRowId["ROWID"] = T::last_insert_rowid(db->dbHandle); } diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp index 9fc49df..b790ffa 100644 --- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp @@ -40,7 +40,8 @@ QueryExecutor::QueryExecutor(Db* db, const QString& query, QObject *parent) : setAutoDelete(false); connect(this, SIGNAL(executionFailed(int,QString)), this, SLOT(cleanupAfterExecFailed(int,QString))); - connect(DBLIST, SIGNAL(dbAboutToBeUnloaded(Db*, DbPlugin*)), this, SLOT(cleanupBeforeDbDestroy(Db*, DbPlugin*))); + connect(DBLIST, SIGNAL(dbAboutToBeUnloaded(Db*, DbPlugin*)), this, SLOT(cleanupBeforeDbDestroy(Db*))); + connect(DBLIST, SIGNAL(dbRemoved(Db*)), this, SLOT(cleanupBeforeDbDestroy(Db*))); } QueryExecutor::~QueryExecutor() @@ -146,9 +147,8 @@ void QueryExecutor::cleanupAfterExecFailed(int code, QString errorMessage) cleanup(); } -void QueryExecutor::cleanupBeforeDbDestroy(Db* dbToBeUnloaded, DbPlugin* plugin) +void QueryExecutor::cleanupBeforeDbDestroy(Db* dbToBeUnloaded) { - UNUSED(plugin); if (!dbToBeUnloaded || dbToBeUnloaded != db) return; @@ -404,7 +404,16 @@ void QueryExecutor::executeSimpleMethod() simpleExecution = true; context->editionForbiddenReasons << EditionForbiddenReason::SMART_EXECUTION_FAILED; simpleExecutionStartTime = QDateTime::currentMSecsSinceEpoch(); - asyncId = db->asyncExec(originalQuery, context->queryParameters, Db::Flag::PRELOAD); + + if (asyncMode) + { + asyncId = db->asyncExec(originalQuery, context->queryParameters, Db::Flag::PRELOAD); + } + else + { + SqlQueryPtr results = db->exec(originalQuery, context->queryParameters, Db::Flag::PRELOAD); + simpleExecutionFinished(results); + } } void QueryExecutor::simpleExecutionFinished(SqlQueryPtr results) @@ -435,6 +444,7 @@ void QueryExecutor::simpleExecutionFinished(SqlQueryPtr results) context->executionTime = QDateTime::currentMSecsSinceEpoch() - simpleExecutionStartTime; context->rowsAffected = results->rowsAffected(); context->totalRowsReturned = 0; + context->executionResults = results; requiredDbAttaches = context->dbNameToAttach.leftValues(); executionMutex.lock(); diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h index c6d7701..83d0436 100644 --- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h +++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h @@ -1407,7 +1407,7 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable * from deleted Db. Keeping results is dangerous, becuase the Db driver (plugin) is most likely to * be unloaded soon and we won't be able to call results destructor. */ - void cleanupBeforeDbDestroy(Db* dbToBeUnloaded, DbPlugin* plugin); + void cleanupBeforeDbDestroy(Db* dbToBeUnloaded); }; int qHash(QueryExecutor::EditionForbiddenReason reason); diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp index 9307d13..ea42baf 100644 --- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp @@ -59,6 +59,16 @@ QHash> QueryExecutorAddRowIds::addR return rowIdColsMap; } + bool hasStar = false; + for (SqliteSelect::Core::ResultColumn* resCol : core->resultColumns) + { + if (resCol->star) + { + hasStar = true; + break; + } + } + // Getting all tables we need to get ROWID for SelectResolver resolver(db, select->tokens.detokenize(), context->dbNameToAttach); resolver.resolveMultiCore = false; // multicore subselects result in not editable columns, skip them @@ -69,7 +79,7 @@ QHash> QueryExecutorAddRowIds::addR if (table.flags & (SelectResolver::FROM_COMPOUND_SELECT | SelectResolver::FROM_DISTINCT_SELECT | SelectResolver::FROM_GROUPED_SELECT)) continue; // we don't get ROWID from compound, distinct or aggregated subselects - if (!addResultColumns(core, table, rowIdColsMap, isTopSelect)) + if (!addResultColumns(core, table, rowIdColsMap, isTopSelect, hasStar)) { ok = false; return rowIdColsMap; @@ -146,12 +156,14 @@ QHash QueryExecutorAddRowIds::getNextColNames(const SelectResol } bool QueryExecutorAddRowIds::addResultColumns(SqliteSelect::Core* core, const SelectResolver::Table& table, - QHash>& rowIdColsMap, bool isTopSelect) + QHash>& rowIdColsMap, bool isTopSelect, bool hasStar) { QHash executorToRealColumns; + bool aliasOnlyAsSelectColumn = false; if (rowIdColsMap.contains(table)) { executorToRealColumns = rowIdColsMap[table]; // we already have resCol names from subselect + aliasOnlyAsSelectColumn = true; } else { @@ -169,7 +181,7 @@ bool QueryExecutorAddRowIds::addResultColumns(SqliteSelect::Core* core, const Se while (it.hasNext()) { it.next(); - if (!addResultColumns(core, table, it.key(), it.value())) + if (!addResultColumns(core, table, it.key(), it.value(), aliasOnlyAsSelectColumn)) return false; } @@ -189,7 +201,7 @@ bool QueryExecutorAddRowIds::addResultColumns(SqliteSelect::Core* core, const Se } bool QueryExecutorAddRowIds::addResultColumns(SqliteSelect::Core* core, const SelectResolver::Table& table, const QString& queryExecutorColumn, - const QString& realColumn) + const QString& realColumn, bool aliasOnlyAsSelectColumn) { SqliteSelect::Core::ResultColumn* resCol = new SqliteSelect::Core::ResultColumn(); resCol->setParent(core); @@ -197,17 +209,25 @@ bool QueryExecutorAddRowIds::addResultColumns(SqliteSelect::Core* core, const Se resCol->expr = new SqliteExpr(); resCol->expr->setParent(resCol); - resCol->expr->initId(realColumn); - if (!table.alias.isNull()) + if (aliasOnlyAsSelectColumn) { - resCol->expr->table = table.alias; + // We are re-querying this column from subselect, we already have it as an alias + resCol->expr->initId(queryExecutorColumn); } else { - if (!table.database.isNull()) - resCol->expr->database = table.database; + resCol->expr->initId(realColumn); + if (!table.alias.isNull()) + { + resCol->expr->table = table.alias; + } + else + { + if (!table.database.isNull()) + resCol->expr->database = table.database; - resCol->expr->table = table.table; + resCol->expr->table = table.table; + } } resCol->asKw = true; resCol->alias = queryExecutorColumn; diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.h index a5431fa..fa2167f 100644 --- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.h +++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.h @@ -31,7 +31,7 @@ class QueryExecutorAddRowIds : public QueryExecutorStep * Finds columns representing ROWID for the \p table and adds them to result columns and to the context. */ bool addResultColumns(SqliteSelect::Core* core, const SelectResolver::Table& table, - QHash >& rowIdColsMap, bool isTopSelect); + QHash >& rowIdColsMap, bool isTopSelect, bool hasStar); /** * @brief Adds the column to result columns list. @@ -44,7 +44,7 @@ class QueryExecutorAddRowIds : public QueryExecutorStep * Adds given column to the result column list in the SELECT statement. */ bool addResultColumns(SqliteSelect::Core* core, const SelectResolver::Table& table, const QString& queryExecutorColumn, - const QString& realColumn); + const QString& realColumn, bool aliasOnlyAsSelectColumn); /** * @brief Adds all necessary ROWID columns to result columns. diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.cpp index df2ed68..a954da7 100644 --- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.cpp @@ -7,6 +7,7 @@ #include "datatype.h" #include #include +#include #include #include @@ -34,6 +35,7 @@ bool QueryExecutorExecute::executeQueries() QHash bindParamsForQuery; SqlQueryPtr results; context->rowsAffected = 0; + QStack rowsAffectedBeforeTransaction; Db::Flags flags; if (context->preloadResults) @@ -51,6 +53,9 @@ bool QueryExecutorExecute::executeQueries() if (queryCount == 0) // last query? setupSqlite2ColumnDataTypes(results); + if (isBeginTransaction(query->queryType)) + rowsAffectedBeforeTransaction.push(context->rowsAffected); + results->execute(); if (results->isError()) @@ -60,6 +65,14 @@ bool QueryExecutorExecute::executeQueries() } context->rowsAffected += results->rowsAffected(); + + if (rowsAffectedBeforeTransaction.size() > 0) + { + if (isCommitTransaction(query->queryType)) + rowsAffectedBeforeTransaction.pop(); + else if (isRollbackTransaction(query->queryType)) + context->rowsAffected = rowsAffectedBeforeTransaction.pop(); + } } handleSuccessfulResult(results); return true; @@ -152,3 +165,18 @@ void QueryExecutorExecute::setupSqlite2ColumnDataTypes(SqlQueryPtr results) sqlite2Helper->setBinaryType(idx); } } + +bool QueryExecutorExecute::isBeginTransaction(SqliteQueryType queryType) +{ + return (queryType == SqliteQueryType::BeginTrans || queryType == SqliteQueryType::Savepoint); +} + +bool QueryExecutorExecute::isCommitTransaction(SqliteQueryType queryType) +{ + return (queryType == SqliteQueryType::CommitTrans || queryType == SqliteQueryType::Release); +} + +bool QueryExecutorExecute::isRollbackTransaction(SqliteQueryType queryType) +{ + return queryType == SqliteQueryType::Rollback; +} diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.h index a88bf56..ea6fed2 100644 --- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.h +++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.h @@ -80,6 +80,9 @@ class QueryExecutorExecute : public QueryExecutorStep qint64 startTime; void setupSqlite2ColumnDataTypes(SqlQueryPtr results); + bool isBeginTransaction(SqliteQueryType queryType); + bool isCommitTransaction(SqliteQueryType queryType); + bool isRollbackTransaction(SqliteQueryType queryType); }; #endif // QUERYEXECUTOREXECUTE_H diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.cpp index 94300a0..1f2e736 100644 --- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.cpp @@ -25,6 +25,7 @@ bool QueryExecutorReplaceViews::exec() return true; replaceViews(select.data()); + select->rebuildTokens(); updateQueries(); return true; @@ -72,7 +73,7 @@ void QueryExecutorReplaceViews::replaceViews(SqliteSelect* select) SqliteCreateViewPtr view; QList sources = core->getAllTypedStatements(); - foreach (SqliteSelect::Core::SingleSource* src, sources) + for (SqliteSelect::Core::SingleSource* src : sources) { if (src->table.isNull()) continue; @@ -92,9 +93,9 @@ void QueryExecutorReplaceViews::replaceViews(SqliteSelect* select) src->select = view->select; src->database = QString::null; src->table = QString::null; - } - select->rebuildTokens(); + replaceViews(src->select); + } } uint qHash(const QueryExecutorReplaceViews::View& view) diff --git a/SQLiteStudio3/coreSQLiteStudio/db/stdsqlite3driver.h b/SQLiteStudio3/coreSQLiteStudio/db/stdsqlite3driver.h index 2f26aaf..6b0c422 100644 --- a/SQLiteStudio3/coreSQLiteStudio/db/stdsqlite3driver.h +++ b/SQLiteStudio3/coreSQLiteStudio/db/stdsqlite3driver.h @@ -64,6 +64,7 @@ static int column_type(stmt* arg1, int arg2) {return Prefix##sqlite3_column_type(arg1, arg2);} \ static int column_count(stmt* arg1) {return Prefix##sqlite3_column_count(arg1);} \ static int changes(handle* arg) {return Prefix##sqlite3_changes(arg);} \ + static int total_changes(handle* arg) {return Prefix##sqlite3_total_changes(arg);} \ static int last_insert_rowid(handle* arg) {return Prefix##sqlite3_last_insert_rowid(arg);} \ static int step(stmt* arg) {return Prefix##sqlite3_step(arg);} \ static int reset(stmt* arg) {return Prefix##sqlite3_reset(arg);} \ diff --git a/SQLiteStudio3/coreSQLiteStudio/importworker.cpp b/SQLiteStudio3/coreSQLiteStudio/importworker.cpp index cf62a98..b8d5a5a 100644 --- a/SQLiteStudio3/coreSQLiteStudio/importworker.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/importworker.cpp @@ -108,7 +108,7 @@ bool ImportWorker::prepareTable() { QStringList colDefs; for (int i = 0; i < columnsFromPlugin.size(); i++) - colDefs << (columnsFromPlugin[i] + " " + columnTypesFromPlugin[i]).trimmed(); + colDefs << (wrapObjIfNeeded(columnsFromPlugin[i], dialect) + " " + columnTypesFromPlugin[i]).trimmed(); static const QString ddl = QStringLiteral("CREATE TABLE %1 (%2)"); SqlQueryPtr result = db->exec(ddl.arg(wrapObjIfNeeded(table, dialect), colDefs.join(", "))); diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp index 12adf80..b84a818 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp @@ -481,7 +481,7 @@ TokenList SqliteExpr::rebuildTokensFromContents() builder.withKeyword("NULL"); break; case SqliteExpr::Mode::NOTNULL: - builder.withTokens(rebuildNotNull()); + builder.withStatement(expr1).withSpace().withTokens(rebuildNotNull()); break; case SqliteExpr::Mode::IS: builder.withTokens(rebuildIs()); diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliterollback.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliterollback.cpp index 01284b4..b21b6ae 100644 --- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliterollback.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliterollback.cpp @@ -20,7 +20,8 @@ SqliteRollback::SqliteRollback(bool transactionKw, const QString& name) this->transactionKw = transactionKw; } -SqliteRollback::SqliteRollback(bool transactionKw, bool savePoint, const QString& name) +SqliteRollback::SqliteRollback(bool transactionKw, bool savePoint, const QString& name) : + SqliteRollback() { // we ignore name from trans_opt, // it's not officialy supported in sqlite3 diff --git a/SQLiteStudio3/coreSQLiteStudio/selectresolver.cpp b/SQLiteStudio3/coreSQLiteStudio/selectresolver.cpp index 9e425a2..8107b94 100644 --- a/SQLiteStudio3/coreSQLiteStudio/selectresolver.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/selectresolver.cpp @@ -38,7 +38,7 @@ QList > SelectResolver::resolve(SqliteSelect *sele { errors.clear(); QList > results; - foreach (SqliteSelect::Core* core, select->coreSelects) + for (SqliteSelect::Core* core : select->coreSelects) { results << resolveCore(core); currentCoreResults.clear(); @@ -57,7 +57,7 @@ QList > SelectResolver::resolveAvailableColumns(Sq { errors.clear(); QList > results; - foreach (SqliteSelect::Core* core, select->coreSelects) + for (SqliteSelect::Core* core : select->coreSelects) results << resolveAvailableCoreColumns(core); return results; @@ -67,8 +67,13 @@ QSet SelectResolver::resolveTables(SqliteSelect::Core *se { QSet tables; QList columns = resolveAvailableColumns(selectCore); - foreach (Column col, columns) + for (const Column& col : columns) + { + if (col.type != Column::Type::COLUMN) + continue; + tables << col.getTable(); + } return tables; } @@ -77,11 +82,16 @@ QList > SelectResolver::resolveTables(SqliteSelect * { QList > results; QList > columnLists = resolveAvailableColumns(select); - foreach (QList columns, columnLists) + for (const QList& columns : columnLists) { QSet
tables; - foreach (Column col, columns) + for (const Column& col : columns) + { + if (col.type != Column::Type::COLUMN) + continue; + tables << col.getTable(); + } results << tables; } @@ -93,7 +103,7 @@ QList SelectResolver::translateToColumns(SqliteSelect* s { errors.clear(); QList results; - foreach (TokenPtr token, columnTokens) + for (const TokenPtr& token : columnTokens) results << translateTokenToColumn(select, token); return results; @@ -120,7 +130,7 @@ QList SelectResolver::resolveCore(SqliteSelect::Core* se if (selectCore->from) currentCoreSourceColumns = resolveJoinSource(selectCore->from); - foreach (SqliteSelect::Core::ResultColumn* resCol, selectCore->resultColumns) + for (SqliteSelect::Core::ResultColumn* resCol : selectCore->resultColumns) resolve(resCol); if (selectCore->distinctKw) @@ -188,7 +198,7 @@ SelectResolver::Column SelectResolver::translateTokenToColumn(SqliteSelect* sele } // Search through available columns - foreach (const Column& availableColumn, resolveAvailableColumns(core)) + for (const Column& availableColumn : resolveAvailableColumns(core)) { if (availableColumn.type == Column::COLUMN && availableColumn.column.compare(token->value, Qt::CaseInsensitive) == 0) return availableColumn; @@ -256,7 +266,7 @@ void SelectResolver::resolve(SqliteSelect::Core::ResultColumn *resCol) void SelectResolver::resolveStar(SqliteSelect::Core::ResultColumn *resCol) { bool foundAtLeastOne = false; - foreach (SelectResolver::Column column, currentCoreSourceColumns) + for (SelectResolver::Column column : currentCoreSourceColumns) { if (!resCol->table.isNull()) { @@ -379,7 +389,7 @@ void SelectResolver::resolveDbAndTable(SqliteSelect::Core::ResultColumn *resCol) SelectResolver::Column SelectResolver::resolveRowIdColumn(SqliteExpr *expr) { // Looking for first source that can provide ROWID. - foreach (Column column, currentCoreSourceColumns) + for (const Column& column : currentCoreSourceColumns) { if (column.table.isNull()) continue; // ROWID cannot be related to source with no table @@ -392,7 +402,7 @@ SelectResolver::Column SelectResolver::resolveRowIdColumn(SqliteExpr *expr) SelectResolver::Column SelectResolver::resolveExplicitColumn(const QString &columnName) { - foreach (const Column& column, currentCoreSourceColumns) + for (const Column& column : currentCoreSourceColumns) { if (columnName.compare(column.column, Qt::CaseInsensitive) != 0 && columnName.compare(column.alias, Qt::CaseInsensitive) != 0) continue; @@ -404,7 +414,7 @@ SelectResolver::Column SelectResolver::resolveExplicitColumn(const QString &colu SelectResolver::Column SelectResolver::resolveExplicitColumn(const QString &table, const QString &columnName) { - foreach (const Column& column, currentCoreSourceColumns) + for (const Column& column : currentCoreSourceColumns) { if (columnName.compare(column.column, Qt::CaseInsensitive) != 0 && columnName.compare(column.alias, Qt::CaseInsensitive) != 0) continue; @@ -419,7 +429,7 @@ SelectResolver::Column SelectResolver::resolveExplicitColumn(const QString &tabl SelectResolver::Column SelectResolver::resolveExplicitColumn(const QString &database, const QString &table, const QString &columnName) { - foreach (const Column& column, currentCoreSourceColumns) + for (const Column& column : currentCoreSourceColumns) { if (columnName.compare(column.column, Qt::CaseInsensitive) != 0 && columnName.compare(column.alias, Qt::CaseInsensitive) != 0) continue; @@ -481,7 +491,7 @@ QList SelectResolver::resolveJoinSource(SqliteSelect::Co { QList columnSources; columnSources += resolveSingleSource(joinSrc->singleSource); - foreach (SqliteSelect::Core::JoinSourceOther* otherSrc, joinSrc->otherSources) + for (SqliteSelect::Core::JoinSourceOther* otherSrc : joinSrc->otherSources) columnSources += resolveOtherSource(otherSrc); return columnSources; @@ -504,7 +514,7 @@ QList SelectResolver::resolveSingleSource(SqliteSelect:: QList columnSources; QStringList columns = getTableColumns(joinSrc->database, joinSrc->table, joinSrc->alias); Column column; - foreach (QString columnName, columns) + for (const QString& columnName : columns) { column.type = Column::COLUMN; column.column = columnName; @@ -650,7 +660,7 @@ int SelectResolver::Column::operator ==(const SelectResolver::Column &other) return table == other.table && database == other.database && column == other.column && tableAlias == other.tableAlias; } -SelectResolver::Table SelectResolver::Column::getTable() +SelectResolver::Table SelectResolver::Column::getTable() const { Table resTable; resTable.table = table; diff --git a/SQLiteStudio3/coreSQLiteStudio/selectresolver.h b/SQLiteStudio3/coreSQLiteStudio/selectresolver.h index c634c5c..4213d73 100644 --- a/SQLiteStudio3/coreSQLiteStudio/selectresolver.h +++ b/SQLiteStudio3/coreSQLiteStudio/selectresolver.h @@ -113,7 +113,7 @@ class API_EXPORT SelectResolver SqliteSelect::Core::ResultColumn* originalColumn = nullptr; int operator==(const Column& other); - Table getTable(); + Table getTable() const; }; SelectResolver(Db* db, const QString &originalQuery); diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp index 046993f..5aed863 100644 --- a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp @@ -560,47 +560,38 @@ void ConfigImpl::initDbFile() QString globalPath = getConfigPath(); QString portablePath = getPortableConfigPath(); - QStringList paths; + QList> paths; if (!globalPath.isNull() && !portablePath.isNull()) { if (QFileInfo(portablePath).exists()) { - paths << portablePath+"/"+DB_FILE_NAME; - paths << globalPath+"/"+DB_FILE_NAME; + paths << QPair(portablePath+"/"+DB_FILE_NAME, false); + paths << QPair(globalPath+"/"+DB_FILE_NAME, true); } else { - paths << globalPath+"/"+DB_FILE_NAME; - paths << portablePath+"/"+DB_FILE_NAME; + paths << QPair(globalPath+"/"+DB_FILE_NAME, true); + paths << QPair(portablePath+"/"+DB_FILE_NAME, false); } } else if (!globalPath.isNull()) { - paths << globalPath+"/"+DB_FILE_NAME; + paths << QPair(globalPath+"/"+DB_FILE_NAME, true); } else if (!portablePath.isNull()) { - paths << portablePath+"/"+DB_FILE_NAME; - } - - // Create global config directory if not existing - QDir dir; - if (!globalPath.isNull()) - { - dir = QDir(globalPath); - if (!dir.exists()) - QDir::root().mkpath(globalPath); + paths << QPair(portablePath+"/"+DB_FILE_NAME, false); } // A fallback to in-memory db - paths << ":memory:"; + paths << QPair(":memory:", false); // Go through all candidates and pick one - QString path; - foreach (path, paths) + QDir dir; + for (const QPair& path : paths) { - dir = QDir(path); - if (path != ":memory:") + dir = QDir(path.first); + if (path.first != ":memory:") dir.cdUp(); if (tryInitDbFile(path)) @@ -614,17 +605,29 @@ void ConfigImpl::initDbFile() if (configDir == ":memory:") { paths.removeLast(); + QStringList pathStrings; + for (const QPair& path : paths) + pathStrings << path.first; + notifyError(QObject::tr("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.").arg(paths.join(", "))); + " Tried to initialize the file at following localizations: %1.").arg(pathStrings.join(", "))); } qDebug() << "Using configuration directory:" << configDir; db->exec("PRAGMA foreign_keys = 1;"); } -bool ConfigImpl::tryInitDbFile(const QString &dbPath) +bool ConfigImpl::tryInitDbFile(const QPair &dbPath) { - db = new DbSqlite3("SQLiteStudio settings", dbPath, {{DB_PURE_INIT, true}}); + // Create global config directory if not existing + if (dbPath.second && !dbPath.first.isNull()) + { + QDir dir(dbPath.first.mid(0, dbPath.first.length() - DB_FILE_NAME.length() - 1)); + if (!dir.exists()) + QDir::root().mkpath(dir.absolutePath()); + } + + db = new DbSqlite3("SQLiteStudio settings", dbPath.first, {{DB_PURE_INIT, true}}); if (!db->open()) { safe_delete(db); diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h index 3bdb7a5..bd31f0b 100644 --- a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h +++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h @@ -93,7 +93,7 @@ class API_EXPORT ConfigImpl : public Config QString getPortableConfigPath(); void initTables(); void initDbFile(); - bool tryInitDbFile(const QString& dbPath); + bool tryInitDbFile(const QPair& dbPath); QVariant deserializeValue(const QVariant& value); void asyncAddSqlHistory(qint64 id, const QString& sql, const QString& dbName, int timeSpentMillis, int rowsAffected); diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp index a7bff0d..cbdc921 100644 --- a/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp @@ -578,46 +578,4 @@ void DbManagerImpl::loaded(Plugin* plugin, PluginType* type) DbPlugin* dbPlugin = dynamic_cast(plugin); rescanInvalidDatabasesForPlugin(dbPlugin); -// Db* db = nullptr; - -// QUrl url; -// for (Db* invalidDb : getInvalidDatabases()) -// { -// if (invalidDb->getConnectionOptions().contains(DB_PLUGIN) && invalidDb->getConnectionOptions()[DB_PLUGIN].toString() != dbPlugin->getName()) -// continue; - -// url = QUrl::fromUserInput(invalidDb->getPath()); -// if (url.isLocalFile() && !QFile::exists(invalidDb->getPath())) -// continue; - -// db = createDb(invalidDb->getName(), invalidDb->getPath(), invalidDb->getConnectionOptions()); -// if (!db) -// continue; // For this db driver was not loaded yet. - -// if (!dbPlugin->checkIfDbServedByPlugin(db)) -// { -// qDebug() << "Managed to load database" << db->getPath() << " (" << db->getName() << ")" -// << "but it doesn't use DbPlugin that was just loaded, so it will not be loaded to the db manager"; - -// delete db; -// continue; -// } - -// removeDbInternal(invalidDb, false); -// delete invalidDb; - -// addDbInternal(db, false); - -// if (!db->getConnectionOptions().contains(DB_PLUGIN)) -// { -// db->getConnectionOptions()[DB_PLUGIN] = dbPlugin->getName(); -// if (!CFG->updateDb(db->getName(), db->getName(), db->getPath(), db->getConnectionOptions())) -// qWarning() << "Could not store handling plugin in options for database" << db->getName(); -// } - -// if (CFG->getDbGroup(db->getName())->open) -// db->open(); - -// emit dbLoaded(db); -// } } diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp index c3bc581..017d260 100644 --- a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp @@ -20,7 +20,9 @@ PluginManagerImpl::~PluginManagerImpl() void PluginManagerImpl::init() { - pluginDirs += qApp->applicationDirPath() + "/plugins"; + if (getDistributionType() != DistributionType::OS_MANAGED) + pluginDirs += qApp->applicationDirPath() + "/plugins"; + pluginDirs += QDir(CFG->getConfigDir()).absoluteFilePath("plugins"); QString envDirs = SQLITESTUDIO->getEnv("SQLITESTUDIO_PLUGINS"); diff --git a/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.cpp b/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.cpp index 66620f3..3663a1b 100644 --- a/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.cpp @@ -1,3 +1,5 @@ +#ifdef PORTABLE_CONFIG + #include "updatemanager.h" #include "services/pluginmanager.h" #include "services/notifymanager.h" @@ -44,9 +46,9 @@ UpdateManager::~UpdateManager() cleanup(); } -void UpdateManager::checkForUpdates() +void UpdateManager::checkForUpdates(bool force) { - getUpdatesMetadata(updatesCheckReply); + getUpdatesMetadata(updatesCheckReply, force); } void UpdateManager::update() @@ -150,10 +152,10 @@ void UpdateManager::handleAvailableUpdatesReply(QNetworkReply* reply) emit noUpdatesAvailable(); } -void UpdateManager::getUpdatesMetadata(QNetworkReply*& replyStoragePointer) +void UpdateManager::getUpdatesMetadata(QNetworkReply*& replyStoragePointer, bool force) { -#ifndef NO_AUTO_UPDATES - if (!CFG_CORE.General.CheckUpdatesOnStartup.get() || !isPlatformEligibleForUpdate() || replyStoragePointer) +#ifdef PORTABLE_CONFIG + if ((!CFG_CORE.General.CheckUpdatesOnStartup.get() && !force) || !isPlatformEligibleForUpdate() || replyStoragePointer) return; QUrlQuery query; @@ -1056,3 +1058,5 @@ void UpdateManager::readDownload() { currentDownloadFile->write(updatesGetReply->readAll()); } + +#endif // PORTABLE_CONFIG diff --git a/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.h b/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.h index b8e6006..bb33487 100644 --- a/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.h +++ b/SQLiteStudio3/coreSQLiteStudio/services/updatemanager.h @@ -1,6 +1,8 @@ #ifndef UPDATEMANAGER_H #define UPDATEMANAGER_H +#ifdef PORTABLE_CONFIG + #include "common/global.h" #include "sqlitestudio.h" #include @@ -28,7 +30,7 @@ class API_EXPORT UpdateManager : public QObject explicit UpdateManager(QObject *parent = 0); ~UpdateManager(); - void checkForUpdates(); + void checkForUpdates(bool force = false); void update(); bool isPlatformEligibleForUpdate() const; static bool executeFinalStep(const QString& tempDir, const QString& backupDir, const QString& appDir); @@ -54,7 +56,7 @@ class API_EXPORT UpdateManager : public QObject QString getCurrentVersions() const; void handleAvailableUpdatesReply(QNetworkReply* reply); void handleDownloadReply(QNetworkReply* reply); - void getUpdatesMetadata(QNetworkReply*& replyStoragePointer); + void getUpdatesMetadata(QNetworkReply*& replyStoragePointer, bool force = false); void handleUpdatesMetadata(QNetworkReply* reply); QList readMetadata(const QJsonDocument& doc); void downloadUpdates(); @@ -134,4 +136,5 @@ class API_EXPORT UpdateManager : public QObject #define UPDATES SQLITESTUDIO->getUpdateManager() +#endif // PORTABLE_CONFIG #endif // UPDATEMANAGER_H diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp index 963ba7d..8d62b44 100644 --- a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp @@ -39,7 +39,7 @@ DEFINE_SINGLETON(SQLiteStudio) -static const int sqlitestudioVersion = 30005; +static const int sqlitestudioVersion = 30006; SQLiteStudio::SQLiteStudio() { @@ -87,6 +87,7 @@ void SQLiteStudio::setImmediateQuit(bool value) immediateQuit = value; } +#ifdef PORTABLE_CONFIG UpdateManager* SQLiteStudio::getUpdateManager() const { return updateManager; @@ -96,6 +97,7 @@ void SQLiteStudio::setUpdateManager(UpdateManager* value) { updateManager = value; } +#endif BugReporter* SQLiteStudio::getBugReporter() const { @@ -319,7 +321,9 @@ void SQLiteStudio::init(const QStringList& cmdListArguments, bool guiAvailable) importManager = new ImportManager(); populateManager = new PopulateManager(); bugReporter = new BugReporter(); +#ifdef PORTABLE_CONFIG updateManager = new UpdateManager(); +#endif extraLicenseManager = new ExtraLicenseManager(); extraLicenseManager->addLicense("SQLiteStudio license (GPL v3)", ":/docs/licenses/sqlitestudio_license.txt"); @@ -349,7 +353,9 @@ void SQLiteStudio::cleanUp() pluginManager->deinit(); safe_delete(pluginManager); // PluginManager before DbManager, so Db objects are deleted while DbManager still exists +#ifdef PORTABLE_CONFIG safe_delete(updateManager); +#endif safe_delete(bugReporter); safe_delete(populateManager); safe_delete(importManager); diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h index f338e92..0b58b17 100644 --- a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h +++ b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h @@ -25,7 +25,9 @@ class ImportManager; class PopulateManager; class PluginLoadingHandler; class BugReporter; +#ifdef PORTABLE_CONFIG class UpdateManager; +#endif class ExtraLicenseManager; /** @file */ @@ -138,8 +140,10 @@ class API_EXPORT SQLiteStudio : public QObject QString getUserManualPage() const; QString getSqliteDocsPage() const; +#ifdef PORTABLE_CONFIG UpdateManager* getUpdateManager() const; void setUpdateManager(UpdateManager* value); +#endif bool getImmediateQuit() const; void setImmediateQuit(bool value); @@ -200,7 +204,9 @@ class API_EXPORT SQLiteStudio : public QObject ImportManager* importManager = nullptr; PopulateManager* populateManager = nullptr; BugReporter* bugReporter = nullptr; +#ifdef PORTABLE_CONFIG UpdateManager* updateManager = nullptr; +#endif ExtraLicenseManager* extraLicenseManager = nullptr; QString currentLang; QStringList initialTranslationFiles; diff --git a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp index 973402a..97e1fb3 100644 --- a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp @@ -485,6 +485,15 @@ void TableModifier::handleView(SqliteCreateViewPtr view) return; } + view->select->rebuildTokens(); + QString originalSelect = view->select->tokens.detokenize(); + + newSelect->rebuildTokens(); + QString newSelectStr = newSelect->tokens.detokenize(); + + if (originalSelect == newSelectStr) + return; + delete view->select; view->select = newSelect; view->select->setParent(view.data()); diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts index 46425fc..7d61000 100644 --- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts +++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts @@ -147,30 +147,30 @@ - + Database %1 could not be updated, because of an error: %2 - - + + Database file doesn't exist. - - - + + + No supporting plugin loaded. - + Database could not be initialized. - + No suitable database driver plugin found. @@ -427,36 +427,36 @@ Tables, indexes, triggers and views copied to database %3 will remain. - + Table '%1' has less columns than there are columns in the data to be imported. Excessive data columns will be ignored. - + Table '%1' has more columns than there are columns in the data to be imported. Some columns in the table will be left empty. - + Could not create table to import to: %1 - - - + + + Error while importing data: %1 - - + + Interrupted. import process status update - + Could not import data row number %1. The row was ignored. Problem details: %2 @@ -464,33 +464,33 @@ Tables, indexes, triggers and views copied to database %3 will remain. PluginManagerImpl - + Cannot load plugin %1, because it's in conflict with plugin %2. - + Cannot load plugin %1, because its dependency was not loaded: %2. - + Cannot load plugin %1. Error details: %2 - + Cannot load plugin %1 (error while initializing plugin). - + min: %1 plugin dependency version - + max: %1 plugin dependency version @@ -568,7 +568,7 @@ Tables, indexes, triggers and views copied to database %3 will remain. PopulateManager - + Table '%1' populated successfully. @@ -750,12 +750,12 @@ Tables, indexes, triggers and views copied to database %3 will remain. - + Error while populating table: %1 - + Could not commit transaction after table populating. Error details: %1 @@ -769,8 +769,8 @@ Tables, indexes, triggers and views copied to database %3 will remain. - - + + Result set expired or no row available. @@ -910,43 +910,43 @@ Error details: %2 - + General purpose plugin category name - + Database support plugin category name - + Code formatter plugin category name - + Scripting languages plugin category name - + Exporting plugin category name - + Importing plugin category name - + Table populating plugin category name @@ -1008,7 +1008,7 @@ The view will remain as it is. QueryExecutor - + Execution interrupted. @@ -1083,199 +1083,199 @@ The view will remain as it is. UpdateManager - + An error occurred while checking for updates: %1. - + Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning. - + An error occurred while reading updates metadata: %1. - + Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See <a href="%1">User Manual</a> for details. - + Could not create temporary directory for downloading the update. Updating aborted. - + There was no updates to download. Updating aborted. - + Downloading: %1 - + Could not determinate file name from update URL: %1. Updating aborted. - + Failed to open file '%1' for writting: %2. Updating aborted. - + Installing updates. - + Could not copy current application directory into %1 directory. - + Could not create directory %1. - + Could not rename directory %1 to %2. Details: %3 - + Cannot not rename directory %1 to %2. Details: %3 - + Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3 - + Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version. - + Could not unpack component %1 into %2 directory. - + Could not find permissions elevator application to run update as a root. Looked for: %1 - + Could not execute final updating steps as root: %1 - - - - + + + + Could not execute final updating steps as admin: %1 - + Cannot create temporary directory for updater. - + Cannot create updater script file. - + Updating canceled. - + Could not execute final updating steps as administrator. - + Could not execute final updating steps as administrator. Updater startup timed out. - + Could not execute final updating steps as administrator. Updater operation timed out. - + Could not clean up temporary directory %1. You can delete it manually at any time. - + Could not run new version for continuing update. - + Package not in tar.gz format, cannot install: %1 - + Package %1 cannot be installed, because cannot move it to directory: %2 - + Package %1 cannot be installed, because cannot unpack it: %2 - + Package not in zip format, cannot install: %1 - + Package %1 cannot be installed, because cannot unzip it to directory %2: %3 - + Package %1 cannot be installed, because cannot unzip it to directory: %2 - - + + Could not rename directory %1 to %2. - + Could not delete directory %1. - + Error executing update command: %1 Error message: %2 - + An error occurred while downloading updates: %1. Updating aborted. diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts index 9545030..054d1dc 100644 --- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts +++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts @@ -147,30 +147,30 @@ - + Database %1 could not be updated, because of an error: %2 - - + + Database file doesn't exist. - - - + + + No supporting plugin loaded. - + Database could not be initialized. - + No suitable database driver plugin found. @@ -427,36 +427,36 @@ Tables, indexes, triggers and views copied to database %3 will remain. - + Table '%1' has less columns than there are columns in the data to be imported. Excessive data columns will be ignored. - + Table '%1' has more columns than there are columns in the data to be imported. Some columns in the table will be left empty. - + Could not create table to import to: %1 - - - + + + Error while importing data: %1 - - + + Interrupted. import process status update - + Could not import data row number %1. The row was ignored. Problem details: %2 @@ -464,33 +464,33 @@ Tables, indexes, triggers and views copied to database %3 will remain. PluginManagerImpl - + Cannot load plugin %1, because it's in conflict with plugin %2. - + Cannot load plugin %1, because its dependency was not loaded: %2. - + Cannot load plugin %1. Error details: %2 - + Cannot load plugin %1 (error while initializing plugin). - + min: %1 plugin dependency version - + max: %1 plugin dependency version @@ -568,7 +568,7 @@ Tables, indexes, triggers and views copied to database %3 will remain. PopulateManager - + Table '%1' populated successfully. @@ -750,12 +750,12 @@ Tables, indexes, triggers and views copied to database %3 will remain. - + Error while populating table: %1 - + Could not commit transaction after table populating. Error details: %1 @@ -769,8 +769,8 @@ Tables, indexes, triggers and views copied to database %3 will remain. - - + + Result set expired or no row available. @@ -910,43 +910,43 @@ Error details: %2 - + General purpose plugin category name - + Database support plugin category name - + Code formatter plugin category name - + Scripting languages plugin category name - + Exporting plugin category name - + Importing plugin category name - + Table populating plugin category name @@ -1008,7 +1008,7 @@ The view will remain as it is. QueryExecutor - + Execution interrupted. @@ -1083,199 +1083,199 @@ The view will remain as it is. UpdateManager - + An error occurred while checking for updates: %1. - + Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning. - + An error occurred while reading updates metadata: %1. - + Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See <a href="%1">User Manual</a> for details. - + Could not create temporary directory for downloading the update. Updating aborted. - + There was no updates to download. Updating aborted. - + Downloading: %1 - + Could not determinate file name from update URL: %1. Updating aborted. - + Failed to open file '%1' for writting: %2. Updating aborted. - + Installing updates. - + Could not copy current application directory into %1 directory. - + Could not create directory %1. - + Could not rename directory %1 to %2. Details: %3 - + Cannot not rename directory %1 to %2. Details: %3 - + Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3 - + Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version. - + Could not unpack component %1 into %2 directory. - + Could not find permissions elevator application to run update as a root. Looked for: %1 - + Could not execute final updating steps as root: %1 - - - - + + + + Could not execute final updating steps as admin: %1 - + Cannot create temporary directory for updater. - + Cannot create updater script file. - + Updating canceled. - + Could not execute final updating steps as administrator. - + Could not execute final updating steps as administrator. Updater startup timed out. - + Could not execute final updating steps as administrator. Updater operation timed out. - + Could not clean up temporary directory %1. You can delete it manually at any time. - + Could not run new version for continuing update. - + Package not in tar.gz format, cannot install: %1 - + Package %1 cannot be installed, because cannot move it to directory: %2 - + Package %1 cannot be installed, because cannot unpack it: %2 - + Package not in zip format, cannot install: %1 - + Package %1 cannot be installed, because cannot unzip it to directory %2: %3 - + Package %1 cannot be installed, because cannot unzip it to directory: %2 - - + + Could not rename directory %1 to %2. - + Could not delete directory %1. - + Error executing update command: %1 Error message: %2 - + An error occurred while downloading updates: %1. Updating aborted. diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts index 6e53771..2931eff 100644 --- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts +++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts @@ -147,30 +147,30 @@ Impossible d'ajouter une base de données %1: %2 - + Database %1 could not be updated, because of an error: %2 La base de données %1 ne peut ëtre mise à jour à cause de l'erreur: %2 - - + + Database file doesn't exist. Le fichier de la base de données n'existe pas. - - - + + + No supporting plugin loaded. Aucun plugin supporté chargé. - + Database could not be initialized. La base de données ne peut être initialisée. - + No suitable database driver plugin found. Aucun pilote de base de données approprié trouvé. @@ -428,36 +428,36 @@ Tables, index, déclencheurs et vues copiés de la base de données %3 seront ma Impossible d'enregistrer la transaction d'import de données: %1 - + Table '%1' has less columns than there are columns in the data to be imported. Excessive data columns will be ignored. La table %1 a moins de colonnes que de données à importer. Les colonnes supplèmentaires seront ignorées. - + Table '%1' has more columns than there are columns in the data to be imported. Some columns in the table will be left empty. La table %1 a plus de colonnes que de colonnes de données à importer. Certaines colonnes de la table seront vides. - + Could not create table to import to: %1 Impossible de créer la table d'import: %1 - - - + + + Error while importing data: %1 Erreur lors de l'import des données: %1 - - + + Interrupted. import process status update Transaction interrompue. - + Could not import data row number %1. The row was ignored. Problem details: %2 @@ -465,33 +465,33 @@ Tables, index, déclencheurs et vues copiés de la base de données %3 seront ma PluginManagerImpl - + Cannot load plugin %1, because it's in conflict with plugin %2. Chargement impossible du plugin %1 celui-ci est en conflit avec le plugin %2. - + Cannot load plugin %1, because its dependency was not loaded: %2. Chargement impossible du plugin %1, les dépendances n'ont pa été chargées: %2. - + Cannot load plugin %1. Error details: %2 Chargement impossible du plugin %1, Détails de l'erreur: %2 - + Cannot load plugin %1 (error while initializing plugin). Chargement impossible du plugin %1 (erreur à initialisation du plugin). - + min: %1 plugin dependency version min %1 - + max: %1 plugin dependency version max %1 @@ -569,7 +569,7 @@ Tables, index, déclencheurs et vues copiés de la base de données %3 seront ma PopulateManager - + Table '%1' populated successfully. Table '%1' remplie avec succès. @@ -751,12 +751,12 @@ Tables, index, déclencheurs et vues copiés de la base de données %3 seront ma Impossible d'initialiser la transaction pour remplir la table.Détails de l'erreur %1 - + Error while populating table: %1 Erreur lors du remplissage de la table: %1 - + Could not commit transaction after table populating. Error details: %1 Impossible d'enregistrer la transaction après le remplissage de la table. Erreur %1 @@ -770,8 +770,8 @@ Tables, index, déclencheurs et vues copiés de la base de données %3 seront ma Impossible d'ouvrir la base de données: %1 - - + + Result set expired or no row available. Terminé ou aucune ligne valide. @@ -912,43 +912,43 @@ Détails erreur: %2 Impossible d'initialiser le fichier de configuration. Aucune modification et les requêtes seront perdues après redémarrage. Essayez d'initialiser le fichier avec cette localisation: %1. - + General purpose plugin category name Objectif général - + Database support plugin category name Support base de données - + Code formatter plugin category name Format code - + Scripting languages plugin category name Langages script - + Exporting plugin category name Export - + Importing plugin category name Import - + Table populating plugin category name Peuplement de la table @@ -1015,7 +1015,7 @@ La vue restera telque. QueryExecutor - + Execution interrupted. Exécution interrompue. @@ -1090,201 +1090,201 @@ La vue restera telque. UpdateManager - + An error occurred while checking for updates: %1. Une erreur est apparue lors du contrôle pour la mise à jour:%1. - + Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning. Impossible de vérifier la mise à jour, car le serveur a répondu avec un message invalide. Il est possible d'ignorer le warning. - + An error occurred while reading updates metadata: %1. Erreur lors de la lecture de mise des méta données: %1. - + Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See <a href="%1">User Manual</a> for details. 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 <a href="%1">User Manual</a> for details. - + Could not create temporary directory for downloading the update. Updating aborted. Impossible de créer un répertoire temporaire pour télécharger la mise à jour. Mise à jour abandonnée. - + There was no updates to download. Updating aborted. Il n'y a aucune mise à jour à télécharger. Mise à jour abandonnée. - + Downloading: %1 Téléchargement: %1 - + Could not determinate file name from update URL: %1. Updating aborted. Impossible de déterminer le fichier de mise à jour URL: %1.Mise à jour abandonnée. - + Failed to open file '%1' for writting: %2. Updating aborted. Erreur à l'ouverture du fichier %1 pour l'écriture: %2. Mise à jour abandonnée. - + Installing updates. Installation des mises jour. - + Could not copy current application directory into %1 directory. Impossible de copier le répertoire de l'application courante dans %1. - + Could not create directory %1. Impossible de créer le répertoire: %1. - + Could not rename directory %1 to %2. Details: %3 Impossible de renommer le répertoire %1 en %2. Détails: %3 - + Cannot not rename directory %1 to %2. Details: %3 Impossible de renommer le répertoire %1 en %2.Détails: %3 - + Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3 Impossible de déplacer le répertoire %1 vers %2 d'où l'impossibilité de restaurer le répertoire original. SQLiteStudio est maintenant localisé: %3 - + Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version. Impossible de renommer le répertoire %1 en %2, retour vers la version originale SQLiteStudio. - + Could not unpack component %1 into %2 directory. Impossible d'extraire le composant %1 dans le répertoire %2. - + Could not find permissions elevator application to run update as a root. Looked for: %1 Impossible d'élever les autorisations pour lancer la mise à jour en tantque root. Bloqué: %1 - + Could not execute final updating steps as root: %1 Impossible de finaliser la mis à jour en tant que root: %1 - - - - + + + + Could not execute final updating steps as admin: %1 Impossible de finaliser la mis à jour en tant que admin: %1 - + Cannot create temporary directory for updater. Impossible de créer un répertoire temporaire pour la mise à jour. - + Cannot create updater script file. impossible de créer le fichier du scripte de mise à jour. - + Updating canceled. Mise à jour suspendue. - + Could not execute final updating steps as administrator. Impossible de finaliser la mis à jour en tant qu'administrateur. - + Could not execute final updating steps as administrator. Updater startup timed out. Impossible de finaliser la mis à jour en tant qu'administrateur. Délai d'attente de lancement dépassé. - + Could not execute final updating steps as administrator. Updater operation timed out. Impossible de finaliser la mis à jour en tant qu'administrateur. Délai d'attente d'opération dépassé. - + Could not clean up temporary directory %1. You can delete it manually at any time. Impossible de nettoyer le répertoire temporaire %1. Vous pouver le supprimer manuellement plutard. - + Could not run new version for continuing update. Impossible de lancer la nouvelle version afin de continuer la mise à jour. - + Package not in tar.gz format, cannot install: %1 Installation impossible un paquet n'est pas au format tar.zg: %1 - + Package %1 cannot be installed, because cannot move it to directory: %2 Le paquet %1 ne peut être installé, celui-ci ne pouvant déplacé dans le répertoire: %2 - + Package %1 cannot be installed, because cannot unpack it: %2 Le paquet %1 ne peut être installé, celui-ci ne pouvant décompressé: %2 - + Package not in zip format, cannot install: %1 Installation impossible, un paquet est manquant: %1 - + Package %1 cannot be installed, because cannot unzip it to directory %2: %3 Le paquet %1 ne peut être installé, celui-ci ne pouvant décompressé dans le répertoire %2: %3 - + Package %1 cannot be installed, because cannot unzip it to directory: %2 Le paquet %1 ne peut être installé, celui-ci ne pouvant décompressé dans le répertoire: %2 - - + + Could not rename directory %1 to %2. Impossible de renommer le répertoire %1 en %2. - + Could not delete directory %1. Impossible de supprimer le répertoire %1. - + Error executing update command: %1 Error message: %2 Erreur d'exécution de la commande de mise à jour: %1 Message d'erreur: %2 - + An error occurred while downloading updates: %1. Updating aborted. Erreur lors du téléchargement de la mise à jour: %1. Mise à jour abandonnée. diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts index 7c061e5..85cfca2 100644 --- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts +++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts @@ -147,30 +147,30 @@ Nie udało się dodać bazę danych %1: %2 - + Database %1 could not be updated, because of an error: %2 Nie udało się zaktualizować baza danych %1 z powodu błędu: %2 - - + + Database file doesn't exist. Plik bazy danych nie istnieje. - - - + + + No supporting plugin loaded. Nie załadowano obsługującej wtyczki. - + Database could not be initialized. Nie udało się zainicjalizować bazy danych. - + No suitable database driver plugin found. Nie znaleziono odpowiedniej wtyczki sterownika. @@ -436,36 +436,36 @@ Tabele, indeksy, wyzwalacze i widoki skopiowane do bazy danych %3 pozostaną na Nie udało się zatwierdzić transakcji w celu zaimportowania danych: %1 - + Table '%1' has less columns than there are columns in the data to be imported. Excessive data columns will be ignored. Tabela '%1' ma mniej kolumn, niż jest kolumn w danych do importu. Nadmiarowe kolumny zostaną zignorowane. - + Table '%1' has more columns than there are columns in the data to be imported. Some columns in the table will be left empty. Tabela '%1' ma więcej kolumn, niż jest kolumn w danych do importu. Część kolumn w tabeli będzie pozostawiona pusta. - + Could not create table to import to: %1 Nie udało się stworzyć tabeli do zaimportowania: %1 - - - + + + Error while importing data: %1 Błąd podczas importowania danych: %1 - - + + Interrupted. import process status update Przerwano. - + Could not import data row number %1. The row was ignored. Problem details: %2 Nie udało się zaimportować wiersza danych numer %1. Wiersz ten został zignorowany. Szczegóły problemu: %2 @@ -473,33 +473,33 @@ Tabele, indeksy, wyzwalacze i widoki skopiowane do bazy danych %3 pozostaną na PluginManagerImpl - + Cannot load plugin %1, because it's in conflict with plugin %2. Nie udało się załadować wtyczki %1, ponieważ jest ona w konflikcie z wtyczką %2. - + Cannot load plugin %1, because its dependency was not loaded: %2. Nie udało się załadować wtyczki %1, ponieważ jej zależność nie została załadowana: %2 - + Cannot load plugin %1. Error details: %2 Nie udało się załadować wtyczki %1. Szczegóły błędu: %2 - + Cannot load plugin %1 (error while initializing plugin). Nie udało się załadować wtyczki %1 (błąd podczas inicjalizacji wtyczki). - + min: %1 plugin dependency version min: %1 - + max: %1 plugin dependency version maks: %1 @@ -577,7 +577,7 @@ Tabele, indeksy, wyzwalacze i widoki skopiowane do bazy danych %3 pozostaną na PopulateManager - + Table '%1' populated successfully. Zaludnianie tabeli '%1' przebiegło pomyślnie. @@ -759,12 +759,12 @@ Tabele, indeksy, wyzwalacze i widoki skopiowane do bazy danych %3 pozostaną na Nie udało się rozpocząć transakcji w celu zaludnienia tabeli. Szczegóły błędu: %1 - + Error while populating table: %1 Błąd podczas zaludniania tabeli: %2 - + Could not commit transaction after table populating. Error details: %1 Nie udało się zatwierdzić transakcji po zaludnieniu tabeli. Szczegóły błędy: %1 @@ -907,43 +907,43 @@ Szczegóły błędu: %2 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. - + General purpose plugin category name Ogólne - + Database support plugin category name Wsparcie baz danych - + Code formatter plugin category name Formatowanie kodu - + Scripting languages plugin category name Języki skryptowe - + Exporting plugin category name Eksportowanie - + Importing plugin category name Importowanie - + Table populating plugin category name Zaludnianie tabel @@ -1018,8 +1018,8 @@ Widok pozostanie nienaruszony. Nie udało się zamknąć bazy danych: %1 - - + + Result set expired or no row available. Wyniki zapytania są nieaktualne, lub nie ma dostępnych wierszy. @@ -1034,7 +1034,7 @@ Widok pozostanie nienaruszony. QueryExecutor - + Execution interrupted. Wykonywanie przerwane. @@ -1109,202 +1109,202 @@ Widok pozostanie nienaruszony. UpdateManager - + An error occurred while checking for updates: %1. Wystąpił błąd podczas sprawdzania aktualizacji: %1 - + Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning. Nie udało się sprawdzić aktualizacji, ponieważ serwer odpowiedział wiadomością w niepoprawnym formacie. Możesz spokojnie zignorować tą informację. - + An error occurred while reading updates metadata: %1. Wystąpił błąd podczas odczytu metadanych aktualizacji: %1 - + Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See <a href="%1">User Manual</a> for details. Nie udało się ściągnąć aktualizacji, ponieważ serwer odpowiedział wiadomością w niepoprawnym formacie. Możesz spróbować jeszcze raz później, lub ściągnąć i stainstalować aktualizację ręcznie. Szczegóły: <a href="%1">Podręcznik użytkownika</a>. - + Could not create temporary directory for downloading the update. Updating aborted. Nie udało się stworzyć katalogu tymczasowego w celu pobrania aktualizacji. Aktualizacja została przerwana. - + There was no updates to download. Updating aborted. Nie znaleziono aktualizacji do pobrania. Aktualizacja przerwana. - + Downloading: %1 Pobieranie: %1 - + Could not determinate file name from update URL: %1. Updating aborted. Nie udało się określić nazwy pliku z URL aktualizacji: %1. Aktualizacja przerwana. - + Failed to open file '%1' for writting: %2. Updating aborted. Nie udało się otworzyć pliku '%1' do zapisu: %2. Aktualizacja przerwana. - + Installing updates. Instalowanie aktualizacji. - + Could not copy current application directory into %1 directory. Nie udało się skopiować bieżącego katalogu aplikacji do katalogu %1. - + Could not create directory %1. Nie udało się stworzyć katalogu %1. - + Could not rename directory %1 to %2. Details: %3 Nie udało się zmienić nazwy katalogu %1 na %2. Szczegóły: %3 - + Cannot not rename directory %1 to %2. Details: %3 Nie można zmienić nazwy katalogu %1 na %2. Szczegóły: %3 - + Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3 Nie udało się przenieść katalogu %1 do %2, oraz nie udało się przywrócić originalnego katalog, więc originalny katalog SQLiteStudio jest mieści się teraz w: %3 - + Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version. Nie udało się zmienić nazwy katalogu %1 na %2. Przywrócono originalną wersję SQLiteStudio. - + Could not unpack component %1 into %2 directory. Nie udało się rozpakować komponentu %1 do katalogu %2. - + Could not find permissions elevator application to run update as a root. Looked for: %1 Nie udało się znaleźć narzędzia do podnoszenia uprawnień aplikacji, aby uruchomić aktualizację jako administrator. Szukano następujących: %1 - + Could not execute final updating steps as root: %1 Nie udało się wykonać ostatnich kroków jako administrator: %1 - - - - + + + + Could not execute final updating steps as admin: %1 Nie udało się wykonać ostatnich kroków jako administrator: %1 - + Cannot create temporary directory for updater. Nie można stworzyć tymczasowego katalogu dla aktualizacji. - + Cannot create updater script file. Nie można utworzyć skryptu aktualizacji. - + Updating canceled. Aktualizacja wycofana. - + Could not execute final updating steps as administrator. Nie udało się wykonać ostatich kroków aktualizacji jako administrator. - + Could not execute final updating steps as administrator. Updater startup timed out. Nie udało się wykonać ostatich kroków aktualizacji jako administrator. Przekroczono limit czasu oczekiwania. - + Could not execute final updating steps as administrator. Updater operation timed out. Nie udało się wykonać ostatich kroków aktualizacji jako administrator. Przekroczono limit czasu oczekiwania. - + Could not clean up temporary directory %1. You can delete it manually at any time. Nie udało się wyczyścić katalogu tymczasowego %1. Możesz go usunąć ręcznie w dowolnym momencie. - + Could not run new version for continuing update. Nie udało się uruchomić nowej wersji w celu kontynuowania aktualizacji. - + Package not in tar.gz format, cannot install: %1 Paczka nie jest w formacie tar.gz, nie można zainstalować: %1 - + Package %1 cannot be installed, because cannot move it to directory: %2 Paczka %1 nie może być zainstalowana, ponieważ nie można przenieść jej do katalogu: %2 - + Package %1 cannot be installed, because cannot unpack it: %2 Paczka %1 nie może być zainstalowana, ponieważ nie można jej rozpakować: %2 - + Package not in zip format, cannot install: %1 Paczka nie jest w formacie zip, nie można zainstalować: %1 - + Package %1 cannot be installed, because cannot unzip it to directory %2: %3 Paczka %1 nie może być zainstalowana, ponieważ nie można jej rozpakować do katalogu %2: %3 - + Package %1 cannot be installed, because cannot unzip it to directory: %2 Paczka %1 nie może być zainstalowana, ponieważ nie można jej rozpakować do katalogu %2 - - + + Could not rename directory %1 to %2. Nie udało się zmienić nazwy katalogu %1 na %2. - + Could not delete directory %1. Nie udało się skasować katalogu %1. - + Error executing update command: %1 Error message: %2 Błąd podczas wykonywania polecenia aktualizacji: %1 Treść błędu: %2 - + An error occurred while downloading updates: %1. Updating aborted. Wystąpił błąd podczas pobierania aktualizacji: %1. Aktualizacja przerwana. diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts index d22af44..64f66a5 100644 --- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts +++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts @@ -147,30 +147,30 @@ - + Database %1 could not be updated, because of an error: %2 - - + + Database file doesn't exist. - - - + + + No supporting plugin loaded. - + Database could not be initialized. - + No suitable database driver plugin found. @@ -427,36 +427,36 @@ Tables, indexes, triggers and views copied to database %3 will remain. - + Table '%1' has less columns than there are columns in the data to be imported. Excessive data columns will be ignored. - + Table '%1' has more columns than there are columns in the data to be imported. Some columns in the table will be left empty. - + Could not create table to import to: %1 - - - + + + Error while importing data: %1 - - + + Interrupted. import process status update - + Could not import data row number %1. The row was ignored. Problem details: %2 @@ -464,33 +464,33 @@ Tables, indexes, triggers and views copied to database %3 will remain. PluginManagerImpl - + Cannot load plugin %1, because it's in conflict with plugin %2. - + Cannot load plugin %1, because its dependency was not loaded: %2. - + Cannot load plugin %1. Error details: %2 - + Cannot load plugin %1 (error while initializing plugin). - + min: %1 plugin dependency version - + max: %1 plugin dependency version @@ -568,7 +568,7 @@ Tables, indexes, triggers and views copied to database %3 will remain. PopulateManager - + Table '%1' populated successfully. @@ -750,12 +750,12 @@ Tables, indexes, triggers and views copied to database %3 will remain. - + Error while populating table: %1 - + Could not commit transaction after table populating. Error details: %1 @@ -769,8 +769,8 @@ Tables, indexes, triggers and views copied to database %3 will remain. - - + + Result set expired or no row available. @@ -910,43 +910,43 @@ Error details: %2 - + General purpose plugin category name - + Database support plugin category name - + Code formatter plugin category name - + Scripting languages plugin category name - + Exporting plugin category name - + Importing plugin category name - + Table populating plugin category name @@ -1008,7 +1008,7 @@ The view will remain as it is. QueryExecutor - + Execution interrupted. @@ -1083,199 +1083,199 @@ The view will remain as it is. UpdateManager - + An error occurred while checking for updates: %1. - + Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning. - + An error occurred while reading updates metadata: %1. - + Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See <a href="%1">User Manual</a> for details. - + Could not create temporary directory for downloading the update. Updating aborted. - + There was no updates to download. Updating aborted. - + Downloading: %1 - + Could not determinate file name from update URL: %1. Updating aborted. - + Failed to open file '%1' for writting: %2. Updating aborted. - + Installing updates. - + Could not copy current application directory into %1 directory. - + Could not create directory %1. - + Could not rename directory %1 to %2. Details: %3 - + Cannot not rename directory %1 to %2. Details: %3 - + Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3 - + Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version. - + Could not unpack component %1 into %2 directory. - + Could not find permissions elevator application to run update as a root. Looked for: %1 - + Could not execute final updating steps as root: %1 - - - - + + + + Could not execute final updating steps as admin: %1 - + Cannot create temporary directory for updater. - + Cannot create updater script file. - + Updating canceled. - + Could not execute final updating steps as administrator. - + Could not execute final updating steps as administrator. Updater startup timed out. - + Could not execute final updating steps as administrator. Updater operation timed out. - + Could not clean up temporary directory %1. You can delete it manually at any time. - + Could not run new version for continuing update. - + Package not in tar.gz format, cannot install: %1 - + Package %1 cannot be installed, because cannot move it to directory: %2 - + Package %1 cannot be installed, because cannot unpack it: %2 - + Package not in zip format, cannot install: %1 - + Package %1 cannot be installed, because cannot unzip it to directory %2: %3 - + Package %1 cannot be installed, because cannot unzip it to directory: %2 - - + + Could not rename directory %1 to %2. - + Could not delete directory %1. - + Error executing update command: %1 Error message: %2 - + An error occurred while downloading updates: %1. Updating aborted. diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts index ca7fc68..8bbab69 100644 --- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts +++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts @@ -147,31 +147,31 @@ Не удалось добавить базу данных %1: %2 - + Database %1 could not be updated, because of an error: %2 Невозможно обновить базу данных %1 из-за ошибки: %2 - - + + Database file doesn't exist. Файл базы данных не существует. - - - + + + No supporting plugin loaded. Unclear error string. Checking the source didn't help. Модуль поддержки не загружен. - + Database could not be initialized. Невозможно инициализировать базу данных. - + No suitable database driver plugin found. Не найден подходящий драйвер базы данных. @@ -429,36 +429,36 @@ Tables, indexes, triggers and views copied to database %3 will remain. Невозможно завершить транзакцию для импортированных данных: %1 - + Table '%1' has less columns than there are columns in the data to be imported. Excessive data columns will be ignored. В таблице '%1' столбцов меньше, чем в импортируемых данных. Лишние столбцы будут проигнорированы. - + Table '%1' has more columns than there are columns in the data to be imported. Some columns in the table will be left empty. В таблице '%1' столбцов больше, чем в импортируемых данных. Недостающие столбцы будут оставлены пустыми. - + Could not create table to import to: %1 Невозможно создать таблицу для импорта: %1 - - - + + + Error while importing data: %1 Ошибка при импорте данных: %1 - - + + Interrupted. import process status update Прервано. - + Could not import data row number %1. The row was ignored. Problem details: %2 Невозможно импортировать строку данных № %1. Строка пропущена. Подробности проблемы: %2 @@ -466,33 +466,33 @@ Tables, indexes, triggers and views copied to database %3 will remain. PluginManagerImpl - + Cannot load plugin %1, because it's in conflict with plugin %2. Невозможно загрузить модуль %1, так как он конфликтует с модулем %2. - + Cannot load plugin %1, because its dependency was not loaded: %2. Невозможно загрузить модуль %1, так как не загружен необходимый ему модуль: %2. - + Cannot load plugin %1. Error details: %2 Невозможно загрузить модуль %1. Подробности ошибки: %2 - + Cannot load plugin %1 (error while initializing plugin). Невозможно загрузить модуль %1 (ошибка при инициализации модуля). - + min: %1 plugin dependency version минимальная: %1 - + max: %1 plugin dependency version максимальная: %1 @@ -570,7 +570,7 @@ Tables, indexes, triggers and views copied to database %3 will remain. PopulateManager - + Table '%1' populated successfully. Таблица '%1' успешно заполнена. @@ -752,12 +752,12 @@ Tables, indexes, triggers and views copied to database %3 will remain. Невозможно начать транзакцию для заполнения таблицы. Подробности ошибки: %1 - + Error while populating table: %1 Ошибка при заполнении таблицы: %1 - + Could not commit transaction after table populating. Error details: %1 Невозможно завершить транзакцию после заполнения таблицы. Подробности ошибки: %1 @@ -771,8 +771,8 @@ Tables, indexes, triggers and views copied to database %3 will remain. Невозможно открыть базу данных: %1 - - + + Result set expired or no row available. Результирующая выборка устарела или ни одна строка не доступна. @@ -912,43 +912,43 @@ Error details: %2 Невозможно инициализировать файл конфигурации. Любые изменения конфигурации и история запросов будут утеряны после перезапуска приложения. Попытки инициализации файла предпринимались в следующих местах: %1. - + General purpose plugin category name Общего назначения - + Database support plugin category name Поддержка баз данных - + Code formatter plugin category name Форматирование кода - + Scripting languages plugin category name Скриптовые языки - + Exporting plugin category name Экспорт - + Importing plugin category name Импорт - + Table populating plugin category name Заполнение таблиц @@ -1015,7 +1015,7 @@ The view will remain as it is. QueryExecutor - + Execution interrupted. Выполнение прервано. @@ -1090,202 +1090,202 @@ The view will remain as it is. UpdateManager - + An error occurred while checking for updates: %1. При проверке обновлений возникла ошибка: %1 - + Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning. Невозможно проверить наличие обновлений, так как ответ сервера имеет некорректный формат. Это предупреждение можно проигнорировать. - + An error occurred while reading updates metadata: %1. При чтении метаданных об обновлениях возникла ошибка: %1 - + Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See <a href="%1">User Manual</a> for details. Невозможно загрузить обновления, так как ответ сервера имеет некорректный формат. Вы можете попробовать снова позже или скачать и установить обновления вручную. Подробности смотрите в <a href="%1">Руководстве пользователя</a>. - + Could not create temporary directory for downloading the update. Updating aborted. Невозможно создать временный каталог для загрузки обновления. Обновление прервано. - + There was no updates to download. Updating aborted. Нет обновлений для загрузки. Обновление прервано. - + Downloading: %1 Загрузка: %1 - + Could not determinate file name from update URL: %1. Updating aborted. Невозможно определить имя файла из URL обновления. Обновление прервано. - + Failed to open file '%1' for writting: %2. Updating aborted. Не удалось открыть файл %1 для записи: %2. Обновление прервано. - + Installing updates. Установка обновлений. - + Could not copy current application directory into %1 directory. Невозможно скопировать текущий каталог приложения в каталог %1. - + Could not create directory %1. Невозможно создать каталог %1. - + Could not rename directory %1 to %2. Details: %3 Невозможно переименовать каталог %1 в %2. Подробности: %3 - + Cannot not rename directory %1 to %2. Details: %3 Невозможно переименовать каталог %1 в %2. Подробности: %3 - + Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3 Невозможно переместить каталог %1 в %2, а также не удалось восстановить оригинальный каталог, поэтому оригинальный каталог SQLiteStudio теперь расположен в: %3 - + Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version. Невозможно переименовать каталог %1 в %2. Восстановлена изначальная версия SQLiteStudio. - + Could not unpack component %1 into %2 directory. Невозможно распаковать компонент %1 в каталог %2. - + Could not find permissions elevator application to run update as a root. Looked for: %1 Невозможно найти приложение повышения привилегий для запуска обновления с правами root. Были испробованы: %1 - + Could not execute final updating steps as root: %1 Невозможно выполнить финальные шаги обновления с правами root: %1 - - - - + + + + Could not execute final updating steps as admin: %1 Невозможно выполнить финальные шаги обновления с правами администратора: %1 - + Cannot create temporary directory for updater. Невозможно создать временный каталог для установщика обновлений. - + Cannot create updater script file. Невозможно создать файл скрипта обновления. - + Updating canceled. Обновление отменено. - + Could not execute final updating steps as administrator. Невозможно выполнить финальные шаги обновления с правами администратора. - + Could not execute final updating steps as administrator. Updater startup timed out. Невозможно выполнить финальные шаги обновления с правами администратора. Превышен тайм-аут запуска программы обновления. - + Could not execute final updating steps as administrator. Updater operation timed out. Невозможно выполнить финальные шаги обновления с правами администратора. Превышен тайм-аут операции программы обновления. - + Could not clean up temporary directory %1. You can delete it manually at any time. Невозможно очистить временный каталог %1. Вы можете удалить его вручную в любое время. - + Could not run new version for continuing update. Невозможно запустить новую версию приложения для продолжения обновления. - + Package not in tar.gz format, cannot install: %1 Пакет не в формате tar.gz, установка невозможна: %1 - + Package %1 cannot be installed, because cannot move it to directory: %2 Пакет %1 не может быть установлен, так как невозможно перенести его в каталог: %2 - + Package %1 cannot be installed, because cannot unpack it: %2 Пакет %1 не может быть установлен, так как его невозможно распаковать: %2 - + Package not in zip format, cannot install: %1 Пакет не в формате zip, установка невозможна: %1 - + Package %1 cannot be installed, because cannot unzip it to directory %2: %3 Пакет %1 не может быть установлен, так как его невозможно распаковать в каталог %2: %3 - + Package %1 cannot be installed, because cannot unzip it to directory: %2 Пакет %1 не может быть установлен, так как его невозможно распаковать в каталог: %2 - - + + Could not rename directory %1 to %2. Невозможно переименовать каталог %1 в %2. - + Could not delete directory %1. Невозможно удалить каталог %1. - + Error executing update command: %1 Error message: %2 Ошибка при выполнении команды обновления: %1 Сообщение об ошибке: %2 - + An error occurred while downloading updates: %1. Updating aborted. При загрузке обновлений произошла ошибка: %1. Обновление прервано. diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qm index e857185..6dae38a 100644 Binary files a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qm and b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qm differ diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts index 74fb84c..e953940 100644 --- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts +++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts @@ -1,6 +1,6 @@ - + AbstractDb @@ -147,30 +147,30 @@ Nemôžem pridať databázu %1: %2 - + Database %1 could not be updated, because of an error: %2 - - + + Database file doesn't exist. Databázový súbor neexistuje. - - - + + + No supporting plugin loaded. - + Database could not be initialized. - + No suitable database driver plugin found. @@ -427,36 +427,36 @@ Tables, indexes, triggers and views copied to database %3 will remain. - + Table '%1' has less columns than there are columns in the data to be imported. Excessive data columns will be ignored. - + Table '%1' has more columns than there are columns in the data to be imported. Some columns in the table will be left empty. - + Could not create table to import to: %1 - - - + + + Error while importing data: %1 - - + + Interrupted. import process status update - + Could not import data row number %1. The row was ignored. Problem details: %2 @@ -464,33 +464,33 @@ Tables, indexes, triggers and views copied to database %3 will remain. PluginManagerImpl - + Cannot load plugin %1, because it's in conflict with plugin %2. Nemôžem načítať plugin %1, pretože je v konflikte s pluginom %2. - + Cannot load plugin %1, because its dependency was not loaded: %2. Nemôžem načítať plugin %1, pretože neboli načítané jeho závislosti %2. - + Cannot load plugin %1. Error details: %2 Nemôžem načítať plugin %1. Detaily chyby %2 - + Cannot load plugin %1 (error while initializing plugin). Nemôžem načítať plugin %1 (nastala chyba pri jeho inicializácii). - + min: %1 plugin dependency version - + max: %1 plugin dependency version @@ -568,7 +568,7 @@ Tables, indexes, triggers and views copied to database %3 will remain. PopulateManager - + Table '%1' populated successfully. Tabuľka %1 úspešne naplnená. @@ -750,12 +750,12 @@ Tables, indexes, triggers and views copied to database %3 will remain. - + Error while populating table: %1 - + Could not commit transaction after table populating. Error details: %1 @@ -769,8 +769,8 @@ Tables, indexes, triggers and views copied to database %3 will remain. - - + + Result set expired or no row available. @@ -910,43 +910,43 @@ Error details: %2 - + General purpose plugin category name - + Database support plugin category name - + Code formatter plugin category name - + Scripting languages plugin category name Skriptovacie jazyky - + Exporting plugin category name - + Importing plugin category name - + Table populating plugin category name @@ -1008,7 +1008,7 @@ The view will remain as it is. QueryExecutor - + Execution interrupted. @@ -1084,199 +1084,199 @@ The view will remain as it is. UpdateManager - + An error occurred while checking for updates: %1. - + Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning. - + An error occurred while reading updates metadata: %1. - + Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See <a href="%1">User Manual</a> for details. - + Could not create temporary directory for downloading the update. Updating aborted. - + There was no updates to download. Updating aborted. - + Downloading: %1 - + Could not determinate file name from update URL: %1. Updating aborted. - + Failed to open file '%1' for writting: %2. Updating aborted. - + Installing updates. - + Could not copy current application directory into %1 directory. - + Could not create directory %1. - + Could not rename directory %1 to %2. Details: %3 - + Cannot not rename directory %1 to %2. Details: %3 - + Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3 - + Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version. - + Could not unpack component %1 into %2 directory. - + Could not find permissions elevator application to run update as a root. Looked for: %1 - + Could not execute final updating steps as root: %1 - - - - + + + + Could not execute final updating steps as admin: %1 - + Cannot create temporary directory for updater. - + Cannot create updater script file. - + Updating canceled. - + Could not execute final updating steps as administrator. - + Could not execute final updating steps as administrator. Updater startup timed out. - + Could not execute final updating steps as administrator. Updater operation timed out. - + Could not clean up temporary directory %1. You can delete it manually at any time. - + Could not run new version for continuing update. - + Package not in tar.gz format, cannot install: %1 - + Package %1 cannot be installed, because cannot move it to directory: %2 - + Package %1 cannot be installed, because cannot unpack it: %2 - + Package not in zip format, cannot install: %1 - + Package %1 cannot be installed, because cannot unzip it to directory %2: %3 - + Package %1 cannot be installed, because cannot unzip it to directory: %2 - - + + Could not rename directory %1 to %2. Nemôžem premenovať adresár %1na %2. - + Could not delete directory %1. Nemôžem vymazať adresár %1. - + Error executing update command: %1 Error message: %2 - + An error occurred while downloading updates: %1. Updating aborted. diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts index 1c95d67..32cf3b8 100644 --- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts +++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts @@ -147,30 +147,30 @@ - + Database %1 could not be updated, because of an error: %2 - - + + Database file doesn't exist. - - - + + + No supporting plugin loaded. - + Database could not be initialized. - + No suitable database driver plugin found. @@ -427,36 +427,36 @@ Tables, indexes, triggers and views copied to database %3 will remain. - + Table '%1' has less columns than there are columns in the data to be imported. Excessive data columns will be ignored. - + Table '%1' has more columns than there are columns in the data to be imported. Some columns in the table will be left empty. - + Could not create table to import to: %1 - - - + + + Error while importing data: %1 - - + + Interrupted. import process status update - + Could not import data row number %1. The row was ignored. Problem details: %2 @@ -464,33 +464,33 @@ Tables, indexes, triggers and views copied to database %3 will remain. PluginManagerImpl - + Cannot load plugin %1, because it's in conflict with plugin %2. - + Cannot load plugin %1, because its dependency was not loaded: %2. - + Cannot load plugin %1. Error details: %2 - + Cannot load plugin %1 (error while initializing plugin). - + min: %1 plugin dependency version - + max: %1 plugin dependency version @@ -568,7 +568,7 @@ Tables, indexes, triggers and views copied to database %3 will remain. PopulateManager - + Table '%1' populated successfully. @@ -750,12 +750,12 @@ Tables, indexes, triggers and views copied to database %3 will remain. - + Error while populating table: %1 - + Could not commit transaction after table populating. Error details: %1 @@ -769,8 +769,8 @@ Tables, indexes, triggers and views copied to database %3 will remain. - - + + Result set expired or no row available. @@ -910,43 +910,43 @@ Error details: %2 - + General purpose plugin category name - + Database support plugin category name - + Code formatter plugin category name - + Scripting languages plugin category name - + Exporting plugin category name - + Importing plugin category name - + Table populating plugin category name @@ -1008,7 +1008,7 @@ The view will remain as it is. QueryExecutor - + Execution interrupted. @@ -1083,199 +1083,199 @@ The view will remain as it is. UpdateManager - + An error occurred while checking for updates: %1. - + Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning. - + An error occurred while reading updates metadata: %1. - + Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See <a href="%1">User Manual</a> for details. - + Could not create temporary directory for downloading the update. Updating aborted. - + There was no updates to download. Updating aborted. - + Downloading: %1 - + Could not determinate file name from update URL: %1. Updating aborted. - + Failed to open file '%1' for writting: %2. Updating aborted. - + Installing updates. - + Could not copy current application directory into %1 directory. - + Could not create directory %1. - + Could not rename directory %1 to %2. Details: %3 - + Cannot not rename directory %1 to %2. Details: %3 - + Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3 - + Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version. - + Could not unpack component %1 into %2 directory. - + Could not find permissions elevator application to run update as a root. Looked for: %1 - + Could not execute final updating steps as root: %1 - - - - + + + + Could not execute final updating steps as admin: %1 - + Cannot create temporary directory for updater. - + Cannot create updater script file. - + Updating canceled. - + Could not execute final updating steps as administrator. - + Could not execute final updating steps as administrator. Updater startup timed out. - + Could not execute final updating steps as administrator. Updater operation timed out. - + Could not clean up temporary directory %1. You can delete it manually at any time. - + Could not run new version for continuing update. - + Package not in tar.gz format, cannot install: %1 - + Package %1 cannot be installed, because cannot move it to directory: %2 - + Package %1 cannot be installed, because cannot unpack it: %2 - + Package not in zip format, cannot install: %1 - + Package %1 cannot be installed, because cannot unzip it to directory %2: %3 - + Package %1 cannot be installed, because cannot unzip it to directory: %2 - - + + Could not rename directory %1 to %2. - + Could not delete directory %1. - + Error executing update command: %1 Error message: %2 - + An error occurred while downloading updates: %1. Updating aborted. -- cgit v1.2.3