summaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio')
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/Info.plist2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/LICENSE-chillout21
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/README4
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/chillout.cpp47
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/chillout.h42
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/common/common.cpp24
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/common/common.h24
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/defines.h16
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/posix/posixcrashhandler.cpp146
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/posix/posixcrashhandler.h45
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/windows/StackWalker.cpp1382
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/windows/StackWalker.h222
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/windows/windowscrashhandler.cpp671
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/chillout/windows/windowscrashhandler.h147
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/bistrhash.cpp25
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/bistrhash.h21
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/compatibility.cpp7
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/compatibility.h3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/global.h19
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/utils.cpp39
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/utils.h37
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp94
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/common/utils_sql.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/completioncomparer.cpp47
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/completioncomparer.h5
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp89
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/completionhelper.h26
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/config_builder.h18
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.cpp20
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.cpp9
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.h3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/config_builder/cfglazyinitializer.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro49
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.qrc10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/csvformat.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/datatype.cpp55
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/datatype.h22
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/abstractdb.cpp81
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/abstractdb.h35
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h70
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/db.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/db.h38
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/dbsqlite3.cpp10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/dbsqlite3.h4
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/invaliddb.cpp22
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/invaliddb.h12
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp105
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h31
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp37
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcellsize.cpp132
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcellsize.h62
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp35
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumntype.cpp47
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumntype.h6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordatasources.cpp3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorfilter.cpp26
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorfilter.h20
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorlimit.cpp1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.cpp75
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.h10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorstep.cpp3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorstep.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/sqlquery.cpp81
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/sqlquery.h8
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/stdsqlite3driver.h7
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp71
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.h4
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/expectedtoken.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/importworker.cpp7
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/licenses/icu.txt519
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/log.cpp5
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/log.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitealtertable.cpp68
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitealtertable.h5
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecopy.cpp92
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecopy.h32
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.cpp10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.cpp56
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.h10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.cpp10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.cpp10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteddlwithdbcontext.h3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitedelete.cpp24
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitedelete.h13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp43
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.h6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteinsert.cpp34
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteinsert.h16
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.cpp20
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitequerytype.cpp5
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteselect.cpp24
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteselect.h4
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitestatement.h6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteupdate.cpp24
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteupdate.h3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewindowdefinition.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewith.cpp22
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewith.h10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/keywords.cpp12
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/lempar.c4
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/lexer.cpp11
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/lexer.h7
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/lexer_low_lev.cpp129
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/lexer_low_lev.h3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/parser.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.cpp10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.h16
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/parsercontext.cpp14
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp6834
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.h296
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y179
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp21
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/token.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/token.h3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginsqlite3.cpp7
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginsqlite3.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginstdfilebase.cpp6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.cpp4
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.cpp4
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/populatescript.cpp29
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/scriptingplugin.h28
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.cpp157
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.h52
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.pngbin1750 -> 488 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqtdbproxy.cpp28
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqtdbproxy.h13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp29
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.h8
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/querymodel.cpp3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/querymodel.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.cpp13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.h13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/Key.cpp13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/Key.h13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.cpp13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.h13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.cpp13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.h13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/RSA.cpp13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/rsa/RSA.h13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/schemaresolver.cpp106
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/schemaresolver.h12
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/selectresolver.cpp296
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/selectresolver.h58
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/codesnippetmanager.cpp119
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/codesnippetmanager.h42
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/collationmanager.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/config.cpp59
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/config.h11
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/functionmanager.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/collationmanagerimpl.cpp22
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/collationmanagerimpl.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp115
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h13
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp30
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.cpp82
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp44
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.h15
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/sqliteextensionmanagerimpl.cpp54
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/sqliteextensionmanagerimpl.h3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/notifymanager.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/notifymanager.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/sqliteextensionmanager.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/sqlfileexecutor.cpp223
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/sqlfileexecutor.h43
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/sqlhistorymodel.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp104
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h20
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp74
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/tablemodifier.h6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations.cpp19
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio.ts1099
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_af_ZA.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ar_SA.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ca_ES.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_cs_CZ.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_da_DK.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.qmbin34589 -> 0 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts1320
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de_DE.ts1100
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_el_GR.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_en_US.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.qmbin23 -> 0 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts1146
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es_ES.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fa_IR.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fi_FI.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.qmbin31530 -> 0 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts1319
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr_FR.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_he_IL.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_hu_HU.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it.qmbin23 -> 0 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it.ts1146
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it_IT.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ja_JP.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_kaa.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ko_KR.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_nl_NL.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_no_NO.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qmbin34859 -> 0 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts1337
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl_PL.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.qmbin2828 -> 0 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts1428
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_PT.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ro_RO.qmbin30 -> 0 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ro_RO.ts1425
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.qmbin32776 -> 0 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts1318
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru_RU.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qmbin5124 -> 0 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts1178
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk_SK.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sr_SP.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sv_SE.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_tr_TR.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_uk_UA.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_vi_VN.ts1101
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.qm1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts1428
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_TW.ts1101
231 files changed, 46449 insertions, 15889 deletions
diff --git a/SQLiteStudio3/coreSQLiteStudio/Info.plist b/SQLiteStudio3/coreSQLiteStudio/Info.plist
index 794e404..9b29626 100644
--- a/SQLiteStudio3/coreSQLiteStudio/Info.plist
+++ b/SQLiteStudio3/coreSQLiteStudio/Info.plist
@@ -46,4 +46,4 @@
</dict>
</array>
</dict>
-</plist>
+</plist> \ No newline at end of file
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/LICENSE-chillout b/SQLiteStudio3/coreSQLiteStudio/chillout/LICENSE-chillout
new file mode 100644
index 0000000..e0a4e10
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/LICENSE-chillout
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Taras Kushnir
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/README b/SQLiteStudio3/coreSQLiteStudio/chillout/README
new file mode 100644
index 0000000..b01444c
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/README
@@ -0,0 +1,4 @@
+Chillout crash handler
+https://gitlab.com/ribtoks/chillout
+
+This is subset of the original code. Some parts were removed, some were changed to adjust it for compilation with Mingw under Windows and to remove parts unused in SQLiteStudio. \ No newline at end of file
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/chillout.cpp b/SQLiteStudio3/coreSQLiteStudio/chillout/chillout.cpp
new file mode 100644
index 0000000..87f8c79
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/chillout.cpp
@@ -0,0 +1,47 @@
+#include "chillout.h"
+
+#ifdef _WIN32
+#include "windows/windowscrashhandler.h"
+#else
+#include "posix/posixcrashhandler.h"
+#endif
+
+namespace Debug {
+ void Chillout::init(const string_t &appName, const string_t &pathToDumpsDir) {
+ if (0 == m_InitCounter.fetch_add(1)) {
+#ifdef _WIN32
+ WindowsCrashHandler &handler = WindowsCrashHandler::getInstance();
+#else
+ PosixCrashHandler &handler = PosixCrashHandler::getInstance();
+#endif
+ handler.setup(appName, pathToDumpsDir);
+ }
+ }
+
+ void Chillout::deinit() {
+#ifdef _WIN32
+ WindowsCrashHandler &handler = WindowsCrashHandler::getInstance();
+#else
+ PosixCrashHandler &handler = PosixCrashHandler::getInstance();
+#endif
+ handler.teardown();
+ }
+
+ void Chillout::setBacktraceCallback(const std::function<void(const char * const)> &callback) {
+#ifdef _WIN32
+ WindowsCrashHandler &handler = WindowsCrashHandler::getInstance();
+#else
+ PosixCrashHandler &handler = PosixCrashHandler::getInstance();
+#endif
+ handler.setBacktraceCallback(callback);
+ }
+
+ void Chillout::setCrashCallback(const std::function<void()> &callback) {
+#ifdef _WIN32
+ WindowsCrashHandler &handler = WindowsCrashHandler::getInstance();
+#else
+ PosixCrashHandler &handler = PosixCrashHandler::getInstance();
+#endif
+ handler.setCrashCallback(callback);
+ }
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/chillout.h b/SQLiteStudio3/coreSQLiteStudio/chillout/chillout.h
new file mode 100644
index 0000000..2c8000a
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/chillout.h
@@ -0,0 +1,42 @@
+#ifndef CHILLOUT_H
+#define CHILLOUT_H
+
+#include <functional>
+#include <string>
+#include <atomic>
+#include "common/common.h"
+
+namespace Debug {
+ class Chillout {
+ public:
+ static Chillout& getInstance()
+ {
+ static Chillout instance; // Guaranteed to be destroyed.
+ // Instantiated on first use.
+ return instance;
+ }
+
+ public:
+#ifdef _WIN32
+ typedef std::wstring string_t;
+#else
+ typedef std::string string_t;
+#endif
+
+ public:
+ void init(const string_t &appName, const string_t &pathToDumpsDir);
+ void deinit();
+ void setBacktraceCallback(const std::function<void(const char * const)> &callback);
+ void setCrashCallback(const std::function<void()> &callback);
+
+ private:
+ Chillout(): m_InitCounter(0) {}
+ Chillout(Chillout const&);
+ void operator=(Chillout const&);
+
+ private:
+ std::atomic_int m_InitCounter;
+ };
+}
+
+#endif // CHILLOUT_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/common/common.cpp b/SQLiteStudio3/coreSQLiteStudio/chillout/common/common.cpp
new file mode 100644
index 0000000..2f51fc1
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/common/common.cpp
@@ -0,0 +1,24 @@
+#include "common.h"
+#include <ctime>
+#include <locale>
+#include <cstring>
+
+namespace Debug {
+ tm now() {
+ time_t now = time(0);
+ return *localtime(&now);
+ }
+
+#ifdef _WIN32
+ std::wostream& formatDateTime(std::wostream& out, const tm& t, const wchar_t* fmt) {
+ const std::time_put<wchar_t>& dateWriter = std::use_facet<std::time_put<wchar_t> >(out.getloc());
+ const size_t n = wcslen(fmt);
+#else
+ std::ostream& formatDateTime(std::ostream& out, const tm& t, const char* fmt) {
+ const std::time_put<char>& dateWriter = std::use_facet<std::time_put<char> >(out.getloc());
+ const size_t n = strlen(fmt);
+#endif
+ dateWriter.put(out, out, ' ', &t, fmt, fmt + n);
+ return out;
+ }
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/common/common.h b/SQLiteStudio3/coreSQLiteStudio/chillout/common/common.h
new file mode 100644
index 0000000..85b479a
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/common/common.h
@@ -0,0 +1,24 @@
+#ifndef COMMON_H
+#define COMMON_H
+
+#include <ctime>
+#include <ostream>
+
+#define CHILLOUT_DATETIME "%Y%m%d_%H%M%S"
+
+namespace Debug {
+ tm now();
+#ifdef _WIN32
+ std::wostream& formatDateTime(std::wostream& out, const tm& t, const wchar_t *fmt);
+#else
+ std::ostream& formatDateTime(std::ostream& out, const tm& t, const char* fmt);
+#endif
+
+ enum CrashDumpSize {
+ CrashDumpSmall,
+ CrashDumpNormal,
+ CrashDumpFull
+ };
+}
+
+#endif // COMMON_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/defines.h b/SQLiteStudio3/coreSQLiteStudio/chillout/defines.h
new file mode 100644
index 0000000..59f8db8
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/defines.h
@@ -0,0 +1,16 @@
+#ifndef CHILLOUTDEFINES_H
+#define CHILLOUTDEFINES_H
+
+#define CHILLOUT_EXIT_CODE 3
+
+#define STRINGIZE_(x) #x
+#define STRINGIZE(x) STRINGIZE_(x)
+
+#ifdef _WIN32
+#define WIDEN(quote) WIDEN2(quote)
+#define WIDEN2(quote) L##quote
+#else
+#define WIDEN(quote) quote
+#endif
+
+#endif // CHILLOUTDEFINES_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/posix/posixcrashhandler.cpp b/SQLiteStudio3/coreSQLiteStudio/chillout/posix/posixcrashhandler.cpp
new file mode 100644
index 0000000..a9e95a6
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/posix/posixcrashhandler.cpp
@@ -0,0 +1,146 @@
+#include "posixcrashhandler.h"
+
+#ifndef _WIN32
+
+#include <execinfo.h>
+#include <errno.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <cstdio>
+#include <cstdlib>
+#include <signal.h>
+#include <cstring>
+#include <cstdint>
+#include <sstream>
+#include <memory>
+
+#include "../defines.h"
+#include "../common/common.h"
+
+#define KILOBYTE 1024
+#define DEMANGLE_MEMORY_SIZE (10*(KILOBYTE))
+#define STACK_MEMORY_SIZE (90*(KILOBYTE))
+
+namespace Debug {
+ struct FreeDeleter {
+ void operator()(void* ptr) const {
+ free(ptr);
+ }
+ };
+
+ char *fake_alloc(char **memory, size_t size) {
+ char *allocated = *memory;
+ char *last = allocated + size;
+ *last = '\0';
+ *memory += size + 1;
+ return allocated;
+ }
+
+ void chilltrace(const char * const stackEntry) {
+ if (stackEntry) {
+ fputs(stackEntry,stderr);
+ }
+ }
+
+ void posixSignalHandler( int signum, siginfo_t* si, void* ucontext ) {
+ (void)si;
+ (void)ucontext;
+
+ auto &handler = PosixCrashHandler::getInstance();
+ handler.handleCrash();
+
+ // If you caught one of the above signals, it is likely you just
+ // want to quit your program right now.
+ //exit( signum );
+ std::_Exit(CHILLOUT_EXIT_CODE);
+ }
+
+ PosixCrashHandler::PosixCrashHandler():
+ m_stackMemory(nullptr),
+ m_demangleMemory(nullptr)
+ {
+ m_stackMemory = (char*)malloc(STACK_MEMORY_SIZE);
+ memset(&m_stackMemory[0], 0, STACK_MEMORY_SIZE);
+
+ m_demangleMemory = (char*)malloc(DEMANGLE_MEMORY_SIZE);
+ memset(&m_demangleMemory[0], 0, DEMANGLE_MEMORY_SIZE);
+
+ m_backtraceCallback = chilltrace;
+ }
+
+ PosixCrashHandler::~PosixCrashHandler() {
+ free(m_stackMemory);
+ free(m_demangleMemory);
+ }
+
+ void PosixCrashHandler::setup(const std::string &appName, const std::string &crashDirPath) {
+ struct sigaction sa;
+ sa.sa_sigaction = posixSignalHandler;
+ sigemptyset( &sa.sa_mask );
+
+#ifdef __APPLE__
+ /* for some reason we backtrace() doesn't work on osx
+ when we use an alternate stack */
+ sa.sa_flags = SA_SIGINFO;
+#else
+ sa.sa_flags = SA_SIGINFO | SA_ONSTACK;
+#endif
+
+ sigaction( SIGABRT, &sa, NULL );
+ sigaction( SIGSEGV, &sa, NULL );
+ sigaction( SIGBUS, &sa, NULL );
+ sigaction( SIGILL, &sa, NULL );
+ sigaction( SIGFPE, &sa, NULL );
+ sigaction( SIGPIPE, &sa, NULL );
+ sigaction( SIGTERM, &sa, NULL );
+
+ if (!crashDirPath.empty()) {
+ std::string path = crashDirPath;
+ while ((path.size() > 1) &&
+ (path[path.size() - 1] == '/')) {
+ path.erase(path.size() - 1);
+ }
+
+ std::stringstream s;
+ s << path << "/" << appName << "_";
+ formatDateTime(s, now(), CHILLOUT_DATETIME);
+ s << ".bktr";
+ m_backtraceFilePath = s.str();
+ }
+ }
+
+ void PosixCrashHandler::teardown() {
+ struct sigaction sa;
+ sigset_t mysigset;
+
+ sigemptyset(&mysigset);
+
+ sa.sa_handler = SIG_DFL;
+ sa.sa_mask = mysigset;
+ sa.sa_flags = 0;
+
+ sigaction( SIGABRT, &sa, NULL );
+ sigaction( SIGSEGV, &sa, NULL );
+ sigaction( SIGBUS, &sa, NULL );
+ sigaction( SIGILL, &sa, NULL );
+ sigaction( SIGFPE, &sa, NULL );
+ sigaction( SIGPIPE, &sa, NULL );
+ sigaction( SIGTERM, &sa, NULL );
+ }
+
+ void PosixCrashHandler::handleCrash() {
+ if (m_crashCallback) {
+ m_crashCallback();
+ }
+ }
+
+ void PosixCrashHandler::setCrashCallback(const std::function<void()> &callback) {
+ m_crashCallback = callback;
+ }
+
+ void PosixCrashHandler::setBacktraceCallback(const std::function<void(const char * const)> &callback) {
+ m_backtraceCallback = callback;
+ }
+}
+
+#endif
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/posix/posixcrashhandler.h b/SQLiteStudio3/coreSQLiteStudio/chillout/posix/posixcrashhandler.h
new file mode 100644
index 0000000..f2036a7
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/posix/posixcrashhandler.h
@@ -0,0 +1,45 @@
+#ifndef POSIXCRASHHANDLER_H
+#define POSIXCRASHHANDLER_H
+
+#ifndef _WIN32
+
+#include <functional>
+#include <string>
+
+namespace Debug {
+ class PosixCrashHandler {
+ public:
+ static PosixCrashHandler& getInstance()
+ {
+ static PosixCrashHandler instance; // Guaranteed to be destroyed.
+ // Instantiated on first use.
+ return instance;
+ }
+
+ private:
+ PosixCrashHandler();
+ ~PosixCrashHandler();
+
+ public:
+ void setup(const std::string &appName, const std::string &crashDirPath);
+ void teardown();
+ void handleCrash();
+ void setCrashCallback(const std::function<void()> &callback);
+ void setBacktraceCallback(const std::function<void(const char * const)> &callback);
+
+ private:
+ void walkStackTrace(char *memory, size_t memorySize, int maxFrames=128);
+ char *dlDemangle(void *addr, char *symbol, int frameIndex, char *stackMemory);
+
+ private:
+ std::function<void()> m_crashCallback;
+ std::function<void(const char * const)> m_backtraceCallback;
+ char *m_stackMemory;
+ char *m_demangleMemory;
+ std::string m_backtraceFilePath;
+ };
+}
+
+#endif // _WIN32
+
+#endif // POSIXCRASHHANDLER_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/windows/StackWalker.cpp b/SQLiteStudio3/coreSQLiteStudio/chillout/windows/StackWalker.cpp
new file mode 100644
index 0000000..91d6824
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/windows/StackWalker.cpp
@@ -0,0 +1,1382 @@
+/**********************************************************************
+ *
+ * StackWalker.cpp
+ * http://stackwalker.codeplex.com/
+ *
+ *
+ * History:
+ * 2005-07-27 v1 - First public release on http://www.codeproject.com/
+ * http://www.codeproject.com/threads/StackWalker.asp
+ * 2005-07-28 v2 - Changed the params of the constructor and ShowCallstack
+ * (to simplify the usage)
+ * 2005-08-01 v3 - Changed to use 'CONTEXT_FULL' instead of CONTEXT_ALL
+ * (should also be enough)
+ * - Changed to compile correctly with the PSDK of VC7.0
+ * (GetFileVersionInfoSizeA and GetFileVersionInfoA is wrongly defined:
+ * it uses LPSTR instead of LPCSTR as first paremeter)
+ * - Added declarations to support VC5/6 without using 'dbghelp.h'
+ * - Added a 'pUserData' member to the ShowCallstack function and the
+ * PReadProcessMemoryRoutine declaration (to pass some user-defined data,
+ * which can be used in the readMemoryFunction-callback)
+ * 2005-08-02 v4 - OnSymInit now also outputs the OS-Version by default
+ * - Added example for doing an exception-callstack-walking in main.cpp
+ * (thanks to owillebo: http://www.codeproject.com/script/profile/whos_who.asp?id=536268)
+ * 2005-08-05 v5 - Removed most Lint (http://www.gimpel.com/) errors... thanks to Okko Willeboordse!
+ * 2008-08-04 v6 - Fixed Bug: Missing LEAK-end-tag
+ * http://www.codeproject.com/KB/applications/leakfinder.aspx?msg=2502890#xx2502890xx
+ * Fixed Bug: Compiled with "WIN32_LEAN_AND_MEAN"
+ * http://www.codeproject.com/KB/applications/leakfinder.aspx?msg=1824718#xx1824718xx
+ * Fixed Bug: Compiling with "/Wall"
+ * http://www.codeproject.com/KB/threads/StackWalker.aspx?msg=2638243#xx2638243xx
+ * Fixed Bug: Now checking SymUseSymSrv
+ * http://www.codeproject.com/KB/threads/StackWalker.aspx?msg=1388979#xx1388979xx
+ * Fixed Bug: Support for recursive function calls
+ * http://www.codeproject.com/KB/threads/StackWalker.aspx?msg=1434538#xx1434538xx
+ * Fixed Bug: Missing FreeLibrary call in "GetModuleListTH32"
+ * http://www.codeproject.com/KB/threads/StackWalker.aspx?msg=1326923#xx1326923xx
+ * Fixed Bug: SymDia is number 7, not 9!
+ * 2008-09-11 v7 For some (undocumented) reason, dbhelp.h is needing a packing of 8!
+ * Thanks to Teajay which reported the bug...
+ * http://www.codeproject.com/KB/applications/leakfinder.aspx?msg=2718933#xx2718933xx
+ * 2008-11-27 v8 Debugging Tools for Windows are now stored in a different directory
+ * Thanks to Luiz Salamon which reported this "bug"...
+ * http://www.codeproject.com/KB/threads/StackWalker.aspx?msg=2822736#xx2822736xx
+ * 2009-04-10 v9 License slihtly corrected (<ORGANIZATION> replaced)
+ * 2009-11-01 v10 Moved to http://stackwalker.codeplex.com/
+ * 2009-11-02 v11 Now try to use IMAGEHLP_MODULE64_V3 if available
+ * 2010-04-15 v12 Added support for VS2010 RTM
+ * 2010-05-25 v13 Now using secure MyStrcCpy. Thanks to luke.simon:
+ * http://www.codeproject.com/KB/applications/leakfinder.aspx?msg=3477467#xx3477467xx
+ * 2013-01-07 v14 Runtime Check Error VS2010 Debug Builds fixed:
+ * http://stackwalker.codeplex.com/workitem/10511
+ *
+ *
+ * LICENSE (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Copyright (c) 2005-2013, Jochen Kalmbach
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of Jochen Kalmbach nor the names of its contributors may be
+ * used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ **********************************************************************/
+#ifdef _WIN32
+
+#include <windows.h>
+#include <tchar.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "StackWalker.h"
+
+#pragma GCC diagnostic ignored "-Wcast-function-type"
+#pragma GCC diagnostic ignored "-Wformat="
+
+// If VC7 and later, then use the shipped 'dbghelp.h'-file
+#pragma pack(push,8)
+#if _MSC_VER >= 1300
+#include <dbghelp.h>
+#else
+// inline the important dbghelp.h-declarations...
+typedef enum {
+ SymNone = 0,
+ SymCoff,
+ SymCv,
+ SymPdb,
+ SymExport,
+ SymDeferred,
+ SymSym,
+ SymDia,
+ SymVirtual,
+ NumSymTypes
+} SYM_TYPE;
+typedef struct _IMAGEHLP_LINE64 {
+ DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_LINE64)
+ PVOID Key; // internal
+ DWORD LineNumber; // line number in file
+ PCHAR FileName; // full filename
+ DWORD64 Address; // first instruction of line
+} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64;
+typedef struct _IMAGEHLP_MODULE64 {
+ DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64)
+ DWORD64 BaseOfImage; // base load address of module
+ DWORD ImageSize; // virtual size of the loaded module
+ DWORD TimeDateStamp; // date/time stamp from pe header
+ DWORD CheckSum; // checksum from the pe header
+ DWORD NumSyms; // number of symbols in the symbol table
+ SYM_TYPE SymType; // type of symbols loaded
+ CHAR ModuleName[32]; // module name
+ CHAR ImageName[256]; // image name
+ CHAR LoadedImageName[256]; // symbol file name
+} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64;
+typedef struct _IMAGEHLP_SYMBOL64 {
+ DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_SYMBOL64)
+ DWORD64 Address; // virtual address including dll base address
+ DWORD Size; // estimated size of symbol, can be zero
+ DWORD Flags; // info about the symbols, see the SYMF defines
+ DWORD MaxNameLength; // maximum size of symbol name in 'Name'
+ CHAR Name[1]; // symbol name (null terminated string)
+} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64;
+typedef enum {
+ AddrMode1616,
+ AddrMode1632,
+ AddrModeReal,
+ AddrModeFlat
+} ADDRESS_MODE;
+typedef struct _tagADDRESS64 {
+ DWORD64 Offset;
+ WORD Segment;
+ ADDRESS_MODE Mode;
+} ADDRESS64, *LPADDRESS64;
+typedef struct _KDHELP64 {
+ DWORD64 Thread;
+ DWORD ThCallbackStack;
+ DWORD ThCallbackBStore;
+ DWORD NextCallback;
+ DWORD FramePointer;
+ DWORD64 KiCallUserMode;
+ DWORD64 KeUserCallbackDispatcher;
+ DWORD64 SystemRangeStart;
+ DWORD64 Reserved[8];
+} KDHELP64, *PKDHELP64;
+typedef struct _tagSTACKFRAME64 {
+ ADDRESS64 AddrPC; // program counter
+ ADDRESS64 AddrReturn; // return address
+ ADDRESS64 AddrFrame; // frame pointer
+ ADDRESS64 AddrStack; // stack pointer
+ ADDRESS64 AddrBStore; // backing store pointer
+ PVOID FuncTableEntry; // pointer to pdata/fpo or NULL
+ DWORD64 Params[4]; // possible arguments to the function
+ BOOL Far; // WOW far call
+ BOOL Virtual; // is this a virtual frame?
+ DWORD64 Reserved[3];
+ KDHELP64 KdHelp;
+} STACKFRAME64, *LPSTACKFRAME64;
+typedef
+BOOL
+(__stdcall *PREAD_PROCESS_MEMORY_ROUTINE64)(
+ HANDLE hProcess,
+ DWORD64 qwBaseAddress,
+ PVOID lpBuffer,
+ DWORD nSize,
+ LPDWORD lpNumberOfBytesRead
+ );
+typedef
+PVOID
+(__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE64)(
+ HANDLE hProcess,
+ DWORD64 AddrBase
+ );
+typedef
+DWORD64
+(__stdcall *PGET_MODULE_BASE_ROUTINE64)(
+ HANDLE hProcess,
+ DWORD64 Address
+ );
+typedef
+DWORD64
+(__stdcall *PTRANSLATE_ADDRESS_ROUTINE64)(
+ HANDLE hProcess,
+ HANDLE hThread,
+ LPADDRESS64 lpaddr
+ );
+#define SYMOPT_CASE_INSENSITIVE 0x00000001
+#define SYMOPT_UNDNAME 0x00000002
+#define SYMOPT_DEFERRED_LOADS 0x00000004
+#define SYMOPT_NO_CPP 0x00000008
+#define SYMOPT_LOAD_LINES 0x00000010
+#define SYMOPT_OMAP_FIND_NEAREST 0x00000020
+#define SYMOPT_LOAD_ANYTHING 0x00000040
+#define SYMOPT_IGNORE_CVREC 0x00000080
+#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100
+#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200
+#define SYMOPT_EXACT_SYMBOLS 0x00000400
+#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800
+#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000
+#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000
+#define SYMOPT_PUBLICS_ONLY 0x00004000
+#define SYMOPT_NO_PUBLICS 0x00008000
+#define SYMOPT_AUTO_PUBLICS 0x00010000
+#define SYMOPT_NO_IMAGE_SEARCH 0x00020000
+#define SYMOPT_SECURE 0x00040000
+#define SYMOPT_DEBUG 0x80000000
+#define UNDNAME_COMPLETE (0x0000) // Enable full undecoration
+#define UNDNAME_NAME_ONLY (0x1000) // Crack only the name for primary declaration;
+#endif // _MSC_VER < 1300
+#pragma pack(pop)
+
+// Some missing defines (for VC5/6):
+#ifndef INVALID_FILE_ATTRIBUTES
+#define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
+#endif
+
+
+// secure-CRT_functions are only available starting with VC8
+#ifdef _MSC_VER
+#if _MSC_VER < 1400
+#define strcpy_s(dst, len, src) strcpy(dst, src)
+#define strncpy_s(dst, len, src, maxLen) strncpy(dst, len, src)
+#define strcat_s(dst, len, src) strcat(dst, src)
+#define _snprintf_s _snprintf
+#define _tcscat_s _tcscat
+#endif
+#endif
+
+#ifdef __MINGW32__
+#define strcpy_s(dst, len, src) strcpy(dst, src)
+#define strncpy_s(dst, len, src, maxLen) strncpy(dst, src, len)
+#define strcat_s(dst, len, src) strcat(dst, src)
+#define _snprintf_s _snprintf
+#endif
+
+static void MyStrCpy(char* szDest, size_t nMaxDestSize, const char* szSrc)
+{
+ if (nMaxDestSize <= 0) return;
+ strncpy_s(szDest, nMaxDestSize, szSrc, _TRUNCATE);
+ szDest[nMaxDestSize-1] = 0; // INFO: _TRUNCATE will ensure that it is nul-terminated; but with older compilers (<1400) it uses "strncpy" and this does not!)
+} // MyStrCpy
+
+// Normally it should be enough to use 'CONTEXT_FULL' (better would be 'CONTEXT_ALL')
+#define USED_CONTEXT_FLAGS CONTEXT_FULL
+
+
+class StackWalkerInternal
+{
+public:
+ StackWalkerInternal(StackWalker *parent, HANDLE hProcess)
+ {
+ m_parent = parent;
+ m_hDbhHelp = NULL;
+ pSC = NULL;
+ m_hProcess = hProcess;
+ m_szSymPath = NULL;
+ pSFTA = NULL;
+ pSGLFA = NULL;
+ pSGMB = NULL;
+ pSGMI = NULL;
+ pSGO = NULL;
+ pSGSFA = NULL;
+ pSI = NULL;
+ pSLM = NULL;
+ pSSO = NULL;
+ pSW = NULL;
+ pUDSN = NULL;
+ pSGSP = NULL;
+ }
+ ~StackWalkerInternal()
+ {
+ if (pSC != NULL)
+ pSC(m_hProcess); // SymCleanup
+ if (m_hDbhHelp != NULL)
+ FreeLibrary(m_hDbhHelp);
+ m_hDbhHelp = NULL;
+ m_parent = NULL;
+ if(m_szSymPath != NULL)
+ free(m_szSymPath);
+ m_szSymPath = NULL;
+ }
+ BOOL Init(LPCSTR szSymPath)
+ {
+ if (m_parent == NULL)
+ return FALSE;
+ // Dynamically load the Entry-Points for dbghelp.dll:
+ // First try to load the newsest one from
+ TCHAR szTemp[4096];
+ // But before wqe do this, we first check if the ".local" file exists
+ if (GetModuleFileName(NULL, szTemp, 4096) > 0)
+ {
+ _tcscat_s(szTemp, _T(".local"));
+ if (GetFileAttributes(szTemp) == INVALID_FILE_ATTRIBUTES)
+ {
+ // ".local" file does not exist, so we can try to load the dbghelp.dll from the "Debugging Tools for Windows"
+ // Ok, first try the new path according to the archtitecture:
+#ifdef _M_IX86
+ if ( (m_hDbhHelp == NULL) && (GetEnvironmentVariable(_T("ProgramFiles"), szTemp, 4096) > 0) )
+ {
+ _tcscat_s(szTemp, _T("\\Debugging Tools for Windows (x86)\\dbghelp.dll"));
+ // now check if the file exists:
+ if (GetFileAttributes(szTemp) != INVALID_FILE_ATTRIBUTES)
+ {
+ m_hDbhHelp = LoadLibrary(szTemp);
+ }
+ }
+#elif _M_X64
+ if ( (m_hDbhHelp == NULL) && (GetEnvironmentVariable(_T("ProgramFiles"), szTemp, 4096) > 0) )
+ {
+ _tcscat_s(szTemp, _T("\\Debugging Tools for Windows (x64)\\dbghelp.dll"));
+ // now check if the file exists:
+ if (GetFileAttributes(szTemp) != INVALID_FILE_ATTRIBUTES)
+ {
+ m_hDbhHelp = LoadLibrary(szTemp);
+ }
+ }
+#elif _M_IA64
+ if ( (m_hDbhHelp == NULL) && (GetEnvironmentVariable(_T("ProgramFiles"), szTemp, 4096) > 0) )
+ {
+ _tcscat_s(szTemp, _T("\\Debugging Tools for Windows (ia64)\\dbghelp.dll"));
+ // now check if the file exists:
+ if (GetFileAttributes(szTemp) != INVALID_FILE_ATTRIBUTES)
+ {
+ m_hDbhHelp = LoadLibrary(szTemp);
+ }
+ }
+#endif
+ // If still not found, try the old directories...
+ if ( (m_hDbhHelp == NULL) && (GetEnvironmentVariable(_T("ProgramFiles"), szTemp, 4096) > 0) )
+ {
+ _tcscat_s(szTemp, _T("\\Debugging Tools for Windows\\dbghelp.dll"));
+ // now check if the file exists:
+ if (GetFileAttributes(szTemp) != INVALID_FILE_ATTRIBUTES)
+ {
+ m_hDbhHelp = LoadLibrary(szTemp);
+ }
+ }
+#if defined _M_X64 || defined _M_IA64
+ // Still not found? Then try to load the (old) 64-Bit version:
+ if ( (m_hDbhHelp == NULL) && (GetEnvironmentVariable(_T("ProgramFiles"), szTemp, 4096) > 0) )
+ {
+ _tcscat_s(szTemp, _T("\\Debugging Tools for Windows 64-Bit\\dbghelp.dll"));
+ if (GetFileAttributes(szTemp) != INVALID_FILE_ATTRIBUTES)
+ {
+ m_hDbhHelp = LoadLibrary(szTemp);
+ }
+ }
+#endif
+ }
+ }
+ if (m_hDbhHelp == NULL) // if not already loaded, try to load a default-one
+ m_hDbhHelp = LoadLibrary( _T("dbghelp.dll") );
+ if (m_hDbhHelp == NULL)
+ return FALSE;
+ pSI = (tSI) GetProcAddress(m_hDbhHelp, "SymInitialize" );
+ pSC = (tSC) GetProcAddress(m_hDbhHelp, "SymCleanup" );
+
+ pSW = (tSW) GetProcAddress(m_hDbhHelp, "StackWalk64" );
+ pSGO = (tSGO) GetProcAddress(m_hDbhHelp, "SymGetOptions" );
+ pSSO = (tSSO) GetProcAddress(m_hDbhHelp, "SymSetOptions" );
+
+ pSFTA = (tSFTA) GetProcAddress(m_hDbhHelp, "SymFunctionTableAccess64" );
+ pSGLFA = (tSGLFA) GetProcAddress(m_hDbhHelp, "SymGetLineFromAddr64" );
+ pSGMB = (tSGMB) GetProcAddress(m_hDbhHelp, "SymGetModuleBase64" );
+ pSGMI = (tSGMI) GetProcAddress(m_hDbhHelp, "SymGetModuleInfo64" );
+ pSGSFA = (tSGSFA) GetProcAddress(m_hDbhHelp, "SymGetSymFromAddr64" );
+ pUDSN = (tUDSN) GetProcAddress(m_hDbhHelp, "UnDecorateSymbolName" );
+ pSLM = (tSLM) GetProcAddress(m_hDbhHelp, "SymLoadModule64" );
+ pSGSP =(tSGSP) GetProcAddress(m_hDbhHelp, "SymGetSearchPath" );
+
+ if ( pSC == NULL || pSFTA == NULL || pSGMB == NULL || pSGMI == NULL ||
+ pSGO == NULL || pSGSFA == NULL || pSI == NULL || pSSO == NULL ||
+ pSW == NULL || pUDSN == NULL || pSLM == NULL )
+ {
+ FreeLibrary(m_hDbhHelp);
+ m_hDbhHelp = NULL;
+ pSC = NULL;
+ return FALSE;
+ }
+
+ // SymInitialize
+ if (szSymPath != NULL)
+ m_szSymPath = _strdup(szSymPath);
+ if (this->pSI(m_hProcess, m_szSymPath, FALSE) == FALSE)
+ this->m_parent->OnDbgHelpErr("SymInitialize", GetLastError(), 0);
+
+ DWORD symOptions = this->pSGO(); // SymGetOptions
+ symOptions |= SYMOPT_LOAD_LINES;
+ symOptions |= SYMOPT_FAIL_CRITICAL_ERRORS;
+ //symOptions |= SYMOPT_NO_PROMPTS;
+ // SymSetOptions
+ symOptions = this->pSSO(symOptions);
+
+ char buf[StackWalker::STACKWALK_MAX_NAMELEN] = {0};
+ if (this->pSGSP != NULL)
+ {
+ if (this->pSGSP(m_hProcess, buf, StackWalker::STACKWALK_MAX_NAMELEN) == FALSE)
+ this->m_parent->OnDbgHelpErr("SymGetSearchPath", GetLastError(), 0);
+ }
+ char szUserName[1024] = {0};
+ DWORD dwSize = 1024;
+ GetUserNameA(szUserName, &dwSize);
+ this->m_parent->OnSymInit(buf, symOptions, szUserName);
+
+ return TRUE;
+ }
+
+ StackWalker *m_parent;
+
+ HMODULE m_hDbhHelp;
+ HANDLE m_hProcess;
+ LPSTR m_szSymPath;
+
+#pragma pack(push,8)
+struct IMAGEHLP_MODULE64_V3 {
+ DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64)
+ DWORD64 BaseOfImage; // base load address of module
+ DWORD ImageSize; // virtual size of the loaded module
+ DWORD TimeDateStamp; // date/time stamp from pe header
+ DWORD CheckSum; // checksum from the pe header
+ DWORD NumSyms; // number of symbols in the symbol table
+ SYM_TYPE SymType; // type of symbols loaded
+ CHAR ModuleName[32]; // module name
+ CHAR ImageName[256]; // image name
+ CHAR LoadedImageName[256]; // symbol file name
+ // new elements: 07-Jun-2002
+ CHAR LoadedPdbName[256]; // pdb file name
+ DWORD CVSig; // Signature of the CV record in the debug directories
+ CHAR CVData[MAX_PATH * 3]; // Contents of the CV record
+ DWORD PdbSig; // Signature of PDB
+ GUID PdbSig70; // Signature of PDB (VC 7 and up)
+ DWORD PdbAge; // DBI age of pdb
+ BOOL PdbUnmatched; // loaded an unmatched pdb
+ BOOL DbgUnmatched; // loaded an unmatched dbg
+ BOOL LineNumbers; // we have line number information
+ BOOL GlobalSymbols; // we have internal symbol information
+ BOOL TypeInfo; // we have type information
+ // new elements: 17-Dec-2003
+ BOOL SourceIndexed; // pdb supports source server
+ BOOL Publics; // contains public symbols
+};
+
+struct IMAGEHLP_MODULE64_V2 {
+ DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64)
+ DWORD64 BaseOfImage; // base load address of module
+ DWORD ImageSize; // virtual size of the loaded module
+ DWORD TimeDateStamp; // date/time stamp from pe header
+ DWORD CheckSum; // checksum from the pe header
+ DWORD NumSyms; // number of symbols in the symbol table
+ SYM_TYPE SymType; // type of symbols loaded
+ CHAR ModuleName[32]; // module name
+ CHAR ImageName[256]; // image name
+ CHAR LoadedImageName[256]; // symbol file name
+};
+#pragma pack(pop)
+
+
+ // SymCleanup()
+ typedef BOOL (__stdcall *tSC)( IN HANDLE hProcess );
+ tSC pSC;
+
+ // SymFunctionTableAccess64()
+ typedef PVOID (__stdcall *tSFTA)( HANDLE hProcess, DWORD64 AddrBase );
+ tSFTA pSFTA;
+
+ // SymGetLineFromAddr64()
+ typedef BOOL (__stdcall *tSGLFA)( IN HANDLE hProcess, IN DWORD64 dwAddr,
+ OUT PDWORD pdwDisplacement, OUT PIMAGEHLP_LINE64 Line );
+ tSGLFA pSGLFA;
+
+ // SymGetModuleBase64()
+ typedef DWORD64 (__stdcall *tSGMB)( IN HANDLE hProcess, IN DWORD64 dwAddr );
+ tSGMB pSGMB;
+
+ // SymGetModuleInfo64()
+ typedef BOOL (__stdcall *tSGMI)( IN HANDLE hProcess, IN DWORD64 dwAddr, OUT IMAGEHLP_MODULE64_V3 *ModuleInfo );
+ tSGMI pSGMI;
+
+ // SymGetOptions()
+ typedef DWORD (__stdcall *tSGO)( VOID );
+ tSGO pSGO;
+
+ // SymGetSymFromAddr64()
+ typedef BOOL (__stdcall *tSGSFA)( IN HANDLE hProcess, IN DWORD64 dwAddr,
+ OUT PDWORD64 pdwDisplacement, OUT PIMAGEHLP_SYMBOL64 Symbol );
+ tSGSFA pSGSFA;
+
+ // SymInitialize()
+ typedef BOOL (__stdcall *tSI)( IN HANDLE hProcess, IN PSTR UserSearchPath, IN BOOL fInvadeProcess );
+ tSI pSI;
+
+ // SymLoadModule64()
+ typedef DWORD64 (__stdcall *tSLM)( IN HANDLE hProcess, IN HANDLE hFile,
+ IN PSTR ImageName, IN PSTR ModuleName, IN DWORD64 BaseOfDll, IN DWORD SizeOfDll );
+ tSLM pSLM;
+
+ // SymSetOptions()
+ typedef DWORD (__stdcall *tSSO)( IN DWORD SymOptions );
+ tSSO pSSO;
+
+ // StackWalk64()
+ typedef BOOL (__stdcall *tSW)(
+ DWORD MachineType,
+ HANDLE hProcess,
+ HANDLE hThread,
+ LPSTACKFRAME64 StackFrame,
+ PVOID ContextRecord,
+ PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,
+ PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,
+ PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,
+ PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress );
+ tSW pSW;
+
+ // UnDecorateSymbolName()
+ typedef DWORD (__stdcall WINAPI *tUDSN)( PCSTR DecoratedName, PSTR UnDecoratedName,
+ DWORD UndecoratedLength, DWORD Flags );
+ tUDSN pUDSN;
+
+ typedef BOOL (__stdcall WINAPI *tSGSP)(HANDLE hProcess, PSTR SearchPath, DWORD SearchPathLength);
+ tSGSP pSGSP;
+
+
+private:
+ // **************************************** ToolHelp32 ************************
+ #define MAX_MODULE_NAME32 255
+ #define TH32CS_SNAPMODULE 0x00000008
+ #pragma pack( push, 8 )
+ typedef struct tagMODULEENTRY32
+ {
+ DWORD dwSize;
+ DWORD th32ModuleID; // This module
+ DWORD th32ProcessID; // owning process
+ DWORD GlblcntUsage; // Global usage count on the module
+ DWORD ProccntUsage; // Module usage count in th32ProcessID's context
+ BYTE * modBaseAddr; // Base address of module in th32ProcessID's context
+ DWORD modBaseSize; // Size in bytes of module starting at modBaseAddr
+ HMODULE hModule; // The hModule of this module in th32ProcessID's context
+ char szModule[MAX_MODULE_NAME32 + 1];
+ char szExePath[MAX_PATH];
+ } MODULEENTRY32;
+ typedef MODULEENTRY32 * PMODULEENTRY32;
+ typedef MODULEENTRY32 * LPMODULEENTRY32;
+ #pragma pack( pop )
+
+ BOOL GetModuleListTH32(HANDLE hProcess, DWORD pid)
+ {
+ // CreateToolhelp32Snapshot()
+ typedef HANDLE (__stdcall *tCT32S)(DWORD dwFlags, DWORD th32ProcessID);
+ // Module32First()
+ typedef BOOL (__stdcall *tM32F)(HANDLE hSnapshot, LPMODULEENTRY32 lpme);
+ // Module32Next()
+ typedef BOOL (__stdcall *tM32N)(HANDLE hSnapshot, LPMODULEENTRY32 lpme);
+
+ // try both dlls...
+ const TCHAR *dllname[] = { _T("kernel32.dll"), _T("tlhelp32.dll") };
+ HINSTANCE hToolhelp = NULL;
+ tCT32S pCT32S = NULL;
+ tM32F pM32F = NULL;
+ tM32N pM32N = NULL;
+
+ HANDLE hSnap;
+ MODULEENTRY32 me;
+ me.dwSize = sizeof(me);
+ BOOL keepGoing;
+ size_t i;
+
+ for (i = 0; i<(sizeof(dllname) / sizeof(dllname[0])); i++ )
+ {
+ hToolhelp = LoadLibrary( dllname[i] );
+ if (hToolhelp == NULL)
+ continue;
+ pCT32S = (tCT32S) GetProcAddress(hToolhelp, "CreateToolhelp32Snapshot");
+ pM32F = (tM32F) GetProcAddress(hToolhelp, "Module32First");
+ pM32N = (tM32N) GetProcAddress(hToolhelp, "Module32Next");
+ if ( (pCT32S != NULL) && (pM32F != NULL) && (pM32N != NULL) )
+ break; // found the functions!
+ FreeLibrary(hToolhelp);
+ hToolhelp = NULL;
+ }
+
+ if (hToolhelp == NULL)
+ return FALSE;
+
+ hSnap = pCT32S( TH32CS_SNAPMODULE, pid );
+ if (hSnap == (HANDLE) -1)
+ {
+ FreeLibrary(hToolhelp);
+ return FALSE;
+ }
+
+ keepGoing = !!pM32F( hSnap, &me );
+ int cnt = 0;
+ while (keepGoing)
+ {
+ this->LoadModule(hProcess, me.szExePath, me.szModule, (DWORD64) me.modBaseAddr, me.modBaseSize);
+ cnt++;
+ keepGoing = !!pM32N( hSnap, &me );
+ }
+ CloseHandle(hSnap);
+ FreeLibrary(hToolhelp);
+ if (cnt <= 0)
+ return FALSE;
+ return TRUE;
+ } // GetModuleListTH32
+
+ // **************************************** PSAPI ************************
+ typedef struct _MODULEINFO {
+ LPVOID lpBaseOfDll;
+ DWORD SizeOfImage;
+ LPVOID EntryPoint;
+ } MODULEINFO, *LPMODULEINFO;
+
+ BOOL GetModuleListPSAPI(HANDLE hProcess)
+ {
+ // EnumProcessModules()
+ typedef BOOL (__stdcall *tEPM)(HANDLE hProcess, HMODULE *lphModule, DWORD cb, LPDWORD lpcbNeeded );
+ // GetModuleFileNameEx()
+ typedef DWORD (__stdcall *tGMFNE)(HANDLE hProcess, HMODULE hModule, LPSTR lpFilename, DWORD nSize );
+ // GetModuleBaseName()
+ typedef DWORD (__stdcall *tGMBN)(HANDLE hProcess, HMODULE hModule, LPSTR lpFilename, DWORD nSize );
+ // GetModuleInformation()
+ typedef BOOL (__stdcall *tGMI)(HANDLE hProcess, HMODULE hModule, LPMODULEINFO pmi, DWORD nSize );
+
+ HINSTANCE hPsapi;
+ tEPM pEPM;
+ tGMFNE pGMFNE;
+ tGMBN pGMBN;
+ tGMI pGMI;
+
+ DWORD i;
+ //ModuleEntry e;
+ DWORD cbNeeded;
+ MODULEINFO mi;
+ HMODULE *hMods = 0;
+ char *tt = NULL;
+ char *tt2 = NULL;
+ const SIZE_T TTBUFLEN = 8096;
+ int cnt = 0;
+
+ hPsapi = LoadLibrary( _T("psapi.dll") );
+ if (hPsapi == NULL)
+ return FALSE;
+
+ pEPM = (tEPM) GetProcAddress( hPsapi, "EnumProcessModules" );
+ pGMFNE = (tGMFNE) GetProcAddress( hPsapi, "GetModuleFileNameExA" );
+ pGMBN = (tGMFNE) GetProcAddress( hPsapi, "GetModuleBaseNameA" );
+ pGMI = (tGMI) GetProcAddress( hPsapi, "GetModuleInformation" );
+ if ( (pEPM == NULL) || (pGMFNE == NULL) || (pGMBN == NULL) || (pGMI == NULL) )
+ {
+ // we couldn´t find all functions
+ FreeLibrary(hPsapi);
+ return FALSE;
+ }
+
+ hMods = (HMODULE*) malloc(sizeof(HMODULE) * (TTBUFLEN / sizeof(HMODULE)));
+ tt = (char*) malloc(sizeof(char) * TTBUFLEN);
+ tt2 = (char*) malloc(sizeof(char) * TTBUFLEN);
+ if ( (hMods == NULL) || (tt == NULL) || (tt2 == NULL) )
+ goto cleanup;
+
+ if ( ! pEPM( hProcess, hMods, TTBUFLEN, &cbNeeded ) )
+ {
+ //_ftprintf(fLogFile, _T("%lu: EPM failed, GetLastError = %lu\n"), g_dwShowCount, gle );
+ goto cleanup;
+ }
+
+ if ( cbNeeded > TTBUFLEN )
+ {
+ //_ftprintf(fLogFile, _T("%lu: More than %lu module handles. Huh?\n"), g_dwShowCount, lenof( hMods ) );
+ goto cleanup;
+ }
+
+ for ( i = 0; i < cbNeeded / sizeof(hMods[0]); i++ )
+ {
+ // base address, size
+ pGMI(hProcess, hMods[i], &mi, sizeof(mi));
+ // image file name
+ tt[0] = 0;
+ pGMFNE(hProcess, hMods[i], tt, TTBUFLEN );
+ // module name
+ tt2[0] = 0;
+ pGMBN(hProcess, hMods[i], tt2, TTBUFLEN );
+
+ DWORD dwRes = this->LoadModule(hProcess, tt, tt2, (DWORD64) mi.lpBaseOfDll, mi.SizeOfImage);
+ if (dwRes != ERROR_SUCCESS)
+ this->m_parent->OnDbgHelpErr("LoadModule", dwRes, 0);
+ cnt++;
+ }
+
+ cleanup:
+ if (hPsapi != NULL) FreeLibrary(hPsapi);
+ if (tt2 != NULL) free(tt2);
+ if (tt != NULL) free(tt);
+ if (hMods != NULL) free(hMods);
+
+ return cnt != 0;
+ } // GetModuleListPSAPI
+
+ DWORD LoadModule(HANDLE hProcess, LPCSTR img, LPCSTR mod, DWORD64 baseAddr, DWORD size)
+ {
+ CHAR *szImg = _strdup(img);
+ CHAR *szMod = _strdup(mod);
+ DWORD result = ERROR_SUCCESS;
+ if ( (szImg == NULL) || (szMod == NULL) )
+ result = ERROR_NOT_ENOUGH_MEMORY;
+ else
+ {
+ if (pSLM(hProcess, 0, szImg, szMod, baseAddr, size) == 0)
+ result = GetLastError();
+ }
+ ULONGLONG fileVersion = 0;
+ if ( (m_parent != NULL) && (szImg != NULL) )
+ {
+ // try to retrive the file-version:
+ if ( (this->m_parent->m_options & StackWalker::RetrieveFileVersion) != 0)
+ {
+ VS_FIXEDFILEINFO *fInfo = NULL;
+ DWORD dwHandle;
+ DWORD dwSize = GetFileVersionInfoSizeA(szImg, &dwHandle);
+ if (dwSize > 0)
+ {
+ LPVOID vData = malloc(dwSize);
+ if (vData != NULL)
+ {
+ if (GetFileVersionInfoA(szImg, dwHandle, dwSize, vData) != 0)
+ {
+ UINT len;
+ TCHAR szSubBlock[] = _T("\\");
+ if (VerQueryValue(vData, szSubBlock, (LPVOID*) &fInfo, &len) == 0)
+ fInfo = NULL;
+ else
+ {
+ fileVersion = ((ULONGLONG)fInfo->dwFileVersionLS) + ((ULONGLONG)fInfo->dwFileVersionMS << 32);
+ }
+ }
+ free(vData);
+ }
+ }
+ }
+
+ // Retrive some additional-infos about the module
+ IMAGEHLP_MODULE64_V3 Module;
+ const char *szSymType = "-unknown-";
+ if (this->GetModuleInfo(hProcess, baseAddr, &Module) != FALSE)
+ {
+ switch(Module.SymType)
+ {
+ case SymNone:
+ szSymType = "-nosymbols-";
+ break;
+ case SymCoff: // 1
+ szSymType = "COFF";
+ break;
+ case SymCv: // 2
+ szSymType = "CV";
+ break;
+ case SymPdb: // 3
+ szSymType = "PDB";
+ break;
+ case SymExport: // 4
+ szSymType = "-exported-";
+ break;
+ case SymDeferred: // 5
+ szSymType = "-deferred-";
+ break;
+ case SymSym: // 6
+ szSymType = "SYM";
+ break;
+ case 7: // SymDia:
+ szSymType = "DIA";
+ break;
+ case 8: //SymVirtual:
+ szSymType = "Virtual";
+ break;
+ default:
+ break;
+ }
+ }
+ LPCSTR pdbName = Module.LoadedImageName;
+ if (Module.LoadedPdbName[0] != 0)
+ pdbName = Module.LoadedPdbName;
+ this->m_parent->OnLoadModule(img, mod, baseAddr, size, result, szSymType, pdbName, fileVersion);
+ }
+ if (szImg != NULL) free(szImg);
+ if (szMod != NULL) free(szMod);
+ return result;
+ }
+public:
+ BOOL LoadModules(HANDLE hProcess, DWORD dwProcessId)
+ {
+ // first try toolhelp32
+ if (GetModuleListTH32(hProcess, dwProcessId))
+ return true;
+ // then try psapi
+ return GetModuleListPSAPI(hProcess);
+ }
+
+
+ BOOL GetModuleInfo(HANDLE hProcess, DWORD64 baseAddr, IMAGEHLP_MODULE64_V3 *pModuleInfo)
+ {
+ memset(pModuleInfo, 0, sizeof(IMAGEHLP_MODULE64_V3));
+ if(this->pSGMI == NULL)
+ {
+ SetLastError(ERROR_DLL_INIT_FAILED);
+ return FALSE;
+ }
+ // First try to use the larger ModuleInfo-Structure
+ pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V3);
+ void *pData = malloc(4096); // reserve enough memory, so the bug in v6.3.5.1 does not lead to memory-overwrites...
+ if (pData == NULL)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
+ memcpy(pData, pModuleInfo, sizeof(IMAGEHLP_MODULE64_V3));
+ static bool s_useV3Version = true;
+ if (s_useV3Version)
+ {
+ if (this->pSGMI(hProcess, baseAddr, (IMAGEHLP_MODULE64_V3*) pData) != FALSE)
+ {
+ // only copy as much memory as is reserved...
+ memcpy(pModuleInfo, pData, sizeof(IMAGEHLP_MODULE64_V3));
+ pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V3);
+ free(pData);
+ return TRUE;
+ }
+ s_useV3Version = false; // to prevent unneccessarry calls with the larger struct...
+ }
+
+ // could not retrive the bigger structure, try with the smaller one (as defined in VC7.1)...
+ pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V2);
+ memcpy(pData, pModuleInfo, sizeof(IMAGEHLP_MODULE64_V2));
+ if (this->pSGMI(hProcess, baseAddr, (IMAGEHLP_MODULE64_V3*) pData) != FALSE)
+ {
+ // only copy as much memory as is reserved...
+ memcpy(pModuleInfo, pData, sizeof(IMAGEHLP_MODULE64_V2));
+ pModuleInfo->SizeOfStruct = sizeof(IMAGEHLP_MODULE64_V2);
+ free(pData);
+ return TRUE;
+ }
+ free(pData);
+ SetLastError(ERROR_DLL_INIT_FAILED);
+ return FALSE;
+ }
+};
+
+// #############################################################
+StackWalker::StackWalker(DWORD dwProcessId, HANDLE hProcess)
+{
+ this->m_options = OptionsAll;
+ this->m_modulesLoaded = FALSE;
+ this->m_hProcess = hProcess;
+ this->m_sw = new StackWalkerInternal(this, this->m_hProcess);
+ this->m_dwProcessId = dwProcessId;
+ this->m_szSymPath = NULL;
+ this->m_MaxRecursionCount = 1000;
+}
+StackWalker::StackWalker(int options, LPCSTR szSymPath, DWORD dwProcessId, HANDLE hProcess)
+{
+ this->m_options = options;
+ this->m_modulesLoaded = FALSE;
+ this->m_hProcess = hProcess;
+ this->m_sw = new StackWalkerInternal(this, this->m_hProcess);
+ this->m_dwProcessId = dwProcessId;
+ if (szSymPath != NULL)
+ {
+ this->m_szSymPath = _strdup(szSymPath);
+ this->m_options |= SymBuildPath;
+ }
+ else
+ this->m_szSymPath = NULL;
+ this->m_MaxRecursionCount = 1000;
+}
+
+StackWalker::~StackWalker()
+{
+ if (m_szSymPath != NULL)
+ free(m_szSymPath);
+ m_szSymPath = NULL;
+ if (this->m_sw != NULL)
+ delete this->m_sw;
+ this->m_sw = NULL;
+}
+
+BOOL StackWalker::LoadModules()
+{
+ if (this->m_sw == NULL)
+ {
+ SetLastError(ERROR_DLL_INIT_FAILED);
+ return FALSE;
+ }
+ if (m_modulesLoaded != FALSE)
+ return TRUE;
+
+ // Build the sym-path:
+ char *szSymPath = NULL;
+ if ( (this->m_options & SymBuildPath) != 0)
+ {
+ const size_t nSymPathLen = 4096;
+ szSymPath = (char*) malloc(nSymPathLen);
+ if (szSymPath == NULL)
+ {
+ SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+ return FALSE;
+ }
+ szSymPath[0] = 0;
+ // Now first add the (optional) provided sympath:
+ if (this->m_szSymPath != NULL)
+ {
+ strcat_s(szSymPath, nSymPathLen, this->m_szSymPath);
+ strcat_s(szSymPath, nSymPathLen, ";");
+ }
+
+ strcat_s(szSymPath, nSymPathLen, ".;");
+
+ const size_t nTempLen = 1024;
+ char szTemp[nTempLen];
+ // Now add the current directory:
+ if (GetCurrentDirectoryA(nTempLen, szTemp) > 0)
+ {
+ szTemp[nTempLen-1] = 0;
+ strcat_s(szSymPath, nSymPathLen, szTemp);
+ strcat_s(szSymPath, nSymPathLen, ";");
+ }
+
+ // Now add the path for the main-module:
+ if (GetModuleFileNameA(NULL, szTemp, nTempLen) > 0)
+ {
+ szTemp[nTempLen-1] = 0;
+ for (char *p = (szTemp+strlen(szTemp)-1); p >= szTemp; --p)
+ {
+ // locate the rightmost path separator
+ if ( (*p == '\\') || (*p == '/') || (*p == ':') )
+ {
+ *p = 0;
+ break;
+ }
+ } // for (search for path separator...)
+ if (strlen(szTemp) > 0)
+ {
+ strcat_s(szSymPath, nSymPathLen, szTemp);
+ strcat_s(szSymPath, nSymPathLen, ";");
+ }
+ }
+ if (GetEnvironmentVariableA("_NT_SYMBOL_PATH", szTemp, nTempLen) > 0)
+ {
+ szTemp[nTempLen-1] = 0;
+ strcat_s(szSymPath, nSymPathLen, szTemp);
+ strcat_s(szSymPath, nSymPathLen, ";");
+ }
+ if (GetEnvironmentVariableA("_NT_ALTERNATE_SYMBOL_PATH", szTemp, nTempLen) > 0)
+ {
+ szTemp[nTempLen-1] = 0;
+ strcat_s(szSymPath, nSymPathLen, szTemp);
+ strcat_s(szSymPath, nSymPathLen, ";");
+ }
+ if (GetEnvironmentVariableA("SYSTEMROOT", szTemp, nTempLen) > 0)
+ {
+ szTemp[nTempLen-1] = 0;
+ strcat_s(szSymPath, nSymPathLen, szTemp);
+ strcat_s(szSymPath, nSymPathLen, ";");
+ // also add the "system32"-directory:
+ strcat_s(szTemp, nTempLen, "\\system32");
+ strcat_s(szSymPath, nSymPathLen, szTemp);
+ strcat_s(szSymPath, nSymPathLen, ";");
+ }
+
+ if ( (this->m_options & SymUseSymSrv) != 0)
+ {
+ if (GetEnvironmentVariableA("SYSTEMDRIVE", szTemp, nTempLen) > 0)
+ {
+ szTemp[nTempLen-1] = 0;
+ strcat_s(szSymPath, nSymPathLen, "SRV*");
+ strcat_s(szSymPath, nSymPathLen, szTemp);
+ strcat_s(szSymPath, nSymPathLen, "\\websymbols");
+ strcat_s(szSymPath, nSymPathLen, "*http://msdl.microsoft.com/download/symbols;");
+ }
+ else
+ strcat_s(szSymPath, nSymPathLen, "SRV*c:\\websymbols*http://msdl.microsoft.com/download/symbols;");
+ }
+ } // if SymBuildPath
+
+ // First Init the whole stuff...
+ BOOL bRet = this->m_sw->Init(szSymPath);
+ if (szSymPath != NULL)
+ free(szSymPath);
+
+ szSymPath = NULL;
+ if (bRet == FALSE)
+ {
+ this->OnDbgHelpErr("Error while initializing dbghelp.dll", 0, 0);
+ SetLastError(ERROR_DLL_INIT_FAILED);
+ return FALSE;
+ }
+
+ bRet = this->m_sw->LoadModules(this->m_hProcess, this->m_dwProcessId);
+ if (bRet != FALSE)
+ m_modulesLoaded = TRUE;
+ return bRet;
+}
+
+
+// The following is used to pass the "userData"-Pointer to the user-provided readMemoryFunction
+// This has to be done due to a problem with the "hProcess"-parameter in x64...
+// Because this class is in no case multi-threading-enabled (because of the limitations
+// of dbghelp.dll) it is "safe" to use a static-variable
+static StackWalker::PReadProcessMemoryRoutine s_readMemoryFunction = NULL;
+static LPVOID s_readMemoryFunction_UserData = NULL;
+
+BOOL StackWalker::ShowCallstack(HANDLE hThread, const CONTEXT *context, PReadProcessMemoryRoutine readMemoryFunction, LPVOID pUserData)
+{
+ CONTEXT c;
+ CallstackEntry csEntry;
+ IMAGEHLP_SYMBOL64 *pSym = NULL;
+ StackWalkerInternal::IMAGEHLP_MODULE64_V3 Module;
+ IMAGEHLP_LINE64 Line;
+ int frameNum;
+ bool bLastEntryCalled = true;
+ int curRecursionCount = 0;
+
+ if (m_modulesLoaded == FALSE)
+ this->LoadModules(); // ignore the result...
+
+ if (this->m_sw->m_hDbhHelp == NULL)
+ {
+ SetLastError(ERROR_DLL_INIT_FAILED);
+ return FALSE;
+ }
+
+ s_readMemoryFunction = readMemoryFunction;
+ s_readMemoryFunction_UserData = pUserData;
+
+ if (context == NULL)
+ {
+ // If no context is provided, capture the context
+ // See: https://stackwalker.codeplex.com/discussions/446958
+#if _WIN32_WINNT <= 0x0501
+ // If we need to support XP, we need to use the "old way", because "GetThreadId" is not available!
+ if (hThread == GetCurrentThread())
+#else
+ if (GetThreadId(hThread) == GetCurrentThreadId())
+#endif
+ {
+ GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, USED_CONTEXT_FLAGS);
+ }
+ else
+ {
+ SuspendThread(hThread);
+ memset(&c, 0, sizeof(CONTEXT));
+ c.ContextFlags = USED_CONTEXT_FLAGS;
+
+ // TODO: Detect if you want to get a thread context of a different process, which is running a different processor architecture...
+ // This does only work if we are x64 and the target process is x64 or x86;
+ // It cannnot work, if this process is x64 and the target process is x64... this is not supported...
+ // See also: http://www.howzatt.demon.co.uk/articles/DebuggingInWin64.html
+ if (GetThreadContext(hThread, &c) == FALSE)
+ {
+ ResumeThread(hThread);
+ return FALSE;
+ }
+ }
+ }
+ else
+ c = *context;
+
+ // init STACKFRAME for first call
+ STACKFRAME64 s; // in/out stackframe
+ memset(&s, 0, sizeof(s));
+ DWORD imageType;
+#ifdef _M_IX86
+ // normally, call ImageNtHeader() and use machine info from PE header
+ imageType = IMAGE_FILE_MACHINE_I386;
+ s.AddrPC.Offset = c.Eip;
+ s.AddrPC.Mode = AddrModeFlat;
+ s.AddrFrame.Offset = c.Ebp;
+ s.AddrFrame.Mode = AddrModeFlat;
+ s.AddrStack.Offset = c.Esp;
+ s.AddrStack.Mode = AddrModeFlat;
+#elif _M_X64
+ imageType = IMAGE_FILE_MACHINE_AMD64;
+ s.AddrPC.Offset = c.Rip;
+ s.AddrPC.Mode = AddrModeFlat;
+ s.AddrFrame.Offset = c.Rsp;
+ s.AddrFrame.Mode = AddrModeFlat;
+ s.AddrStack.Offset = c.Rsp;
+ s.AddrStack.Mode = AddrModeFlat;
+#elif _M_IA64
+ imageType = IMAGE_FILE_MACHINE_IA64;
+ s.AddrPC.Offset = c.StIIP;
+ s.AddrPC.Mode = AddrModeFlat;
+ s.AddrFrame.Offset = c.IntSp;
+ s.AddrFrame.Mode = AddrModeFlat;
+ s.AddrBStore.Offset = c.RsBSP;
+ s.AddrBStore.Mode = AddrModeFlat;
+ s.AddrStack.Offset = c.IntSp;
+ s.AddrStack.Mode = AddrModeFlat;
+#else
+#error "Platform not supported!"
+#endif
+
+ pSym = (IMAGEHLP_SYMBOL64 *) malloc(sizeof(IMAGEHLP_SYMBOL64) + STACKWALK_MAX_NAMELEN);
+ if (!pSym) goto cleanup; // not enough memory...
+ memset(pSym, 0, sizeof(IMAGEHLP_SYMBOL64) + STACKWALK_MAX_NAMELEN);
+ pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL64);
+ pSym->MaxNameLength = STACKWALK_MAX_NAMELEN;
+
+ memset(&Line, 0, sizeof(Line));
+ Line.SizeOfStruct = sizeof(Line);
+
+ memset(&Module, 0, sizeof(Module));
+ Module.SizeOfStruct = sizeof(Module);
+
+ for (frameNum = 0; ; ++frameNum )
+ {
+ // get next stack frame (StackWalk64(), SymFunctionTableAccess64(), SymGetModuleBase64())
+ // if this returns ERROR_INVALID_ADDRESS (487) or ERROR_NOACCESS (998), you can
+ // assume that either you are done, or that the stack is so hosed that the next
+ // deeper frame could not be found.
+ // CONTEXT need not to be suplied if imageTyp is IMAGE_FILE_MACHINE_I386!
+ if ( ! this->m_sw->pSW(imageType, this->m_hProcess, hThread, &s, &c, myReadProcMem, this->m_sw->pSFTA, this->m_sw->pSGMB, NULL) )
+ {
+ // INFO: "StackWalk64" does not set "GetLastError"...
+ this->OnDbgHelpErr("StackWalk64", 0, s.AddrPC.Offset);
+ break;
+ }
+
+ csEntry.offset = s.AddrPC.Offset;
+ csEntry.name[0] = 0;
+ csEntry.undName[0] = 0;
+ csEntry.undFullName[0] = 0;
+ csEntry.offsetFromSmybol = 0;
+ csEntry.offsetFromLine = 0;
+ csEntry.lineFileName[0] = 0;
+ csEntry.lineNumber = 0;
+ csEntry.loadedImageName[0] = 0;
+ csEntry.moduleName[0] = 0;
+ if (s.AddrPC.Offset == s.AddrReturn.Offset)
+ {
+ if ( (this->m_MaxRecursionCount > 0) && (curRecursionCount > m_MaxRecursionCount) )
+ {
+ this->OnDbgHelpErr("StackWalk64-Endless-Callstack!", 0, s.AddrPC.Offset);
+ break;
+ }
+ curRecursionCount++;
+ }
+ else
+ curRecursionCount = 0;
+ if (s.AddrPC.Offset != 0)
+ {
+ // we seem to have a valid PC
+ // show procedure info (SymGetSymFromAddr64())
+ if (this->m_sw->pSGSFA(this->m_hProcess, s.AddrPC.Offset, &(csEntry.offsetFromSmybol), pSym) != FALSE)
+ {
+ MyStrCpy(csEntry.name, STACKWALK_MAX_NAMELEN, pSym->Name);
+ // UnDecorateSymbolName()
+ this->m_sw->pUDSN( pSym->Name, csEntry.undName, STACKWALK_MAX_NAMELEN, UNDNAME_NAME_ONLY );
+ this->m_sw->pUDSN( pSym->Name, csEntry.undFullName, STACKWALK_MAX_NAMELEN, UNDNAME_COMPLETE );
+ }
+ else
+ {
+ this->OnDbgHelpErr("SymGetSymFromAddr64", GetLastError(), s.AddrPC.Offset);
+ }
+
+ // show line number info, NT5.0-method (SymGetLineFromAddr64())
+ if (this->m_sw->pSGLFA != NULL )
+ { // yes, we have SymGetLineFromAddr64()
+ if (this->m_sw->pSGLFA(this->m_hProcess, s.AddrPC.Offset, &(csEntry.offsetFromLine), &Line) != FALSE)
+ {
+ csEntry.lineNumber = Line.LineNumber;
+ MyStrCpy(csEntry.lineFileName, STACKWALK_MAX_NAMELEN, Line.FileName);
+ }
+ else
+ {
+ this->OnDbgHelpErr("SymGetLineFromAddr64", GetLastError(), s.AddrPC.Offset);
+ }
+ } // yes, we have SymGetLineFromAddr64()
+
+ // show module info (SymGetModuleInfo64())
+ if (this->m_sw->GetModuleInfo(this->m_hProcess, s.AddrPC.Offset, &Module ) != FALSE)
+ { // got module info OK
+ switch ( Module.SymType )
+ {
+ case SymNone:
+ csEntry.symTypeString = "-nosymbols-";
+ break;
+ case SymCoff:
+ csEntry.symTypeString = "COFF";
+ break;
+ case SymCv:
+ csEntry.symTypeString = "CV";
+ break;
+ case SymPdb:
+ csEntry.symTypeString = "PDB";
+ break;
+ case SymExport:
+ csEntry.symTypeString = "-exported-";
+ break;
+ case SymDeferred:
+ csEntry.symTypeString = "-deferred-";
+ break;
+ case SymSym:
+ csEntry.symTypeString = "SYM";
+ break;
+#if API_VERSION_NUMBER >= 9
+ case SymDia:
+ csEntry.symTypeString = "DIA";
+ break;
+#endif
+ case 8: //SymVirtual:
+ csEntry.symTypeString = "Virtual";
+ break;
+ default:
+ //_snprintf( ty, sizeof(ty), "symtype=%ld", (long) Module.SymType );
+ csEntry.symTypeString = NULL;
+ break;
+ }
+
+ MyStrCpy(csEntry.moduleName, STACKWALK_MAX_NAMELEN, Module.ModuleName);
+ csEntry.baseOfImage = Module.BaseOfImage;
+ MyStrCpy(csEntry.loadedImageName, STACKWALK_MAX_NAMELEN, Module.LoadedImageName);
+ } // got module info OK
+ else
+ {
+ this->OnDbgHelpErr("SymGetModuleInfo64", GetLastError(), s.AddrPC.Offset);
+ }
+ } // we seem to have a valid PC
+
+ CallstackEntryType et = nextEntry;
+ if (frameNum == 0)
+ et = firstEntry;
+ bLastEntryCalled = false;
+ this->OnCallstackEntry(et, csEntry);
+
+ if (s.AddrReturn.Offset == 0)
+ {
+ bLastEntryCalled = true;
+ this->OnCallstackEntry(lastEntry, csEntry);
+ SetLastError(ERROR_SUCCESS);
+ break;
+ }
+ } // for ( frameNum )
+
+ cleanup:
+ if (pSym) free( pSym );
+
+ if (bLastEntryCalled == false)
+ this->OnCallstackEntry(lastEntry, csEntry);
+
+ if (context == NULL)
+ ResumeThread(hThread);
+
+ return TRUE;
+}
+
+BOOL __stdcall StackWalker::myReadProcMem(
+ HANDLE hProcess,
+ DWORD64 qwBaseAddress,
+ PVOID lpBuffer,
+ DWORD nSize,
+ LPDWORD lpNumberOfBytesRead
+ )
+{
+ if (s_readMemoryFunction == NULL)
+ {
+ SIZE_T st;
+ BOOL bRet = ReadProcessMemory(hProcess, (LPVOID) qwBaseAddress, lpBuffer, nSize, &st);
+ *lpNumberOfBytesRead = (DWORD) st;
+ //printf("ReadMemory: hProcess: %p, baseAddr: %p, buffer: %p, size: %d, read: %d, result: %d\n", hProcess, (LPVOID) qwBaseAddress, lpBuffer, nSize, (DWORD) st, (DWORD) bRet);
+ return bRet;
+ }
+ else
+ {
+ return s_readMemoryFunction(hProcess, qwBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead, s_readMemoryFunction_UserData);
+ }
+}
+
+void StackWalker::OnLoadModule(LPCSTR img, LPCSTR mod, DWORD64 baseAddr, DWORD size, DWORD result, LPCSTR symType, LPCSTR pdbName, ULONGLONG fileVersion)
+{
+ CHAR buffer[STACKWALK_MAX_NAMELEN];
+ if (fileVersion == 0)
+ _snprintf_s(buffer, STACKWALK_MAX_NAMELEN, "%s:%s (%p), size: %d (result: %d), SymType: '%s', PDB: '%s'\n", img, mod, (LPVOID) baseAddr, size, result, symType, pdbName);
+ else
+ {
+ DWORD v4 = (DWORD) (fileVersion & 0xFFFF);
+ DWORD v3 = (DWORD) ((fileVersion>>16) & 0xFFFF);
+ DWORD v2 = (DWORD) ((fileVersion>>32) & 0xFFFF);
+ DWORD v1 = (DWORD) ((fileVersion>>48) & 0xFFFF);
+ _snprintf_s(buffer, STACKWALK_MAX_NAMELEN, "%s:%s (%p), size: %d (result: %d), SymType: '%s', PDB: '%s', fileVersion: %d.%d.%d.%d\n", img, mod, (LPVOID) baseAddr, size, result, symType, pdbName, v1, v2, v3, v4);
+ }
+ OnOutput(buffer);
+}
+
+void StackWalker::OnCallstackEntry(CallstackEntryType eType, CallstackEntry &entry)
+{
+ CHAR buffer[STACKWALK_MAX_NAMELEN];
+ if ( (eType != lastEntry) && (entry.offset != 0) )
+ {
+ if (entry.name[0] == 0)
+ MyStrCpy(entry.name, STACKWALK_MAX_NAMELEN, "(function-name not available)");
+ if (entry.undName[0] != 0)
+ MyStrCpy(entry.name, STACKWALK_MAX_NAMELEN, entry.undName);
+ if (entry.undFullName[0] != 0)
+ MyStrCpy(entry.name, STACKWALK_MAX_NAMELEN, entry.undFullName);
+ if (entry.lineFileName[0] == 0)
+ {
+ MyStrCpy(entry.lineFileName, STACKWALK_MAX_NAMELEN, "(filename not available)");
+ if (entry.moduleName[0] == 0)
+ MyStrCpy(entry.moduleName, STACKWALK_MAX_NAMELEN, "(module-name not available)");
+ _snprintf_s(buffer, STACKWALK_MAX_NAMELEN, "%p (%s): %s: %s\n", (LPVOID) entry.offset, entry.moduleName, entry.lineFileName, entry.name);
+ }
+ else
+ _snprintf_s(buffer, STACKWALK_MAX_NAMELEN, "%s (%d): %s\n", entry.lineFileName, entry.lineNumber, entry.name);
+ buffer[STACKWALK_MAX_NAMELEN-1] = 0;
+ OnOutput(buffer);
+ }
+}
+
+void StackWalker::OnDbgHelpErr(LPCSTR szFuncName, DWORD gle, DWORD64 addr)
+{
+ CHAR buffer[STACKWALK_MAX_NAMELEN];
+ _snprintf_s(buffer, STACKWALK_MAX_NAMELEN, "ERROR: %s, GetLastError: %d (Address: %p)\n", szFuncName, gle, (LPVOID) addr);
+ OnOutput(buffer);
+}
+
+void StackWalker::OnSymInit(LPCSTR szSearchPath, DWORD symOptions, LPCSTR szUserName)
+{
+ CHAR buffer[STACKWALK_MAX_NAMELEN];
+ _snprintf_s(buffer, STACKWALK_MAX_NAMELEN, "SymInit: Symbol-SearchPath: '%s', symOptions: %d, UserName: '%s'\n", szSearchPath, symOptions, szUserName);
+ OnOutput(buffer);
+ // Also display the OS-version
+#if _MSC_VER <= 1200
+ OSVERSIONINFOA ver;
+ ZeroMemory(&ver, sizeof(OSVERSIONINFOA));
+ ver.dwOSVersionInfoSize = sizeof(ver);
+ if (GetVersionExA(&ver) != FALSE)
+ {
+ _snprintf_s(buffer, STACKWALK_MAX_NAMELEN, "OS-Version: %d.%d.%d (%s)\n",
+ ver.dwMajorVersion, ver.dwMinorVersion, ver.dwBuildNumber,
+ ver.szCSDVersion);
+ OnOutput(buffer);
+ }
+#else
+ OSVERSIONINFOEXA ver;
+ ZeroMemory(&ver, sizeof(OSVERSIONINFOEXA));
+ ver.dwOSVersionInfoSize = sizeof(ver);
+#if _MSC_VER >= 1900
+#pragma warning(push)
+#pragma warning(disable: 4996)
+#endif
+ if (GetVersionExA( (OSVERSIONINFOA*) &ver) != FALSE)
+ {
+ _snprintf_s(buffer, STACKWALK_MAX_NAMELEN, "OS-Version: %d.%d.%d (%s) 0x%x-0x%x\n",
+ ver.dwMajorVersion, ver.dwMinorVersion, ver.dwBuildNumber,
+ ver.szCSDVersion, ver.wSuiteMask, ver.wProductType);
+ OnOutput(buffer);
+ }
+#if _MSC_VER >= 1900
+#pragma warning(pop)
+#endif
+#endif
+}
+
+void StackWalker::OnOutput(LPCSTR buffer)
+{
+ OutputDebugStringA(buffer);
+}
+
+#endif
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/windows/StackWalker.h b/SQLiteStudio3/coreSQLiteStudio/chillout/windows/StackWalker.h
new file mode 100644
index 0000000..cd1a982
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/windows/StackWalker.h
@@ -0,0 +1,222 @@
+/**********************************************************************
+ *
+ * StackWalker.h
+ *
+ *
+ *
+ * LICENSE (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Copyright (c) 2005-2009, Jochen Kalmbach
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of Jochen Kalmbach nor the names of its contributors may be
+ * used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * **********************************************************************/
+// #pragma once is supported starting with _MCS_VER 1000,
+// so we need not to check the version (because we only support _MSC_VER >= 1100)!
+#pragma once
+
+#ifdef _WIN32
+
+#include <windows.h>
+
+#if _MSC_VER >= 1900
+#pragma warning(disable : 4091)
+#endif
+
+// special defines for VC5/6 (if no actual PSDK is installed):
+#if _MSC_VER < 1300
+typedef unsigned __int64 DWORD64, *PDWORD64;
+#if defined(_WIN64)
+typedef unsigned __int64 SIZE_T, *PSIZE_T;
+#else
+typedef unsigned long SIZE_T, *PSIZE_T;
+#endif
+#endif // _MSC_VER < 1300
+
+class StackWalkerInternal; // forward
+class StackWalker
+{
+public:
+ typedef enum StackWalkOptions
+ {
+ // No addition info will be retrived
+ // (only the address is available)
+ RetrieveNone = 0,
+
+ // Try to get the symbol-name
+ RetrieveSymbol = 1,
+
+ // Try to get the line for this symbol
+ RetrieveLine = 2,
+
+ // Try to retrieve the module-infos
+ RetrieveModuleInfo = 4,
+
+ // Also retrieve the version for the DLL/EXE
+ RetrieveFileVersion = 8,
+
+ // Contains all the abouve
+ RetrieveVerbose = 0xF,
+
+ // Generate a "good" symbol-search-path
+ SymBuildPath = 0x10,
+
+ // Also use the public Microsoft-Symbol-Server
+ SymUseSymSrv = 0x20,
+
+ // Contains all the abouve "Sym"-options
+ SymAll = 0x30,
+
+ // Contains all options (default)
+ OptionsAll = 0x3F
+ } StackWalkOptions;
+
+ StackWalker(
+ int options = OptionsAll, // 'int' is by design, to combine the enum-flags
+ LPCSTR szSymPath = NULL,
+ DWORD dwProcessId = GetCurrentProcessId(),
+ HANDLE hProcess = GetCurrentProcess()
+ );
+ StackWalker(DWORD dwProcessId, HANDLE hProcess);
+ virtual ~StackWalker();
+
+ typedef BOOL (__stdcall *PReadProcessMemoryRoutine)(
+ HANDLE hProcess,
+ DWORD64 qwBaseAddress,
+ PVOID lpBuffer,
+ DWORD nSize,
+ LPDWORD lpNumberOfBytesRead,
+ LPVOID pUserData // optional data, which was passed in "ShowCallstack"
+ );
+
+ BOOL LoadModules();
+
+ BOOL ShowCallstack(
+ HANDLE hThread = GetCurrentThread(),
+ const CONTEXT *context = NULL,
+ PReadProcessMemoryRoutine readMemoryFunction = NULL,
+ LPVOID pUserData = NULL // optional to identify some data in the 'readMemoryFunction'-callback
+ );
+
+#if _MSC_VER >= 1300
+// due to some reasons, the "STACKWALK_MAX_NAMELEN" must be declared as "public"
+// in older compilers in order to use it... starting with VC7 we can declare it as "protected"
+protected:
+#endif
+ enum { STACKWALK_MAX_NAMELEN = 1024 }; // max name length for found symbols
+
+protected:
+ // Entry for each Callstack-Entry
+ typedef struct CallstackEntry
+ {
+ DWORD64 offset; // if 0, we have no valid entry
+ CHAR name[STACKWALK_MAX_NAMELEN];
+ CHAR undName[STACKWALK_MAX_NAMELEN];
+ CHAR undFullName[STACKWALK_MAX_NAMELEN];
+ DWORD64 offsetFromSmybol;
+ DWORD offsetFromLine;
+ DWORD lineNumber;
+ CHAR lineFileName[STACKWALK_MAX_NAMELEN];
+ DWORD symType;
+ LPCSTR symTypeString;
+ CHAR moduleName[STACKWALK_MAX_NAMELEN];
+ DWORD64 baseOfImage;
+ CHAR loadedImageName[STACKWALK_MAX_NAMELEN];
+ } CallstackEntry;
+
+ enum CallstackEntryType {firstEntry, nextEntry, lastEntry};
+
+ virtual void OnSymInit(LPCSTR szSearchPath, DWORD symOptions, LPCSTR szUserName);
+ virtual void OnLoadModule(LPCSTR img, LPCSTR mod, DWORD64 baseAddr, DWORD size, DWORD result, LPCSTR symType, LPCSTR pdbName, ULONGLONG fileVersion);
+ virtual void OnCallstackEntry(CallstackEntryType eType, CallstackEntry &entry);
+ virtual void OnDbgHelpErr(LPCSTR szFuncName, DWORD gle, DWORD64 addr);
+ virtual void OnOutput(LPCSTR szText);
+
+ StackWalkerInternal *m_sw;
+ HANDLE m_hProcess;
+ DWORD m_dwProcessId;
+ BOOL m_modulesLoaded;
+ LPSTR m_szSymPath;
+
+ int m_options;
+ int m_MaxRecursionCount;
+
+ static BOOL __stdcall myReadProcMem(HANDLE hProcess, DWORD64 qwBaseAddress, PVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead);
+
+ friend StackWalkerInternal;
+}; // class StackWalker
+
+
+// The "ugly" assembler-implementation is needed for systems before XP
+// If you have a new PSDK and you only compile for XP and later, then you can use
+// the "RtlCaptureContext"
+// Currently there is no define which determines the PSDK-Version...
+// So we just use the compiler-version (and assumes that the PSDK is
+// the one which was installed by the VS-IDE)
+
+// INFO: If you want, you can use the RtlCaptureContext if you only target XP and later...
+// But I currently use it in x64/IA64 environments...
+#if defined(_M_IX86) && (_WIN32_WINNT <= 0x0500) && (_MSC_VER < 1400)
+
+//#if defined(_M_IX86)
+#ifdef CURRENT_THREAD_VIA_EXCEPTION
+// TODO: The following is not a "good" implementation,
+// because the callstack is only valid in the "__except" block...
+#define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \
+ do { \
+ memset(&c, 0, sizeof(CONTEXT)); \
+ EXCEPTION_POINTERS *pExp = NULL; \
+ __try { \
+ throw 0; \
+ } __except( ( (pExp = GetExceptionInformation()) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_EXECUTE_HANDLER)) {} \
+ if (pExp != NULL) \
+ memcpy(&c, pExp->ContextRecord, sizeof(CONTEXT)); \
+ c.ContextFlags = contextFlags; \
+ } while(0);
+#else
+// The following should be enough for walking the callstack...
+#define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \
+ do { \
+ memset(&c, 0, sizeof(CONTEXT)); \
+ c.ContextFlags = contextFlags; \
+ __asm call x \
+ __asm x: pop eax \
+ __asm mov c.Eip, eax \
+ __asm mov c.Ebp, ebp \
+ __asm mov c.Esp, esp \
+ } while(0);
+#endif
+
+#else
+
+// The following is defined for x86 (XP and higher), x64 and IA64:
+#define GET_CURRENT_CONTEXT_STACKWALKER_CODEPLEX(c, contextFlags) \
+ do { \
+ memset(&c, 0, sizeof(CONTEXT)); \
+ c.ContextFlags = contextFlags; \
+ RtlCaptureContext(&c); \
+} while(0);
+#endif
+
+#endif
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/windows/windowscrashhandler.cpp b/SQLiteStudio3/coreSQLiteStudio/chillout/windows/windowscrashhandler.cpp
new file mode 100644
index 0000000..aa9767c
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/windows/windowscrashhandler.cpp
@@ -0,0 +1,671 @@
+#ifdef _WIN32
+
+#include "windowscrashhandler.h"
+#include "../defines.h"
+
+#include <tchar.h>
+#include <stdio.h>
+#include "StackWalker.h"
+
+// minidump
+#include <windows.h>
+#include <TlHelp32.h>
+//#include <tchar.h>
+#include <dbghelp.h>
+//#include <stdio.h>
+#include <crtdbg.h>
+#include <signal.h>
+
+#include <locale>
+#include <codecvt>
+#include <ctime>
+#include <sstream>
+#include "../common/common.h"
+
+#ifdef _MSC_VER
+#if _MSC_VER < 1400
+#define strcpy_s(dst, len, src) strcpy(dst, src)
+#define strncpy_s(dst, len, src, maxLen) strncpy(dst, len, src)
+#define strcat_s(dst, len, src) strcat(dst, src)
+#define _snprintf_s _snprintf
+#define _tcscat_s _tcscat
+#endif
+#endif
+
+#ifdef __MINGW32__
+#define strcpy_s(dst, len, src) strcpy(dst, src)
+#define strncpy_s(dst, len, src, maxLen) strncpy(dst, src, len)
+#define strcat_s(dst, len, src) strcat(dst, src)
+#define _snprintf_s _snprintf
+#endif
+
+#define CR_SEH_EXCEPTION 0 //!< SEH exception.
+#define CR_CPP_TERMINATE_CALL 1 //!< C++ terminate() call.
+#define CR_CPP_UNEXPECTED_CALL 2 //!< C++ unexpected() call.
+#define CR_CPP_PURE_CALL 3 //!< C++ pure virtual function call (VS .NET and later).
+#define CR_CPP_NEW_OPERATOR_ERROR 4 //!< C++ new operator fault (VS .NET and later).
+#define CR_CPP_SECURITY_ERROR 5 //!< Buffer overrun error (VS .NET only).
+#define CR_CPP_INVALID_PARAMETER 6 //!< Invalid parameter exception (VS 2005 and later).
+#define CR_CPP_SIGABRT 7 //!< C++ SIGABRT signal (abort).
+#define CR_CPP_SIGFPE 8 //!< C++ SIGFPE signal (flotating point exception).
+#define CR_CPP_SIGILL 9 //!< C++ SIGILL signal (illegal instruction).
+#define CR_CPP_SIGINT 10 //!< C++ SIGINT signal (CTRL+C).
+#define CR_CPP_SIGSEGV 11 //!< C++ SIGSEGV signal (invalid storage access).
+#define CR_CPP_SIGTERM 12 //!< C++ SIGTERM signal (termination request).
+
+#define STRINGIZE_(x) #x
+#define STRINGIZE(x) STRINGIZE_(x)
+
+#ifndef _AddressOfReturnAddress
+ // Taken from: http://msdn.microsoft.com/en-us/library/s975zw7k(VS.71).aspx
+ #ifdef __cplusplus
+ #define EXTERNC extern "C"
+ #else
+ #define EXTERNC
+ #endif
+
+ // _ReturnAddress and _AddressOfReturnAddress should be prototyped before use
+ EXTERNC void * _AddressOfReturnAddress(void);
+ EXTERNC void * _ReturnAddress(void);
+#endif
+
+#pragma GCC diagnostic ignored "-Wcast-function-type"
+
+namespace Debug {
+ class StackWalkerWithCallback : public StackWalker
+ {
+ public:
+ StackWalkerWithCallback(const std::function<void(const char * const)> &callback):
+ StackWalker(RetrieveVerbose | SymBuildPath),
+ m_callback(callback)
+ { }
+
+ protected:
+ virtual void OnOutput(LPCSTR szText) override {
+ m_callback(szText);
+ }
+
+ private:
+ std::function<void(const char * const)> m_callback;
+ };
+
+ BOOL PreventSetUnhandledExceptionFilter()
+ {
+ HMODULE hKernel32 = LoadLibrary(_T("kernel32.dll"));
+ if (hKernel32 == NULL) return FALSE;
+ void* pOrgEntry = reinterpret_cast<void*>(GetProcAddress(hKernel32, "SetUnhandledExceptionFilter"));
+ if (pOrgEntry == NULL) return FALSE;
+
+#ifdef _M_IX86
+ // Code for x86:
+ // 33 C0 xor eax,eax
+ // C2 04 00 ret 4
+ unsigned char szExecute[] = { 0x33, 0xC0, 0xC2, 0x04, 0x00 };
+#elif _M_X64
+ // 33 C0 xor eax,eax
+ // C3 ret
+ unsigned char szExecute[] = { 0x33, 0xC0, 0xC3 };
+#else
+#error "The following code only works for x86 and x64!"
+#endif
+
+ SIZE_T bytesWritten = 0;
+ BOOL bRet = WriteProcessMemory(GetCurrentProcess(),
+ pOrgEntry, szExecute, sizeof(szExecute), &bytesWritten);
+ return bRet;
+ }
+
+ BOOL CALLBACK MyMiniDumpCallback(
+ PVOID pParam,
+ const PMINIDUMP_CALLBACK_INPUT pInput,
+ PMINIDUMP_CALLBACK_OUTPUT pOutput
+ )
+ {
+ BOOL bRet = FALSE;
+
+ // Check parameters
+
+ if( pInput == 0 )
+ return FALSE;
+
+ if( pOutput == 0 )
+ return FALSE;
+
+ // Process the callbacks
+ WindowsCrashHandler *handler = (WindowsCrashHandler*)pParam;
+
+ switch( pInput->CallbackType )
+ {
+ case IncludeModuleCallback:
+ {
+ // Include the module into the dump
+ bRet = TRUE;
+ }
+ break;
+
+ case IncludeThreadCallback:
+ {
+ // Include the thread into the dump
+ bRet = TRUE;
+ }
+ break;
+
+ case ModuleCallback:
+ {
+ // Are data sections available for this module ?
+ if( pOutput->ModuleWriteFlags & ModuleWriteDataSeg )
+ {
+ // Yes, they are, but do we need them?
+
+ if( !handler->isDataSectionNeeded( pInput->Module.FullPath ) )
+ {
+ pOutput->ModuleWriteFlags &= (~ModuleWriteDataSeg);
+ }
+ }
+
+ if( !(pOutput->ModuleWriteFlags & ModuleReferencedByMemory) )
+ {
+ // No, it does not - exclude it
+ pOutput->ModuleWriteFlags &= (~ModuleWriteModule);
+ }
+
+ bRet = TRUE;
+ }
+ break;
+
+ case ThreadCallback:
+ {
+ // Include all thread information into the minidump
+ bRet = TRUE;
+ }
+ break;
+
+ case ThreadExCallback:
+ {
+ // Include this information
+ bRet = TRUE;
+ }
+ break;
+
+ case MemoryCallback:
+ {
+ // We do not include any information here -> return FALSE
+ bRet = FALSE;
+ }
+ break;
+
+ case CancelCallback:
+ break;
+ }
+
+ return bRet;
+
+ }
+
+ void DoHandleCrash() {
+ WindowsCrashHandler &handler = WindowsCrashHandler::getInstance();
+ handler.handleCrash();
+ }
+
+ // http://groups.google.com/group/crashrpt/browse_thread/thread/a1dbcc56acb58b27/fbd0151dd8e26daf?lnk=gst&q=stack+overflow#fbd0151dd8e26daf
+ // Thread procedure doing the dump for stack overflow.
+ DWORD WINAPI StackOverflowThreadFunction(LPVOID) {
+ DoHandleCrash();
+ TerminateProcess(GetCurrentProcess(), CHILLOUT_EXIT_CODE);
+ return 0;
+ }
+
+ static LONG WINAPI SehHandler(EXCEPTION_POINTERS*) {
+#ifdef _DEBUG
+ fprintf(stderr, "Chillout SehHandler");
+#endif
+
+ DoHandleCrash();
+
+ TerminateProcess(GetCurrentProcess(), CHILLOUT_EXIT_CODE);
+
+ // unreachable
+ return EXCEPTION_EXECUTE_HANDLER;
+ }
+
+ // The following code is intended to fix the issue with 32-bit applications in 64-bit environment.
+ // http://support.microsoft.com/kb/976038/en-us
+ // http://code.google.com/p/crashrpt/issues/detail?id=104
+ void EnableCrashingOnCrashes() {
+ typedef BOOL (WINAPI *tGetPolicy)(LPDWORD lpFlags);
+ typedef BOOL (WINAPI *tSetPolicy)(DWORD dwFlags);
+ static const DWORD EXCEPTION_SWALLOWING = 0x1;
+
+ const HMODULE kernel32 = LoadLibraryA("kernel32.dll");
+ const tGetPolicy pGetPolicy = reinterpret_cast<tGetPolicy>(GetProcAddress(kernel32, "GetProcessUserModeExceptionPolicy"));
+ const tSetPolicy pSetPolicy = reinterpret_cast<tSetPolicy>(GetProcAddress(kernel32, "SetProcessUserModeExceptionPolicy"));
+ if(pGetPolicy && pSetPolicy)
+ {
+ DWORD dwFlags;
+ if(pGetPolicy(&dwFlags))
+ {
+ // Turn off the filter
+ pSetPolicy(dwFlags & ~EXCEPTION_SWALLOWING);
+ }
+ }
+ }
+
+ WindowsCrashHandler::WindowsCrashHandler() {
+ m_oldSehHandler = NULL;
+
+#if _MSC_VER>=1300
+ m_prevPurec = NULL;
+ m_prevNewHandler = NULL;
+#endif
+
+#if _MSC_VER>=1300 && _MSC_VER<1400
+ m_prevSec = NULL;
+#endif
+
+#if _MSC_VER>=1400
+ m_prevInvpar = NULL;
+#endif
+
+ m_prevSigABRT = NULL;
+ m_prevSigINT = NULL;
+ m_prevSigTERM = NULL;
+ }
+
+ void WindowsCrashHandler::setup(const std::wstring &appName, const std::wstring &dumpsDir) {
+ m_appName = appName;
+
+ if (!appName.empty() && !dumpsDir.empty()) {
+ std::wstring path = dumpsDir;
+ while ((path.size() > 1) &&
+ (path[path.size() - 1] == L'\\')) {
+ path.erase(path.size() - 1);
+ }
+ }
+
+ EnableCrashingOnCrashes();
+ setProcessExceptionHandlers();
+ setThreadExceptionHandlers();
+ }
+
+ void WindowsCrashHandler::teardown() {
+ unsetProcessExceptionHandlers();
+ unsetThreadExceptionHandlers();
+ }
+
+ void WindowsCrashHandler::setCrashCallback(const std::function<void()> &callback) {
+ m_crashCallback = callback;
+ }
+
+ void WindowsCrashHandler::setBacktraceCallback(const std::function<void(const char * const)> &callback) {
+ m_backtraceCallback = callback;
+ }
+
+ void WindowsCrashHandler::handleCrash() {
+ std::lock_guard<std::mutex> guard(m_crashMutex);
+ (void)guard;
+
+ if (m_crashCallback) {
+ m_crashCallback();
+ }
+
+ // Terminate process
+ TerminateProcess(GetCurrentProcess(), CHILLOUT_EXIT_CODE);
+ }
+
+ bool WindowsCrashHandler::isDataSectionNeeded(const WCHAR* pModuleName) {
+ if( pModuleName == 0 ) {
+ _ASSERTE( _T("Parameter is null.") );
+ return false;
+ }
+
+ // Extract the module name
+
+ WCHAR szFileName[_MAX_FNAME] = L"";
+ _wsplitpath( pModuleName, NULL, NULL, szFileName, NULL );
+
+ // Compare the name with the list of known names and decide
+ // if contains app name in its path
+ if( wcsstr( pModuleName, m_appName.c_str() ) != 0 ) {
+ return true;
+ } else if( _wcsicmp( szFileName, L"ntdll" ) == 0 ) {
+ return true;
+ } else if( wcsstr( szFileName, L"Qt5" ) != 0 ) {
+ return true;
+ }
+
+ // Complete
+ return false;
+ }
+
+ void WindowsCrashHandler::setProcessExceptionHandlers() {
+ //SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS);
+ m_oldSehHandler = SetUnhandledExceptionFilter(SehHandler);
+#if defined _M_X64 || defined _M_IX86
+ if (m_oldSehHandler)
+ PreventSetUnhandledExceptionFilter();
+#endif
+
+#if _MSC_VER>=1300
+ // Catch pure virtual function calls.
+ // Because there is one _purecall_handler for the whole process,
+ // calling this function immediately impacts all threads. The last
+ // caller on any thread sets the handler.
+ // http://msdn.microsoft.com/en-us/library/t296ys27.aspx
+ m_prevPurec = _set_purecall_handler(PureCallHandler);
+
+ // Catch new operator memory allocation exceptions
+ //_set_new_mode(1); // Force malloc() to call new handler too
+ m_prevNewHandler = _set_new_handler(NewHandler);
+#endif
+
+#if _MSC_VER>=1400
+ // Catch invalid parameter exceptions.
+ m_prevInvpar = _set_invalid_parameter_handler(InvalidParameterHandler);
+#endif
+
+#if _MSC_VER>=1300 && _MSC_VER<1400
+ // Catch buffer overrun exceptions
+ // The _set_security_error_handler is deprecated in VC8 C++ run time library
+ m_prevSec = _set_security_error_handler(SecurityHandler);
+#endif
+
+#if _MSC_VER>=1400
+ _set_abort_behavior(0, _WRITE_ABORT_MSG);
+ _set_abort_behavior(_CALL_REPORTFAULT, _CALL_REPORTFAULT);
+#endif
+
+#if defined(_MSC_VER)
+ // Disable all of the possible ways Windows conspires to make automated
+ // testing impossible.
+
+ // ::SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
+ // ::_set_error_mode(_OUT_TO_STDERR);
+
+ // _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ // _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
+ // _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ // _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
+ // _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ // _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
+
+ m_crtReportHook = _CrtSetReportHook(CrtReportHook);
+#endif
+
+ // Set up C++ signal handlers
+ SetConsoleCtrlHandler(ConsoleCtrlHandler, true);
+
+ // Catch an abnormal program termination
+ m_prevSigABRT = signal(SIGABRT, SigabrtHandler);
+
+ // Catch illegal instruction handler
+ m_prevSigINT = signal(SIGINT, SigintHandler);
+
+ // Catch a termination request
+ m_prevSigINT = signal(SIGTERM, SigtermHandler);
+ }
+
+ void WindowsCrashHandler::unsetProcessExceptionHandlers() {
+#if _MSC_VER>=1300
+ if(m_prevPurec!=NULL) {
+ _set_purecall_handler(m_prevPurec);
+ }
+
+ if(m_prevNewHandler!=NULL) {
+ _set_new_handler(m_prevNewHandler);
+ }
+#endif
+
+#if _MSC_VER>=1400
+ if(m_prevInvpar!=NULL) {
+ _set_invalid_parameter_handler(m_prevInvpar);
+ }
+#endif //_MSC_VER>=1400
+
+#if _MSC_VER>=1300 && _MSC_VER<1400
+ if(m_prevSec!=NULL)
+ _set_security_error_handler(m_prevSec);
+#endif //_MSC_VER<1400
+
+ if(m_prevSigABRT!=NULL) {
+ signal(SIGABRT, m_prevSigABRT);
+ }
+
+ if(m_prevSigINT!=NULL) {
+ signal(SIGINT, m_prevSigINT);
+ }
+
+ if(m_prevSigTERM!=NULL) {
+ signal(SIGTERM, m_prevSigTERM);
+ }
+
+ // Reset SEH exception filter
+ if (m_oldSehHandler) {
+ SetUnhandledExceptionFilter(m_oldSehHandler);
+ }
+
+ m_oldSehHandler = NULL;
+ }
+
+ int WindowsCrashHandler::setThreadExceptionHandlers()
+ {
+ DWORD dwThreadId = GetCurrentThreadId();
+
+ std::lock_guard<std::mutex> guard(m_threadHandlersMutex);
+
+ auto it = m_threadExceptionHandlers.find(dwThreadId);
+ if (it != m_threadExceptionHandlers.end()) {
+ // handlers are already set for the thread
+ return 1; // failed
+ }
+
+ ThreadExceptionHandlers handlers;
+
+ // Catch terminate() calls.
+ // In a multithreaded environment, terminate functions are maintained
+ // separately for each thread. Each new thread needs to install its own
+ // terminate function. Thus, each thread is in charge of its own termination handling.
+ // http://msdn.microsoft.com/en-us/library/t6fk7h29.aspx
+ handlers.m_prevTerm = std::set_terminate(TerminateHandler);
+
+ // Catch unexpected() calls.
+ // In a multithreaded environment, unexpected functions are maintained
+ // separately for each thread. Each new thread needs to install its own
+ // unexpected function. Thus, each thread is in charge of its own unexpected handling.
+ // http://msdn.microsoft.com/en-us/library/h46t5b69.aspx
+ handlers.m_prevUnexp = std::set_unexpected(UnexpectedHandler);
+
+ // Catch a floating point error
+ typedef void (*sigh)(int);
+ handlers.m_prevSigFPE = signal(SIGFPE, (sigh)SigfpeHandler);
+
+ // Catch an illegal instruction
+ handlers.m_prevSigILL = signal(SIGILL, SigillHandler);
+
+ // Catch illegal storage access errors
+ handlers.m_prevSigSEGV = signal(SIGSEGV, SigsegvHandler);
+
+ m_threadExceptionHandlers[dwThreadId] = handlers;
+
+ return 0;
+ }
+
+ int WindowsCrashHandler::unsetThreadExceptionHandlers() {
+ DWORD dwThreadId = GetCurrentThreadId();
+ std::lock_guard<std::mutex> guard(m_threadHandlersMutex);
+ (void)guard;
+
+ auto it = m_threadExceptionHandlers.find(dwThreadId);
+ if (it == m_threadExceptionHandlers.end()) {
+ return 1;
+ }
+
+ ThreadExceptionHandlers* handlers = &(it->second);
+
+ if(handlers->m_prevTerm!=NULL) {
+ std::set_terminate(handlers->m_prevTerm);
+ }
+
+ if(handlers->m_prevUnexp!=NULL) {
+ std::set_unexpected(handlers->m_prevUnexp);
+ }
+
+ if(handlers->m_prevSigFPE!=NULL) {
+ signal(SIGFPE, handlers->m_prevSigFPE);
+ }
+
+ if(handlers->m_prevSigILL!=NULL) {
+ signal(SIGINT, handlers->m_prevSigILL);
+ }
+
+ if(handlers->m_prevSigSEGV!=NULL) {
+ signal(SIGSEGV, handlers->m_prevSigSEGV);
+ }
+
+ // Remove from the list
+ m_threadExceptionHandlers.erase(it);
+
+ return 0;
+ }
+
+ int __cdecl WindowsCrashHandler::CrtReportHook(int nReportType, char* szMsg, int* pnRet) {
+ (void)szMsg;
+
+ switch (nReportType) {
+ case _CRT_WARN:
+ case _CRT_ERROR:
+ case _CRT_ASSERT:
+ // Put some debug code here
+ break;
+ }
+
+ if (pnRet) {
+ *pnRet = 0;
+ }
+
+ return TRUE;
+ }
+
+ // CRT terminate() call handler
+ void __cdecl WindowsCrashHandler::TerminateHandler() {
+ // Abnormal program termination (terminate() function was called)
+ DoHandleCrash();
+ }
+
+ // CRT unexpected() call handler
+ void __cdecl WindowsCrashHandler::UnexpectedHandler() {
+ // Unexpected error (unexpected() function was called)
+ DoHandleCrash();
+ }
+
+ // CRT Pure virtual method call handler
+ void __cdecl WindowsCrashHandler::PureCallHandler() {
+ // Pure virtual function call
+ DoHandleCrash();
+ }
+
+ // CRT buffer overrun handler. Available in CRT 7.1 only
+#if _MSC_VER>=1300 && _MSC_VER<1400
+ void __cdecl WindowsCrashHandler::SecurityHandler(int code, void *x)
+ {
+ // Security error (buffer overrun).
+
+ code;
+ x;
+
+ EXCEPTION_POINTERS* pExceptionPtrs = (PEXCEPTION_POINTERS)_pxcptinfoptrs;
+ if (pExceptionPtrs == nullptr) {
+ GetExceptionPointers(CR_CPP_SECURITY_ERROR, &pExceptionPtrs);
+ }
+
+ DoHandleCrash(pExceptionPtrs);
+ }
+#endif
+
+#if _MSC_VER>=1400
+ // CRT invalid parameter handler
+ void __cdecl WindowsCrashHandler::InvalidParameterHandler(
+ const wchar_t* expression,
+ const wchar_t* function,
+ const wchar_t* file,
+ unsigned int line,
+ uintptr_t pReserved) {
+ pReserved;
+ expression;
+ function;
+ file;
+ line;
+
+ // fwprintf(stderr, L"Invalid parameter detected in function %s."
+ // L" File: %s Line: %d\n", function, file, line);
+
+ // Retrieve exception information
+ EXCEPTION_POINTERS* pExceptionPtrs = NULL;
+ GetExceptionPointers(CR_CPP_INVALID_PARAMETER, &pExceptionPtrs);
+
+ DoHandleCrash(pExceptionPtrs);
+ }
+#endif
+
+ // CRT new operator fault handler
+ int __cdecl WindowsCrashHandler::NewHandler(size_t) {
+ // 'new' operator memory allocation exception
+ DoHandleCrash();
+
+ // Unreacheable code
+ return 0;
+ }
+
+ // CRT SIGABRT signal handler
+ void WindowsCrashHandler::SigabrtHandler(int) {
+ // Caught SIGABRT C++ signal
+ DoHandleCrash();
+ }
+
+ // CRT SIGFPE signal handler
+ void WindowsCrashHandler::SigfpeHandler(int /*code*/, int subcode) {
+ // Floating point exception (SIGFPE)
+ (void)subcode;
+ DoHandleCrash();
+ }
+
+ // CRT sigill signal handler
+ void WindowsCrashHandler::SigillHandler(int) {
+ // Illegal instruction (SIGILL)
+ DoHandleCrash();
+ }
+
+ // CRT sigint signal handler
+ void WindowsCrashHandler::SigintHandler(int) {
+ // Interruption (SIGINT)
+ DoHandleCrash();
+ }
+
+ // CRT SIGSEGV signal handler
+ void WindowsCrashHandler::SigsegvHandler(int) {
+ // Invalid storage access (SIGSEGV)
+ DoHandleCrash();
+ }
+
+ // CRT SIGTERM signal handler
+ void WindowsCrashHandler::SigtermHandler(int) {
+ // Termination request (SIGTERM)
+ DoHandleCrash();
+ }
+
+ // CRT SIGTERM signal handler
+ BOOL WINAPI WindowsCrashHandler::ConsoleCtrlHandler(DWORD type) {
+ // Termination request (CTRL_C_EVENT)
+ switch (type)
+ {
+ case CTRL_C_EVENT:
+ case CTRL_LOGOFF_EVENT:
+ case CTRL_SHUTDOWN_EVENT:
+ case CTRL_CLOSE_EVENT:
+ DoHandleCrash();
+ break;
+ }
+ return false;
+ }
+}
+
+#endif
diff --git a/SQLiteStudio3/coreSQLiteStudio/chillout/windows/windowscrashhandler.h b/SQLiteStudio3/coreSQLiteStudio/chillout/windows/windowscrashhandler.h
new file mode 100644
index 0000000..9d7e70f
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/chillout/windows/windowscrashhandler.h
@@ -0,0 +1,147 @@
+#ifndef CRASHHANDLER_H
+#define CRASHHANDLER_H
+
+#ifdef _WIN32
+
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+#include <windows.h>
+#include <tchar.h>
+#include <stdio.h>
+#include <conio.h>
+#include <stdlib.h>
+#include <new.h>
+#include <signal.h>
+#include <exception>
+#include <sys/stat.h>
+#include <psapi.h>
+#include <rtcapi.h>
+#include <Shellapi.h>
+#include <dbghelp.h>
+
+#include <functional>
+#include <mutex>
+#include <string>
+#include <map>
+
+#include "../common/common.h"
+
+#ifdef __MINGW32__
+ typedef int (__cdecl *_CRT_REPORT_HOOK)(int,char *,int *);
+#endif
+
+namespace Debug {
+ struct ThreadExceptionHandlers
+ {
+ ThreadExceptionHandlers()
+ {
+ m_prevTerm = NULL;
+ m_prevUnexp = NULL;
+ m_prevSigFPE = NULL;
+ m_prevSigILL = NULL;
+ m_prevSigSEGV = NULL;
+ }
+
+ std::terminate_handler m_prevTerm; // Previous terminate handler
+ std::unexpected_handler m_prevUnexp; // Previous unexpected handler
+ void (__cdecl *m_prevSigFPE)(int); // Previous FPE handler
+ void (__cdecl *m_prevSigILL)(int); // Previous SIGILL handler
+ void (__cdecl *m_prevSigSEGV)(int); // Previous illegal storage access handler
+ };
+
+ // code mostly from https://www.codeproject.com/articles/207464/WebControls/
+ class WindowsCrashHandler
+ {
+ public:
+ static WindowsCrashHandler& getInstance()
+ {
+ static WindowsCrashHandler instance; // Guaranteed to be destroyed.
+ // Instantiated on first use.
+ return instance;
+ }
+
+ private:
+ WindowsCrashHandler();
+
+ public:
+ void setup(const std::wstring &appName, const std::wstring &dumpsDir);
+ void teardown();
+ void setCrashCallback(const std::function<void()> &callback);
+ void setBacktraceCallback(const std::function<void(const char * const)> &callback);
+ void handleCrash();
+
+ public:
+ bool isDataSectionNeeded(const WCHAR* pModuleName);
+
+ public:
+ // Sets exception handlers that work on per-process basis
+ void setProcessExceptionHandlers();
+ void unsetProcessExceptionHandlers();
+
+ // Installs C++ exception handlers that function on per-thread basis
+ int setThreadExceptionHandlers();
+ int unsetThreadExceptionHandlers();
+
+ /* Exception handler functions. */
+
+ static int __cdecl CrtReportHook(int nReportType, char* szMsg, int* pnRet);
+
+ static void __cdecl TerminateHandler();
+ static void __cdecl UnexpectedHandler();
+
+ static void __cdecl PureCallHandler();
+#if _MSC_VER>=1300 && _MSC_VER<1400
+ // Buffer overrun handler (deprecated in newest versions of Visual C++).
+ // Since CRT 8.0, you can't intercept the buffer overrun errors in your code. When a buffer overrun is detected, CRT invokes Dr. Watson directly
+ static void __cdecl SecurityHandler(int code, void *x);
+#endif
+
+#if _MSC_VER>=1400
+ static void __cdecl InvalidParameterHandler(const wchar_t* expression,
+ const wchar_t* function, const wchar_t* file, unsigned int line, uintptr_t pReserved);
+#endif
+
+ static int __cdecl NewHandler(size_t);
+
+ static void SigabrtHandler(int);
+ static void SigfpeHandler(int /*code*/, int subcode);
+ static void SigintHandler(int);
+ static void SigillHandler(int);
+ static void SigsegvHandler(int);
+ static void SigtermHandler(int);
+ static BOOL WINAPI ConsoleCtrlHandler(DWORD type);
+
+ private:
+ std::function<void()> m_crashCallback;
+ std::function<void(const char * const)> m_backtraceCallback;
+ std::mutex m_crashMutex;
+ std::wstring m_appName;
+
+ std::map<DWORD, ThreadExceptionHandlers> m_threadExceptionHandlers;
+ std::mutex m_threadHandlersMutex;
+
+ // Previous SEH exception filter.
+ LPTOP_LEVEL_EXCEPTION_FILTER m_oldSehHandler;
+
+#if _MSC_VER>=1300
+ _purecall_handler m_prevPurec; // Previous pure virtual call exception filter.
+ _PNH m_prevNewHandler; // Previous new operator exception filter.
+#endif
+
+#if _MSC_VER>=1400
+ _invalid_parameter_handler m_prevInvpar; // Previous invalid parameter exception filter.
+#endif
+
+#if _MSC_VER>=1300 && _MSC_VER<1400
+ _secerr_handler_func m_prevSec; // Previous security exception filter.
+#endif
+
+ void (__cdecl *m_prevSigABRT)(int); // Previous SIGABRT handler.
+ void (__cdecl *m_prevSigINT)(int); // Previous SIGINT handler.
+ void (__cdecl *m_prevSigTERM)(int); // Previous SIGTERM handler.
+ };
+}
+
+#endif
+
+#endif // CRASHHANDLER_H
+
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/bistrhash.cpp b/SQLiteStudio3/coreSQLiteStudio/common/bistrhash.cpp
index 5aac017..f2c1b2c 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/bistrhash.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/common/bistrhash.cpp
@@ -17,6 +17,15 @@ BiStrHash::BiStrHash(const BiStrHash& other) : hash(other.hash), inverted(other.
{
}
+BiStrHash& BiStrHash::operator=(const BiStrHash& other)
+{
+ this->hash = other.hash;
+ this->inverted = other.inverted;
+ this->lowerHash = other.lowerHash;
+ this->lowerInverted = other.lowerInverted;
+ return *this;
+}
+
void BiStrHash::insert(const QString& left, const QString& right)
{
if (lowerHash.contains(left.toLower()))
@@ -163,6 +172,14 @@ QString BiStrHash::valueByLeft(const QString& left, Qt::CaseSensitivity cs) cons
return hash.value(lowerHash.value(left.toLower()));
}
+QString BiStrHash::valueByLeft(const QString& left, const QString& defaultValue, Qt::CaseSensitivity cs) const
+{
+ if (containsLeft(left, cs))
+ return valueByLeft(left, cs);
+
+ return defaultValue;
+}
+
QString BiStrHash::valueByRight(const QString& right, Qt::CaseSensitivity cs) const
{
if (cs == Qt::CaseSensitive)
@@ -171,6 +188,14 @@ QString BiStrHash::valueByRight(const QString& right, Qt::CaseSensitivity cs) co
return inverted.value(lowerInverted.value(right.toLower()));
}
+QString BiStrHash::valueByRight(const QString& right, const QString& defaultValue, Qt::CaseSensitivity cs) const
+{
+ if (containsRight(right, cs))
+ return valueByRight(right, cs);
+
+ return defaultValue;
+}
+
QStringList BiStrHash::leftValues() const
{
return hash.keys();
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/bistrhash.h b/SQLiteStudio3/coreSQLiteStudio/common/bistrhash.h
index cec9b8a..0ad80ea 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/bistrhash.h
+++ b/SQLiteStudio3/coreSQLiteStudio/common/bistrhash.h
@@ -1,7 +1,6 @@
#ifndef BISTRHASH_H
#define BISTRHASH_H
-#include "bihash.h"
#include "coreSQLiteStudio_global.h"
#include <QHash>
#include <QString>
@@ -44,6 +43,8 @@ class API_EXPORT BiStrHash
*/
BiStrHash(const BiStrHash& other);
+ BiStrHash& operator=(const BiStrHash& other);
+
/**
* @brief Inserts entry into the hash.
* @param left Left-side value to insert.
@@ -123,6 +124,15 @@ class API_EXPORT BiStrHash
QString valueByLeft(const QString& left, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
/**
+ * @brief Finds right-side value by matching the left-side value or returns defaultValue if not matched.
+ * @param left Left-side value to match.
+ * @param defaultValue Value to be returned if requested left key cannot be found.
+ * @param cs Case sensitivity flag.
+ * @return Right-side value, or provided default value if left-side value was not matched.
+ */
+ QString valueByLeft(const QString& left, const QString& defaultValue, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+
+ /**
* @brief Finds left-side value by matching the right-side value.
* @param right Right-side value to match.
* @param cs Case sensitivity flag.
@@ -131,6 +141,15 @@ class API_EXPORT BiStrHash
QString valueByRight(const QString& right, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
/**
+ * @brief Finds left-side value by matching the right-side value or returns defaultValue if not matched.
+ * @param right Right-side value to match.
+ * @param defaultValue Value to be returned if requested right key cannot be found.
+ * @param cs Case sensitivity flag.
+ * @return Left-side value, or provided default value if right-side value was not matched.
+ */
+ QString valueByRight(const QString& right, const QString& defaultValue, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+
+ /**
* @brief Gives all left-side values.
* @return List of values.
*/
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/compatibility.cpp b/SQLiteStudio3/coreSQLiteStudio/common/compatibility.cpp
index 9676105..c5918c4 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/compatibility.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/common/compatibility.cpp
@@ -1,2 +1,9 @@
#include "compatibility.h"
+void strSort(QStringList& collection, Qt::CaseSensitivity cs)
+{
+ std::stable_sort(collection.begin(), collection.end(), [cs](const QString& v1, const QString& v2) -> bool
+ {
+ return v1.compare(v2, cs) < 0;
+ });
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/compatibility.h b/SQLiteStudio3/coreSQLiteStudio/common/compatibility.h
index 5ed5c8b..97637b0 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/compatibility.h
+++ b/SQLiteStudio3/coreSQLiteStudio/common/compatibility.h
@@ -1,6 +1,7 @@
#ifndef COMPATIBILITY_H
#define COMPATIBILITY_H
+#include "coreSQLiteStudio_global.h"
#include <QList>
#include <QSet>
#include <QHash>
@@ -37,4 +38,6 @@ void sSort(T& collection, C cmp)
std::sort(collection.begin(), collection.end(), cmp);
}
+API_EXPORT void strSort(QStringList& collection, Qt::CaseSensitivity cs);
+
#endif // COMPATIBILITY_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/global.h b/SQLiteStudio3/coreSQLiteStudio/common/global.h
index e09391a..c056abb 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/global.h
+++ b/SQLiteStudio3/coreSQLiteStudio/common/global.h
@@ -39,9 +39,7 @@
var = nullptr; \
}
-#define parser_safe_delete(var) \
- if (var) \
- delete var
+#define parser_safe_delete(var) delete var
#define static_char static constexpr const char
@@ -74,4 +72,19 @@
#define STRINGIFY(s) _STRINGIFY(s)
#define _STRINGIFY(s) #s
+#define __SQLS_INIT_RESOURCE(proj, name) Q_INIT_RESOURCE(proj ## _ ## name)
+#define __SQLS_CLEANUP_RESOURCE(proj, name) Q_CLEANUP_RESOURCE(proj ## _ ## name)
+#define _SQLS_INIT_RESOURCE(pname, name) __SQLS_INIT_RESOURCE(pname, name)
+#define _SQLS_CLEANUP_RESOURCE(pname, name) __SQLS_CLEANUP_RESOURCE(pname, name)
+
+// These are replacements for Qt's macros to cover customized resource naming,
+// which is used to avoid duplication of qmake_qmake_qm_files resource initialization function across different shared libraries.
+#ifdef PROJECT_MODULE_NAME
+# define SQLS_INIT_RESOURCE(name) _SQLS_INIT_RESOURCE(PROJECT_MODULE_NAME, name)
+# define SQLS_CLEANUP_RESOURCE(name) _SQLS_CLEANUP_RESOURCE(PROJECT_MODULE_NAME, name)
+#else
+# define SQLS_INIT_RESOURCE(name)
+# define SQLS_CLEANUP_RESOURCE(name)
+#endif
+
#endif // GLOBAL_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/utils.cpp b/SQLiteStudio3/coreSQLiteStudio/common/utils.cpp
index 0b95a85..a572330 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/utils.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/common/utils.cpp
@@ -54,6 +54,7 @@ void initUtils()
{
qRegisterMetaType<QList<int>>("QList<int>");
qRegisterMetaType<DbObjectType>("DbObjectType");
+ qRegisterMetaType<QList<QPair<QString, QString>>>("QList<QPair<QString, QString>>");
}
bool isXDigit(const QChar& c)
@@ -805,7 +806,7 @@ QString getOsString()
DistributionType getDistributionType()
{
#if defined(Q_OS_OSX)
- return DistributionType::OSX_BOUNDLE;
+ return DistributionType::OSX_BUNDLE;
#elif defined(PORTABLE_CONFIG)
return DistributionType::PORTABLE;
#else
@@ -966,12 +967,14 @@ QStringList concat(const QList<QStringList>& list)
QString doubleToString(const QVariant& val)
{
QString str = val.toString();
- if (str.contains("e"))
+ if (str.contains("e") || str.midRef(str.indexOf('.') + 1).length() > 14)
+ {
str = QString::number(val.toDouble(), 'f', 14).remove(QRegExp("0*$"));
+ if (str.endsWith("."))
+ str += "0";
+ }
else if (!str.contains('.'))
str += ".0";
- else if (str.mid(str.indexOf('.') + 1).length() > 14)
- str = QString::number(val.toDouble(), 'f', 14).remove(QRegExp("0*$"));
return str;
}
@@ -1097,3 +1100,31 @@ uint qHash(const QVariant& var)
// could not generate a hash for the given variant
return -2;
}
+
+QString indentMultiline(const QString& str)
+{
+ QStringList lines = str.split("\n");
+ for (QString& line : lines)
+ line = line.prepend(" ");
+
+ return lines.join("\n");
+}
+
+QString toNativePath(const QString& path)
+{
+ return QDir::toNativeSeparators(path);
+}
+
+QStringList sharedLibFileFilters()
+{
+ static QStringList filters({
+#ifdef Q_OS_WIN
+ "*.dll"
+#elif defined Q_OS_MACOS
+ "*.dylib"
+#elif defined Q_OS_LINUX || Q_OS_BSD
+ "*.so"
+#endif
+ });
+ return filters;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/utils.h b/SQLiteStudio3/coreSQLiteStudio/common/utils.h
index f7317e2..0ceecc5 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/utils.h
+++ b/SQLiteStudio3/coreSQLiteStudio/common/utils.h
@@ -2,6 +2,7 @@
#define UTILS_H
#include "coreSQLiteStudio_global.h"
+#include <functional>
#include <QList>
#include <QMutableListIterator>
#include <QSet>
@@ -66,6 +67,7 @@ API_EXPORT QStringList tokenizeArgs(const QString& str);
API_EXPORT QStringList prefixEach(const QString& prefix, const QStringList& list);
API_EXPORT QByteArray hashToBytes(const QHash<QString,QVariant>& hash);
API_EXPORT QHash<QString,QVariant> bytesToHash(const QByteArray& bytes);
+API_EXPORT QString indentMultiline(const QString& str);
/**
* @brief indexOf Extension to QStringList::indexOf().
*
@@ -261,6 +263,7 @@ API_EXPORT QTextCodec* defaultCodec();
API_EXPORT QTextCodec* codecForName(const QString& name);
API_EXPORT QStringList splitByLines(const QString& str);
API_EXPORT QString joinLines(const QStringList& lines);
+API_EXPORT QStringList sharedLibFileFilters();
API_EXPORT int sum(const QList<int>& integers);
API_EXPORT QString getOsString();
API_EXPORT bool validateEmail(const QString& email);
@@ -289,7 +292,7 @@ API_EXPORT void sortWithReferenceList(QList<QString>& listToSort, const QList<QS
enum class DistributionType
{
PORTABLE,
- OSX_BOUNDLE,
+ OSX_BUNDLE,
OS_MANAGED
};
@@ -305,6 +308,36 @@ QList<T> reverse(const QList<T>& list)
return result;
}
+template <class S, class T>
+QList<T> map(const QList<S>& list, std::function<T(S)> transformer)
+{
+ QList<T> result;
+ for (const S& el : list)
+ result << transformer(el);
+
+ return result;
+}
+
+template <class S, class T>
+QHash<S, T> toHash(const QList<S>& list, std::function<T(S)> transformer)
+{
+ QHash<S, T> result;
+ for (const S& el : list)
+ result[el] = transformer(el);
+
+ return result;
+}
+
+template <class S, class T>
+QSet<T> map(const QSet<S>& set, std::function<T(S)> transformer)
+{
+ QSet<T> result;
+ for (const S& el : set)
+ result << transformer(el);
+
+ return result;
+}
+
template <class T>
void removeDuplicates(QList<T>& list)
{
@@ -328,6 +361,8 @@ API_EXPORT QVariant deserializeFromBytes(const QByteArray& bytes);
API_EXPORT QString readFileContents(const QString& path, QString* err);
+API_EXPORT QString toNativePath(const QString& path);
+
Q_DECLARE_METATYPE(QList<int>)
#endif // UTILS_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp b/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp
index c8d63e1..0122352 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.cpp
@@ -4,14 +4,13 @@
#include "parser/token.h"
#include "parser/lexer.h"
#include "parser/keywords.h"
-#include "log.h"
#include <QHash>
#include <QPair>
#include <QString>
#include <QDebug>
#include <QMetaType>
-QString invalidIdCharacters = "[]()\"'@*.,+-=/%&|:; \t\n<>";
+QString invalidIdCharacters = "[](){}\"'@*.,+-=/#$%&|:; \t\n<>";
QHash<NameWrapper,QPair<QChar,QChar>> wrapperChars;
QHash<NameWrapper,QPair<QChar,bool>> wrapperEscapedEnding;
QList<NameWrapper> sqlite3Wrappers;
@@ -41,10 +40,15 @@ bool doesObjectNeedWrapping(const QString& str)
if (str.isEmpty())
return true;
- if (isObjWrapped(str))
- return false;
+ // It used to return false if object name looked to be wrapped already,
+ // but actually name [abc] is proper name that needs to be wrapped (i.e. "[abc]").
+ // Bug reported for this was #4362
+ //if (isObjWrapped(str))
+ // return false;
- if (isKeyword(str))
+ // The "soft keyword" check added, as they don't require wrapping.
+ // For example: SELECT replace('abc', 'a', '1');
+ if (isKeyword(str) && !isSoftKeyword(str))
return true;
for (int i = 0; i < str.size(); i++)
@@ -580,12 +584,80 @@ QString getQueryWithPosition(const QStringList& queries, int position, int* star
return QString();
}
+int getCursorFinalPositionForQueries(const QString& queries, int position)
+{
+ const static QSet<QChar> whitespaceChars = {' ', '\t'};
+
+ int len = queries.length();
+ if (position >= len || position < 1)
+ return position;
+
+ if (!whitespaceChars.contains(queries[position]) && queries[position] != '\xa')
+ return position;
+
+ // First checking characters at & after cursor - are they just whitespaces until end of line?
+ int newPos = position;
+ while (newPos < len)
+ {
+ QChar c = queries[newPos++];
+ if (whitespaceChars.contains(c))
+ continue;
+ else if (c == '\xa')
+ break;
+ else
+ return position;
+ }
+
+ // Okay, only whitespaces after cursor, so let's check whats before cursor,
+ // until the ';' - is it just whitespaces too?
+ newPos = position;
+ while (newPos > 1 && whitespaceChars.contains(queries[newPos - 1]))
+ newPos--;
+
+ if (queries[newPos - 1] == ';')
+ {
+ // Jackpot! Our cursor is just somewhere in whitespaces after the query.
+ // Let's consider that prior query as current.
+ return newPos - 1;
+ }
+
+ return position;
+}
+
QString getQueryWithPosition(const QString& queries, int position, int* startPos)
{
+ position = getCursorFinalPositionForQueries(queries, position);
QStringList queryList = splitQueries(queries);
return getQueryWithPosition(queryList, position, startPos);
}
+QPair<int, int> getQueryBoundriesForPosition(const QString& contents, int cursorPosition, bool fallBackToPreviousIfNecessary)
+{
+ int queryStartPos;
+ QString query = getQueryWithPosition(contents, cursorPosition, &queryStartPos);
+ TokenList tokens = Lexer::tokenize(query);
+ tokens.trim();
+ tokens.trimRight(Token::OPERATOR, ";");
+
+ if (tokens.size() == 0 && fallBackToPreviousIfNecessary)
+ {
+ // Fallback
+ cursorPosition = contents.lastIndexOf(";", cursorPosition - 1);
+ if (cursorPosition > -1)
+ {
+ query = getQueryWithPosition(contents, cursorPosition, &queryStartPos);
+ tokens = Lexer::tokenize(query);
+ tokens.trim();
+ tokens.trimRight(Token::OPERATOR, ";");
+ }
+ }
+
+ if (tokens.size() == 0)
+ return QPair<int, int>(-1, -1);
+
+ return QPair<int, int>(tokens.first()->start + queryStartPos, tokens.last()->end + 1 + queryStartPos);
+}
+
QString trimBindParamPrefix(const QString& param)
{
if (param == "?")
@@ -822,3 +894,15 @@ SqliteDataType toSqliteDataType(const QString& typeStr)
return SqliteDataType::UNKNOWN;
}
+
+QByteArray blobFromLiteral(const QString& value)
+{
+ if (value.length() <= 3)
+ {
+ qCritical() << "Call to blobFromLiteral() with blob literal shorter or equal to 3 characters:" << value;
+ return QByteArray();
+ }
+
+ QString hex = value.mid(2, value.length() - 3);
+ return QByteArray::fromHex(hex.toLatin1());
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.h b/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.h
index b9cfdcf..353faf3 100644
--- a/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.h
+++ b/SQLiteStudio3/coreSQLiteStudio/common/utils_sql.h
@@ -78,6 +78,7 @@ API_EXPORT QStringList splitQueries(const QString& sql, bool keepEmptyQueries =
API_EXPORT QStringList quickSplitQueries(const QString& sql, bool keepEmptyQueries = true, bool removeComments = false);
API_EXPORT QString getQueryWithPosition(const QStringList& queries, int position, int* startPos = nullptr);
API_EXPORT QString getQueryWithPosition(const QString& queries, int position, int* startPos = nullptr);
+API_EXPORT QPair<int, int> getQueryBoundriesForPosition(const QString& contents, int cursorPosition, bool fallBackToPreviousIfNecessary);
API_EXPORT QList<QueryWithParamNames> getQueriesWithParamNames(const QString& query);
API_EXPORT QList<QueryWithParamCount> getQueriesWithParamCount(const QString& query);
API_EXPORT QueryWithParamNames getQueryWithParamNames(const QString& query);
@@ -88,6 +89,7 @@ API_EXPORT QString getBindTokenName(const TokenPtr& token);
API_EXPORT QueryAccessMode getQueryAccessMode(const QString& query, bool* isSelect = nullptr);
API_EXPORT QStringList valueListToSqlList(const QList<QVariant>& values);
API_EXPORT QString trimQueryEnd(const QString& query);
+API_EXPORT QByteArray blobFromLiteral(const QString& value);
#endif // UTILS_SQL_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/completioncomparer.cpp b/SQLiteStudio3/coreSQLiteStudio/completioncomparer.cpp
index 28f383d..cd6e2a5 100644
--- a/SQLiteStudio3/coreSQLiteStudio/completioncomparer.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/completioncomparer.cpp
@@ -1,8 +1,6 @@
#include "completioncomparer.h"
#include "completionhelper.h"
#include "parser/ast/sqliteselect.h"
-#include "db/db.h"
-#include "parser/token.h"
#include <QDebug>
CompletionComparer::CompletionComparer(CompletionHelper *helper)
@@ -82,7 +80,7 @@ bool CompletionComparer::initSelect()
contextTables = helper->originalCurrentSelectCore->getContextTables(false);
contextDatabases = helper->originalCurrentSelectCore->getContextDatabases(false);
- for (SqliteSelect::Core* core : helper->parentSelectCores)
+ for (SqliteSelect::Core*& core : helper->parentSelectCores)
{
parentContextColumns += core->getContextColumns(false);
parentContextTables += core->getContextTables(false);
@@ -124,6 +122,11 @@ bool CompletionComparer::compareColumns(const ExpectedTokenPtr& token1, const Ex
case CompletionHelper::Context::CREATE_TABLE:
result = compareColumnsForCreateTable(token1, token2, &ok);
break;
+ case CompletionHelper::Context::INSERT_RETURNING:
+ case CompletionHelper::Context::UPDATE_RETURNING:
+ case CompletionHelper::Context::DELETE_RETURNING:
+ result = compareColumnsForReturning(token1, token2, &ok);
+ break;
default:
return compareValues(token1, token2);
}
@@ -136,8 +139,8 @@ bool CompletionComparer::compareColumns(const ExpectedTokenPtr& token1, const Ex
return result;
// Context info of the column has a strong meaning when sorting (system tables are pushed to the end)
- bool firstIsSystem = token1->contextInfo.toLower().startsWith("sqlite_");
- bool secondIsSystem = token2->contextInfo.toLower().startsWith("sqlite_");
+ bool firstIsSystem = token1->contextInfo.startsWith("sqlite_", Qt::CaseInsensitive);
+ bool secondIsSystem = token2->contextInfo.startsWith("sqlite_", Qt::CaseInsensitive);
if (firstIsSystem && !secondIsSystem)
return false;
@@ -152,8 +155,8 @@ bool CompletionComparer::compareColumnsForSelectResCol(const ExpectedTokenPtr &t
*result = true;
// Checking if columns are on list of columns available in FROM clause
- bool token1available = isTokenOnAvailableList(token1);
- bool token2available = isTokenOnAvailableList(token2);
+ bool token1available = isTokenOnAvailableColumnList(token1);
+ bool token2available = isTokenOnAvailableColumnList(token2);
if (token1available && !token2available)
return true;
@@ -161,8 +164,8 @@ bool CompletionComparer::compareColumnsForSelectResCol(const ExpectedTokenPtr &t
return false;
// Checking if columns are on list of columns available in FROM clause of any parent SELECT core
- bool token1parentAvailable = isTokenOnParentAvailableList(token1);
- bool token2parentAvailable = isTokenOnParentAvailableList(token2);
+ bool token1parentAvailable = isTokenOnParentAvailableColumnList(token1);
+ bool token2parentAvailable = isTokenOnParentAvailableColumnList(token2);
if (token1parentAvailable && !token2parentAvailable)
return true;
@@ -217,6 +220,23 @@ bool CompletionComparer::compareColumnsForCreateTable(const ExpectedTokenPtr& to
return false;
}
+bool CompletionComparer::compareColumnsForReturning(const ExpectedTokenPtr& token1, const ExpectedTokenPtr& token2, bool* result)
+{
+ *result = true;
+
+ // Checking if columns are on list of columns available in FROM clause
+ bool token1available = isTokenOnAvailableColumnList(token1);
+ bool token2available = isTokenOnAvailableColumnList(token2);
+ if (token1available && !token2available)
+ return true;
+
+ if (!token1available && token2available)
+ return false;
+
+ *result = false;
+ return false;
+}
+
bool CompletionComparer::compareTables(const ExpectedTokenPtr& token1, const ExpectedTokenPtr& token2)
{
if (!helper->parsedQuery || helper->parsedQuery->queryType != SqliteQueryType::Select)
@@ -380,12 +400,15 @@ bool CompletionComparer::compareByContextOnly(const QString &token1, const QStri
return false;
}
-bool CompletionComparer::isTokenOnAvailableList(const ExpectedTokenPtr &token)
+bool CompletionComparer::isTokenOnAvailableColumnList(const ExpectedTokenPtr &token)
{
- return isTokenOnColumnList(token, helper->selectAvailableColumns);
+ if (helper->parsedQuery->queryType == SqliteQueryType::Select)
+ return isTokenOnColumnList(token, helper->selectAvailableColumns);
+ else
+ return isTokenOnColumnList(token, helper->theFromAvailableColumns);
}
-bool CompletionComparer::isTokenOnParentAvailableList(const ExpectedTokenPtr &token)
+bool CompletionComparer::isTokenOnParentAvailableColumnList(const ExpectedTokenPtr &token)
{
return isTokenOnColumnList(token, helper->parentSelectAvailableColumns);
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/completioncomparer.h b/SQLiteStudio3/coreSQLiteStudio/completioncomparer.h
index 4d5dd79..92401a3 100644
--- a/SQLiteStudio3/coreSQLiteStudio/completioncomparer.h
+++ b/SQLiteStudio3/coreSQLiteStudio/completioncomparer.h
@@ -46,6 +46,7 @@ class CompletionComparer
bool compareColumnsForUpdateCol(const ExpectedTokenPtr& token1, const ExpectedTokenPtr& token2, bool* result);
bool compareColumnsForDeleteCol(const ExpectedTokenPtr& token1, const ExpectedTokenPtr& token2, bool* result);
bool compareColumnsForCreateTable(const ExpectedTokenPtr& token1, const ExpectedTokenPtr& token2, bool* result);
+ bool compareColumnsForReturning(const ExpectedTokenPtr& token1, const ExpectedTokenPtr& token2, bool* result);
bool compareTables(const ExpectedTokenPtr& token1, const ExpectedTokenPtr& token2);
bool compareIndexes(const ExpectedTokenPtr& token1, const ExpectedTokenPtr& token2);
bool compareTriggers(const ExpectedTokenPtr& token1, const ExpectedTokenPtr& token2);
@@ -63,8 +64,8 @@ class CompletionComparer
const QList<QStringList>& contextValues, bool handleSystemNames, bool* ok = nullptr);
bool compareByContextOnly(const QString &token1, const QString &token2,
const QStringList& contextValues, bool handleSystemNames, bool* ok);
- bool isTokenOnAvailableList(const ExpectedTokenPtr& token);
- bool isTokenOnParentAvailableList(const ExpectedTokenPtr& token);
+ bool isTokenOnAvailableColumnList(const ExpectedTokenPtr& token);
+ bool isTokenOnParentAvailableColumnList(const ExpectedTokenPtr& token);
bool isTokenOnResultColumns(const ExpectedTokenPtr& token);
static bool isTokenOnColumnList(const ExpectedTokenPtr& token, const QList<SelectResolver::Column>& columnList);
};
diff --git a/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp b/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp
index 675a6a6..b38e42d 100644
--- a/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/completionhelper.cpp
@@ -1,6 +1,9 @@
#include "completionhelper.h"
#include "completioncomparer.h"
#include "db/db.h"
+#include "parser/ast/sqlitedelete.h"
+#include "parser/ast/sqliteinsert.h"
+#include "parser/ast/sqliteupdate.h"
#include "parser/keywords.h"
#include "parser/parser.h"
#include "parser/lexer.h"
@@ -147,6 +150,7 @@ QList<ExpectedTokenPtr> CompletionHelper::getExpectedTokens(TokenPtr token)
switch (token->type)
{
case Token::CTX_ROWID_KW:
+ case Token::CTX_STRICT_KW:
results += getExpectedToken(ExpectedToken::KEYWORD, token->value);
break;
case Token::CTX_NEW_KW:
@@ -497,6 +501,16 @@ QList<ExpectedTokenPtr> CompletionHelper::getObjects(ExpectedToken::Type type, c
QList<ExpectedTokenPtr> CompletionHelper::getColumns()
{
QList<ExpectedTokenPtr> results;
+ switch (context) {
+ case Context::UPDATE_RETURNING:
+ case Context::INSERT_RETURNING:
+ case Context::DELETE_RETURNING:
+ results += getExpectedToken(ExpectedToken::OPERATOR, "*", QString(), QString(), 1);
+ break;
+ default:
+ break;
+ }
+
if (previousId)
{
if (twoIdsBack)
@@ -896,6 +910,7 @@ void CompletionHelper::filterOtherId(QList<ExpectedTokenPtr> &resultsSoFar, cons
case Token::CTX_FK_MATCH:
case Token::CTX_PRAGMA:
case Token::CTX_ROWID_KW:
+ case Token::CTX_STRICT_KW:
case Token::CTX_NEW_KW:
case Token::CTX_OLD_KW:
case Token::CTX_ERROR_MESSAGE:
@@ -1055,6 +1070,21 @@ void CompletionHelper::extractQueryAdditionalInfo()
{
context = Context::EXPR;
}
+ else if (isInUpdateReturning())
+ {
+ context = Context::UPDATE_RETURNING;
+ extractUpdateAvailableColumnsAndTables();
+ }
+ else if (isInInsertReturning())
+ {
+ context = Context::INSERT_RETURNING;
+ extractInsertAvailableColumnsAndTables();
+ }
+ else if (isInDeleteReturning())
+ {
+ context = Context::DELETE_RETURNING;
+ extractDeleteAvailableColumnsAndTables();
+ }
}
void CompletionHelper::detectSelectContext()
@@ -1134,6 +1164,21 @@ bool CompletionHelper::isInCreateTrigger()
return true;
}
+bool CompletionHelper::isInUpdateReturning()
+{
+ return isIn(SqliteQueryType::Update, "returning", "RETURNING");
+}
+
+bool CompletionHelper::isInDeleteReturning()
+{
+ return isIn(SqliteQueryType::Delete, "returning", "RETURNING");
+}
+
+bool CompletionHelper::isInInsertReturning()
+{
+ return isIn(SqliteQueryType::Insert, "returning", "RETURNING");
+}
+
bool CompletionHelper::isIn(SqliteQueryType queryType, const QString &tokenMapKey, const QString &prefixKeyword)
{
if (!parsedQuery)
@@ -1266,7 +1311,8 @@ void CompletionHelper::initFunctions(Db* db)
<< "lag(expr)" << "lag(expr, offset)" << "lag(expr, offset, default)"
<< "lead(expr)" << "lead(expr, offset)" << "lead(expr, offset, default)"
<< "first_value(expr)" << "last_value(expr)" << "nth_value(expr, N)"
- << "substring(X,Y,Z)" << "substring(X,Y)";
+ << "substring(X,Y,Z)" << "substring(X,Y)" << "unixepoch(mod,mod,...)"
+ << "printf(format,...)" << "format(format,...)";
if (!db->isOpen())
return;
@@ -1274,7 +1320,7 @@ void CompletionHelper::initFunctions(Db* db)
// Parse what we already have
QSet<QString> handledSignatures;
static_qstring(sigTpl, "%1_%2");
- for (const QString& fn : sqlite3Functions)
+ for (QString& fn : sqlite3Functions)
{
int argStart = fn.lastIndexOf("(");
int argEnd = fn.lastIndexOf(")");
@@ -1405,9 +1451,42 @@ void CompletionHelper::extractSelectAvailableColumnsAndTables()
}
}
+void CompletionHelper::extractInsertAvailableColumnsAndTables()
+{
+ auto insert = parsedQuery.dynamicCast<SqliteInsert>();
+ extractAvailableColumnsAndTables(insert->database, insert->table);
+}
+
+void CompletionHelper::extractDeleteAvailableColumnsAndTables()
+{
+ auto del = parsedQuery.dynamicCast<SqliteDelete>();
+ extractAvailableColumnsAndTables(del->database, del->table);
+}
+
+void CompletionHelper::extractUpdateAvailableColumnsAndTables()
+{
+ auto update = parsedQuery.dynamicCast<SqliteUpdate>();
+ theFromAvailableColumns = selectResolver->resolveAvailableColumns(update->from);
+ theFromAvailableTables = selectResolver->resolveTables(update->from);
+}
+
+void CompletionHelper::extractAvailableColumnsAndTables(const QString& database, const QString& table)
+{
+ QStringList columnNames = schemaResolver->getTableColumns(database, table);
+ for (QString& colName : columnNames) {
+ SelectResolver::Column column;
+ column.type = SelectResolver::Column::COLUMN;
+ column.database = database;
+ column.table = table;
+ column.column = colName;
+ theFromAvailableColumns << column;
+ theFromAvailableTables << column.getTable();
+ }
+}
+
void CompletionHelper::extractTableAliasMap()
{
- for (SelectResolver::Column column : selectAvailableColumns)
+ for (SelectResolver::Column& column : selectAvailableColumns)
{
if (column.type != SelectResolver::Column::COLUMN)
continue;
@@ -1423,7 +1502,7 @@ void CompletionHelper::extractTableAliasMap()
// Given the above, we can extract table aliases in an order from deepest
// to shallowest, skipping any duplicates, becase the deeper alias is mentioned,
// the higher is its priority.
- for (SelectResolver::Column column : parentSelectAvailableColumns)
+ for (SelectResolver::Column& column : parentSelectAvailableColumns)
{
if (column.type != SelectResolver::Column::COLUMN)
continue;
@@ -1445,7 +1524,7 @@ void CompletionHelper::extractCreateTableColumns()
return;
SqliteCreateTablePtr createTable = parsedQuery.dynamicCast<SqliteCreateTable>();
- for (SqliteCreateTable::Column* col : createTable->columns)
+ for (SqliteCreateTable::Column*& col : createTable->columns)
favoredColumnNames << col->name;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/completionhelper.h b/SQLiteStudio3/coreSQLiteStudio/completionhelper.h
index 8df1912..3cff8ec 100644
--- a/SQLiteStudio3/coreSQLiteStudio/completionhelper.h
+++ b/SQLiteStudio3/coreSQLiteStudio/completionhelper.h
@@ -64,7 +64,10 @@ class API_EXPORT CompletionHelper : public QObject
DELETE_WHERE,
CREATE_TABLE,
CREATE_TRIGGER,
- EXPR
+ EXPR,
+ INSERT_RETURNING,
+ UPDATE_RETURNING,
+ DELETE_RETURNING
};
static void initFunctions(Db* db);
@@ -125,6 +128,10 @@ class API_EXPORT CompletionHelper : public QObject
void extractPreviousIdTokens(const TokenList& parsedTokens);
void extractQueryAdditionalInfo();
void extractSelectAvailableColumnsAndTables();
+ void extractInsertAvailableColumnsAndTables();
+ void extractDeleteAvailableColumnsAndTables();
+ void extractUpdateAvailableColumnsAndTables();
+ void extractAvailableColumnsAndTables(const QString& database, const QString& table);
bool extractSelectCore();
SqliteSelect::Core* extractSelectCore(SqliteQueryPtr query);
void extractTableAliasMap();
@@ -135,6 +142,9 @@ class API_EXPORT CompletionHelper : public QObject
bool isInDeleteWhere();
bool isInCreateTable();
bool isInCreateTrigger();
+ bool isInUpdateReturning();
+ bool isInDeleteReturning();
+ bool isInInsertReturning();
bool isIn(SqliteQueryType queryType, const QString& tokenMapKey, const QString &prefixKeyword);
bool isInExpr();
bool testQueryToken(int tokenPosition, Token::Type type, const QString& value, Qt::CaseSensitivity cs = Qt::CaseInsensitive);
@@ -231,6 +241,20 @@ class API_EXPORT CompletionHelper : public QObject
QSet<SelectResolver::Table> selectAvailableTables;
/**
+ * @brief theFromAvailableColumns
+ * Available columns are columns that can be selected basing on what tables are mentioned in FROM clause
+ * of queries other than SELECT (so INSERT, UPDATE, DELETE), in their RETURNING clause.
+ */
+ QList<SelectResolver::Column> theFromAvailableColumns;
+
+ /**
+ * @brief theFromAvailableTables
+ * Availble tables are tables mentioned in FROM clause of queries other than SELECT (so INSERT, UPDATE, DELETE),
+ * in their RETURNING clause.
+ */
+ QSet<SelectResolver::Table> theFromAvailableTables;
+
+ /**
* @brief parentSelectCores
* List of all parent select core objects in order: from direct parent, to the oldest parent.
*/
diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder.h b/SQLiteStudio3/coreSQLiteStudio/config_builder.h
index f4e030e..4f651e5 100644
--- a/SQLiteStudio3/coreSQLiteStudio/config_builder.h
+++ b/SQLiteStudio3/coreSQLiteStudio/config_builder.h
@@ -6,7 +6,7 @@
#include "config_builder/cfgentry.h"
#include "config_builder/cfglazyinitializer.h"
-#define CFG_CATEGORIES(Type,Body) _CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,"",QString())
+#define CFG_CATEGORIES(Type,Body) _CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,"",QString(),API_EXPORT)
#define CFG_CATEGORY(Name,Body) \
_CFG_CATEGORY_WITH_TITLE(Name,Body,QString())
@@ -34,24 +34,30 @@
#define CFG_INSTANCE(Type) (*Cfg::get##Type##Instance())
+#define CFG_DELETE_INSTANCE(Type) \
+ if (Cfg::cfgMainInstance##Type) \
+ delete Cfg::cfgMainInstance##Type; \
+ Cfg::cfgMainInstance##Type = nullptr;
+
+
// Macros below are kind of private. You should not need to use them explicitly.
// They are called from macros above.
#define _CFG_CATEGORIES_WITH_METANAME(Type,Body,MetaName) \
- _CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,MetaName,QString())
+ _CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,MetaName,QString(),API_EXPORT)
#define _CFG_CATEGORIES_WITH_TITLE(Type,Body,Title) \
- _CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,"",Title)
+ _CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,"",Title,API_EXPORT)
-#define _CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,MetaName,Title) \
+#define _CFG_CATEGORIES_WITH_METANAME_AND_TITLE(Type,Body,MetaName,Title,ExportType) \
namespace Cfg\
{\
- struct API_EXPORT Type : public CfgMain\
+ struct ExportType Type : public CfgMain\
{\
Type(bool persistable) : CfgMain(#Type, persistable, MetaName, Title) {}\
Body\
};\
- API_EXPORT Type* get##Type##Instance();\
+ ExportType Type* get##Type##Instance();\
}
#define _CFG_DEFINE(Type, Persistant) \
diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.cpp b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.cpp
index a5c661e..6f5451d 100644
--- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgcategory.cpp
@@ -11,7 +11,7 @@ CfgCategory::CfgCategory(const CfgCategory &other) :
lastCreatedCfgCategory = this;
lastCreatedCfgMain->childs[name] = this;
cfgParent = lastCreatedCfgMain;
- for (CfgEntry* entry : childs)
+ for (CfgEntry*& entry : childs)
entry->parent = this;
}
@@ -26,7 +26,10 @@ CfgCategory::CfgCategory(const QString &name, const QString &title) :
CfgEntry *CfgCategory::getEntryByName(const QString& name)
{
- return childs[name];
+ if (childs.contains(name))
+ return childs[name];
+
+ return nullptr;
}
QString CfgCategory::toString() const
@@ -44,32 +47,32 @@ void CfgCategory::translateTitle()
// This needs to be "QObject::tr" and not just "tr", because this guarantees proper message context for retranslating
// titles for objects initialized in global scope (as CfgCategories are).
title = QObject::tr(title.toUtf8().constData());
- for (CfgEntry* entry : childs)
+ for (CfgEntry*& entry : childs)
entry->translateTitle();
}
void CfgCategory::reset()
{
- for (CfgEntry* entry : childs)
+ for (CfgEntry*& entry : childs)
entry->reset();
}
void CfgCategory::savepoint(bool transaction)
{
- for (CfgEntry* entry : childs)
+ for (CfgEntry*& entry : childs)
entry->savepoint(transaction);
}
void CfgCategory::restore()
{
- for (CfgEntry* entry : childs)
+ for (CfgEntry*& entry : childs)
entry->restore();
}
void CfgCategory::release()
{
- for (CfgEntry* entry : childs)
+ for (CfgEntry*& entry : childs)
entry->release();
}
@@ -80,7 +83,8 @@ void CfgCategory::commit()
void CfgCategory::rollback()
{
- rollback();
+ for (CfgEntry*& entry : childs)
+ entry->rollback();
}
void CfgCategory::begin()
diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.cpp b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.cpp
index 9a91ea8..bdbfd29 100644
--- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.cpp
@@ -56,7 +56,7 @@ QVariant CfgEntry::get() const
return cfgVal;
}
-QVariant CfgEntry::getDefultValue() const
+QVariant CfgEntry::getDefaultValue() const
{
if (defValueFunc)
return (*defValueFunc)();
@@ -99,6 +99,11 @@ QString CfgEntry::getTitle() const
return title;
}
+QString CfgEntry::getName() const
+{
+ return name;
+}
+
void CfgEntry::translateTitle()
{
// This needs to be "QObject::tr" and not just "tr". See CfgCategory::translateTitle() for details.
@@ -107,7 +112,7 @@ void CfgEntry::translateTitle()
void CfgEntry::reset()
{
- set(getDefultValue());
+ set(getDefaultValue());
}
bool CfgEntry::isPersistable() const
diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.h b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.h
index 4c1bbb0..1b5bdd9 100644
--- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.h
+++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgentry.h
@@ -23,12 +23,13 @@ class API_EXPORT CfgEntry : public QObject
virtual ~CfgEntry();
QVariant get() const;
- QVariant getDefultValue() const;
+ QVariant getDefaultValue() const;
void set(const QVariant& value);
operator QString() const;
void defineDefaultValueFunction(DefaultValueProviderFunc func);
QString getFullKey() const;
QString getTitle() const;
+ QString getName() const;
void translateTitle();
void reset();
bool isPersistable() const;
diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfglazyinitializer.cpp b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfglazyinitializer.cpp
index 7e554a8..1f5fa5e 100644
--- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfglazyinitializer.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfglazyinitializer.cpp
@@ -18,7 +18,7 @@ void CfgLazyInitializer::init()
if (!instances)
instances = new QList<CfgLazyInitializer*>();
- for (CfgLazyInitializer* initializer : *instances)
+ for (CfgLazyInitializer*& initializer : *instances)
initializer->doInitialize();
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro b/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
index bcd8148..ee78caa 100644
--- a/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
+++ b/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
@@ -4,7 +4,7 @@
#
#-------------------------------------------------
-include($$PWD/../dirs.pri)
+include($$PWD/../common.pri)
include($$PWD/../utils.pri)
OBJECTS_DIR = $$OBJECTS_DIR/coreSQLiteStudio
@@ -12,13 +12,13 @@ MOC_DIR = $$MOC_DIR/coreSQLiteStudio
UI_DIR = $$UI_DIR/coreSQLiteStudio
QT -= gui
-QT += script network
+QT += qml network
TARGET = coreSQLiteStudio
TEMPLATE = lib
win32: {
- LIBS += -lpsapi -limagehlp
+ LIBS += -lpsapi -limagehlp -lversion
DEFINES += "SQLITE_API=\"__declspec(dllexport)\""
!debug: {
@@ -26,7 +26,7 @@ win32: {
THE_DEST = $${DESTDIR}
THE_FILE ~= s,/,\\,g
THE_DEST ~= s,/,\\,g
- QMAKE_POST_LINK += $$QMAKE_COPY $$THE_FILE $$THE_DEST $$escape_expand(\\n\\t)
+ QMAKE_POST_LINK += "$$QMAKE_COPY $$THE_FILE $$THE_DEST $$escape_expand(\\n\\t);"
}
}
@@ -39,10 +39,10 @@ linux: {
macx: {
out_file = $$DESTDIR/lib $$TARGET .dylib
- QMAKE_POST_LINK += install_name_tool -change libsqlite3.dylib @loader_path/../Frameworks/libsqlite3.dylib $$join(out_file)
- QMAKE_POST_LINK += $$QMAKE_MKDIR $$DESTDIR/SQLiteStudio.app
- QMAKE_POST_LINK += ; $$QMAKE_MKDIR $$DESTDIR/SQLiteStudio.app/Contents
- QMAKE_POST_LINK += ; $$QMAKE_COPY $$PWD/Info.plist $$DESTDIR/SQLiteStudio.app/Contents
+ QMAKE_POST_LINK += "install_name_tool -change libsqlite3.dylib @loader_path/../Frameworks/libsqlite3.dylib \"$$join(out_file)\""
+ QMAKE_POST_LINK += "; $$QMAKE_MKDIR \"$$DESTDIR/SQLiteStudio.app\""
+ QMAKE_POST_LINK += "; $$QMAKE_MKDIR \"$$DESTDIR/SQLiteStudio.app/Contents\""
+ QMAKE_POST_LINK += "; $$QMAKE_COPY \"$$PWD/Info.plist\" \"$$DESTDIR/SQLiteStudio.app/Contents\""
LIBS += -L/usr/local/lib
}
@@ -57,24 +57,20 @@ portable {
CONFIG += c++17
QMAKE_CXXFLAGS += -pedantic
-TRANSLATIONS += translations/coreSQLiteStudio_ro_RO.ts \
- translations/coreSQLiteStudio_de.ts \
- translations/coreSQLiteStudio_it.ts \
- translations/coreSQLiteStudio_zh_CN.ts \
- translations/coreSQLiteStudio_sk.ts \
- translations/coreSQLiteStudio_ru.ts \
- translations/coreSQLiteStudio_pt_BR.ts \
- translations/coreSQLiteStudio_fr.ts \
- translations/coreSQLiteStudio_es.ts \
- translations/coreSQLiteStudio_pl.ts
-
SOURCES += sqlitestudio.cpp \
+ chillout/chillout.cpp \
+ chillout/common/common.cpp \
+ chillout/posix/posixcrashhandler.cpp \
+ chillout/windows/StackWalker.cpp \
+ chillout/windows/windowscrashhandler.cpp \
common/compatibility.cpp \
db/queryexecutorsteps/queryexecutorcolumntype.cpp \
+ db/queryexecutorsteps/queryexecutorfilter.cpp \
parser/ast/sqlitefilterover.cpp \
parser/ast/sqlitenulls.cpp \
parser/ast/sqlitewindowdefinition.cpp \
returncode.cpp \
+ services/codesnippetmanager.cpp \
services/config.cpp \
common/nulldevice.cpp \
parser/lexer_low_lev.cpp \
@@ -112,7 +108,6 @@ SOURCES += sqlitestudio.cpp \
parser/ast/sqliteselect.cpp \
parser/ast/sqliteupdate.cpp \
parser/ast/sqlitevacuum.cpp \
- parser/ast/sqlitecopy.cpp \
parser/ast/sqliteemptyquery.cpp \
parser/parser_helper_stubs.cpp \
parser/ast/sqliteexpr.cpp \
@@ -147,7 +142,6 @@ SOURCES += sqlitestudio.cpp \
db/queryexecutorsteps/queryexecutoraddrowids.cpp \
db/queryexecutorsteps/queryexecutorlimit.cpp \
db/queryexecutorsteps/queryexecutorcolumns.cpp \
- db/queryexecutorsteps/queryexecutorcellsize.cpp \
db/queryexecutorsteps/queryexecutororder.cpp \
db/sqlerrorcodes.cpp \
common/readwritelocker.cpp \
@@ -156,6 +150,7 @@ SOURCES += sqlitestudio.cpp \
csvserializer.cpp \
db/queryexecutorsteps/queryexecutordatasources.cpp \
expectedtoken.cpp \
+ sqlfileexecutor.cpp \
sqlhistorymodel.cpp \
db/queryexecutorsteps/queryexecutorexplainmode.cpp \
services/notifymanager.cpp \
@@ -240,14 +235,22 @@ SOURCES += sqlitestudio.cpp \
parser/ast/sqliteupsert.cpp
HEADERS += sqlitestudio.h\
+ chillout/chillout.h \
+ chillout/common/common.h \
+ chillout/defines.h \
+ chillout/posix/posixcrashhandler.h \
+ chillout/windows/StackWalker.h \
+ chillout/windows/windowscrashhandler.h \
common/compatibility.h \
coreSQLiteStudio_global.h \
db/queryexecutorsteps/queryexecutorcolumntype.h \
+ db/queryexecutorsteps/queryexecutorfilter.h \
db/sqlite3.h \
parser/ast/sqlitefilterover.h \
parser/ast/sqlitenulls.h \
parser/ast/sqlitewindowdefinition.h \
returncode.h \
+ services/codesnippetmanager.h \
services/config.h \
common/nulldevice.h \
parser/lexer_low_lev.h \
@@ -285,7 +288,6 @@ HEADERS += sqlitestudio.h\
parser/ast/sqliteselect.h \
parser/ast/sqliteupdate.h \
parser/ast/sqlitevacuum.h \
- parser/ast/sqlitecopy.h \
parser/ast/sqlitequerytype.h \
parser/ast/sqliteemptyquery.h \
parser/parser_helper_stubs.h \
@@ -329,7 +331,6 @@ HEADERS += sqlitestudio.h\
db/queryexecutorsteps/queryexecutoraddrowids.h \
db/queryexecutorsteps/queryexecutorlimit.h \
db/queryexecutorsteps/queryexecutorcolumns.h \
- db/queryexecutorsteps/queryexecutorcellsize.h \
common/unused.h \
db/queryexecutorsteps/queryexecutororder.h \
common/readwritelocker.h \
@@ -337,6 +338,7 @@ HEADERS += sqlitestudio.h\
csvformat.h \
csvserializer.h \
db/queryexecutorsteps/queryexecutordatasources.h \
+ sqlfileexecutor.h \
sqlhistorymodel.h \
db/queryexecutorsteps/queryexecutorexplainmode.h \
services/notifymanager.h \
@@ -475,4 +477,5 @@ RESOURCES += \
coreSQLiteStudio.qrc
DISTFILES += \
+ licenses/icu.txt \
licenses/mit.txt
diff --git a/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.qrc b/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.qrc
index f0bc89f..5ff8de8 100644
--- a/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.qrc
+++ b/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.qrc
@@ -18,14 +18,6 @@
<file>licenses/diff_match.txt</file>
<file>licenses/gpl.txt</file>
<file>licenses/mit.txt</file>
- </qresource>
- <qresource prefix="/msg">
- <file>translations/coreSQLiteStudio_ro_RO.qm</file>
- <file>translations/coreSQLiteStudio_pl.qm</file>
- <file>translations/coreSQLiteStudio_ru.qm</file>
- <file>translations/coreSQLiteStudio_fr.qm</file>
- <file>translations/coreSQLiteStudio_sk.qm</file>
- <file>translations/coreSQLiteStudio_zh_CN.qm</file>
- <file>translations/coreSQLiteStudio_de.qm</file>
+ <file>licenses/icu.txt</file>
</qresource>
</RCC>
diff --git a/SQLiteStudio3/coreSQLiteStudio/csvformat.h b/SQLiteStudio3/coreSQLiteStudio/csvformat.h
index 4b6df69..79807cb 100644
--- a/SQLiteStudio3/coreSQLiteStudio/csvformat.h
+++ b/SQLiteStudio3/coreSQLiteStudio/csvformat.h
@@ -24,6 +24,7 @@ struct API_EXPORT CsvFormat
bool multipleColumnSeparators = false;
int maxColumnSeparatorLength = 0;
int maxRowSeparatorLength = 0;
+ bool quotationMark = true;
static const CsvFormat DEFAULT;
};
diff --git a/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp b/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp
index aceba03..bc82265 100644
--- a/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp
@@ -94,7 +94,7 @@ void typedDeserializeInternal(QTextStream& data, const CsvFormat& format, QList<
data >> theChar;
sepAsLast = false;
- if (!quotes && theChar == '"' )
+ if (format.quotationMark && !quotes && theChar == '"' )
{
quotes = true;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/datatype.cpp b/SQLiteStudio3/coreSQLiteStudio/datatype.cpp
index 4fbd7ef..36fe63c 100644
--- a/SQLiteStudio3/coreSQLiteStudio/datatype.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/datatype.cpp
@@ -36,6 +36,18 @@ const QStringList DataType::names = []() -> QStringList
return list;
}();
+QList<DataType::Enum> DataType::valuesForUiDropdown = {BLOB, INTEGER, NUMERIC, REAL, TEXT};
+QList<DataType::Enum> DataType::strictValues = {ANY, INT, INTEGER, REAL, TEXT, BLOB};
+
+const QStringList DataType::strictNames = []() -> QStringList
+{
+ QStringList list;
+ for (DataType::Enum& type : strictValues)
+ list << DataType::toString(type);
+
+ return list;
+}();
+
DataType::DataType()
{
setEmpty();
@@ -130,22 +142,27 @@ QString DataType::toFullTypeString() const
return str;
}
-bool DataType::isNumeric()
+bool DataType::isNumeric() const
{
return isNumeric(type);
}
-bool DataType::isBinary()
+bool DataType::isBinary() const
{
return isBinary(typeStr);
}
-bool DataType::isNull()
+bool DataType::isStrict() const
+{
+ return isStrict(type);
+}
+
+bool DataType::isNull() const
{
return type == ::DataType::unknown;
}
-bool DataType::isEmpty()
+bool DataType::isEmpty() const
{
return typeStr.isEmpty();
}
@@ -155,7 +172,7 @@ DataType& DataType::operator=(const DataType& other)
this->type = other.type;
this->typeStr = other.typeStr;
this->precision = other.precision;
- this->scale = scale;
+ this->scale = other.scale;
return *this;
}
@@ -206,10 +223,21 @@ bool DataType::isNumeric(DataType::Enum e)
case TEXT:
case TIME:
case VARCHAR:
+ case ANY:
case unknown:
break;
}
- return false;
+ return false;
+}
+
+bool DataType::isStrict(Enum e)
+{
+ return strictValues.contains(e);
+}
+
+bool DataType::isStrict(const QString& type)
+{
+ return isStrict(fromString(type, Qt::CaseInsensitive));
}
bool DataType::isBinary(const QString& type)
@@ -223,6 +251,21 @@ QList<DataType::Enum> DataType::getAllTypes()
return values;
}
+QList<DataType::Enum> DataType::getAllTypesForUiDropdown()
+{
+ return valuesForUiDropdown;
+}
+
+QList<DataType::Enum> DataType::getStrictValues()
+{
+ return strictValues;
+}
+
+QStringList DataType::getStrictValueNames()
+{
+ return strictNames;
+}
+
QStringList DataType::getAllNames()
{
return names;
diff --git a/SQLiteStudio3/coreSQLiteStudio/datatype.h b/SQLiteStudio3/coreSQLiteStudio/datatype.h
index 9d8ca4e..06b4169 100644
--- a/SQLiteStudio3/coreSQLiteStudio/datatype.h
+++ b/SQLiteStudio3/coreSQLiteStudio/datatype.h
@@ -7,12 +7,12 @@
class API_EXPORT DataType : public QObject
{
- Q_OBJECT
- Q_ENUMS(Enum)
+ Q_OBJECT
public:
enum Enum
{
+ ANY,
BIGINT,
BLOB,
BOOLEAN,
@@ -32,6 +32,7 @@ class API_EXPORT DataType : public QObject
VARCHAR,
unknown
};
+ Q_ENUM(Enum)
DataType();
DataType(const QString& fullTypeString);
@@ -46,18 +47,24 @@ class API_EXPORT DataType : public QObject
QString toString() const;
QString toFullTypeString() const;
void setEmpty();
- bool isNumeric();
- bool isBinary();
- bool isNull();
- bool isEmpty();
+ bool isNumeric() const;
+ bool isBinary() const;
+ bool isStrict() const;
+ bool isNull() const;
+ bool isEmpty() const;
DataType& operator=(const DataType& other);
static QString toString(Enum e);
static Enum fromString(QString key, Qt::CaseSensitivity cs = Qt::CaseSensitive);
static bool isNumeric(Enum e);
+ static bool isStrict(Enum e);
+ static bool isStrict(const QString& type);
static bool isBinary(const QString& type);
static QList<Enum> getAllTypes();
static QStringList getAllNames();
+ static QList<Enum> getAllTypesForUiDropdown();
+ static QList<Enum> getStrictValues();
+ static QStringList getStrictValueNames();
private:
Enum type = unknown;
@@ -67,6 +74,9 @@ class API_EXPORT DataType : public QObject
static QList<Enum> values;
static const QStringList names;
+ static QList<Enum> valuesForUiDropdown;
+ static QList<Enum> strictValues;
+ static const QStringList strictNames;
};
#endif // DATATYPE_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.cpp b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.cpp
index 9bfb46f..b137c1f 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.cpp
@@ -1,15 +1,13 @@
#include "abstractdb.h"
-#include "services/dbmanager.h"
+#include "services/collationmanager.h"
#include "common/utils.h"
#include "asyncqueryrunner.h"
#include "sqlresultsrow.h"
#include "common/utils_sql.h"
-#include "services/config.h"
#include "sqlerrorresults.h"
#include "sqlerrorcodes.h"
#include "services/notifymanager.h"
#include "services/sqliteextensionmanager.h"
-#include "log.h"
#include "parser/lexer.h"
#include "common/compatibility.h"
#include <QDebug>
@@ -25,10 +23,12 @@ quint32 AbstractDb::asyncId = 1;
AbstractDb::AbstractDb(const QString& name, const QString& path, const QHash<QString, QVariant>& connOptions) :
name(name), path(path), connOptions(connOptions)
{
+ connect(SQLITESTUDIO, SIGNAL(aboutToQuit()), this, SLOT(appIsAboutToQuit()));
}
AbstractDb::~AbstractDb()
{
+ disconnect(SQLITESTUDIO, SIGNAL(aboutToQuit()), this, SLOT(appIsAboutToQuit()));
}
bool AbstractDb::open()
@@ -47,7 +47,11 @@ bool AbstractDb::close()
if (deny)
return false;
- bool res = !isOpen() || closeQuiet();
+ bool open = isOpen();
+ if (open)
+ flushWal();
+
+ bool res = !open || closeQuiet();
if (res)
emit disconnected();
@@ -71,7 +75,7 @@ bool AbstractDb::closeQuiet()
registeredFunctions.clear();
registeredCollations.clear();
if (FUNCTIONS) // FUNCTIONS is already null when closing db while closing entire app
- disconnect(FUNCTIONS, SIGNAL(functionListChanged()), this, SLOT(registerAllFunctions()));
+ disconnect(FUNCTIONS, SIGNAL(functionListChanged()), this, SLOT(registerUserFunctions()));
return res;
}
@@ -89,40 +93,49 @@ bool AbstractDb::openForProbing()
return res;
}
-void AbstractDb::registerAllFunctions()
+void AbstractDb::registerUserFunctions()
{
- for (const RegisteredFunction& regFn : registeredFunctions)
+ QMutableSetIterator<RegisteredFunction> it(registeredFunctions);
+ while (it.hasNext())
{
+ const RegisteredFunction& regFn = it.next();
+ if (regFn.builtIn)
+ continue;
+
if (!deregisterFunction(regFn.name, regFn.argCount))
qWarning() << "Failed to deregister custom SQL function:" << regFn.name;
- }
- registeredFunctions.clear();
+ it.remove();
+ }
RegisteredFunction regFn;
- for (FunctionManager::ScriptFunction* fnPtr : FUNCTIONS->getScriptFunctionsForDatabase(getName()))
+ for (FunctionManager::ScriptFunction*& fnPtr : FUNCTIONS->getScriptFunctionsForDatabase(getName()))
{
regFn.argCount = fnPtr->undefinedArgs ? -1 : fnPtr->arguments.count();
regFn.name = fnPtr->name;
regFn.type = fnPtr->type;
+ regFn.deterministic = fnPtr->deterministic;
registerFunction(regFn);
}
+}
- for (FunctionManager::NativeFunction* fnPtr : FUNCTIONS->getAllNativeFunctions())
+void AbstractDb::registerBuiltInFunctions()
+{
+ RegisteredFunction regFn;
+ for (FunctionManager::NativeFunction*& fnPtr : FUNCTIONS->getAllNativeFunctions())
{
regFn.argCount = fnPtr->undefinedArgs ? -1 : fnPtr->arguments.count();
regFn.name = fnPtr->name;
regFn.type = fnPtr->type;
+ regFn.builtIn = true;
+ regFn.deterministic = fnPtr->deterministic;
registerFunction(regFn);
}
-
- disconnect(FUNCTIONS, SIGNAL(functionListChanged()), this, SLOT(registerAllFunctions()));
- connect(FUNCTIONS, SIGNAL(functionListChanged()), this, SLOT(registerAllFunctions()));
}
-void AbstractDb::registerAllCollations()
+void AbstractDb::registerUserCollations()
{
- for (const QString& name : registeredCollations)
+ for (QString& name : registeredCollations)
{
if (!deregisterCollation(name))
qWarning() << "Failed to deregister custom collation:" << name;
@@ -130,16 +143,16 @@ void AbstractDb::registerAllCollations()
registeredCollations.clear();
- for (const CollationManager::CollationPtr& collPtr : COLLATIONS->getCollationsForDatabase(getName()))
+ for (CollationManager::CollationPtr& collPtr : COLLATIONS->getCollationsForDatabase(getName()))
registerCollation(collPtr->name);
- disconnect(COLLATIONS, SIGNAL(collationListChanged()), this, SLOT(registerAllCollations()));
- connect(COLLATIONS, SIGNAL(collationListChanged()), this, SLOT(registerAllCollations()));
+ disconnect(COLLATIONS, SIGNAL(collationListChanged()), this, SLOT(registerUserCollations()));
+ connect(COLLATIONS, SIGNAL(collationListChanged()), this, SLOT(registerUserCollations()));
}
void AbstractDb::loadExtensions()
{
- for (const SqliteExtensionManager::ExtensionPtr& extPtr : SQLITE_EXTENSIONS->getExtensionForDatabase(getName()))
+ for (SqliteExtensionManager::ExtensionPtr& extPtr : SQLITE_EXTENSIONS->getExtensionForDatabase(getName()))
loadedExtensionCount += loadExtension(extPtr->filePath, extPtr->initFunc) ? 1 : 0;
connect(SQLITE_EXTENSIONS, SIGNAL(extensionListChanged()), this, SLOT(reloadExtensions()));
@@ -377,14 +390,20 @@ bool AbstractDb::openAndSetup()
// Implementation specific initialization
initAfterOpen();
+ // Built-in SQL functions
+ registerBuiltInFunctions();
+
// Load extension
loadExtensions();
// Custom SQL functions
- registerAllFunctions();
+ registerUserFunctions();
// Custom collations
- registerAllCollations();
+ registerUserCollations();
+
+ disconnect(FUNCTIONS, SIGNAL(functionListChanged()), this, SLOT(registerUserFunctions()));
+ connect(FUNCTIONS, SIGNAL(functionListChanged()), this, SLOT(registerUserFunctions()));
return result;
}
@@ -616,6 +635,12 @@ void AbstractDb::asyncQueryFinished(AsyncQueryRunner *runner)
emit idle();
}
+void AbstractDb::appIsAboutToQuit()
+{
+ if (isOpen())
+ flushWal();
+}
+
QString AbstractDb::attach(Db* otherDb, bool silent)
{
QWriteLocker locker(&dbOperLock);
@@ -716,7 +741,7 @@ QString AbstractDb::getUniqueNewObjectName(const QString &attachedDbName)
QSet<QString> existingNames;
SqlQueryPtr results = exec(QString("SELECT name FROM %1.sqlite_master").arg(dbName));
- for (SqlResultsRowPtr row : results->getAll())
+ for (SqlResultsRowPtr& row : results->getAll())
existingNames << row->value(0).toString();
return randStrNotIn(16, existingNames, false);
@@ -875,10 +900,10 @@ void AbstractDb::registerFunction(const AbstractDb::RegisteredFunction& function
switch (function.type)
{
case FunctionManager::ScriptFunction::SCALAR:
- successful = registerScalarFunction(function.name, function.argCount);
+ successful = registerScalarFunction(function.name, function.argCount, function.deterministic);
break;
case FunctionManager::ScriptFunction::AGGREGATE:
- successful = registerAggregateFunction(function.name, function.argCount);
+ successful = registerAggregateFunction(function.name, function.argCount, function.deterministic);
break;
}
@@ -888,6 +913,12 @@ void AbstractDb::registerFunction(const AbstractDb::RegisteredFunction& function
qCritical() << "Could not register SQL function:" << function.name << function.argCount << function.type;
}
+void AbstractDb::flushWal()
+{
+ if (!flushWalInternal())
+ notifyWarn(tr("Failed to make full WAL checkpoint on database '%1'. Error returned from SQLite engine: %2").arg(name, getErrorTextInternal()));
+}
+
int qHash(const AbstractDb::RegisteredFunction& fn)
{
return qHash(fn.name) ^ fn.argCount ^ fn.type;
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.h b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.h
index a465679..193f173 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.h
@@ -203,6 +203,8 @@ class API_EXPORT AbstractDb : public Db
virtual void initAfterOpen();
+ virtual bool flushWalInternal() = 0;
+
void checkForDroppedObject(const QString& query);
bool registerCollation(const QString& name);
bool deregisterCollation(const QString& name);
@@ -341,6 +343,16 @@ class API_EXPORT AbstractDb : public Db
* @brief Function type.
*/
FunctionManager::ScriptFunction::Type type;
+
+ /**
+ * @brief The deterministic flag used for function registration.
+ */
+ bool deterministic;
+
+ /**
+ * @brief Flag indicating if this function is SQLiteStudio's built-in function or user's custom function.
+ */
+ bool builtIn = false;
};
friend int qHash(const AbstractDb::RegisteredFunction& fn);
@@ -415,6 +427,23 @@ class API_EXPORT AbstractDb : public Db
void registerFunction(const RegisteredFunction& function);
/**
+ * @brief Flushes any pending WAL log files into the db file.
+ *
+ * It actually makes a 'PRAGMA wal_checkpoint(FULL)' call on the database.
+ * It's called automatically upon closing the database.
+ */
+ void flushWal();
+
+ /**
+ * @brief Registers SQLiteStudio's built-in functions in the db.
+ *
+ * This function is called once during opening the db.
+ *
+ * @see FunctionManager
+ */
+ void registerBuiltInFunctions();
+
+ /**
* @brief Connection state lock.
*
* It's locked whenever the connection state is changed or tested.
@@ -457,14 +486,16 @@ class API_EXPORT AbstractDb : public Db
*/
void asyncQueryFinished(AsyncQueryRunner* runner);
+ void appIsAboutToQuit();
+
public slots:
bool open();
bool close();
bool openQuiet();
bool closeQuiet();
bool openForProbing();
- void registerAllFunctions();
- void registerAllCollations();
+ void registerUserFunctions();
+ void registerUserCollations();
void reloadExtensions();
};
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h
index 72c1614..f8812e9 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h
@@ -58,10 +58,11 @@ class AbstractDb3 : public AbstractDb
bool initAfterCreated();
void initAfterOpen();
SqlQueryPtr prepare(const QString& query);
- QString getTypeLabel();
+ bool flushWalInternal();
+ QString getTypeLabel() const;
bool deregisterFunction(const QString& name, int argCount);
- bool registerScalarFunction(const QString& name, int argCount);
- bool registerAggregateFunction(const QString& name, int argCount);
+ bool registerScalarFunction(const QString& name, int argCount, bool deterministic);
+ bool registerAggregateFunction(const QString& name, int argCount, bool deterministic);
bool registerCollationInternal(const QString& name);
bool deregisterCollationInternal(const QString& name);
@@ -121,6 +122,7 @@ class AbstractDb3 : public AbstractDb
};
QString extractLastError();
+ QString extractLastError(typename T::handle* handle);
void cleanUp();
void resetError();
@@ -407,6 +409,22 @@ int AbstractDb3<T>::getErrorCodeInternal()
}
template <class T>
+bool AbstractDb3<T>::flushWalInternal()
+{
+ resetError();
+ if (!dbHandle)
+ return false;
+
+ int res = T::wal_checkpoint_v2(dbHandle, nullptr, T::CHECKPOINT_FULL, nullptr, nullptr);
+ if (res != T::OK)
+ {
+ dbErrorMessage = QObject::tr("Could not run WAL checkpoint: %1").arg(extractLastError());
+ dbErrorCode = res;
+ }
+ return res == T::OK;
+}
+
+template <class T>
bool AbstractDb3<T>::openInternal()
{
resetError();
@@ -414,11 +432,11 @@ bool AbstractDb3<T>::openInternal()
int res = T::open_v2(path.toUtf8().constData(), &handle, T::OPEN_READWRITE|T::OPEN_CREATE, nullptr);
if (res != T::OK)
{
+ dbErrorMessage = QObject::tr("Could not open database: %1").arg(extractLastError(handle));
+ dbErrorCode = res;
if (handle)
T::close(handle);
- dbErrorMessage = QObject::tr("Could not open database: %1").arg(extractLastError());
- dbErrorCode = res;
return false;
}
dbHandle = handle;
@@ -469,7 +487,7 @@ SqlQueryPtr AbstractDb3<T>::prepare(const QString& query)
}
template <class T>
-QString AbstractDb3<T>::getTypeLabel()
+QString AbstractDb3<T>::getTypeLabel() const
{
return T::label;
}
@@ -485,7 +503,7 @@ bool AbstractDb3<T>::deregisterFunction(const QString& name, int argCount)
}
template <class T>
-bool AbstractDb3<T>::registerScalarFunction(const QString& name, int argCount)
+bool AbstractDb3<T>::registerScalarFunction(const QString& name, int argCount, bool deterministic)
{
if (!dbHandle)
return false;
@@ -495,7 +513,11 @@ bool AbstractDb3<T>::registerScalarFunction(const QString& name, int argCount)
userData->name = name;
userData->argCount = argCount;
- int res = T::create_function_v2(dbHandle, name.toUtf8().constData(), argCount, T::UTF8, userData,
+ int opts = T::UTF8;
+ if (deterministic)
+ opts |= T::DETERMINISTIC;
+
+ int res = T::create_function_v2(dbHandle, name.toUtf8().constData(), argCount, opts, userData,
&AbstractDb3<T>::evaluateScalar,
nullptr,
nullptr,
@@ -505,7 +527,7 @@ bool AbstractDb3<T>::registerScalarFunction(const QString& name, int argCount)
}
template <class T>
-bool AbstractDb3<T>::registerAggregateFunction(const QString& name, int argCount)
+bool AbstractDb3<T>::registerAggregateFunction(const QString& name, int argCount, bool deterministic)
{
if (!dbHandle)
return false;
@@ -515,7 +537,11 @@ bool AbstractDb3<T>::registerAggregateFunction(const QString& name, int argCount
userData->name = name;
userData->argCount = argCount;
- int res = T::create_function_v2(dbHandle, name.toUtf8().constData(), argCount, T::UTF8, userData,
+ int opts = T::UTF8;
+ if (deterministic)
+ opts |= T::DETERMINISTIC;
+
+ int res = T::create_function_v2(dbHandle, name.toUtf8().constData(), argCount, opts, userData,
nullptr,
&AbstractDb3<T>::evaluateAggregateStep,
&AbstractDb3<T>::evaluateAggregateFinal,
@@ -552,8 +578,14 @@ bool AbstractDb3<T>::deregisterCollationInternal(const QString& name)
template <class T>
QString AbstractDb3<T>::extractLastError()
{
- dbErrorCode = T::extended_errcode(dbHandle);
- dbErrorMessage = QString::fromUtf8(T::errmsg(dbHandle));
+ return extractLastError(dbHandle);
+}
+
+template<class T>
+QString AbstractDb3<T>::extractLastError(typename T::handle* handle)
+{
+ dbErrorCode = T::extended_errcode(handle);
+ dbErrorMessage = QString::fromUtf8(T::errmsg(handle));
return dbErrorMessage;
}
@@ -799,11 +831,25 @@ void AbstractDb3<T>::registerDefaultCollation(void* fnUserData, typename T::hand
return;
}
+ SqlQueryPtr results = db->exec("PRAGMA collation_list", Db::Flag::NO_LOCK|Db::Flag::SKIP_DROP_DETECTION);
+ if (results->isError())
+ qWarning() << "Unable to query existing collations while registering needed collation" << collationName << ":" << db->getErrorText();
+
+ QStringList existingCollations = results->columnAsList<QString>("name");
+ if (existingCollations.contains(collationName))
+ {
+ qDebug() << "Requested collation" << collationName << "already exists. Probably different input encoding was expected,"
+ << "but SQLite should deal with it. Skipping default collation registration.";
+ return;
+ }
+
int res = T::create_collation_v2(fnDbHandle, collationName, T::UTF8, nullptr,
&AbstractDb3<T>::evaluateDefaultCollation, nullptr);
if (res != T::OK)
qWarning() << "Could not register default collation in AbstractDb3<T>::registerDefaultCollation().";
+ else
+ qDebug() << "Registered default collation on demand, under name:" << collationName;
}
template <class T>
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/db.cpp b/SQLiteStudio3/coreSQLiteStudio/db/db.cpp
index b3ad91b..11e47f2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/db.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/db.cpp
@@ -46,6 +46,6 @@ QDataStream &operator >>(QDataStream &in, Db*& myObj)
QDebug operator<<(QDebug dbg, const Db* db)
{
- dbg.nospace() << "<DB:" << db->getName() << ">";
+ dbg.nospace() << "<DB:" << (db ? db->getName() : 0x0) << ">";
return dbg.space();
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/db.h b/SQLiteStudio3/coreSQLiteStudio/db/db.h
index d937fb7..1331fff 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/db.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/db.h
@@ -2,9 +2,7 @@
#define DB_H
#include <QVariant>
-#include "returncode.h"
-#include "services/functionmanager.h"
-#include "common/readwritelocker.h"
+#include "common/global.h"
#include "coreSQLiteStudio_global.h"
#include "db/attachguard.h"
#include "interruptable.h"
@@ -604,7 +602,16 @@ class API_EXPORT Db : public QObject, public Interruptable
* This is usually the same as DbPlugin::getTitle(), but getTitle() is used in list of plugins in configuration dialog,
* while getTypeLabel() is used on databases list.
*/
- virtual QString getTypeLabel() = 0;
+ virtual QString getTypeLabel() const = 0;
+
+ /**
+ * @brief Gets C++ class name implementing this particular Db instance.
+ * @return Class name.
+ *
+ * It can be used to distinguish between different drivers of Db instances. While getTypeLabel() can theoretically return
+ * same labels for two different drivers, this method will always return distinct class name.
+ */
+ virtual QString getTypeClassName() const = 0;
/**
* @brief Initializes resources once the all derived Db classes are constructed.
@@ -631,6 +638,7 @@ class API_EXPORT Db : public QObject, public Interruptable
* @brief Registers scalar custom SQL function.
* @param name Name of the function.
* @param argCount Number of arguments accepted by the function (-1 for undefined).
+ * @param deterministic The deterministic function flag used when registering the function.
* @return true on success, false on failure.
*
* Scalar functions are evaluated for each row and their result is used in place of function invokation.
@@ -643,12 +651,13 @@ class API_EXPORT Db : public QObject, public Interruptable
*
* @see FunctionManager
*/
- virtual bool registerScalarFunction(const QString& name, int argCount) = 0;
+ virtual bool registerScalarFunction(const QString& name, int argCount, bool deterministic) = 0;
/**
* @brief Registers aggregate custom SQL function.
* @param name Name of the function.
* @param argCount Number of arguments accepted by the function (-1 for undefined).
+ * @param deterministic The deterministic function flag used when registering the function.
* @return true on success, false on failure.
*
* Aggregate functions are used to aggregate many rows into single row. They are common in queries with GROUP BY statements.
@@ -666,7 +675,7 @@ class API_EXPORT Db : public QObject, public Interruptable
*
* @see FunctionManager
*/
- virtual bool registerAggregateFunction(const QString& name, int argCount) = 0;
+ virtual bool registerAggregateFunction(const QString& name, int argCount, bool deterministic) = 0;
/**
* @brief Registers a collation sequence implementation in the database.
@@ -707,6 +716,15 @@ class API_EXPORT Db : public QObject, public Interruptable
*/
virtual bool loadExtension(const QString& filePath, const QString& initFunc = QString()) = 0;
+ /**
+ * @brief Creates instance of same (derived) class with same construction parameters passed.
+ * @return Created instance.
+ *
+ * This is useful when one needs to operate on this database out of DbManager context,
+ * so ownership, connection/disconnection, deletion, etc. all belongs to the caller of this method.
+ */
+ virtual Db* clone() const = 0;
+
signals:
/**
* @brief Emitted when the connection to the database was established.
@@ -825,22 +843,20 @@ class API_EXPORT Db : public QObject, public Interruptable
virtual bool closeQuiet() = 0;
/**
- * @brief Deregisters all funtions registered in the database and registers new (possibly the same) functions.
+ * @brief Deregisters previously registered user-defined functions and registers their fresh definition in the db.
*
* This slot is called from openAndSetup() and then every time user modifies custom SQL functions and commits changes to them.
- * It deregisters all functions registered before in this database and registers new functions, currently defined for
- * this database.
*
* @see FunctionManager
*/
- virtual void registerAllFunctions() = 0;
+ virtual void registerUserFunctions() = 0;
/**
* @brief Deregisters all collations registered in the database and registers new (possibly the same) collations.
*
* This slot is called from openAndsetup() and then every time user modifies custom collations and commits changes to them.
*/
- virtual void registerAllCollations() = 0;
+ virtual void registerUserCollations() = 0;
};
QDataStream &operator<<(QDataStream &out, const Db* myObj);
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/dbsqlite3.cpp b/SQLiteStudio3/coreSQLiteStudio/db/dbsqlite3.cpp
index 4778bb2..76ddd20 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/dbsqlite3.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/dbsqlite3.cpp
@@ -14,3 +14,13 @@ bool DbSqlite3::complete(const QString& sql)
{
return Sqlite3::complete(sql.toUtf8().constData());
}
+
+Db* DbSqlite3::clone() const
+{
+ return new DbSqlite3(name, path, connOptions);
+}
+
+QString DbSqlite3::getTypeClassName() const
+{
+ return "DbSqlite3";
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/dbsqlite3.h b/SQLiteStudio3/coreSQLiteStudio/db/dbsqlite3.h
index 1e7f6e2..54a4230 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/dbsqlite3.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/dbsqlite3.h
@@ -2,7 +2,6 @@
#define DBSQLITE3_H
#include "abstractdb3.h"
-#include "common/global.h"
#include "stdsqlite3driver.h"
#include "db/sqlite3.h"
@@ -30,6 +29,9 @@ class API_EXPORT DbSqlite3 : public AbstractDb3<Sqlite3>
DbSqlite3(const QString& name, const QString& path);
static bool complete(const QString& sql);
+
+ Db* clone() const;
+ QString getTypeClassName() const;
};
#endif // DBSQLITE3_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/invaliddb.cpp b/SQLiteStudio3/coreSQLiteStudio/db/invaliddb.cpp
index e7acb7b..e001017 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/invaliddb.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/invaliddb.cpp
@@ -241,11 +241,16 @@ int InvalidDb::getErrorCode()
return 0;
}
-QString InvalidDb::getTypeLabel()
+QString InvalidDb::getTypeLabel() const
{
return QStringLiteral("INVALID");
}
+QString InvalidDb::getTypeClassName() const
+{
+ return "InvalidDb";
+}
+
bool InvalidDb::initAfterCreated()
{
return false;
@@ -258,17 +263,19 @@ bool InvalidDb::deregisterFunction(const QString& name, int argCount)
return false;
}
-bool InvalidDb::registerScalarFunction(const QString& name, int argCount)
+bool InvalidDb::registerScalarFunction(const QString& name, int argCount, bool deterministic)
{
UNUSED(name);
UNUSED(argCount);
+ UNUSED(deterministic);
return false;
}
-bool InvalidDb::registerAggregateFunction(const QString& name, int argCount)
+bool InvalidDb::registerAggregateFunction(const QString& name, int argCount, bool deterministic)
{
UNUSED(name);
UNUSED(argCount);
+ UNUSED(deterministic);
return false;
}
@@ -309,11 +316,11 @@ bool InvalidDb::closeQuiet()
return false;
}
-void InvalidDb::registerAllFunctions()
+void InvalidDb::registerUserFunctions()
{
}
-void InvalidDb::registerAllCollations()
+void InvalidDb::registerUserCollations()
{
}
QString InvalidDb::getError() const
@@ -339,6 +346,11 @@ bool InvalidDb::isComplete(const QString& sql) const
return false;
}
+Db* InvalidDb::clone() const
+{
+ return new InvalidDb(name, path, connOptions);
+}
+
void InvalidDb::interrupt()
{
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/invaliddb.h b/SQLiteStudio3/coreSQLiteStudio/db/invaliddb.h
index c56da2e..2505079 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/invaliddb.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/invaliddb.h
@@ -48,11 +48,12 @@ class API_EXPORT InvalidDb : public Db
QString getUniqueNewObjectName(const QString& attachedDbName);
QString getErrorText();
int getErrorCode();
- QString getTypeLabel();
+ QString getTypeLabel() const;
+ QString getTypeClassName() const;
bool initAfterCreated();
bool deregisterFunction(const QString& name, int argCount);
- bool registerScalarFunction(const QString& name, int argCount);
- bool registerAggregateFunction(const QString& name, int argCount);
+ bool registerScalarFunction(const QString& name, int argCount, bool deterministic);
+ bool registerAggregateFunction(const QString& name, int argCount, bool deterministic);
bool registerCollation(const QString& name);
bool deregisterCollation(const QString& name);
void interrupt();
@@ -61,6 +62,7 @@ class API_EXPORT InvalidDb : public Db
void setError(const QString& value);
bool loadExtension(const QString& filePath, const QString& initFunc);
bool isComplete(const QString& sql) const;
+ Db* clone() const;
public slots:
bool open();
@@ -68,8 +70,8 @@ class API_EXPORT InvalidDb : public Db
bool openQuiet();
bool openForProbing();
bool closeQuiet();
- void registerAllFunctions();
- void registerAllCollations();
+ void registerUserFunctions();
+ void registerUserCollations();
private:
QString name;
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp
index 83dae5d..022bf47 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp
@@ -1,5 +1,5 @@
#include "queryexecutor.h"
-#include "sqlerrorresults.h"
+#include "db/queryexecutorsteps/queryexecutorfilter.h"
#include "sqlerrorcodes.h"
#include "services/dbmanager.h"
#include "db/sqlerrorcodes.h"
@@ -10,7 +10,6 @@
#include "queryexecutorsteps/queryexecutorattaches.h"
#include "queryexecutorsteps/queryexecutorcountresults.h"
#include "queryexecutorsteps/queryexecutorexecute.h"
-#include "queryexecutorsteps/queryexecutorcellsize.h"
#include "queryexecutorsteps/queryexecutorlimit.h"
#include "queryexecutorsteps/queryexecutororder.h"
#include "queryexecutorsteps/queryexecutorwrapdistinctresults.h"
@@ -49,7 +48,7 @@ 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*)));
+ connect(DBLIST, SIGNAL(dbAboutToBeUnloaded(Db*,DbPlugin*)), this, SLOT(cleanupBeforeDbDestroy(Db*)));
connect(DBLIST, SIGNAL(dbRemoved(Db*)), this, SLOT(cleanupBeforeDbDestroy(Db*)));
connect(simpleExecutor, &ChainExecutor::finished, this, &QueryExecutor::simpleExecutionFinished, Qt::DirectConnection);
}
@@ -82,6 +81,12 @@ void QueryExecutor::setupExecutionChain()
executionChain.append(additionalStatelessSteps[AFTER_REPLACED_VIEWS]);
executionChain.append(createSteps(AFTER_REPLACED_VIEWS));
+ executionChain << new QueryExecutorFilter()
+ << new QueryExecutorParseQuery("after Filter");
+
+ executionChain.append(additionalStatelessSteps[AFTER_COLUMN_FILTERS]);
+ executionChain.append(createSteps(AFTER_COLUMN_FILTERS));
+
executionChain << new QueryExecutorAddRowIds()
<< new QueryExecutorParseQuery("after AddRowIds");
@@ -105,14 +110,8 @@ void QueryExecutor::setupExecutionChain()
executionChain.append(additionalStatelessSteps[AFTER_DISTINCT_WRAP]);
executionChain.append(createSteps(AFTER_DISTINCT_WRAP));
- executionChain << new QueryExecutorCellSize()
- << new QueryExecutorCountResults()
- << new QueryExecutorParseQuery("after CellSize");
-
- executionChain.append(additionalStatelessSteps[AFTER_CELL_SIZE_LIMIT]);
- executionChain.append(createSteps(AFTER_CELL_SIZE_LIMIT));
-
- executionChain << new QueryExecutorColumnType()
+ executionChain << new QueryExecutorCountResults()
+ << new QueryExecutorColumnType()
<< new QueryExecutorParseQuery("after ColumnType");
executionChain.append(additionalStatelessSteps[AFTER_COLUMN_TYPES]);
@@ -130,13 +129,13 @@ void QueryExecutor::setupExecutionChain()
executionChain << new QueryExecutorExecute();
- for (QueryExecutorStep* step : executionChain)
+ for (QueryExecutorStep*& step : executionChain)
step->init(this, context);
}
void QueryExecutor::clearChain()
{
- for (QueryExecutorStep* step : executionChain)
+ for (QueryExecutorStep*& step : executionChain)
{
if (!allAdditionalStatelsssSteps.contains(step))
delete step;
@@ -149,7 +148,7 @@ void QueryExecutor::executeChain()
{
// Go through all remaining steps
bool result;
- for (QueryExecutorStep* currentStep : executionChain)
+ for (QueryExecutorStep*& currentStep : executionChain)
{
if (isInterrupted())
{
@@ -189,7 +188,9 @@ void QueryExecutor::stepFailed(QueryExecutorStep* currentStep)
if (isInterrupted())
{
+ executionMutex.lock();
executionInProgress = false;
+ executionMutex.unlock();
emit executionFailed(SqlErrorCode::INTERRUPTED, tr("Execution interrupted."));
return;
}
@@ -416,7 +417,7 @@ QList<QueryExecutor::ResultRowIdColumnPtr> QueryExecutor::getRowIdResultColumns(
int QueryExecutor::getMetaColumnCount() const
{
int count = 0;
- for (ResultRowIdColumnPtr rowIdCol : context->rowIdColumns)
+ for (ResultRowIdColumnPtr& rowIdCol : context->rowIdColumns)
count += rowIdCol->queryExecutorAliasToColumn.size();
return count;
@@ -450,7 +451,9 @@ void QueryExecutor::executeSimpleMethod()
if (queriesForSimpleExecution.isEmpty())
queriesForSimpleExecution = quickSplitQueries(originalQuery, false, true);
- QStringList queriesWithPagination = applyLimitForSimpleMethod(queriesForSimpleExecution);
+ QStringList queriesWithPagination = applyFiltersAndLimitAndOrderForSimpleMethod(queriesForSimpleExecution);
+ if (isExecutorLoggingEnabled())
+ qDebug() << "Simple Execution Method query:" << queriesWithPagination.join("; ");
simpleExecutor->setQueries(queriesWithPagination);
simpleExecutor->setDb(db);
@@ -479,7 +482,7 @@ void QueryExecutor::simpleExecutionFinished(SqlQueryPtr results)
ResultColumnPtr resCol;
context->resultColumns.clear();
- for (const QString& colName : results->getColumnNames())
+ for (QString& colName : results->getColumnNames())
{
resCol = ResultColumnPtr::create();
resCol->displayName = colName;
@@ -558,7 +561,7 @@ bool QueryExecutor::simpleExecIsSelect()
void QueryExecutor::cleanup()
{
Db* attDb = nullptr;
- for (const QString& attDbName : context->dbNameToAttach.leftValues())
+ for (QString& attDbName : context->dbNameToAttach.leftValues())
{
attDb = DBLIST->getByName(attDbName, Qt::CaseInsensitive);
if (attDbName.isNull())
@@ -597,29 +600,65 @@ bool QueryExecutor::handleRowCountingResults(quint32 asyncId, SqlQueryPtr result
return true;
}
-QStringList QueryExecutor::applyLimitForSimpleMethod(const QStringList &queries)
+QStringList QueryExecutor::applyFiltersAndLimitAndOrderForSimpleMethod(const QStringList &queries)
{
+ static_qstring(filtersTpl, "SELECT * FROM (%1) WHERE %2");
static_qstring(tpl, "SELECT * FROM (%1) LIMIT %2 OFFSET %3");
- if (page < 0)
- return queries; // no paging requested
+ static_qstring(sortTpl, "SELECT * FROM (%1) ORDER BY %2");
+ static_qstring(sortColTpl, "%1 %2");
+
+ if (page < 0 && sortOrder.isEmpty())
+ return queries;
QStringList result = queries;
QString lastQuery = queries.last();
bool isSelect = false;
getQueryAccessMode(lastQuery, &isSelect);
- if (isSelect)
+
+ // FILTERS
+ QString filters = getFilters();
+ if (isSelect && !filters.isEmpty())
{
- result.removeLast();
- result << tpl.arg(trimQueryEnd(lastQuery), QString::number(resultsPerPage), QString::number(page * resultsPerPage));
+ lastQuery = filtersTpl.arg(
+ trimQueryEnd(lastQuery),
+ filters
+ );
}
+
+ // ORDER BY
+ if (!sortOrder.isEmpty())
+ {
+ QStringList cols;
+ for (QueryExecutor::Sort& sort : sortOrder)
+ {
+ cols << sortColTpl.arg(
+ QString::number(sort.column + 1), // in ORDER BY column indexes are 1-based
+ (sort.order == QueryExecutor::Sort::DESC) ? "DESC" : "ASC"
+ );
+ }
+ lastQuery = sortTpl.arg(trimQueryEnd(lastQuery), cols.join(", "));
+ }
+
+ // LIMIT
+ if (page >= 0 && isSelect)
+ {
+ lastQuery = tpl.arg(
+ trimQueryEnd(lastQuery),
+ QString::number(resultsPerPage),
+ QString::number(page * resultsPerPage)
+ );
+ }
+
+ result.removeLast();
+ result << lastQuery;
return result;
}
QList<QueryExecutorStep*> QueryExecutor::createSteps(QueryExecutor::StepPosition position)
{
QList<QueryExecutorStep*> steps;
- for (StepFactory* factory : additionalStatefulStepFactories[position])
+ for (StepFactory*& factory : additionalStatefulStepFactories[position])
steps << factory->produceQueryExecutorStep();
return steps;
@@ -714,7 +753,7 @@ void QueryExecutor::handleErrorsFromSmartAndSimpleMethods(SqlQueryPtr results)
{
QString match;
QString replaceName;
- for (const QString& attachName : context->dbNameToAttach.rightValues())
+ for (QString& attachName : context->dbNameToAttach.rightValues())
{
match = attachName + ".";
replaceName = wrapObjIfNeeded(context->dbNameToAttach.valueByRight(attachName)) + ".";
@@ -752,7 +791,7 @@ bool QueryExecutor::wasDataModifyingQuery() const
QList<DataType> QueryExecutor::resolveColumnTypes(Db* db, QList<QueryExecutor::ResultColumnPtr>& columns, bool noDbLocking)
{
QSet<Table> tables;
- for (ResultColumnPtr col : columns)
+ for (ResultColumnPtr& col : columns)
tables << Table(col->database, col->table);
SchemaResolver resolver(db);
@@ -774,7 +813,7 @@ QList<DataType> QueryExecutor::resolveColumnTypes(Db* db, QList<QueryExecutor::R
QList<DataType> datatypeList;
Table t;
SqliteCreateTable::Column* parsedCol = nullptr;
- for (ResultColumnPtr col : columns)
+ for (ResultColumnPtr& col : columns)
{
t = Table(col->database, col->table);
if (!parsedTables.contains(t))
@@ -969,3 +1008,13 @@ int qHash(QueryExecutor::SourceTable sourceTable)
return qHash(sourceTable.database + "." + sourceTable.table + "/" + sourceTable.alias);
}
+
+QString QueryExecutor::getFilters() const
+{
+ return filters;
+}
+
+void QueryExecutor::setFilters(const QString& newFilters)
+{
+ filters = newFilters;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h
index ffbcb7b..c8d0b00 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h
@@ -2,10 +2,10 @@
#define QUERYEXECUTOR_H
#include "db/db.h"
-#include "parser/token.h"
-#include "selectresolver.h"
#include "coreSQLiteStudio_global.h"
#include "common/bistrhash.h"
+#include "parser/ast/sqlitequery.h"
+#include "parser/ast/sqlitequerytype.h"
#include "datatype.h"
#include <QObject>
#include <QHash>
@@ -15,7 +15,6 @@
/** @file */
class Parser;
-class SqliteQuery;
class QueryExecutorStep;
class DbPlugin;
class ChainExecutor;
@@ -174,6 +173,10 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
* in COMPOUND_SELECT case. To learn about common table expression statement,
* see http://sqlite.org/lang_with.html
*/
+ VIEW_NOT_EXPANDED,/**<
+ * The data cell comes from a VIEW that was not expanded (because there were
+ * multi-level views), therefore it was impossible to get ROWID for the cell.
+ */
};
/**
@@ -652,6 +655,14 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
* message from smart execution.
*/
QString errorMessageFromSmartExecution;
+
+ /**
+ * @brief Flag indicating whether views were replaced/expanded.
+ *
+ * In other words, this flag tells whether the ReplaceViews step of query executor
+ * was executed, or skipped (due to many levels of views). False = skipped.
+ */
+ bool viewsExpanded = false;
};
/**
@@ -679,8 +690,8 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
AFTER_REPLACED_COLUMNS, /**< After all columns have been explicitly listed in result list, together with unique alias names */
AFTER_ORDER, /**< After order clause was applied/modified */
AFTER_DISTINCT_WRAP, /**< After wrapping SELECT was added in case of DISTINCT or GROUP BY clauses were used */
- AFTER_CELL_SIZE_LIMIT, /**< After cell result size was limited to save memory usage */
AFTER_COLUMN_TYPES, /**< After typeof() result meta columns were added */
+ AFTER_COLUMN_FILTERS, /**< After WHERE filters applied */
AFTER_ROW_LIMIT_AND_OFFSET, /**< After LIMIT and ORDER clauses were added/modified. This is the last possible moment, directly ahead of final query execution */
JUST_BEFORE_EXECUTION, /**< Same as AFTER_ROW_LIMIT_AND_OFFSET */
LAST /**< Same as AFTER_ROW_LIMIT_AND_OFFSET */
@@ -1077,6 +1088,9 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
bool getNoMetaColumns() const;
void setNoMetaColumns(bool value);
+ void setFilters(const QString& newFilters);
+ QString getFilters() const;
+
void handleErrorsFromSmartAndSimpleMethods(SqlQueryPtr results);
/**
@@ -1222,7 +1236,7 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
*/
bool handleRowCountingResults(quint32 asyncId, SqlQueryPtr results);
- QStringList applyLimitForSimpleMethod(const QStringList &queries);
+ QStringList applyFiltersAndLimitAndOrderForSimpleMethod(const QStringList &queries);
/**
* @brief Creates instances of steps for all registered factories for given position.
@@ -1348,6 +1362,13 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
int dataLengthLimit = -1;
/**
+ * @brief Optional filters to apply to the query.
+ * If not empty, it will be appended to the WHERE clause at the very end of execution chain,
+ * skipping complex result colum analysis, etc.
+ */
+ QString filters;
+
+ /**
* @brief Limit of queries, after which simple mode is used.
*
* Up to the defined limit the smart execution will be used (unless #forceSimpleMode was set).
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp
index a487623..d294b2c 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.cpp
@@ -1,7 +1,6 @@
#include "queryexecutoraddrowids.h"
#include "parser/ast/sqliteselect.h"
#include "selectresolver.h"
-#include "common/utils_sql.h"
#include "parser/ast/sqlitecreatetable.h"
#include "schemaresolver.h"
#include "common/compatibility.h"
@@ -55,12 +54,14 @@ QHash<SelectResolver::Table,QHash<QString,QString>> QueryExecutorAddRowIds::addR
return rowIdColsMap;
// Go trough subselects to add ROWID result columns there and collect rowId mapping to use here.
- for (SqliteSelect* subSelect : getSubSelects(core))
+ for (SqliteSelect*& subSelect : getSubSelects(core))
{
unite(rowIdColsMap, addRowIdForTables(subSelect, ok, false));
if (!ok)
return rowIdColsMap;
+
}
+ core->rebuildTokens();
// Getting all tables we need to get ROWID for
SelectResolver resolver(db, select->tokens.detokenize(), context->dbNameToAttach);
@@ -71,7 +72,11 @@ QHash<SelectResolver::Table,QHash<QString,QString>> QueryExecutorAddRowIds::addR
{
if (table.flags & (SelectResolver::FROM_COMPOUND_SELECT | SelectResolver::FROM_DISTINCT_SELECT | SelectResolver::FROM_GROUPED_SELECT |
SelectResolver::FROM_CTE_SELECT))
- continue; // we don't get ROWID from compound, distinct or aggregated subselects
+ continue; // we don't get ROWID from compound, distinct or aggregated subselects.
+
+ // Tables from inside of view don't provide ROWID, if views were not expanded.
+ if (!context->viewsExpanded && table.flags & SelectResolver::FROM_VIEW)
+ continue;
if (checkInWithClause(table, select->with))
continue; // we don't get ROWID from WITH clause, as it's likely to be recurrent and difficult. TODO: support columns from WITH clause
@@ -94,7 +99,7 @@ QList<SqliteSelect*> QueryExecutorAddRowIds::getSubSelects(SqliteSelect::Core* c
if (core->from->singleSource && core->from->singleSource->select)
selects << core->from->singleSource->select;
- for (SqliteSelect::Core::JoinSourceOther* otherSource : core->from->otherSources)
+ for (SqliteSelect::Core::JoinSourceOther*& otherSource : core->from->otherSources)
{
if (!otherSource->singleSource->select)
continue;
@@ -118,7 +123,7 @@ QHash<QString,QString> QueryExecutorAddRowIds::getNextColNames(const SelectResol
return colNames;
}
- if (createTable->withOutRowId.isNull())
+ if (!createTable->withOutRowId)
{
// It's a regular ROWID table
colNames[getNextColName()] = "ROWID";
@@ -142,7 +147,7 @@ QHash<QString,QString> QueryExecutorAddRowIds::getNextColNames(const SelectResol
SqliteCreateTable::Constraint* tableConstr = dynamic_cast<SqliteCreateTable::Constraint*>(primaryKey);
if (tableConstr)
{
- for (SqliteIndexedColumn* idxCol : tableConstr->indexedColumns)
+ for (SqliteIndexedColumn*& idxCol : tableConstr->indexedColumns)
colNames[getNextColName()] = idxCol->name;
return colNames;
@@ -155,7 +160,11 @@ QHash<QString,QString> QueryExecutorAddRowIds::getNextColNames(const SelectResol
bool QueryExecutorAddRowIds::addResultColumns(SqliteSelect::Core* core, const SelectResolver::Table& table,
QHash<SelectResolver::Table,QHash<QString,QString>>& rowIdColsMap, bool isTopSelect)
{
- SelectResolver::Table keyTable = table;
+ SelectResolver::Table destilledTable = table;
+ if (destilledTable.database == "main" && destilledTable.originalDatabase.isNull())
+ destilledTable.database = QString();
+
+ SelectResolver::Table keyTable = destilledTable;
// If selecting from named subselect, where table in that subselect has no alias, we need to match
// Table by table&database, but excluding alias.
@@ -163,18 +172,20 @@ bool QueryExecutorAddRowIds::addResultColumns(SqliteSelect::Core* core, const Se
{
keyTable.tableAlias = QString();
if (!rowIdColsMap.contains(keyTable))
- keyTable = table;
+ {
+ keyTable = destilledTable;
+ }
}
// Aliased matching should be performed also against pushed (to old) aliases, due to multi-level subselects.
if (!rowIdColsMap.contains(keyTable))
{
- for (const SelectResolver::Table& rowIdColsMapTable : rowIdColsMap.keys())
+ for (auto rowIdColsMapTable = rowIdColsMap.keyBegin(), end = rowIdColsMap.keyEnd(); rowIdColsMapTable != end; ++rowIdColsMapTable)
{
- if (!table.oldTableAliases.contains(rowIdColsMapTable.tableAlias, Qt::CaseInsensitive))
+ if (!table.oldTableAliases.contains(rowIdColsMapTable->tableAlias, Qt::CaseInsensitive))
continue;
- keyTable = rowIdColsMapTable;
+ keyTable = *rowIdColsMapTable;
}
}
@@ -202,7 +213,7 @@ bool QueryExecutorAddRowIds::addResultColumns(SqliteSelect::Core* core, const Se
while (it.hasNext())
{
it.next();
- if (!addResultColumns(core, table, it.key(), it.value(), aliasOnlyAsSelectColumn))
+ if (!addResultColumns(core, destilledTable, it.key(), it.value(), aliasOnlyAsSelectColumn))
return false;
}
@@ -228,7 +239,7 @@ bool QueryExecutorAddRowIds::checkInWithClause(const SelectResolver::Table &tabl
SqliteWith::CommonTableExpression* cte = nullptr;
QString nameToCompareWith = table.tableAlias.isNull() ? table.table : table.tableAlias;
- for (SqliteWith::CommonTableExpression* cteItem : with->cteList)
+ for (SqliteWith::CommonTableExpression*& cteItem : with->cteList)
{
if (cteItem->table == nameToCompareWith)
{
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.h
index 1669542..bf4d263 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutoraddrowids.h
@@ -2,7 +2,7 @@
#define QUERYEXECUTORADDROWIDS_H
#include "queryexecutorstep.h"
-#include "parser/token.h"
+#include "selectresolver.h"
/**
* @brief Adds ROWID to result columns.
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcellsize.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcellsize.cpp
deleted file mode 100644
index 352c74b..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcellsize.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-#include "queryexecutorcellsize.h"
-#include <QDebug>
-
-bool QueryExecutorCellSize::exec()
-{
- if (queryExecutor->getDataLengthLimit() < 0)
- return true;
-
- SqliteSelectPtr select = getSelect();
- if (!select || select->explain)
- return true;
-
- for (SqliteSelect::Core* core : select->coreSelects)
- {
- if (!applyDataLimit(select.data(), core))
- return false;
- }
-
- updateQueries();
- return true;
-}
-
-bool QueryExecutorCellSize::applyDataLimit(SqliteSelect* select, SqliteSelect::Core* core)
-{
- if (core->tokensMap["selcollist"].size() == 0)
- {
- qCritical() << "No 'selcollist' in Select::Core. Cannot apply cell size limits.";
- return false;
- }
-
- bool first = true;
- TokenList tokens;
-
- for (const QueryExecutor::ResultColumnPtr& col : context->resultColumns)
- {
- if (!first)
- tokens += getSeparatorTokens();
-
- tokens += getLimitTokens(col);
- first = false;
- }
-
- for (const QueryExecutor::ResultRowIdColumnPtr& col : context->rowIdColumns)
- {
- if (!first)
- tokens += getSeparatorTokens();
-
- tokens += getNoLimitTokens(col);
- first = false;
- }
-
- // Wrapping original select with new select with limited columns
- select->tokens = wrapSelect(select->tokens, tokens);
-
- return true;
-}
-
-TokenList QueryExecutorCellSize::getLimitTokens(const QueryExecutor::ResultColumnPtr& resCol)
-{
- // CASE WHEN typeof(alias) IN ('real', 'integer', 'numeric', 'null') THEN alias ELSE substr(alias, 1, limit) END
- TokenList newTokens;
- newTokens << TokenPtr::create(Token::KEYWORD, "CASE")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::KEYWORD, "WHEN")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::OTHER, "typeof")
- << TokenPtr::create(Token::PAR_LEFT, "(")
- << TokenPtr::create(Token::OTHER, resCol->queryExecutorAlias)
- << TokenPtr::create(Token::PAR_RIGHT, ")")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::KEYWORD, "IN")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::PAR_LEFT, "(")
- << TokenPtr::create(Token::STRING, "'real'")
- << TokenPtr::create(Token::OPERATOR, ",")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::STRING, "'integer'")
- << TokenPtr::create(Token::OPERATOR, ",")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::STRING, "'numeric'")
- << TokenPtr::create(Token::OPERATOR, ",")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::STRING, "'null'")
- << TokenPtr::create(Token::PAR_RIGHT, ")")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::KEYWORD, "THEN")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::OTHER, resCol->queryExecutorAlias)
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::KEYWORD, "ELSE")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::OTHER, "substr")
- << TokenPtr::create(Token::PAR_LEFT, "(")
- << TokenPtr::create(Token::OTHER, resCol->queryExecutorAlias)
- << TokenPtr::create(Token::OPERATOR, ",")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::INTEGER, "1")
- << TokenPtr::create(Token::OPERATOR, ",")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::INTEGER, QString::number(queryExecutor->getDataLengthLimit()))
- << TokenPtr::create(Token::PAR_RIGHT, ")")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::KEYWORD, "END")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::KEYWORD, "AS")
- << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::OTHER, resCol->queryExecutorAlias);
- return newTokens;
-}
-
-TokenList QueryExecutorCellSize::getNoLimitTokens(const QueryExecutor::ResultRowIdColumnPtr& resCol)
-{
- TokenList newTokens;
- bool first = true;
- for (const QString& col : resCol->queryExecutorAliasToColumn.keys())
- {
- if (!first)
- newTokens += getSeparatorTokens();
-
- newTokens << TokenPtr::create(Token::OTHER, col);
- first = false;
- }
- return newTokens;
-}
-
-TokenList QueryExecutorCellSize::getSeparatorTokens()
-{
- TokenList newTokens;
- newTokens << TokenPtr::create(Token::OPERATOR, ",");
- newTokens << TokenPtr::create(Token::SPACE, " ");
- return newTokens;
-}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcellsize.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcellsize.h
deleted file mode 100644
index c174c69..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcellsize.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef QUERYEXECUTORCELLSIZE_H
-#define QUERYEXECUTORCELLSIZE_H
-
-#include "queryexecutorstep.h"
-
-/**
- * @brief Applies per-cell byte size limit to the query.
- *
- * Size of data extracted for each cell is limited in order to avoid huge memory use
- * when the database contains column with like 500MB values per row and the query
- * returns for example 100 rows.
- *
- * This is accomplished by wrapping all result columns (except ROWID columns) with substr() SQL function.
- *
- * SQLiteStudio limits each column to SqlQueryModel::cellDataLengthLimit when displaying
- * data in SqlQueryView.
- *
- * This feature is disabled by default in QueryExecutor and has to be enabled by defining
- * QueryExecutor::setDataLengthLimit().
- */
-class QueryExecutorCellSize : public QueryExecutorStep
-{
- Q_OBJECT
-
- public:
- bool exec();
-
- private:
- /**
- * @brief Applies limit function to all result columns in given SELECT.
- * @param select Select that we want to limit.
- * @param core Select's core that we want to limit.
- * @return true on success, false on failure.
- *
- * This method is called for each core in the \p select.
- */
- bool applyDataLimit(SqliteSelect* select, SqliteSelect::Core* core);
-
- /**
- * @brief Generates tokens that will return limited value of the result column.
- * @param resCol Result column to wrap.
- * @return List of tokens.
- */
- TokenList getLimitTokens(const QueryExecutor::ResultColumnPtr& resCol);
-
- /**
- * @brief Generates tokens that will return unlimited value of the ROWID result column.
- * @param resCol ROWID result column.
- * @return List of tokens.
- */
- TokenList getNoLimitTokens(const QueryExecutor::ResultRowIdColumnPtr& resCol);
-
- /**
- * @brief Generates tokens representing result columns separator.
- * @return List of tokens.
- *
- * Result columns separator tokens are just a period and a space.
- */
- TokenList getSeparatorTokens();
-};
-
-#endif // QUERYEXECUTORCELLSIZE_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp
index 5ababcd..d3f2eea 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumns.cpp
@@ -18,7 +18,7 @@ bool QueryExecutorColumns::exec()
// Resolving result columns of the select
SelectResolver resolver(db, queryExecutor->getOriginalQuery(), context->dbNameToAttach);
resolver.resolveMultiCore = true;
- QList<SelectResolver::Column> columns = resolver.resolve(select.data()).first();
+ QList<SelectResolver::Column> columns = resolver.resolve(select->coreSelects.first());
if (resolver.hasErrors())
{
@@ -34,22 +34,21 @@ bool QueryExecutorColumns::exec()
// Deleting old result columns and defining new ones
SqliteSelect::Core* core = select->coreSelects.first();
- for (SqliteSelect::Core::ResultColumn* resCol : core->resultColumns)
+ for (SqliteSelect::Core::ResultColumn*& resCol : core->resultColumns)
delete resCol;
core->resultColumns.clear();
// Count total rowId columns
- for (const QueryExecutor::ResultRowIdColumnPtr& rowIdCol : context->rowIdColumns)
+ for (QueryExecutor::ResultRowIdColumnPtr& rowIdCol : context->rowIdColumns)
rowIdColNames += rowIdCol->queryExecutorAliasToColumn.keys();
// Defining result columns
QueryExecutor::ResultColumnPtr resultColumn;
SqliteSelect::Core::ResultColumn* resultColumnForSelect = nullptr;
bool rowIdColumn = false;
- int i = 0;
QSet<QString> usedAliases;
- for (const SelectResolver::Column& col : columns)
+ for (SelectResolver::Column& col : columns)
{
// Convert column to QueryExecutor result column
resultColumn = getResultColumn(col);
@@ -68,8 +67,6 @@ bool QueryExecutorColumns::exec()
if (!rowIdColumn)
context->resultColumns << resultColumn; // store it in context for later usage by any step
-
- i++;
}
// qDebug() << "before: " << context->processedQuery;
@@ -111,6 +108,9 @@ QueryExecutor::ResultColumnPtr QueryExecutorColumns::getResultColumn(const Selec
if (resolvedColumn.flags & SelectResolver::FROM_CTE_SELECT)
resultColumn->editionForbiddenReasons << QueryExecutor::ColumnEditionForbiddenReason::COMM_TAB_EXPR;
+ if (resolvedColumn.flags & SelectResolver::FROM_VIEW)
+ resultColumn->editionForbiddenReasons << QueryExecutor::ColumnEditionForbiddenReason::VIEW_NOT_EXPANDED;
+
resultColumn->database = resolvedColumn.originalDatabase;
resultColumn->table = resolvedColumn.table;
resultColumn->column = resolvedColumn.column;
@@ -120,13 +120,10 @@ QueryExecutor::ResultColumnPtr QueryExecutorColumns::getResultColumn(const Selec
}
if (isRowIdColumnAlias(resultColumn->alias))
- {
resultColumn->queryExecutorAlias = resultColumn->alias;
- }
else
- {
resultColumn->queryExecutorAlias = getNextColName();
- }
+
return resultColumn;
}
@@ -135,10 +132,10 @@ SqliteSelect::Core::ResultColumn* QueryExecutorColumns::getResultColumnForSelect
SqliteSelect::Core::ResultColumn* selectResultColumn = new SqliteSelect::Core::ResultColumn();
QString colString = resultColumn->column;
- if (col.aliasDefinedInSubQuery) // #2931
- colString = col.alias;
+ if (col.aliasDefinedInSubQuery) // #2819 (id from old tracker was 2931)
+ colString = wrapObjIfNeeded(col.alias);
- if (!resultColumn->expression)
+ if (!resultColumn->expression && !col.aliasDefinedInSubQuery) // if alias defined in subquery, it's already wrapped
colString = wrapObjIfNeeded(colString);
Parser parser;
@@ -149,6 +146,7 @@ SqliteSelect::Core::ResultColumn* QueryExecutorColumns::getResultColumnForSelect
if (parser.getErrors().size() > 0)
qWarning() << "The error was:" << parser.getErrors().first()->getFrom() << ":" << parser.getErrors().first()->getMessage();
+ delete selectResultColumn;
return nullptr;
}
@@ -189,7 +187,6 @@ SqliteSelect::Core::ResultColumn* QueryExecutorColumns::getResultColumnForSelect
selectResultColumn->alias = aliasTpl.arg(aliasBase, QString::number(nextAliasCounter++));
usedAliases += selectResultColumn->alias;
- selectResultColumn->alias = wrapObjIfNeeded(selectResultColumn->alias);
return selectResultColumn;
}
@@ -204,7 +201,7 @@ QString QueryExecutorColumns::resolveAttachedDatabases(const QString &dbName)
bool QueryExecutorColumns::isRowIdColumnAlias(const QString& alias)
{
- for (QueryExecutor::ResultRowIdColumnPtr rowIdColumn : context->rowIdColumns)
+ for (QueryExecutor::ResultRowIdColumnPtr& rowIdColumn : context->rowIdColumns)
{
if (rowIdColumn->queryExecutorAliasToColumn.keys().contains(alias))
return true;
@@ -224,7 +221,7 @@ void QueryExecutorColumns::wrapWithAliasedColumns(SqliteSelect* select)
QString baseColName;
QString colName;
static_qstring(colNameTpl, "%1:%2");
- for (const QueryExecutor::ResultColumnPtr& resCol : context->resultColumns)
+ for (QueryExecutor::ResultColumnPtr& resCol : context->resultColumns)
{
if (!first)
outerColumns += sepTokens;
@@ -253,9 +250,9 @@ void QueryExecutorColumns::wrapWithAliasedColumns(SqliteSelect* select)
first = false;
}
- for (const QueryExecutor::ResultRowIdColumnPtr& rowIdColumn : context->rowIdColumns)
+ for (QueryExecutor::ResultRowIdColumnPtr& rowIdColumn : context->rowIdColumns)
{
- for (const QString& alias : rowIdColumn->queryExecutorAliasToColumn.keys())
+ for (QString& alias : rowIdColumn->queryExecutorAliasToColumn.keys())
{
if (!first)
outerColumns += sepTokens;
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumntype.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumntype.cpp
index fb788f4..d0f9387 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumntype.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumntype.cpp
@@ -1,4 +1,7 @@
#include "queryexecutorcolumntype.h"
+#include "parser/parser.h"
+#include <QDebug>
+#include <QStringList>
bool QueryExecutorColumnType::exec()
{
@@ -9,7 +12,22 @@ bool QueryExecutorColumnType::exec()
if (!select || select->explain)
return true;
- addTypeColumns(select.data());
+ static_qstring(selectTpl, "SELECT *, %1 FROM (%2)");
+
+ QStringList columns = addTypeColumns();
+ QString newSelect = selectTpl.arg(columns.join(", "), select->detokenize());
+
+ Parser parser;
+ if (!parser.parse(newSelect) || parser.getQueries().size() == 0)
+ {
+ qWarning() << "Could not parse SELECT after applying typeof(). Tried to parse query:\n" << newSelect;
+ return false;
+ }
+
+ context->parsedQueries.removeLast();
+ context->parsedQueries << parser.getQueries().first();
+
+ updateQueries();
select->rebuildTokens();
updateQueries();
@@ -17,31 +35,16 @@ bool QueryExecutorColumnType::exec()
return true;
}
-void QueryExecutorColumnType::addTypeColumns(SqliteSelect* select)
+QStringList QueryExecutorColumnType::addTypeColumns()
{
- for (const QueryExecutor::ResultColumnPtr& resCol : context->resultColumns)
+ static_qstring(typeOfColTpl, "typeof(%1) AS %2");
+ QStringList typeColumns;
+ for (QueryExecutor::ResultColumnPtr& resCol : context->resultColumns)
{
QString nextCol = getNextColName();
QString targetCol = resCol->queryExecutorAlias;
-
- for (SqliteSelect::Core* core : select->coreSelects)
- {
- SqliteSelect::Core::ResultColumn* realResCol = createRealTypeOfResCol(targetCol, nextCol);
- core->resultColumns << realResCol;
- realResCol->setParent(core);
- }
-
+ typeColumns << typeOfColTpl.arg(targetCol, nextCol);
context->typeColumnToResultColumnAlias[nextCol] = targetCol;
}
-}
-
-SqliteSelect::Core::ResultColumn* QueryExecutorColumnType::createRealTypeOfResCol(const QString& targetCol, const QString& alias)
-{
- SqliteExpr* targetColExpr = new SqliteExpr();
- targetColExpr->initId(targetCol);
-
- SqliteExpr* expr = new SqliteExpr();
- expr->initFunction("typeof", false, {targetColExpr});
-
- return new SqliteSelect::Core::ResultColumn(expr, true, alias);
+ return typeColumns;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumntype.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumntype.h
index f492313..92c6324 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumntype.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorcolumntype.h
@@ -2,7 +2,7 @@
#define QUERYEXECUTORCOLUMNTYPE_H
#include "queryexecutorstep.h"
-#include "parser/ast/sqliteselect.h"
+//#include "parser/ast/sqliteselect.h"
class QueryExecutorColumnType : public QueryExecutorStep
{
@@ -12,8 +12,8 @@ class QueryExecutorColumnType : public QueryExecutorStep
bool exec();
private:
- void addTypeColumns(SqliteSelect* select);
- SqliteSelect::Core::ResultColumn* createRealTypeOfResCol(const QString& targetCol, const QString& alias);
+ QStringList addTypeColumns();
+// SqliteSelect::Core::ResultColumn* createRealTypeOfResCol(const QString& targetCol, const QString& alias);
};
#endif // QUERYEXECUTORCOLUMNTYPE_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordatasources.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordatasources.cpp
index be7a873..9ff8026 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordatasources.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordatasources.cpp
@@ -1,6 +1,7 @@
#include "queryexecutordatasources.h"
#include "parser/ast/sqliteselect.h"
#include "selectresolver.h"
+#include <QDebug>
bool QueryExecutorDataSources::exec()
{
@@ -19,7 +20,7 @@ bool QueryExecutorDataSources::exec()
SqliteSelect::Core* core = select->coreSelects.first();
QSet<SelectResolver::Table> tables = resolver.resolveTables(core);
- for (SelectResolver::Table resolvedTable : tables)
+ for (const SelectResolver::Table& resolvedTable : tables)
{
if (resolvedTable.flags & SelectResolver::FROM_CTE_SELECT)
continue;
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorfilter.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorfilter.cpp
new file mode 100644
index 0000000..bcc9ce4
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorfilter.cpp
@@ -0,0 +1,26 @@
+#include "queryexecutorfilter.h"
+#include <QDebug>
+
+bool QueryExecutorFilter::exec()
+{
+// qDebug() << "filters:" << queryExecutor->getFilters();
+// qDebug() << "q1:" << context->processedQuery;
+ if (queryExecutor->getFilters().trimmed().isEmpty())
+ return true;
+
+ SqliteSelectPtr select = getSelect();
+ if (!select || select->explain)
+ return true;
+
+ if (select->tokens.size() < 1)
+ return true; // shouldn't happen, but if happens, quit gracefully
+
+ static_qstring(selectTpl, "SELECT * FROM (%1) WHERE %2");
+ QString newSelect = selectTpl.arg(select->detokenize(), queryExecutor->getFilters());
+
+ int begin = select->tokens.first()->start;
+ int length = select->tokens.last()->end - select->tokens.first()->start + 1;
+ context->processedQuery = context->processedQuery.replace(begin, length, newSelect);
+// qDebug() << "q2:" << context->processedQuery;
+ return true;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorfilter.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorfilter.h
new file mode 100644
index 0000000..0bb8459
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorfilter.h
@@ -0,0 +1,20 @@
+#ifndef QUERYEXECUTORFILTER_H
+#define QUERYEXECUTORFILTER_H
+
+#include "queryexecutorstep.h"
+
+/**
+ * @brief Applies WHERE filtering to the query.
+ *
+ * This step is executed late in the execution chain. It is useful, when one wants to apply filtering
+ * without involving whole column/rowid analysis that is done in earlier executor steps.
+ */
+class QueryExecutorFilter : public QueryExecutorStep
+{
+ Q_OBJECT
+
+ public:
+ bool exec();
+};
+
+#endif // QUERYEXECUTORFILTER_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorlimit.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorlimit.cpp
index af1d7a6..afa1297 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorlimit.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorlimit.cpp
@@ -1,5 +1,4 @@
#include "queryexecutorlimit.h"
-#include "parser/ast/sqlitelimit.h"
#include <QDebug>
bool QueryExecutorLimit::exec()
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.cpp
index 8195322..b6db4b2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.cpp
@@ -1,5 +1,6 @@
#include "queryexecutorreplaceviews.h"
#include "parser/ast/sqlitecreateview.h"
+#include "parser/ast/sqliteselect.h"
#include "schemaresolver.h"
#include <QDebug>
@@ -68,39 +69,20 @@ SqliteCreateViewPtr QueryExecutorReplaceViews::getView(const QString& database,
void QueryExecutorReplaceViews::replaceViews(SqliteSelect* select)
{
SqliteSelect::Core* core = select->coreSelects.first();
-
- QStringList viewsInDatabase;
- SqliteCreateViewPtr view;
-
QList<SqliteSelect::Core::SingleSource*> sources = core->getAllTypedStatements<SqliteSelect::Core::SingleSource>();
- QList<SqliteSelect::Core::SingleSource*> viewSources;
- QSet<SqliteStatement*> parents;
+ typedef QPair<SqliteSelect::Core::SingleSource*, SqliteCreateViewPtr> SourceViewPair;
+ SqliteCreateViewPtr view;
+ QList<SourceViewPair> sourceViewPairs;
for (SqliteSelect::Core::SingleSource* src : sources)
{
if (src->table.isNull())
continue;
- viewsInDatabase = getViews(src->database);
+ QStringList viewsInDatabase = getViews(src->database);
if (!viewsInDatabase.contains(src->table, Qt::CaseInsensitive))
continue;
- parents << src->parentStatement();
- viewSources << src;
- }
-
- if (parents.size() > 1)
- {
- // Multi-level views (view selecting from view, selecting from view...).
- // Such constructs build up easily to huge, non-optimized queries.
- // For performance reasons, we won't expand such views.
- qDebug() << "Multi-level views. Skipping view expanding feature of query executor. Some columns won't be editable due to that. Number of different view parents:"
- << parents.size();
- return;
- }
-
- for (SqliteSelect::Core::SingleSource* src : viewSources)
- {
view = getView(src->database, src->table);
if (!view)
{
@@ -109,15 +91,50 @@ void QueryExecutorReplaceViews::replaceViews(SqliteSelect* select)
continue;
}
- QString alias = src->alias.isNull() ? view->view : src->alias;
+ if (usesAnyView(view->select, viewsInDatabase))
+ {
+ // Multi-level views (view selecting from view, selecting from view...).
+ // Such constructs build up easily to huge, non-optimized queries.
+ // For performance reasons, we won't expand such views.
+ qDebug() << "Multi-level views. Skipping view expanding feature of query executor. Some columns won't be editable due to that.";
+ return;
+ }
+
+ sourceViewPairs << SourceViewPair(src, view);
+ }
+
+ for (SourceViewPair& pair : sourceViewPairs)
+ {
+ view = pair.second;
+
+ QString alias = pair.first->alias.isNull() ? view->view : pair.first->alias;
- src->select = view->select;
- src->alias = alias;
- src->database = QString();
- src->table = QString();
+ pair.first->select = view->select;
+ pair.first->alias = alias;
+ pair.first->database = QString();
+ pair.first->table = QString();
- replaceViews(src->select);
+ // replaceViews(pair.first->select); // No recursion, as we avoid multi-level expanding.
+ }
+
+ context->viewsExpanded = true;
+}
+
+bool QueryExecutorReplaceViews::usesAnyView(SqliteSelect* select, const QStringList& viewsInDatabase)
+{
+ for (SqliteSelect::Core*& core : select->coreSelects)
+ {
+ QList<SqliteSelect::Core::SingleSource*> sources = core->getAllTypedStatements<SqliteSelect::Core::SingleSource>();
+ for (SqliteSelect::Core::SingleSource* src : sources)
+ {
+ if (src->table.isNull())
+ continue;
+
+ if (viewsInDatabase.contains(src->table, Qt::CaseInsensitive))
+ return true;
+ }
}
+ return false;
}
uint qHash(const QueryExecutorReplaceViews::View& view)
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.h
index 633b0bc..345934d 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorreplaceviews.h
@@ -4,6 +4,8 @@
#include "queryexecutorstep.h"
#include "parser/ast/sqlitecreateview.h"
+class SchemaResolver;
+
/**
* @brief Replaces all references to views in query with SELECTs from those views.
*
@@ -86,6 +88,14 @@ class QueryExecutorReplaceViews : public QueryExecutorStep
void replaceViews(SqliteSelect* select);
/**
+ * @brief Tells whether particular SELECT statement has any View as a data source.
+ * @param select Parsed SELECT statement.
+ * @param viewsInDatabase Prepared list of views existing in the database.
+ * @return true if the SELECT uses at least one existing View.
+ */
+ bool usesAnyView(SqliteSelect* select, const QStringList& viewsInDatabase);
+
+ /**
* @brief Used for caching view list per database.
*/
QHash<QString,QStringList> views;
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorstep.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorstep.cpp
index 72dbeec..26b137a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorstep.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorstep.cpp
@@ -1,6 +1,5 @@
#include "queryexecutorstep.h"
#include "db/queryexecutor.h"
-#include "common/unused.h"
QueryExecutorStep::~QueryExecutorStep()
{
@@ -17,7 +16,7 @@ void QueryExecutorStep::init(QueryExecutor *queryExecutor, QueryExecutor::Contex
void QueryExecutorStep::updateQueries()
{
QString newQuery;
- for (SqliteQueryPtr query : context->parsedQueries)
+ for (SqliteQueryPtr& query : context->parsedQueries)
{
newQuery += query->detokenize();
newQuery += "\n";
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorstep.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorstep.h
index fcc0cf6..cc89212 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorstep.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorstep.h
@@ -1,7 +1,6 @@
#ifndef QUERYEXECUTORSTEP_H
#define QUERYEXECUTORSTEP_H
-#include "db/sqlquery.h"
#include "parser/ast/sqliteselect.h"
#include "db/queryexecutor.h"
#include <QObject>
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.cpp b/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.cpp
index bef3ed8..0880344 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.cpp
@@ -1,6 +1,7 @@
#include "sqlquery.h"
#include "db/sqlerrorcodes.h"
#include "common/utils_sql.h"
+#include "common/unused.h"
SqlQuery::~SqlQuery()
{
@@ -141,3 +142,83 @@ QString RowIdConditionBuilder::build()
{
return conditions.join(" AND ");
}
+
+/********************** SqlQueryError ************************/
+
+class API_EXPORT SqlQueryError : public SqlQuery
+{
+ public:
+ SqlQueryError(const QString& errorText, int errorCode);
+ virtual ~SqlQueryError();
+
+ QString getErrorText();
+ int getErrorCode();
+ QStringList getColumnNames();
+ int columnCount();
+
+ protected:
+ SqlResultsRowPtr nextInternal();
+ bool hasNextInternal();
+ bool execInternal(const QList<QVariant>& args);
+ bool execInternal(const QHash<QString, QVariant>& args);
+
+ private:
+ QString errorText;
+ int errorCode = 0;
+};
+
+SqlQueryPtr SqlQuery::error(const QString& errorText, int errorCode)
+{
+ return SqlQueryPtr(new SqlQueryError(errorText, errorCode));
+}
+
+SqlQueryError::SqlQueryError(const QString& errorText, int errorCode) :
+ errorText(errorText), errorCode(errorCode)
+{
+}
+
+SqlQueryError::~SqlQueryError()
+{
+}
+
+QString SqlQueryError::getErrorText()
+{
+ return errorText;
+}
+
+int SqlQueryError::getErrorCode()
+{
+ return errorCode;
+}
+
+QStringList SqlQueryError::getColumnNames()
+{
+ return QStringList();
+}
+
+int SqlQueryError::columnCount()
+{
+ return 0;
+}
+
+SqlResultsRowPtr SqlQueryError::nextInternal()
+{
+ return SqlResultsRowPtr();
+}
+
+bool SqlQueryError::hasNextInternal()
+{
+ return false;
+}
+
+bool SqlQueryError::execInternal(const QList<QVariant>& args)
+{
+ UNUSED(args);
+ return false;
+}
+
+bool SqlQueryError::execInternal(const QHash<QString, QVariant>& args)
+{
+ UNUSED(args);
+ return false;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.h b/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.h
index 17bb464..1eea25c 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.h
@@ -66,6 +66,14 @@ class API_EXPORT SqlQuery
{
public:
/**
+ * @brief Produces empty, erronous result.
+ * @param errorText Error message returned with #getErrorText() of the returned object.
+ * @param errorCode Error code returned with #getErrorText() of the returned object.
+ * @return SqlQuery object shared pointer with no results, but with error details populated.
+ */
+ static SqlQueryPtr error(const QString& errorText, int errorCode);
+
+ /**
* @brief Releases result resources.
*/
virtual ~SqlQuery();
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/stdsqlite3driver.h b/SQLiteStudio3/coreSQLiteStudio/db/stdsqlite3driver.h
index 01894c2..c8a3ba3 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/stdsqlite3driver.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/stdsqlite3driver.h
@@ -11,6 +11,7 @@
static const int OPEN_READWRITE = UppercasePrefix##SQLITE_OPEN_READWRITE; \
static const int OPEN_CREATE = UppercasePrefix##SQLITE_OPEN_CREATE; \
static const int UTF8 = UppercasePrefix##SQLITE_UTF8; \
+ static const int DETERMINISTIC = UppercasePrefix##SQLITE_DETERMINISTIC; \
static const int INTEGER = UppercasePrefix##SQLITE_INTEGER; \
static const int FLOAT = UppercasePrefix##SQLITE_FLOAT; \
static const int NULL_TYPE = UppercasePrefix##SQLITE_NULL; \
@@ -19,6 +20,10 @@
static const int BUSY = UppercasePrefix##SQLITE_BUSY; \
static const int ROW = UppercasePrefix##SQLITE_ROW; \
static const int DONE = UppercasePrefix##SQLITE_DONE; \
+ static const int CHECKPOINT_PASSIVE = UppercasePrefix##SQLITE_CHECKPOINT_PASSIVE; \
+ static const int CHECKPOINT_FULL = UppercasePrefix##SQLITE_CHECKPOINT_FULL; \
+ static const int CHECKPOINT_RESTART = UppercasePrefix##SQLITE_CHECKPOINT_RESTART; \
+ static const int CHECKPOINT_TRUNCATE = UppercasePrefix##SQLITE_CHECKPOINT_TRUNCATE; \
\
typedef Prefix##sqlite3 handle; \
typedef Prefix##sqlite3_stmt stmt; \
@@ -74,6 +79,8 @@
static int reset(stmt* arg) {return Prefix##sqlite3_reset(arg);} \
static int close(handle* arg) {return Prefix##sqlite3_close(arg);} \
static void free(void* arg) {return Prefix##sqlite3_free(arg);} \
+ static int wal_checkpoint(handle* arg1, const char* arg2) {return Prefix##sqlite3_wal_checkpoint(arg1, arg2);} \
+ static int wal_checkpoint_v2(handle* a1, const char* a2, int a3, int* a4, int* a5) {return Prefix##sqlite3_wal_checkpoint_v2(a1, a2, a3, a4, a5);} \
static int enable_load_extension(handle* arg1, int arg2) {return Prefix##sqlite3_enable_load_extension(arg1, arg2);} \
static int load_extension(handle *arg1, const char *arg2, const char *arg3, char **arg4) {return Prefix##sqlite3_load_extension(arg1, arg2, arg3, arg4);} \
static void* user_data(context* arg) {return Prefix##sqlite3_user_data(arg);} \
diff --git a/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp b/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp
index 99110a0..1c206f9 100644
--- a/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp
@@ -1,7 +1,6 @@
#include "dbobjectorganizer.h"
#include "db/db.h"
#include "common/utils_sql.h"
-#include "datatype.h"
#include "services/notifymanager.h"
#include "db/attachguard.h"
#include "common/compatibility.h"
@@ -198,7 +197,7 @@ bool DbObjectOrganizer::processAll()
// Attaching target db if needed
AttachGuard attach;
- if (!(referencedTables + srcTables).isEmpty())
+ if (srcDb->getTypeClassName() == dstDb->getTypeClassName() && !(referencedTables + srcTables).isEmpty())
{
attach = srcDb->guardedAttach(dstDb, true);
attachName = attach->getName();
@@ -431,12 +430,16 @@ bool DbObjectOrganizer::copyTableToDb(const QString& table)
bool DbObjectOrganizer::copyDataAsMiddleware(const QString& table)
{
- QStringList srcColumns = srcResolver->getTableColumns(srcTable);
+ static_qstring(selectTpl, "SELECT %1 FROM %2");
+ static_qstring(insertTpl, "INSERT INTO %1 (%2) VALUES (%3)");
+
+ QStringList srcColumns = srcResolver->getTableColumns(srcTable, true);
+ QString srcColumnsStr = srcColumns.join(", ");
QString wrappedSrcTable = wrapObjIfNeeded(srcTable);
- SqlQueryPtr results = srcDb->prepare("SELECT * FROM " + wrappedSrcTable);
+ SqlQueryPtr results = srcDb->prepare(selectTpl.arg(srcColumnsStr, wrappedSrcTable));
if (!results->execute())
{
- notifyError(tr("Error while copying data for table %1: %2").arg(table).arg(results->getErrorText()));
+ notifyError(tr("Error while copying data for table %1: %2").arg(table, results->getErrorText()));
return false;
}
@@ -445,7 +448,7 @@ bool DbObjectOrganizer::copyDataAsMiddleware(const QString& table)
argPlaceholderList << "?";
QString wrappedDstTable = wrapObjIfNeeded(table);
- QString sql = "INSERT INTO " + wrappedDstTable + " VALUES (" + argPlaceholderList.join(", ") + ")";
+ QString sql = insertTpl.arg(wrappedDstTable, srcColumnsStr, argPlaceholderList.join(", "));
SqlQueryPtr insertQuery = dstDb->prepare(sql);
SqlResultsRowPtr row;
@@ -455,14 +458,14 @@ bool DbObjectOrganizer::copyDataAsMiddleware(const QString& table)
row = results->next();
if (!row)
{
- notifyError(tr("Error while copying data to table %1: %2").arg(table).arg(results->getErrorText()));
+ notifyError(tr("Error while copying data to table %1: %2").arg(table, results->getErrorText()));
return false;
}
insertQuery->setArgs(row->valueList());
if (!insertQuery->execute())
{
- notifyError(tr("Error while copying data to table %1: %2").arg(table).arg(insertQuery->getErrorText()));
+ notifyError(tr("Error while copying data to table %1: %2").arg(table, insertQuery->getErrorText()));
return false;
}
@@ -480,12 +483,16 @@ bool DbObjectOrganizer::copyDataAsMiddleware(const QString& table)
bool DbObjectOrganizer::copyDataUsingAttach(const QString& table)
{
+ static_qstring(insertTpl, "INSERT INTO %1.%2 (%3) SELECT %3 FROM %4");
+
QString wrappedSrcTable = wrapObjIfNeeded(srcTable);
QString wrappedDstTable = wrapObjIfNeeded(table);
- SqlQueryPtr results = srcDb->exec("INSERT INTO " + attachName + "." + wrappedDstTable + " SELECT * FROM " + wrappedSrcTable);
+ QStringList srcColumns = srcResolver->getTableColumns(srcTable, true);
+ QString srcColumnsStr = srcColumns.join(", ");
+ SqlQueryPtr results = srcDb->exec(insertTpl.arg(attachName, wrappedDstTable, srcColumnsStr, wrappedSrcTable));
if (results->isError())
{
- notifyError(tr("Error while copying data to table %1: %2").arg(table).arg(results->getErrorText()));
+ notifyError(tr("Error while copying data to table %1: %2").arg(table, results->getErrorText()));
return false;
}
return true;
@@ -508,46 +515,36 @@ void DbObjectOrganizer::dropObject(const QString& name, const QString& type)
if (results->isError())
{
notifyWarn(tr("Error while dropping source view %1: %2\nTables, indexes, triggers and views copied to database %3 will remain.")
- .arg(name).arg(results->getErrorText()).arg(dstDb->getName()));
+ .arg(name, results->getErrorText(), dstDb->getName()));
}
}
bool DbObjectOrganizer::copyViewToDb(const QString& view)
{
- return copySimpleObjectToDb(view, tr("Error while creating view in target database: %1"));
+ return copySimpleObjectToDb(view, tr("Error while creating view in target database: %1"), SchemaResolver::VIEW);
}
bool DbObjectOrganizer::copyIndexToDb(const QString& index)
{
- return copySimpleObjectToDb(index, tr("Error while creating index in target database: %1"));
+ return copySimpleObjectToDb(index, tr("Error while creating index in target database: %1"),SchemaResolver::INDEX);
}
bool DbObjectOrganizer::copyTriggerToDb(const QString& trigger)
{
- return copySimpleObjectToDb(trigger, tr("Error while creating trigger in target database: %1"));
+ return copySimpleObjectToDb(trigger, tr("Error while creating trigger in target database: %1"), SchemaResolver::TRIGGER);
}
-bool DbObjectOrganizer::copySimpleObjectToDb(const QString& name, const QString& errorMessage)
+bool DbObjectOrganizer::copySimpleObjectToDb(const QString& name, const QString& errorMessage, SchemaResolver::ObjectType objectType)
{
- QString ddl = srcResolver->getObjectDdl(name, SchemaResolver::ANY);
+ QString ddl = srcResolver->getObjectDdl(name, objectType);
if (ddl.trimmed() == ";") // empty query, result of ignored errors in UI
return true;
- SqlQueryPtr result;
-
- if (!attachName.isNull())
- {
- ddl = prefixSimpleObjectWithAttachName(name, ddl);
- if (ddl.isNull())
- return false;
-
- result = srcDb->exec(ddl);
- }
- else
- {
- result = dstDb->exec(ddl);
- }
+ ddl = processSimpleObjectAttachNameAndRename(name, ddl);
+ if (ddl.isNull())
+ return false;
+ SqlQueryPtr result = srcDb->exec(ddl);
if (result->isError())
{
notifyError(errorMessage.arg(result->getErrorText()));
@@ -572,7 +569,7 @@ void DbObjectOrganizer::collectReferencedTables(const QString& table, const StrH
{
QList<SqliteCreateTablePtr> parsedTables;
SqliteCreateTablePtr parsedTable;
- for (SqliteQueryPtr query : allParsedObjects.values())
+ for (SqliteQueryPtr& query : allParsedObjects.values())
{
parsedTable = query.dynamicCast<SqliteCreateTable>();
if (parsedTable)
@@ -670,8 +667,11 @@ bool DbObjectOrganizer::execConfirmFunctionInMainThread(const QStringList& table
return res;
}
-QString DbObjectOrganizer::prefixSimpleObjectWithAttachName(const QString& objName, const QString& ddl)
+QString DbObjectOrganizer::processSimpleObjectAttachNameAndRename(const QString& objName, const QString& ddl)
{
+ if (attachName.isNull() && !renamed.contains(objName))
+ return ddl;
+
Parser parser;
if (!parser.parse(ddl))
{
@@ -696,7 +696,12 @@ QString DbObjectOrganizer::prefixSimpleObjectWithAttachName(const QString& objNa
return QString();
}
- ddlWithDb->setTargetDatabase(attachName);
+ if (!attachName.isNull())
+ ddlWithDb->setTargetDatabase(attachName);
+
+ if (renamed.contains(objName))
+ ddlWithDb->setObjectName(renamed[objName]);
+
query->rebuildTokens();
return query->tokens.detokenize();
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.h b/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.h
index c8a1f97..14a4b46 100644
--- a/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.h
+++ b/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.h
@@ -84,7 +84,7 @@ class API_EXPORT DbObjectOrganizer : public QObject, public QRunnable, public In
bool copyViewToDb(const QString& view);
bool copyIndexToDb(const QString& index);
bool copyTriggerToDb(const QString& trigger);
- bool copySimpleObjectToDb(const QString& name, const QString& errorMessage);
+ bool copySimpleObjectToDb(const QString& name, const QString& errorMessage, SchemaResolver::ObjectType objectType);
QSet<QString> resolveReferencedTables(const QString& table, const QList<SqliteCreateTablePtr>& parsedTables);
void collectReferencedTables(const QString& table, const StrHash<SqliteQueryPtr>& allParsedObjects);
void collectReferencedIndexes(const QString& table);
@@ -105,7 +105,7 @@ class API_EXPORT DbObjectOrganizer : public QObject, public QRunnable, public In
bool rollback();
void emitFinished(bool success);
bool execConfirmFunctionInMainThread(const QStringList& tables);
- QString prefixSimpleObjectWithAttachName(const QString& objName, const QString& ddl);
+ QString processSimpleObjectAttachNameAndRename(const QString& objName, const QString& ddl);
ReferencedTablesConfimFunction confirmFunction;
NameConflictResolveFunction nameConflictResolveFunction;
diff --git a/SQLiteStudio3/coreSQLiteStudio/expectedtoken.cpp b/SQLiteStudio3/coreSQLiteStudio/expectedtoken.cpp
index a02f8c9..d6c6f4b 100644
--- a/SQLiteStudio3/coreSQLiteStudio/expectedtoken.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/expectedtoken.cpp
@@ -64,7 +64,7 @@ int operator==(const ExpectedTokenPtr& ptr1, const ExpectedTokenPtr& ptr2)
int qHash(const ExpectedToken& token)
{
- return token.type ^ qHash(token.value + "/" + token.value + "/" + token.contextInfo + "/" + token.label + "/" + token.prefix);
+ return token.type ^ qHash(token.value + "/" + token.contextInfo + "/" + token.label + "/" + token.prefix);
}
int qHash(const ExpectedTokenPtr& ptr)
diff --git a/SQLiteStudio3/coreSQLiteStudio/importworker.cpp b/SQLiteStudio3/coreSQLiteStudio/importworker.cpp
index 19cbd07..1a949a9 100644
--- a/SQLiteStudio3/coreSQLiteStudio/importworker.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/importworker.cpp
@@ -140,14 +140,17 @@ bool ImportWorker::prepareTable()
bool ImportWorker::importData(int& rowCount)
{
- static const QString insertTemplate = QStringLiteral("INSERT INTO %1 VALUES (%2)");
+ static const QString insertTemplate = QStringLiteral("INSERT INTO %1 (%2) VALUES (%3)");
int colCount = targetColumns.size();
QStringList valList;
for (int i = 0; i < colCount; i++)
valList << "?";
- QString theInsert = insertTemplate.arg(wrapObjIfNeeded(table), valList.join(", "));
+ QString theInsert = insertTemplate.arg(wrapObjIfNeeded(table),
+ targetColumns.join(", "),
+ valList.join(", "));
+
SqlQueryPtr query = db->prepare(theInsert);
query->setFlags(Db::Flag::SKIP_DROP_DETECTION|Db::Flag::SKIP_PARAM_COUNTING|Db::Flag::NO_LOCK);
diff --git a/SQLiteStudio3/coreSQLiteStudio/licenses/icu.txt b/SQLiteStudio3/coreSQLiteStudio/licenses/icu.txt
new file mode 100644
index 0000000..22472dc
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/licenses/icu.txt
@@ -0,0 +1,519 @@
+UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE
+
+See Terms of Use <https://www.unicode.org/copyright.html>
+for definitions of Unicode Inc.’s Data Files and Software.
+
+NOTICE TO USER: Carefully read the following legal agreement.
+BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S
+DATA FILES ("DATA FILES"), AND/OR SOFTWARE ("SOFTWARE"),
+YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE
+TERMS AND CONDITIONS OF THIS AGREEMENT.
+IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE
+THE DATA FILES OR SOFTWARE.
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright © 1991-2023 Unicode, Inc. All rights reserved.
+Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Unicode data files and any associated documentation
+(the "Data Files") or Unicode software and any associated documentation
+(the "Software") to deal in the Data Files or Software
+without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, and/or sell copies of
+the Data Files or Software, and to permit persons to whom the Data Files
+or Software are furnished to do so, provided that either
+(a) this copyright and permission notice appear with all copies
+of the Data Files or Software, or
+(b) this copyright and permission notice appear in associated
+Documentation.
+
+THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT OF THIRD PARTY RIGHTS.
+IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
+NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
+DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THE DATA FILES OR SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale,
+use or other dealings in these Data Files or Software without prior
+written authorization of the copyright holder.
+
+----------------------------------------------------------------------
+
+Third-Party Software Licenses
+
+This section contains third-party software notices and/or additional
+terms for licensed third-party software components included within ICU
+libraries.
+
+----------------------------------------------------------------------
+
+ICU License - ICU 1.8.1 to ICU 57.1
+
+COPYRIGHT AND PERMISSION NOTICE
+
+Copyright (c) 1995-2016 International Business Machines Corporation and others
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, and/or sell copies of the Software, and to permit persons
+to whom the Software is furnished to do so, provided that the above
+copyright notice(s) and this permission notice appear in all copies of
+the Software and that both the above copyright notice(s) and this
+permission notice appear in supporting documentation.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
+SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
+RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Except as contained in this notice, the name of a copyright holder
+shall not be used in advertising or otherwise to promote the sale, use
+or other dealings in this Software without prior written authorization
+of the copyright holder.
+
+All trademarks and registered trademarks mentioned herein are the
+property of their respective owners.
+
+----------------------------------------------------------------------
+
+Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
+
+ # The Google Chrome software developed by Google is licensed under
+ # the BSD license. Other software included in this distribution is
+ # provided under other licenses, as set forth below.
+ #
+ # The BSD License
+ # http://opensource.org/licenses/bsd-license.php
+ # Copyright (C) 2006-2008, Google Inc.
+ #
+ # All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are met:
+ #
+ # Redistributions of source code must retain the above copyright notice,
+ # this list of conditions and the following disclaimer.
+ # Redistributions in binary form must reproduce the above
+ # copyright notice, this list of conditions and the following
+ # disclaimer in the documentation and/or other materials provided with
+ # the distribution.
+ # Neither the name of Google Inc. nor the names of its
+ # contributors may be used to endorse or promote products derived from
+ # this software without specific prior written permission.
+ #
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ #
+ #
+ # The word list in cjdict.txt are generated by combining three word lists
+ # listed below with further processing for compound word breaking. The
+ # frequency is generated with an iterative training against Google web
+ # corpora.
+ #
+ # * Libtabe (Chinese)
+ # - https://sourceforge.net/project/?group_id=1519
+ # - Its license terms and conditions are shown below.
+ #
+ # * IPADIC (Japanese)
+ # - http://chasen.aist-nara.ac.jp/chasen/distribution.html
+ # - Its license terms and conditions are shown below.
+ #
+ # ---------COPYING.libtabe ---- BEGIN--------------------
+ #
+ # /*
+ # * Copyright (c) 1999 TaBE Project.
+ # * Copyright (c) 1999 Pai-Hsiang Hsiao.
+ # * All rights reserved.
+ # *
+ # * Redistribution and use in source and binary forms, with or without
+ # * modification, are permitted provided that the following conditions
+ # * are met:
+ # *
+ # * . Redistributions of source code must retain the above copyright
+ # * notice, this list of conditions and the following disclaimer.
+ # * . Redistributions in binary form must reproduce the above copyright
+ # * notice, this list of conditions and the following disclaimer in
+ # * the documentation and/or other materials provided with the
+ # * distribution.
+ # * . Neither the name of the TaBE Project nor the names of its
+ # * contributors may be used to endorse or promote products derived
+ # * from this software without specific prior written permission.
+ # *
+ # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ # * OF THE POSSIBILITY OF SUCH DAMAGE.
+ # */
+ #
+ # /*
+ # * Copyright (c) 1999 Computer Systems and Communication Lab,
+ # * Institute of Information Science, Academia
+ # * Sinica. All rights reserved.
+ # *
+ # * Redistribution and use in source and binary forms, with or without
+ # * modification, are permitted provided that the following conditions
+ # * are met:
+ # *
+ # * . Redistributions of source code must retain the above copyright
+ # * notice, this list of conditions and the following disclaimer.
+ # * . Redistributions in binary form must reproduce the above copyright
+ # * notice, this list of conditions and the following disclaimer in
+ # * the documentation and/or other materials provided with the
+ # * distribution.
+ # * . Neither the name of the Computer Systems and Communication Lab
+ # * nor the names of its contributors may be used to endorse or
+ # * promote products derived from this software without specific
+ # * prior written permission.
+ # *
+ # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ # * OF THE POSSIBILITY OF SUCH DAMAGE.
+ # */
+ #
+ # Copyright 1996 Chih-Hao Tsai @ Beckman Institute,
+ # University of Illinois
+ # c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4
+ #
+ # ---------------COPYING.libtabe-----END--------------------------------
+ #
+ #
+ # ---------------COPYING.ipadic-----BEGIN-------------------------------
+ #
+ # Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
+ # and Technology. All Rights Reserved.
+ #
+ # Use, reproduction, and distribution of this software is permitted.
+ # Any copy of this software, whether in its original form or modified,
+ # must include both the above copyright notice and the following
+ # paragraphs.
+ #
+ # Nara Institute of Science and Technology (NAIST),
+ # the copyright holders, disclaims all warranties with regard to this
+ # software, including all implied warranties of merchantability and
+ # fitness, in no event shall NAIST be liable for
+ # any special, indirect or consequential damages or any damages
+ # whatsoever resulting from loss of use, data or profits, whether in an
+ # action of contract, negligence or other tortuous action, arising out
+ # of or in connection with the use or performance of this software.
+ #
+ # A large portion of the dictionary entries
+ # originate from ICOT Free Software. The following conditions for ICOT
+ # Free Software applies to the current dictionary as well.
+ #
+ # Each User may also freely distribute the Program, whether in its
+ # original form or modified, to any third party or parties, PROVIDED
+ # that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
+ # on, or be attached to, the Program, which is distributed substantially
+ # in the same form as set out herein and that such intended
+ # distribution, if actually made, will neither violate or otherwise
+ # contravene any of the laws and regulations of the countries having
+ # jurisdiction over the User or the intended distribution itself.
+ #
+ # NO WARRANTY
+ #
+ # The program was produced on an experimental basis in the course of the
+ # research and development conducted during the project and is provided
+ # to users as so produced on an experimental basis. Accordingly, the
+ # program is provided without any warranty whatsoever, whether express,
+ # implied, statutory or otherwise. The term "warranty" used herein
+ # includes, but is not limited to, any warranty of the quality,
+ # performance, merchantability and fitness for a particular purpose of
+ # the program and the nonexistence of any infringement or violation of
+ # any right of any third party.
+ #
+ # Each user of the program will agree and understand, and be deemed to
+ # have agreed and understood, that there is no warranty whatsoever for
+ # the program and, accordingly, the entire risk arising from or
+ # otherwise connected with the program is assumed by the user.
+ #
+ # Therefore, neither ICOT, the copyright holder, or any other
+ # organization that participated in or was otherwise related to the
+ # development of the program and their respective officials, directors,
+ # officers and other employees shall be held liable for any and all
+ # damages, including, without limitation, general, special, incidental
+ # and consequential damages, arising out of or otherwise in connection
+ # with the use or inability to use the program or any product, material
+ # or result produced or otherwise obtained by using the program,
+ # regardless of whether they have been advised of, or otherwise had
+ # knowledge of, the possibility of such damages at any time during the
+ # project or thereafter. Each user will be deemed to have agreed to the
+ # foregoing by his or her commencement of use of the program. The term
+ # "use" as used herein includes, but is not limited to, the use,
+ # modification, copying and distribution of the program and the
+ # production of secondary products from the program.
+ #
+ # In the case where the program, whether in its original form or
+ # modified, was distributed or delivered to or received by a user from
+ # any person, organization or entity other than ICOT, unless it makes or
+ # grants independently of ICOT any specific warranty to the user in
+ # writing, such person, organization or entity, will also be exempted
+ # from and not be held liable to the user for any such damages as noted
+ # above as far as the program is concerned.
+ #
+ # ---------------COPYING.ipadic-----END----------------------------------
+
+----------------------------------------------------------------------
+
+Lao Word Break Dictionary Data (laodict.txt)
+
+ # Copyright (C) 2016 and later: Unicode, Inc. and others.
+ # License & terms of use: http://www.unicode.org/copyright.html
+ # Copyright (c) 2015 International Business Machines Corporation
+ # and others. All Rights Reserved.
+ #
+ # Project: https://github.com/rober42539/lao-dictionary
+ # Dictionary: https://github.com/rober42539/lao-dictionary/laodict.txt
+ # License: https://github.com/rober42539/lao-dictionary/LICENSE.txt
+ # (copied below)
+ #
+ # This file is derived from the above dictionary version of Nov 22, 2020
+ # ----------------------------------------------------------------------
+ # Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
+ # All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are met:
+ #
+ # Redistributions of source code must retain the above copyright notice, this
+ # list of conditions and the following disclaimer. Redistributions in binary
+ # form must reproduce the above copyright notice, this list of conditions and
+ # the following disclaimer in the documentation and/or other materials
+ # provided with the distribution.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ # OF THE POSSIBILITY OF SUCH DAMAGE.
+ # --------------------------------------------------------------------------
+
+----------------------------------------------------------------------
+
+Burmese Word Break Dictionary Data (burmesedict.txt)
+
+ # Copyright (c) 2014 International Business Machines Corporation
+ # and others. All Rights Reserved.
+ #
+ # This list is part of a project hosted at:
+ # github.com/kanyawtech/myanmar-karen-word-lists
+ #
+ # --------------------------------------------------------------------------
+ # Copyright (c) 2013, LeRoy Benjamin Sharon
+ # All rights reserved.
+ #
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions
+ # are met: Redistributions of source code must retain the above
+ # copyright notice, this list of conditions and the following
+ # disclaimer. Redistributions in binary form must reproduce the
+ # above copyright notice, this list of conditions and the following
+ # disclaimer in the documentation and/or other materials provided
+ # with the distribution.
+ #
+ # Neither the name Myanmar Karen Word Lists, nor the names of its
+ # contributors may be used to endorse or promote products derived
+ # from this software without specific prior written permission.
+ #
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
+ # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ # SUCH DAMAGE.
+ # --------------------------------------------------------------------------
+
+----------------------------------------------------------------------
+
+Time Zone Database
+
+ ICU uses the public domain data and code derived from Time Zone
+Database for its time zone support. The ownership of the TZ database
+is explained in BCP 175: Procedure for Maintaining the Time Zone
+Database section 7.
+
+ # 7. Database Ownership
+ #
+ # The TZ database itself is not an IETF Contribution or an IETF
+ # document. Rather it is a pre-existing and regularly updated work
+ # that is in the public domain, and is intended to remain in the
+ # public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do
+ # not apply to the TZ Database or contributions that individuals make
+ # to it. Should any claims be made and substantiated against the TZ
+ # Database, the organization that is providing the IANA
+ # Considerations defined in this RFC, under the memorandum of
+ # understanding with the IETF, currently ICANN, may act in accordance
+ # with all competent court orders. No ownership claims will be made
+ # by ICANN or the IETF Trust on the database or the code. Any person
+ # making a contribution to the database or code waives all rights to
+ # future claims in that contribution or in the TZ Database.
+
+----------------------------------------------------------------------
+
+Google double-conversion
+
+Copyright 2006-2011, the V8 project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of Google Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+----------------------------------------------------------------------
+
+File: aclocal.m4 (only for ICU4C)
+Section: pkg.m4 - Macros to locate and utilise pkg-config.
+
+
+Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.
+
+As a special exception to the GNU General Public License, if you
+distribute this file as part of a program that contains a
+configuration script generated by Autoconf, you may include it under
+the same distribution terms that you use for the rest of that
+program.
+
+
+(The condition for the exception is fulfilled because
+ICU4C includes a configuration script generated by Autoconf,
+namely the `configure` script.)
+
+----------------------------------------------------------------------
+
+File: config.guess (only for ICU4C)
+
+
+This file is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, see <https://www.gnu.org/licenses/>.
+
+As a special exception to the GNU General Public License, if you
+distribute this file as part of a program that contains a
+configuration script generated by Autoconf, you may include it under
+the same distribution terms that you use for the rest of that
+program. This Exception is an additional permission under section 7
+of the GNU General Public License, version 3 ("GPLv3").
+
+
+(The condition for the exception is fulfilled because
+ICU4C includes a configuration script generated by Autoconf,
+namely the `configure` script.)
+
+----------------------------------------------------------------------
+
+File: install-sh (only for ICU4C)
+
+
+Copyright 1991 by the Massachusetts Institute of Technology
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name of M.I.T. not be used in advertising or
+publicity pertaining to distribution of the software without specific,
+written prior permission. M.I.T. makes no representations about the
+suitability of this software for any purpose. It is provided "as is"
+without express or implied warranty.
diff --git a/SQLiteStudio3/coreSQLiteStudio/log.cpp b/SQLiteStudio3/coreSQLiteStudio/log.cpp
index 60a22b2..5f9d72f 100644
--- a/SQLiteStudio3/coreSQLiteStudio/log.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/log.cpp
@@ -75,3 +75,8 @@ void logExecutorAfterStep(const QString& str)
qDebug() << getLogDateTime() << str;
}
+
+bool isExecutorLoggingEnabled()
+{
+ return EXECUTOR_DEBUG;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/log.h b/SQLiteStudio3/coreSQLiteStudio/log.h
index 0167509..54691f5 100644
--- a/SQLiteStudio3/coreSQLiteStudio/log.h
+++ b/SQLiteStudio3/coreSQLiteStudio/log.h
@@ -15,6 +15,7 @@ API_EXPORT void logSql(Db* db, const QString& str, const QHash<QString,QVariant>
API_EXPORT void logSql(Db* db, const QString& str, const QList<QVariant>& args, Db::Flags flags);
API_EXPORT void logExecutorStep(QueryExecutorStep* step);
API_EXPORT void logExecutorAfterStep(const QString& str);
+API_EXPORT bool isExecutorLoggingEnabled();
API_EXPORT void setSqlLoggingEnabled(bool enabled);
API_EXPORT void setSqlLoggingFilter(const QString& filter);
API_EXPORT void setExecutorLoggingEnabled(bool enabled);
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitealtertable.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitealtertable.cpp
index 5ca593f..42cb59b 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitealtertable.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitealtertable.cpp
@@ -8,7 +8,8 @@ SqliteAlterTable::SqliteAlterTable()
}
SqliteAlterTable::SqliteAlterTable(const SqliteAlterTable& other)
- : SqliteQuery(other), command(other.command), newName(other.newName), database(other.database), table(other.table), columnKw(other.columnKw)
+ : SqliteQuery(other), command(other.command), newName(other.newName), database(other.database), table(other.table),
+ dropColumnName(other.dropColumnName), columnKw(other.columnKw)
{
DEEP_COPY_FIELD(SqliteCreateTable::Column, newColumn);
}
@@ -32,10 +33,17 @@ SqliteAlterTable::SqliteAlterTable(const QString& name1, const QString& name2, b
column->setParent(this);
}
+SqliteAlterTable::SqliteAlterTable(const QString& name1, const QString& name2, bool columnKw, const QString& dropColumn)
+ : SqliteAlterTable()
+{
+ command = Command::DROP_COLUMN;
+ initName(name1, name2);
+ this->columnKw = columnKw;
+ this->dropColumnName = dropColumn;
+}
+
SqliteAlterTable::~SqliteAlterTable()
{
-// if (newColumn)
- // delete newColumn;
}
SqliteStatement* SqliteAlterTable::clone()
@@ -43,6 +51,15 @@ SqliteStatement* SqliteAlterTable::clone()
return new SqliteAlterTable(*this);
}
+QStringList SqliteAlterTable::getColumnsInStatement()
+{
+ QStringList list;
+ if (!dropColumnName.isNull())
+ list << dropColumnName;
+
+ return list;
+}
+
QStringList SqliteAlterTable::getTablesInStatement()
{
QStringList list;
@@ -60,6 +77,14 @@ QStringList SqliteAlterTable::getDatabasesInStatement()
return getStrListFromValue(database);
}
+TokenList SqliteAlterTable::getColumnTokensInStatement()
+{
+ if (command == Command::DROP_COLUMN && tokensMap.contains("nm"))
+ return extractPrintableTokens(tokensMap["nm"]);
+
+ return TokenList();
+}
+
TokenList SqliteAlterTable::getTableTokensInStatement()
{
return getObjectTokenListFromFullname();
@@ -110,17 +135,32 @@ TokenList SqliteAlterTable::rebuildTokensFromContents()
builder.withOther(table).withSpace();
- if (newColumn)
- {
- builder.withKeyword("ADD").withSpace();
- if (columnKw)
- builder.withKeyword("COLUMN").withSpace();
-
- builder.withStatement(newColumn);
- }
- else if (!newName.isNull())
- {
- builder.withKeyword("RENAME").withSpace().withKeyword("TO").withSpace().withOther(newName);
+ switch (command) {
+ case Command::RENAME:
+ {
+ builder.withKeyword("RENAME").withSpace().withKeyword("TO").withSpace().withOther(newName);
+ break;
+ }
+ case Command::ADD_COLUMN:
+ {
+ builder.withKeyword("ADD").withSpace();
+ if (columnKw)
+ builder.withKeyword("COLUMN").withSpace();
+
+ builder.withStatement(newColumn);
+ break;
+ }
+ case Command::DROP_COLUMN:
+ {
+ builder.withKeyword("DROP").withSpace();
+ if (columnKw)
+ builder.withKeyword("COLUMN").withSpace();
+
+ builder.withOther(dropColumnName);
+ break;
+ }
+ case Command::null:
+ break;
}
builder.withOperator(";");
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitealtertable.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitealtertable.h
index fbac3fe..1733dfc 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitealtertable.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitealtertable.h
@@ -11,6 +11,7 @@ class API_EXPORT SqliteAlterTable : public SqliteQuery
{
RENAME,
ADD_COLUMN,
+ DROP_COLUMN,
null
};
@@ -18,12 +19,15 @@ class API_EXPORT SqliteAlterTable : public SqliteQuery
SqliteAlterTable(const SqliteAlterTable& other);
SqliteAlterTable(const QString& name1, const QString& name2, const QString& newName);
SqliteAlterTable(const QString& name1, const QString& name2, bool columnKw, SqliteCreateTable::Column* column);
+ SqliteAlterTable(const QString& name1, const QString& name2, bool columnKw, const QString& dropColumn);
~SqliteAlterTable();
SqliteStatement* clone();
protected:
+ QStringList getColumnsInStatement();
QStringList getTablesInStatement();
QStringList getDatabasesInStatement();
+ TokenList getColumnTokensInStatement();
TokenList getTableTokensInStatement();
TokenList getDatabaseTokensInStatement();
QList<FullObject> getFullObjectsInStatement();
@@ -37,6 +41,7 @@ class API_EXPORT SqliteAlterTable : public SqliteQuery
QString newName = QString();
QString database = QString();
QString table = QString();
+ QString dropColumnName = QString();
bool columnKw = false;
SqliteCreateTable::Column* newColumn = nullptr;
};
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecopy.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecopy.cpp
deleted file mode 100644
index c3ff500..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecopy.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-#include "sqlitecopy.h"
-#include "sqlitequerytype.h"
-
-#include <parser/statementtokenbuilder.h>
-
-SqliteCopy::SqliteCopy()
-{
- queryType = SqliteQueryType::Copy;
-}
-
-SqliteCopy::SqliteCopy(const SqliteCopy& other) :
- SqliteQuery(other), onConflict(other.onConflict), database(other.database), table(other.table), file(other.file), delimiter(other.delimiter)
-{
-}
-
-SqliteCopy::SqliteCopy(SqliteConflictAlgo onConflict, const QString &name1, const QString &name2, const QString &name3, const QString &delim)
- : SqliteCopy()
-{
- this->onConflict = onConflict;
-
- if (!name2.isNull())
- {
- database = name1;
- table = name2;
- }
- else
- table = name1;
-
- file = name3;
- delimiter = delim;
-}
-
-SqliteStatement* SqliteCopy::clone()
-{
- return new SqliteCopy(*this);
-}
-
-QStringList SqliteCopy::getTablesInStatement()
-{
- return getStrListFromValue(table);
-}
-
-QStringList SqliteCopy::getDatabasesInStatement()
-{
- return getStrListFromValue(database);
-}
-
-TokenList SqliteCopy::getTableTokensInStatement()
-{
- return getObjectTokenListFromNmDbnm();
-}
-
-TokenList SqliteCopy::getDatabaseTokensInStatement()
-{
- return getDbTokenListFromNmDbnm();
-}
-
-QList<SqliteStatement::FullObject> SqliteCopy::getFullObjectsInStatement()
-{
- QList<FullObject> result;
-
- FullObject fullObj = getFullObjectFromNmDbnm(FullObject::TABLE);
- if (fullObj.isValid())
- result << fullObj;
-
- fullObj = getFirstDbFullObject();
- if (fullObj.isValid())
- result << fullObj;
-
- return result;
-}
-
-TokenList SqliteCopy::rebuildTokensFromContents()
-{
- StatementTokenBuilder builder;
- builder.withTokens(SqliteQuery::rebuildTokensFromContents());
- builder.withKeyword("COPY").withSpace();
- if (onConflict != SqliteConflictAlgo::null)
- builder.withKeyword("OR").withSpace().withKeyword(sqliteConflictAlgo(onConflict)).withSpace();
-
- if (!database.isNull())
- builder.withOther(database).withSpace();
-
- builder.withOther(table).withSpace().withKeyword("FROM").withSpace().withString(file);
-
- if (!delimiter.isNull())
- builder.withSpace().withKeyword("USING").withSpace().withKeyword("DELIMITERS").withSpace().withString(delimiter);
-
- builder.withOperator(";");
-
- return builder.build();
-}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecopy.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecopy.h
deleted file mode 100644
index 1e4b5b7..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecopy.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef SQLITECOPY_H
-#define SQLITECOPY_H
-
-#include "sqlitequery.h"
-#include "sqliteconflictalgo.h"
-
-class API_EXPORT SqliteCopy : public SqliteQuery
-{
- public:
- SqliteCopy();
- SqliteCopy(const SqliteCopy& other);
- SqliteCopy(SqliteConflictAlgo onConflict, const QString& name1, const QString& name2, const QString& name3, const QString& delim = QString());
- SqliteStatement* clone();
-
- SqliteConflictAlgo onConflict = SqliteConflictAlgo::null;
- QString database = QString();
- QString table = QString();
- QString file = QString();
- QString delimiter = QString();
-
- protected:
- QStringList getTablesInStatement();
- QStringList getDatabasesInStatement();
- TokenList getTableTokensInStatement();
- TokenList getDatabaseTokensInStatement();
- QList<FullObject> getFullObjectsInStatement();
- TokenList rebuildTokensFromContents();
-};
-
-typedef QSharedPointer<SqliteCopy> SqliteCopyPtr;
-
-#endif // SQLITECOPY_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.cpp
index b747c33..1749e9a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.cpp
@@ -172,3 +172,13 @@ void SqliteCreateIndex::setTargetDatabase(const QString& database)
{
this->database = database;
}
+
+QString SqliteCreateIndex::getObjectName() const
+{
+ return index;
+}
+
+void SqliteCreateIndex::setObjectName(const QString& name)
+{
+ index = name;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.h
index 870ed17..b8876a2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateindex.h
@@ -29,6 +29,8 @@ class API_EXPORT SqliteCreateIndex : public SqliteQuery, public SqliteTableRelat
QString getTargetTable() const;
QString getTargetDatabase() const;
void setTargetDatabase(const QString& database);
+ QString getObjectName() const;
+ void setObjectName(const QString& name);
bool uniqueKw = false;
bool ifNotExistsKw = false;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.cpp
index d82270e..fff4036 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.cpp
@@ -1,6 +1,6 @@
#include "sqlitecreatetable.h"
+#include "parser/parser_helper_stubs.h"
#include "parser/statementtokenbuilder.h"
-#include "common/utils_sql.h"
#include "common/global.h"
const QRegExp SqliteCreateTable::Column::GENERATED_ALWAYS_REGEXP = QRegExp("GENERATED\\s+ALWAYS");
@@ -12,7 +12,7 @@ SqliteCreateTable::SqliteCreateTable()
SqliteCreateTable::SqliteCreateTable(const SqliteCreateTable& other) :
SqliteQuery(other), ifNotExistsKw(other.ifNotExistsKw), tempKw(other.tempKw), temporaryKw(other.temporaryKw),
- database(other.database), table(other.table), withOutRowId(other.withOutRowId)
+ database(other.database), table(other.table), withOutRowId(other.withOutRowId), strict(other.strict)
{
DEEP_COPY_COLLECTION(Column, columns);
DEEP_COPY_COLLECTION(Constraint, constraints);
@@ -40,10 +40,11 @@ SqliteCreateTable::SqliteCreateTable(bool ifNotExistsKw, int temp, const QString
}
}
-SqliteCreateTable::SqliteCreateTable(bool ifNotExistsKw, int temp, const QString& name1, const QString& name2, const QList<SqliteCreateTable::Column*>& columns, const QList<SqliteCreateTable::Constraint*>& constraints, const QString& withOutRowId) :
+SqliteCreateTable::SqliteCreateTable(bool ifNotExistsKw, int temp, const QString& name1, const QString& name2, const QList<SqliteCreateTable::Column*>& columns, const QList<SqliteCreateTable::Constraint*>& constraints, const QList<ParserStubCreateTableOption*>& options) :
SqliteCreateTable(ifNotExistsKw, temp, name1, name2, columns, constraints)
{
- this->withOutRowId = withOutRowId;
+ this->withOutRowId = parserStubFindCreateTableOption(options, ParserStubCreateTableOption::WITHOUT_ROWID) != nullptr;
+ this->strict = parserStubFindCreateTableOption(options, ParserStubCreateTableOption::STRICT) != nullptr;
}
SqliteCreateTable::SqliteCreateTable(bool ifNotExistsKw, int temp, const QString &name1, const QString &name2, SqliteSelect *select)
@@ -76,7 +77,7 @@ QList<SqliteCreateTable::Constraint*> SqliteCreateTable::getConstraints(SqliteCr
SqliteStatement* SqliteCreateTable::getPrimaryKey() const
{
- for (Constraint* constr : getConstraints(Constraint::PRIMARY_KEY))
+ for (Constraint*& constr : getConstraints(Constraint::PRIMARY_KEY))
return constr;
Column::Constraint* colConstr = nullptr;
@@ -115,7 +116,7 @@ QStringList SqliteCreateTable::getPrimaryKeyColumns() const
SqliteCreateTable::Column* SqliteCreateTable::getColumn(const QString& colName)
{
- for (Column* col : columns)
+ for (Column*& col : columns)
{
if (col->name.compare(colName, Qt::CaseInsensitive) == 0)
return col;
@@ -142,6 +143,18 @@ QList<SqliteCreateTable::Column::Constraint*> SqliteCreateTable::getColumnForeig
return results;
}
+void SqliteCreateTable::removeColumnConstraint(Column::Constraint* constr)
+{
+ for (Column* col : columns)
+ {
+ if (col->constraints.contains(constr))
+ {
+ col->constraints.removeOne(constr);
+ return;
+ }
+ }
+}
+
QStringList SqliteCreateTable::getColumnNames() const
{
QStringList names;
@@ -236,8 +249,21 @@ TokenList SqliteCreateTable::rebuildTokensFromContents()
builder.withParRight();
- if (!withOutRowId.isNull())
+ bool atLeastOneOption = false;
+ if (withOutRowId)
+ {
builder.withSpace().withKeyword("WITHOUT").withSpace().withOther("ROWID");
+ atLeastOneOption = true;
+ }
+
+ if (strict)
+ {
+ if (atLeastOneOption)
+ builder.withOperator(",");
+
+ builder.withSpace().withOther("STRICT");
+ //atLeastOneOption = true; // to uncomment if there are further options down below
+ }
}
builder.withOperator(";");
@@ -564,7 +590,7 @@ bool SqliteCreateTable::Constraint::doesAffectColumn(const QString& columnName)
int SqliteCreateTable::Constraint::getAffectedColumnIdx(const QString& columnName)
{
int i = 0;
- for (SqliteIndexedColumn* idxCol : indexedColumns)
+ for (SqliteIndexedColumn*& idxCol : indexedColumns)
{
if (idxCol->name.compare(columnName, Qt::CaseInsensitive) == 0)
return i;
@@ -604,12 +630,12 @@ TokenList SqliteCreateTable::Constraint::rebuildTokensFromContents()
{
case SqliteCreateTable::Constraint::PRIMARY_KEY:
{
- builder.withKeyword("PRIMARY").withSpace().withKeyword("KEY").withSpace().withParLeft().withStatementList(indexedColumns).withParRight();
+ builder.withKeyword("PRIMARY").withSpace().withKeyword("KEY").withSpace().withParLeft().withStatementList(indexedColumns);
if (autoincrKw)
builder.withSpace().withKeyword("AUTOINCREMENT");
- builder.withConflict(onConflict);
+ builder.withParRight().withConflict(onConflict);
break;
}
case SqliteCreateTable::Constraint::UNIQUE:
@@ -861,3 +887,13 @@ void SqliteCreateTable::setTargetDatabase(const QString& database)
{
this->database = database;
}
+
+QString SqliteCreateTable::getObjectName() const
+{
+ return table;
+}
+
+void SqliteCreateTable::setObjectName(const QString& name)
+{
+ table = name;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.h
index d34688c..5d797c1 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetable.h
@@ -15,6 +15,8 @@
#include <QList>
#include <QRegExp>
+struct ParserStubCreateTableOption;
+
class API_EXPORT SqliteCreateTable : public SqliteQuery, public SqliteDdlWithDbContext
{
public:
@@ -189,7 +191,7 @@ class API_EXPORT SqliteCreateTable : public SqliteQuery, public SqliteDdlWithDbC
const QList<Column*>& columns, const QList<Constraint*>& constraints);
SqliteCreateTable(bool ifNotExistsKw, int temp, const QString& name1, const QString& name2,
const QList<Column*>& columns, const QList<Constraint*>& constraints,
- const QString& withOutRowId);
+ const QList<ParserStubCreateTableOption*>& options);
SqliteCreateTable(bool ifNotExistsKw, int temp, const QString& name1, const QString& name2,
SqliteSelect* select);
~SqliteCreateTable();
@@ -201,10 +203,13 @@ class API_EXPORT SqliteCreateTable : public SqliteQuery, public SqliteDdlWithDbC
Column* getColumn(const QString& colName);
QList<Constraint*> getForeignKeysByTable(const QString& foreignTable) const;
QList<Column::Constraint*> getColumnForeignKeysByTable(const QString& foreignTable) const;
+ void removeColumnConstraint(Column::Constraint* constr);
QStringList getColumnNames() const;
QHash<QString,QString> getModifiedColumnsMap(bool lowercaseKeys = false, Qt::CaseSensitivity cs = Qt::CaseInsensitive) const;
QString getTargetDatabase() const;
void setTargetDatabase(const QString& database);
+ QString getObjectName() const;
+ void setObjectName(const QString& name);
bool ifNotExistsKw = false;
bool tempKw = false;
@@ -213,8 +218,9 @@ class API_EXPORT SqliteCreateTable : public SqliteQuery, public SqliteDdlWithDbC
QString table = QString();
QList<Column*> columns;
QList<Constraint*> constraints;
+ bool withOutRowId = false;
+ bool strict = false;
SqliteSelect* select = nullptr;
- QString withOutRowId = QString();
protected:
QStringList getTablesInStatement();
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.cpp
index 3f2c4e3..597395f 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.cpp
@@ -370,3 +370,13 @@ void SqliteCreateTrigger::setTargetDatabase(const QString& database)
{
this->database = database;
}
+
+QString SqliteCreateTrigger::getObjectName() const
+{
+ return trigger;
+}
+
+void SqliteCreateTrigger::setObjectName(const QString& name)
+{
+ trigger = name;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.h
index ac7b81f..44b953a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreatetrigger.h
@@ -66,6 +66,8 @@ class API_EXPORT SqliteCreateTrigger : public SqliteQuery, public SqliteTableRel
QString getTargetTable() const;
QString getTargetDatabase() const;
void setTargetDatabase(const QString& database);
+ QString getObjectName() const;
+ void setObjectName(const QString& name);
bool tempKw = false;
bool temporaryKw = false;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.cpp
index f5b54e7..0e11619 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.cpp
@@ -129,3 +129,13 @@ void SqliteCreateView::setTargetDatabase(const QString& database)
{
this->database = database;
}
+
+QString SqliteCreateView::getObjectName() const
+{
+ return view;
+}
+
+void SqliteCreateView::setObjectName(const QString& name)
+{
+ view = name;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.h
index 74f6b91..645532c 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitecreateview.h
@@ -21,6 +21,8 @@ class API_EXPORT SqliteCreateView : public SqliteQuery, public SqliteDdlWithDbCo
SqliteStatement* clone();
QString getTargetDatabase() const;
void setTargetDatabase(const QString& database);
+ QString getObjectName() const;
+ void setObjectName(const QString& name);
bool tempKw = false;
bool temporaryKw = false;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteddlwithdbcontext.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteddlwithdbcontext.h
index cb64986..0daf378 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteddlwithdbcontext.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteddlwithdbcontext.h
@@ -9,6 +9,9 @@ class API_EXPORT SqliteDdlWithDbContext
public:
virtual QString getTargetDatabase() const = 0;
virtual void setTargetDatabase(const QString& database) = 0;
+
+ virtual QString getObjectName() const = 0;
+ virtual void setObjectName(const QString& name) = 0;
};
typedef QSharedPointer<SqliteDdlWithDbContext> SqliteDdlWithDbContextPtr;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitedelete.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitedelete.cpp
index dd4d7cb..faf92a4 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitedelete.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitedelete.cpp
@@ -16,20 +16,21 @@ SqliteDelete::SqliteDelete(const SqliteDelete& other) :
{
DEEP_COPY_FIELD(SqliteExpr, where);
DEEP_COPY_FIELD(SqliteWith, with);
+ DEEP_COPY_COLLECTION(SqliteResultColumn, returning);
}
-SqliteDelete::SqliteDelete(const QString &name1, const QString &name2, const QString& indexedByName, SqliteExpr *where, SqliteWith* with)
+SqliteDelete::SqliteDelete(const QString &name1, const QString &name2, const QString& indexedByName, SqliteExpr *where, SqliteWith* with, const QList<SqliteResultColumn*>& returning)
: SqliteDelete()
{
- init(name1, name2, where, with);
+ init(name1, name2, where, with, returning);
this->indexedBy = indexedByName;
this->indexedByKw = true;
}
-SqliteDelete::SqliteDelete(const QString &name1, const QString &name2, bool notIndexedKw, SqliteExpr *where, SqliteWith* with)
+SqliteDelete::SqliteDelete(const QString &name1, const QString &name2, bool notIndexedKw, SqliteExpr *where, SqliteWith* with, const QList<SqliteResultColumn*>& returning)
: SqliteDelete()
{
- init(name1, name2, where, with);
+ init(name1, name2, where, with, returning);
this->notIndexedKw = notIndexedKw;
}
@@ -37,7 +38,7 @@ SqliteDelete::~SqliteDelete()
{
}
-SqliteStatement*SqliteDelete::clone()
+SqliteStatement* SqliteDelete::clone()
{
return new SqliteDelete(*this);
}
@@ -91,7 +92,7 @@ QList<SqliteStatement::FullObject> SqliteDelete::getFullObjectsInStatement()
return result;
}
-void SqliteDelete::init(const QString &name1, const QString &name2, SqliteExpr *where, SqliteWith* with)
+void SqliteDelete::init(const QString &name1, const QString &name2, SqliteExpr *where, SqliteWith* with, const QList<SqliteResultColumn*>& returning)
{
this->where = where;
if (where)
@@ -108,6 +109,10 @@ void SqliteDelete::init(const QString &name1, const QString &name2, SqliteExpr *
}
else
table = name1;
+
+ this->returning = returning;
+ for (SqliteResultColumn*& retCol : this->returning)
+ retCol->setParent(this);
}
TokenList SqliteDelete::rebuildTokensFromContents()
@@ -131,6 +136,13 @@ TokenList SqliteDelete::rebuildTokensFromContents()
if (where)
builder.withSpace().withKeyword("WHERE").withStatement(where);
+ if (!returning.isEmpty())
+ {
+ builder.withKeyword("RETURNING");
+ for (SqliteResultColumn*& retCol : returning)
+ builder.withSpace().withStatement(retCol);
+ }
+
builder.withOperator(";");
return builder.build();
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitedelete.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitedelete.h
index 5d24619..faa38fe 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitedelete.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitedelete.h
@@ -2,8 +2,9 @@
#define SQLITEDELETE_H
#include "sqlitequery.h"
-
+#include "sqliteselect.h"
#include <QString>
+#include <QList>
class SqliteExpr;
class SqliteWith;
@@ -13,8 +14,10 @@ class API_EXPORT SqliteDelete : public SqliteQuery
public:
SqliteDelete();
SqliteDelete(const SqliteDelete& other);
- SqliteDelete(const QString& name1, const QString& name2, const QString& indexedByName, SqliteExpr* where, SqliteWith* with);
- SqliteDelete(const QString& name1, const QString& name2, bool notIndexedKw, SqliteExpr* where, SqliteWith* with);
+ SqliteDelete(const QString& name1, const QString& name2, const QString& indexedByName, SqliteExpr* where, SqliteWith* with,
+ const QList<SqliteResultColumn*>& returning);
+ SqliteDelete(const QString& name1, const QString& name2, bool notIndexedKw, SqliteExpr* where, SqliteWith* with,
+ const QList<SqliteResultColumn*>& returning);
~SqliteDelete();
SqliteStatement* clone();
@@ -28,7 +31,8 @@ class API_EXPORT SqliteDelete : public SqliteQuery
TokenList rebuildTokensFromContents();
private:
- void init(const QString& name1, const QString& name2, SqliteExpr* where, SqliteWith* with);
+ void init(const QString& name1, const QString& name2, SqliteExpr* where, SqliteWith* with,
+ const QList<SqliteResultColumn*>& returning);
public:
QString database = QString();
@@ -38,6 +42,7 @@ class API_EXPORT SqliteDelete : public SqliteQuery
QString indexedBy = QString();
SqliteExpr* where = nullptr;
SqliteWith* with = nullptr;
+ QList<SqliteResultColumn*> returning;
};
typedef QSharedPointer<SqliteDelete> SqliteDeletePtr;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp
index e2c79ea..89c6b9b 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp
@@ -231,6 +231,19 @@ void SqliteExpr::initUnaryOp(SqliteExpr *expr, const QString& op)
expr->setParent(this);
}
+void SqliteExpr::initPtrOp(SqliteExpr* expr1, const QString& op, SqliteExpr* expr2)
+{
+ mode = SqliteExpr::Mode::PTR_OP;
+ this->expr1 = expr1;
+ this->expr2 = expr2;
+ ptrOp = op;
+ if (expr1)
+ expr1->setParent(this);
+
+ if (expr2)
+ expr2->setParent(this);
+}
+
void SqliteExpr::initLike(SqliteExpr *expr1, bool notKw, LikeOp likeOp, SqliteExpr *expr2, SqliteExpr *expr3)
{
mode = SqliteExpr::Mode::LIKE;
@@ -271,6 +284,19 @@ void SqliteExpr::initIs(SqliteExpr *expr1, bool notKw, SqliteExpr *expr2)
expr2->setParent(this);
}
+void SqliteExpr::initDistinct(SqliteExpr* expr1, bool notKw, SqliteExpr* expr2)
+{
+ mode = SqliteExpr::Mode::DISTINCT;
+ this->expr1 = expr1;
+ this->notKw = notKw;
+ this->expr2 = expr2;
+ if (expr1)
+ expr1->setParent(this);
+
+ if (expr2)
+ expr2->setParent(this);
+}
+
void SqliteExpr::initBetween(SqliteExpr *expr1, bool notKw, SqliteExpr *expr2, SqliteExpr *expr3)
{
mode = SqliteExpr::Mode::BETWEEN;
@@ -549,6 +575,9 @@ TokenList SqliteExpr::rebuildTokensFromContents()
case SqliteExpr::Mode::BINARY_OP:
builder.withStatement(expr1).withSpace().withOperator(binaryOp).withSpace().withStatement(expr2);
break;
+ case SqliteExpr::Mode::PTR_OP:
+ builder.withStatement(expr1).withSpace().withOperator(ptrOp).withSpace().withStatement(expr2);
+ break;
case SqliteExpr::Mode::FUNCTION:
builder.withOther(function).withParLeft();
if (distinctKw)
@@ -598,6 +627,9 @@ TokenList SqliteExpr::rebuildTokensFromContents()
case SqliteExpr::Mode::IS:
builder.withTokens(rebuildIs());
break;
+ case SqliteExpr::Mode::DISTINCT:
+ builder.withTokens(rebuildDistinct());
+ break;
case SqliteExpr::Mode::BETWEEN:
builder.withTokens(rebuildBetween());
break;
@@ -691,6 +723,17 @@ TokenList SqliteExpr::rebuildIs()
return builder.build();
}
+TokenList SqliteExpr::rebuildDistinct()
+{
+ StatementTokenBuilder builder;
+ builder.withStatement(expr1).withSpace().withKeyword("IS");
+ if (notKw)
+ builder.withSpace().withKeyword("NOT");
+
+ builder.withSpace().withKeyword("DISTINCT").withSpace().withKeyword("FROM").withSpace().withStatement(expr2);
+ return builder.build();
+}
+
TokenList SqliteExpr::rebuildBetween()
{
StatementTokenBuilder builder;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.h
index ef4c7da..f5fc6c2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.h
@@ -23,6 +23,7 @@ class API_EXPORT SqliteExpr : public SqliteStatement
ID,
UNARY_OP,
BINARY_OP,
+ PTR_OP,
FUNCTION,
SUB_EXPR,
ROW_VALUE,
@@ -32,6 +33,7 @@ class API_EXPORT SqliteExpr : public SqliteStatement
NULL_,
NOTNULL,
IS,
+ DISTINCT,
BETWEEN,
IN,
EXISTS,
@@ -85,9 +87,11 @@ class API_EXPORT SqliteExpr : public SqliteStatement
void initWindowFunction(const QString& fnName, SqliteFilterOver* filterOver);
void initBinOp(SqliteExpr* expr1, const QString& op, SqliteExpr* expr2);
void initUnaryOp(SqliteExpr* expr, const QString& op);
+ void initPtrOp(SqliteExpr* expr1, const QString& op, SqliteExpr* expr2);
void initLike(SqliteExpr* expr1, bool notKw, SqliteExpr::LikeOp likeOp, SqliteExpr* expr2, SqliteExpr* expr3 = nullptr);
void initNull(SqliteExpr* expr, const QString& value);
void initIs(SqliteExpr* expr1, bool notKw, SqliteExpr* expr2);
+ void initDistinct(SqliteExpr* expr1, bool notKw, SqliteExpr* expr2);
void initBetween(SqliteExpr* expr1, bool notKw, SqliteExpr* expr2, SqliteExpr* expr3);
void initIn(SqliteExpr* expr, bool notKw, const QList<SqliteExpr*>& exprList);
void initIn(SqliteExpr* expr, bool notKw, SqliteSelect* select);
@@ -108,6 +112,7 @@ class API_EXPORT SqliteExpr : public SqliteStatement
QString column = QString();
QString unaryOp = QString();
QString binaryOp = QString();
+ QString ptrOp = QString();
QString function = QString();
QString collation = QString();
QString ctime = QString();
@@ -144,6 +149,7 @@ class API_EXPORT SqliteExpr : public SqliteStatement
TokenList rebuildLike();
TokenList rebuildNotNull();
TokenList rebuildIs();
+ TokenList rebuildDistinct();
TokenList rebuildBetween();
TokenList rebuildIn();
TokenList rebuildCase();
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteinsert.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteinsert.cpp
index 906b385..5242fa6 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteinsert.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteinsert.cpp
@@ -20,14 +20,14 @@ SqliteInsert::SqliteInsert(const SqliteInsert& other) :
DEEP_COPY_FIELD(SqliteSelect, select);
DEEP_COPY_FIELD(SqliteWith, with);
DEEP_COPY_FIELD(SqliteUpsert, upsert);
+ DEEP_COPY_COLLECTION(SqliteResultColumn, returning);
}
SqliteInsert::SqliteInsert(bool replace, SqliteConflictAlgo onConflict, const QString &name1, const QString &name2, const QList<QString> &columns,
- const QList<SqliteExpr *> &row, SqliteWith* with) :
+ const QList<SqliteExpr *> &row, SqliteWith* with, const QList<SqliteResultColumn*>& returning) :
SqliteInsert()
{
- initName(name1, name2);
- initMode(replace, onConflict);
+ init(name1, name2, replace, onConflict, returning);
columnNames = columns;
values = row;
@@ -40,11 +40,10 @@ SqliteInsert::SqliteInsert(bool replace, SqliteConflictAlgo onConflict, const QS
}
SqliteInsert::SqliteInsert(bool replace, SqliteConflictAlgo onConflict, const QString &name1, const QString &name2, const QList<QString> &columns,
- SqliteSelect *select, SqliteWith* with, SqliteUpsert* upsert) :
+ SqliteSelect *select, SqliteWith* with, SqliteUpsert* upsert, const QList<SqliteResultColumn*>& returning) :
SqliteInsert()
{
- initName(name1, name2);
- initMode(replace, onConflict);
+ init(name1, name2, replace, onConflict, returning);
this->with = with;
if (with)
@@ -61,11 +60,10 @@ SqliteInsert::SqliteInsert(bool replace, SqliteConflictAlgo onConflict, const QS
}
SqliteInsert::SqliteInsert(bool replace, SqliteConflictAlgo onConflict, const QString &name1, const QString &name2, const QList<QString> &columns,
- SqliteWith* with) :
+ SqliteWith* with, const QList<SqliteResultColumn*>& returning) :
SqliteInsert()
{
- initName(name1, name2);
- initMode(replace, onConflict);
+ init(name1, name2, replace, onConflict, returning);
this->with = with;
if (with)
@@ -104,7 +102,7 @@ QStringList SqliteInsert::getDatabasesInStatement()
TokenList SqliteInsert::getColumnTokensInStatement()
{
TokenList list;
- for (TokenPtr token : getTokenListFromNamedKey("idlist_opt", -1))
+ for (TokenPtr& token : getTokenListFromNamedKey("idlist_opt", -1))
{
if (token->type != Token::OTHER && token->type != Token::KEYWORD)
continue;
@@ -153,7 +151,7 @@ QList<SqliteStatement::FullObject> SqliteInsert::getFullObjectsInStatement()
return result;
}
-void SqliteInsert::initName(const QString& name1, const QString& name2)
+void SqliteInsert::init(const QString& name1, const QString& name2, bool replace, SqliteConflictAlgo onConflict, const QList<SqliteResultColumn*>& returning)
{
if (!name2.isNull())
{
@@ -162,12 +160,13 @@ void SqliteInsert::initName(const QString& name1, const QString& name2)
}
else
table = name1;
-}
-void SqliteInsert::initMode(bool replace, SqliteConflictAlgo onConflict)
-{
replaceKw = replace;
this->onConflict = onConflict;
+
+ this->returning = returning;
+ for (SqliteResultColumn*& retCol : this->returning)
+ retCol->setParent(this);
}
TokenList SqliteInsert::rebuildTokensFromContents()
@@ -212,6 +211,13 @@ TokenList SqliteInsert::rebuildTokensFromContents()
}
}
+ if (!returning.isEmpty())
+ {
+ builder.withKeyword("RETURNING");
+ for (SqliteResultColumn*& retCol : returning)
+ builder.withSpace().withStatement(retCol);
+ }
+
builder.withOperator(";");
return builder.build();
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteinsert.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteinsert.h
index 40581cd..b409abc 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteinsert.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteinsert.h
@@ -3,10 +3,10 @@
#include "sqlitequery.h"
#include "sqliteconflictalgo.h"
+#include "sqliteselect.h"
#include <QString>
#include <QList>
-class SqliteSelect;
class SqliteExpr;
class SqliteWith;
class SqliteUpsert;
@@ -18,11 +18,14 @@ class API_EXPORT SqliteInsert : public SqliteQuery
SqliteInsert(const SqliteInsert& other);
SqliteInsert(bool replace, SqliteConflictAlgo onConflict, const QString& name1,
const QString& name2, const QList<QString>& columns,
- const QList<SqliteExpr*>& row, SqliteWith* with);
+ const QList<SqliteExpr*>& row, SqliteWith* with,
+ const QList<SqliteResultColumn*>& returning);
SqliteInsert(bool replace, SqliteConflictAlgo onConflict, const QString& name1,
- const QString& name2, const QList<QString>& columns, SqliteSelect* select, SqliteWith* with, SqliteUpsert* upsert = nullptr);
+ const QString& name2, const QList<QString>& columns, SqliteSelect* select, SqliteWith* with,
+ SqliteUpsert* upsert, const QList<SqliteResultColumn*>& returning);
SqliteInsert(bool replace, SqliteConflictAlgo onConflict, const QString& name1,
- const QString& name2, const QList<QString>& columns, SqliteWith* with);
+ const QString& name2, const QList<QString>& columns, SqliteWith* with,
+ const QList<SqliteResultColumn*>& returning);
~SqliteInsert();
SqliteStatement* clone();
@@ -38,8 +41,8 @@ class API_EXPORT SqliteInsert : public SqliteQuery
TokenList rebuildTokensFromContents();
private:
- void initName(const QString& name1, const QString& name2);
- void initMode(bool replace, SqliteConflictAlgo onConflict);
+ void init(const QString& name1, const QString& name2, bool replace, SqliteConflictAlgo onConflict,
+ const QList<SqliteResultColumn*>& returning);
public:
bool replaceKw = false;
@@ -52,6 +55,7 @@ class API_EXPORT SqliteInsert : public SqliteQuery
SqliteSelect* select = nullptr;
SqliteWith* with = nullptr;
SqliteUpsert* upsert = nullptr;
+ QList<SqliteResultColumn*> returning;
};
typedef QSharedPointer<SqliteInsert> SqliteInsertPtr;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.cpp
index 732c0a2..4db4b5d 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteorderby.cpp
@@ -88,18 +88,20 @@ void SqliteOrderBy::setColumnName(const QString& name)
void SqliteOrderBy::setCollation(const QString& name)
{
- if (expr && expr->mode == SqliteExpr::Mode::COLLATE)
+ if (!expr)
+ return;
+
+ if (expr->mode == SqliteExpr::Mode::COLLATE)
{
expr->collation = name;
+ return;
}
- else
- {
- SqliteExpr* theExpr = expr;
- SqliteExpr* collationExpr = new SqliteExpr();
- collationExpr->initCollate(theExpr, name);
- theExpr->setParent(collationExpr);
- collationExpr->setParent(this);
- }
+
+ SqliteExpr* collationExpr = new SqliteExpr();
+ collationExpr->initCollate(expr, name);
+ expr->setParent(collationExpr);
+ collationExpr->setParent(this);
+ expr = collationExpr;
}
TokenList SqliteOrderBy::rebuildTokensFromContents()
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitequerytype.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitequerytype.cpp
index 1c04ca6..b70778e 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitequerytype.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitequerytype.cpp
@@ -60,9 +60,8 @@ QString sqliteQueryTypeToString(const SqliteQueryType& type)
return "Update";
case SqliteQueryType::Vacuum:
return "Vacuum";
- default:
- return QString();
}
+ return QString();
}
bool isDataReturningQuery(const SqliteQueryType& type)
@@ -98,7 +97,7 @@ bool isDataReturningQuery(const SqliteQueryType& type)
case SqliteQueryType::Savepoint:
case SqliteQueryType::Update:
case SqliteQueryType::Vacuum:
- default:
return false;
}
+ return false;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteselect.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteselect.cpp
index e0439d2..501f7f3 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteselect.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteselect.cpp
@@ -118,7 +118,7 @@ SqliteSelect::CompoundOperator SqliteSelect::compoundOperator(const QString& op)
void SqliteSelect::reset()
{
- for (Core* core : coreSelects)
+ for (Core*& core : coreSelects)
delete core;
coreSelects.clear();
@@ -443,7 +443,7 @@ QStringList SqliteSelect::Core::JoinConstraint::getColumnsInStatement()
TokenList SqliteSelect::Core::JoinConstraint::getColumnTokensInStatement()
{
TokenList list;
- for (TokenPtr token : getTokenListFromNamedKey("idlist", -1))
+ for (TokenPtr& token : getTokenListFromNamedKey("idlist", -1))
{
if (token->type == Token::OPERATOR) // a COMMA
continue;
@@ -573,7 +573,7 @@ SqliteSelect::Core::JoinSource::JoinSource(SqliteSelect::Core::SingleSource *sin
if (singleSource)
singleSource->setParent(this);
- for (JoinSourceOther* other : otherSources)
+ for (JoinSourceOther*& other : otherSources)
other->setParent(this);
}
@@ -667,11 +667,6 @@ TokenList SqliteSelect::Core::SingleSource::rebuildTokensFromContents()
TokenList SqliteSelect::Core::JoinOp::rebuildTokensFromContents()
{
- return rebuildTokensForSqlite3();
-}
-
-TokenList SqliteSelect::Core::JoinOp::rebuildTokensForSqlite3()
-{
StatementTokenBuilder builder;
if (comma)
{
@@ -682,9 +677,16 @@ TokenList SqliteSelect::Core::JoinOp::rebuildTokensForSqlite3()
if (naturalKw)
builder.withKeyword("NATURAL").withSpace();
- if (leftKw)
+ if (leftKw || fullKw || rightKw)
{
- builder.withKeyword("LEFT").withSpace();
+ if (leftKw)
+ builder.withKeyword("LEFT");
+ else if (fullKw)
+ builder.withKeyword("FULL");
+ else if (rightKw)
+ builder.withKeyword("RIGHT");
+
+ builder.withSpace();
if (outerKw)
builder.withKeyword("OUTER").withSpace();
}
@@ -780,7 +782,7 @@ TokenList SqliteSelect::rebuildTokensFromContents()
if (with)
builder.withStatement(with);
- for (SqliteSelect::Core* core : coreSelects)
+ for (SqliteSelect::Core*& core : coreSelects)
{
if (core->compoundOp == CompoundOperator::UNION_ALL)
{
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteselect.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteselect.h
index 58babfe..dfed9c2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteselect.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteselect.h
@@ -123,9 +123,6 @@ class API_EXPORT SqliteSelect : public SqliteQuery
protected:
TokenList rebuildTokensFromContents();
-
- private:
- TokenList rebuildTokensForSqlite3();
};
class API_EXPORT JoinConstraint : public SqliteStatement
@@ -232,5 +229,6 @@ class API_EXPORT SqliteSelect : public SqliteQuery
};
typedef QSharedPointer<SqliteSelect> SqliteSelectPtr;
+typedef SqliteSelect::Core::ResultColumn SqliteResultColumn;
#endif // SQLITESELECT_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitestatement.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitestatement.h
index 43a60ba..167321f 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitestatement.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitestatement.h
@@ -228,6 +228,12 @@ class API_EXPORT SqliteStatement : public QObject
virtual SqliteStatement* clone() = 0;
template <class T>
+ T* typeClone()
+ {
+ return dynamic_cast<T*>(clone());
+ }
+
+ template <class T>
void attach(QList<T*>& listMemberForChild, T* childStatementToAttach)
{
listMemberForChild << childStatementToAttach;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteupdate.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteupdate.cpp
index 89c8195..55d8b34 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteupdate.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteupdate.cpp
@@ -27,6 +27,7 @@ SqliteUpdate::SqliteUpdate(const SqliteUpdate& other) :
DEEP_COPY_FIELD(SqliteExpr, where);
DEEP_COPY_FIELD(SqliteWith, with);
DEEP_COPY_FIELD(SqliteSelect::Core::JoinSource, from);
+ DEEP_COPY_COLLECTION(SqliteResultColumn, returning);
}
SqliteUpdate::~SqliteUpdate()
@@ -34,7 +35,7 @@ SqliteUpdate::~SqliteUpdate()
}
SqliteUpdate::SqliteUpdate(SqliteConflictAlgo onConflict, const QString &name1, const QString &name2, bool notIndexedKw, const QString &indexedBy,
- const QList<ColumnAndValue>& values, SqliteSelect::Core::JoinSource* from, SqliteExpr *where, SqliteWith* with)
+ const QList<ColumnAndValue>& values, SqliteSelect::Core::JoinSource* from, SqliteExpr *where, SqliteWith* with, const QList<SqliteResultColumn*>& returning)
: SqliteUpdate()
{
this->onConflict = onConflict;
@@ -64,8 +65,12 @@ SqliteUpdate::SqliteUpdate(SqliteConflictAlgo onConflict, const QString &name1,
if (with)
with->setParent(this);
- for (const ColumnAndValue& keyValue : keyValueMap)
+ for (ColumnAndValue& keyValue : keyValueMap)
keyValue.second->setParent(this);
+
+ this->returning = returning;
+ for (SqliteResultColumn*& retCol : this->returning)
+ retCol->setParent(this);
}
SqliteStatement*SqliteUpdate::clone()
@@ -75,7 +80,7 @@ SqliteStatement*SqliteUpdate::clone()
SqliteExpr* SqliteUpdate::getValueForColumnSet(const QString& column)
{
- for (const ColumnAndValue& keyValue : keyValueMap)
+ for (ColumnAndValue& keyValue : keyValueMap)
{
if (keyValue.first == column)
return keyValue.second;
@@ -86,7 +91,7 @@ SqliteExpr* SqliteUpdate::getValueForColumnSet(const QString& column)
QStringList SqliteUpdate::getColumnsInStatement()
{
QStringList columns;
- for (const ColumnAndValue& keyValue : keyValueMap)
+ for (ColumnAndValue& keyValue : keyValueMap)
{
if (keyValue.first.type() == QVariant::StringList)
columns += keyValue.first.toStringList();
@@ -120,7 +125,7 @@ TokenList SqliteUpdate::getColumnTokensInStatement()
int end;
int start = 0;
SqliteExpr* expr = nullptr;
- for (const ColumnAndValue& keyValue : keyValueMap)
+ for (ColumnAndValue& keyValue : keyValueMap)
{
expr = keyValue.second;
end = setListTokens.indexOf(expr->tokens[0]);
@@ -205,7 +210,7 @@ TokenList SqliteUpdate::rebuildTokensFromContents()
builder.withKeyword("SET").withSpace();
bool first = true;
- for (const ColumnAndValue& keyVal : keyValueMap)
+ for (ColumnAndValue& keyVal : keyValueMap)
{
if (!first)
builder.withOperator(",").withSpace();
@@ -225,6 +230,13 @@ TokenList SqliteUpdate::rebuildTokensFromContents()
if (where)
builder.withSpace().withKeyword("WHERE").withStatement(where);
+ if (!returning.isEmpty())
+ {
+ builder.withKeyword("RETURNING");
+ for (SqliteResultColumn*& retCol : returning)
+ builder.withSpace().withStatement(retCol);
+ }
+
builder.withOperator(";");
return builder.build();
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteupdate.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteupdate.h
index e843bcd..be121b2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteupdate.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteupdate.h
@@ -21,7 +21,7 @@ class API_EXPORT SqliteUpdate : public SqliteQuery
~SqliteUpdate();
SqliteUpdate(SqliteConflictAlgo onConflict, const QString& name1, const QString& name2,
bool notIndexedKw, const QString& indexedBy, const QList<ColumnAndValue>& values,
- SqliteSelect::Core::JoinSource* from, SqliteExpr* where, SqliteWith* with);
+ SqliteSelect::Core::JoinSource* from, SqliteExpr* where, SqliteWith* with, const QList<SqliteResultColumn*>& returning);
SqliteStatement* clone();
SqliteExpr* getValueForColumnSet(const QString& column);
@@ -36,6 +36,7 @@ class API_EXPORT SqliteUpdate : public SqliteQuery
SqliteSelect::Core::JoinSource* from = nullptr;
SqliteExpr* where = nullptr;
SqliteWith* with = nullptr;
+ QList<SqliteResultColumn*> returning;
protected:
QStringList getColumnsInStatement();
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewindowdefinition.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewindowdefinition.cpp
index adf135f..69138b6 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewindowdefinition.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewindowdefinition.cpp
@@ -265,7 +265,7 @@ SqliteWindowDefinition::Window::Frame::Bound::Bound(SqliteExpr* expr, const QStr
if (upper == "UNBOUNDED PRECEDING")
type = Type::UNBOUNDED_PRECEDING;
else if (expr && upper == "PRECEDING")
- type = Type::EXPR_FOLLOWING;
+ type = Type::EXPR_PRECEDING;
else if (upper == "UNBOUNDED FOLLOWING")
type = Type::UNBOUNDED_FOLLOWING;
else if (expr && upper == "FOLLOWING")
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewith.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewith.cpp
index 901ac56..c15b447 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewith.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewith.cpp
@@ -36,19 +36,19 @@ SqliteWith::CommonTableExpression::CommonTableExpression()
}
SqliteWith::CommonTableExpression::CommonTableExpression(const SqliteWith::CommonTableExpression& other) :
- SqliteStatement(other), table(other.table)
+ SqliteStatement(other), table(other.table), asMode(other.asMode)
{
DEEP_COPY_COLLECTION(SqliteIndexedColumn, indexedColumns);
DEEP_COPY_FIELD(SqliteSelect, select);
}
-SqliteWith::CommonTableExpression::CommonTableExpression(const QString& tableName, const QList<SqliteIndexedColumn*>& indexedColumns, SqliteSelect* select) :
- table(tableName), indexedColumns(indexedColumns), select(select)
+SqliteWith::CommonTableExpression::CommonTableExpression(const QString& tableName, const QList<SqliteIndexedColumn*>& indexedColumns, SqliteSelect* select, AsMode asMode) :
+ table(tableName), indexedColumns(indexedColumns), select(select), asMode(asMode)
{
select->setParent(this);
}
-SqliteStatement*SqliteWith::CommonTableExpression::clone()
+SqliteStatement* SqliteWith::CommonTableExpression::clone()
{
return new SqliteWith::CommonTableExpression(*this);
}
@@ -61,7 +61,19 @@ TokenList SqliteWith::CommonTableExpression::rebuildTokensFromContents()
if (indexedColumns.size() > 0)
builder.withSpace().withParLeft().withStatementList(indexedColumns).withParRight();
- builder.withSpace().withKeyword("AS").withSpace().withParLeft().withStatement(select).withParRight();
+ builder.withSpace().withKeyword("AS");
+ switch (asMode) {
+ case ANY:
+ break;
+ case MATERIALIZED:
+ builder.withKeyword("MATERIALIZED");
+ break;
+ case NOT_MATERIALIZED:
+ builder.withKeyword("NOT").withSpace().withKeyword("MATERIALIZED");
+ break;
+ }
+
+ builder.withSpace().withParLeft().withStatement(select).withParRight();
return builder.build();
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewith.h b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewith.h
index 30f8181..8429e53 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewith.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqlitewith.h
@@ -12,15 +12,23 @@ class SqliteWith : public SqliteStatement
class CommonTableExpression : public SqliteStatement
{
public:
+ enum AsMode {
+ ANY,
+ MATERIALIZED,
+ NOT_MATERIALIZED
+ };
+
CommonTableExpression();
CommonTableExpression(const CommonTableExpression& other);
- CommonTableExpression(const QString& tableName, const QList<SqliteIndexedColumn*>& indexedColumns, SqliteSelect* select);
+ CommonTableExpression(const QString& tableName, const QList<SqliteIndexedColumn*>& indexedColumns, SqliteSelect* select,
+ AsMode asMode);
SqliteStatement* clone();
QString table;
QList<SqliteIndexedColumn*> indexedColumns;
SqliteSelect* select = nullptr;
+ AsMode asMode = ANY;
protected:
TokenList rebuildTokensFromContents();
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/keywords.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/keywords.cpp
index a5651db..3d877c8 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/keywords.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/keywords.cpp
@@ -118,6 +118,7 @@ void initKeywords()
keywords3["LIKE"] = TK3_LIKE_KW;
keywords3["LIMIT"] = TK3_LIMIT;
keywords3["MATCH"] = TK3_MATCH;
+ keywords3["MATERIALIZED"] = TK3_MATERIALIZED;
keywords3["NATURAL"] = TK3_JOIN_KW;
keywords3["NO"] = TK3_NO;
keywords3["NOT"] = TK3_NOT;
@@ -149,6 +150,7 @@ void initKeywords()
keywords3["RENAME"] = TK3_RENAME;
keywords3["REPLACE"] = TK3_REPLACE;
keywords3["RESTRICT"] = TK3_RESTRICT;
+ keywords3["RETURNING"] = TK3_RETURNING;
keywords3["RIGHT"] = TK3_JOIN_KW;
keywords3["ROLLBACK"] = TK3_ROLLBACK;
keywords3["ROW"] = TK3_ROW;
@@ -192,11 +194,11 @@ void initKeywords()
softKeywords3 << "ABORT" << "ACTION" << "AFTER" << "ALWAYS" << "ANALYZE" << "ASC" << "ATTACH" << "BEFORE" << "BEGIN" << "BY" << "CASCADE"
<< "CAST" << "COLUMNKW" << "CONFLICT" << "CURRENT" << "DATABASE" << "DEFERRED" << "DESC" << "DETACH" << "DO" << "EACH"
<< "END" << "EXCLUDE" << "EXCLUSIVE" << "EXPLAIN" << "FAIL" << "FIRST" << "FOLLOWING" << "FOR" << "GENERATED" << "GROUPS"
- << "IGNORE" << "IMMEDIATE" << "INDEXED" << "INITIALLY" << "INSTEAD" << "LAST" << "LIKE_KW" << "MATCH" << "NO" << "NULLS"
- << "OTHERS" << "PLAN" << "QUERY" << "KEY" << "OF" << "OFFSET" << "PARTITION" << "PRAGMA" << "PRECEDING" << "RAISE" << "RANGE"
- << "RECURSIVE" << "RELEASE" << "REPLACE" << "RESTRICT" << "ROW" << "ROWS" << "ROLLBACK" << "SAVEPOINT" << "TEMP" << "TIES"
- << "TRIGGER" << "UNBOUNDED" << "VACUUM" << "VIEW" << "VIRTUAL" << "WITH" << "WITHOUT" << "REINDEX" << "RENAME" << "IF"
- << "CURRENT_DATE" << "CURRENT_TIME" << "CURRENT_TIMESTAMP";
+ << "IGNORE" << "IMMEDIATE" << "INDEXED" << "INITIALLY" << "INSTEAD" << "LAST" << "LIKE_KW" << "MATCH" << "MATERIALIZED" << "NO"
+ << "NULLS" << "OTHERS" << "PLAN" << "QUERY" << "KEY" << "OF" << "OFFSET" << "PARTITION" << "PRAGMA" << "PRECEDING" << "RAISE"
+ << "RANGE" << "RECURSIVE" << "RELEASE" << "REPLACE" << "RESTRICT" << "ROW" << "ROWS" << "ROLLBACK" << "SAVEPOINT" << "TEMP"
+ << "TIES" << "TRIGGER" << "UNBOUNDED" << "VACUUM" << "VIEW" << "VIRTUAL" << "WITH" << "WITHOUT" << "REINDEX" << "RENAME"
+ << "IF" << "CURRENT_DATE" << "CURRENT_TIME" << "CURRENT_TIMESTAMP" << "WINDOW" << "OVER" << "FILTER";
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/lempar.c b/SQLiteStudio3/coreSQLiteStudio/parser/lempar.c
index 3b239dc..5bb7412 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/lempar.c
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/lempar.c
@@ -782,7 +782,7 @@ static void yy_reduce(
#endif
{
yy_shift(yypParser,yyact,yygoto,&yygotominor);
- if (parserContext->setupTokens)
+ if (parserContext->setupTokens && yypParser->yyidx >= 0)
{
QList<Token*>* tokensPtr = yypParser->yystack[yypParser->yyidx].tokens;
*tokensPtr = allTokensWithAllInherited + *tokensPtr;
@@ -1023,4 +1023,4 @@ void Parse(
}
}while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
return;
-} \ No newline at end of file
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/lexer.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/lexer.cpp
index bf5185b..8660583 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/lexer.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/lexer.cpp
@@ -1,6 +1,5 @@
#include "lexer.h"
#include "keywords.h"
-#include "log.h"
#include "lexer_low_lev.h"
#include "sqlite3_parse.h"
#include "common/utils_sql.h"
@@ -26,6 +25,7 @@ TokenList Lexer::process(const QString &sql)
{
TokenList resultList;
int lgt;
+ TokenPtr prevToken;
TokenPtr token;
QString str = sql;
@@ -37,7 +37,7 @@ TokenList Lexer::process(const QString &sql)
else
token = TokenPtr::create();
- lgt = lexerGetToken(str, token, 3, tolerant);
+ lgt = lexerGetToken(str, token, prevToken, 3, tolerant);
if (lgt == 0)
break;
@@ -48,6 +48,8 @@ TokenList Lexer::process(const QString &sql)
resultList << token;
str = str.mid(lgt);
pos += lgt;
+ if (!token->isWhitespace())
+ prevToken = token;
}
return resultList;
@@ -70,7 +72,7 @@ TokenPtr Lexer::getToken()
else
token = TokenPtr::create();
- int lgt = lexerGetToken(sqlToTokenize, token, 3, tolerant);
+ int lgt = lexerGetToken(sqlToTokenize, token, prevTokenProcessed, 3, tolerant);
if (lgt == 0)
return TokenPtr();
@@ -80,6 +82,8 @@ TokenPtr Lexer::getToken()
sqlToTokenize = sqlToTokenize.mid(lgt);
tokenPosition += lgt;
+ if (!token->isWhitespace())
+ prevTokenProcessed = token;
return token;
}
@@ -190,6 +194,7 @@ void Lexer::staticInit()
createTokenType(TK3_ID_TRIG, Token::CTX_TRIGGER, "");
createTokenType(TK3_ID_TRIG_NEW, Token::CTX_TRIGGER_NEW, "");
createTokenType(TK3_CTX_ROWID_KW, Token::CTX_ROWID_KW, "ROWID");
+ createTokenType(TK3_CTX_STRICT_KW, Token::CTX_STRICT_KW, "STRICT");
createTokenType(TK3_ID, Token::CTX_OLD_KW, "OLD");
createTokenType(TK3_ID, Token::CTX_NEW_KW, "NEW");
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/lexer.h b/SQLiteStudio3/coreSQLiteStudio/parser/lexer.h
index 10db9ce..07b2d06 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/lexer.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/lexer.h
@@ -202,6 +202,13 @@ class API_EXPORT Lexer
QString sqlToTokenize;
/**
+ * @brief Token produced by the lexer previously.
+ *
+ * This is used only by the stateful lexer processing (i.e. with getToken())
+ */
+ TokenPtr prevTokenProcessed;
+
+ /**
* @brief Current tokenizer position in the sqlToTokenize.
*
* This position index is used to track which SQL characters should be tokenized
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/lexer_low_lev.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/lexer_low_lev.cpp
index 65f9222..6b76768 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/lexer_low_lev.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/lexer_low_lev.cpp
@@ -4,6 +4,7 @@
#include "sqlite3_parse.h"
#include "common/utils.h"
#include "common/utils_sql.h"
+#include "common/unused.h"
#include <QByteArray>
#include <QChar>
@@ -13,19 +14,131 @@
// Low-level lexer routines based on tokenizer from SQLite 3.7.15.2
//
+int lexerGetToken(const QString& z, TokenPtr& token, bool tolerant);
+
bool isIdChar(const QChar& c)
{
return c.isPrint() && !c.isSpace() && !doesObjectNeedWrapping(c);
}
-int lexerGetToken(const QString& z, TokenPtr token, int sqliteVersion, bool tolerant)
+// From SQLite source code:
+/*
+** The following three functions are called immediately after the tokenizer
+** reads the keywords WINDOW, OVER and FILTER, respectively, to determine
+** whether the token should be treated as a keyword or an SQL identifier.
+** This cannot be handled by the usual lemon %fallback method, due to
+** the ambiguity in some constructions. e.g.
+**
+** SELECT sum(x) OVER ...
+**
+** In the above, "OVER" might be a keyword, or it might be an alias for the
+** sum(x) expression. If a "%fallback ID OVER" directive were added to
+** grammar, then SQLite would always treat "OVER" as an alias, making it
+** impossible to call a window-function without a FILTER clause.
+**
+** WINDOW is treated as a keyword if:
+**
+** * the following token is an identifier, or a keyword that can fallback
+** to being an identifier, and
+** * the token after than one is TK_AS.
+**
+** OVER is a keyword if:
+**
+** * the previous token was TK_RP, and
+** * the next token is either TK_LP or an identifier.
+**
+** FILTER is a keyword if:
+**
+** * the previous token was TK_RP, and
+** * the next token is TK_LP.
+*/
+
+int sqlite3ParserFallback(int iToken); // defined in parse.y
+int lexerWindowSpecificGetToken(const QString& z, TokenPtr& token, const TokenPtr& prevToken, bool tolerant)
+{
+ int lgt = 0;
+ do
+ lgt += lexerGetToken(z.mid(lgt), token, prevToken, tolerant);
+ while (token->lemonType == TK3_SPACE);
+
+ if (
+ token->lemonType == TK3_ID ||
+ token->lemonType == TK3_STRING ||
+ token->lemonType == TK3_JOIN_KW ||
+ token->lemonType == TK3_WINDOW ||
+ token->lemonType == TK3_OVER ||
+ sqlite3ParserFallback(token->lemonType) == TK3_ID
+ ) {
+ token->lemonType = TK3_ID;
+ token->type = Token::OTHER;
+ }
+
+ return lgt;
+}
+
+void lexerHandleWindowKeyword(const QString& z, TokenPtr& token, const TokenPtr& prevToken, bool tolerant)
{
- if (sqliteVersion < 3 || sqliteVersion > 3)
+ UNUSED(prevToken);
+ TokenPtr firstAfter = TokenPtr::create();
+ int lgt = lexerWindowSpecificGetToken(z, firstAfter, token, tolerant);
+ if (firstAfter->lemonType != TK3_ID)
{
- qCritical() << "lexerGetToken() called with invalid sqliteVersion:" << sqliteVersion;
- return 0;
+ token->lemonType = TK3_ID;
+ token->type = Token::OTHER;
+ return;
+ }
+
+ TokenPtr secondAfter = TokenPtr::create();
+ lexerWindowSpecificGetToken(z.mid(lgt), secondAfter, firstAfter, tolerant);
+ if (secondAfter->lemonType != TK3_AS)
+ {
+ token->lemonType = TK3_ID;
+ token->type = Token::OTHER;
+ return;
+ }
+}
+
+void lexerHandleOverKeyword(const QString& z, TokenPtr& token, const TokenPtr& prevToken, bool tolerant)
+{
+ if (prevToken && prevToken->lemonType == TK3_RP) {
+ TokenPtr firstAfter = TokenPtr::create();
+ lexerWindowSpecificGetToken(z, firstAfter, token, tolerant);
+ if (firstAfter->lemonType == TK3_LP || firstAfter->lemonType == TK3_ID)
+ return; // remains OVER keyword
+ }
+ token->lemonType = TK3_ID;
+ token->type = Token::OTHER;
+}
+
+void lexerHandleFilterKeyword(const QString& z, TokenPtr& token, const TokenPtr& prevToken, bool tolerant)
+{
+ if (prevToken && prevToken->lemonType == TK3_RP) {
+ TokenPtr firstAfter = TokenPtr::create();
+ lexerWindowSpecificGetToken(z, firstAfter, token, tolerant);
+ if (firstAfter->lemonType == TK3_LP)
+ return; // remains FILTER keyword
}
+ token->lemonType = TK3_ID;
+ token->type = Token::OTHER;
+}
+
+int lexerGetToken(const QString& z, TokenPtr& token, const TokenPtr& prevToken, int sqliteVersion, bool tolerant)
+{
+ UNUSED(sqliteVersion);
+ int lgt = lexerGetToken(z, token, tolerant);
+ if (token->lemonType == TK3_WINDOW)
+ lexerHandleWindowKeyword(z.mid(lgt), token, prevToken, tolerant);
+ else if (token->lemonType == TK3_OVER)
+ lexerHandleOverKeyword(z.mid(lgt), token, prevToken, tolerant);
+ else if (token->lemonType == TK3_FILTER)
+ lexerHandleFilterKeyword(z.mid(lgt), token, prevToken, tolerant);
+
+ return lgt;
+}
+
+int lexerGetToken(const QString& z, TokenPtr& token, bool tolerant)
+{
if (tolerant && !token.dynamicCast<TolerantToken>())
{
qCritical() << "lexerGetToken() called with tolerant=true, but not a TolerantToken entity!";
@@ -54,6 +167,12 @@ int lexerGetToken(const QString& z, TokenPtr token, int sqliteVersion, bool tole
token->type = Token::COMMENT;
return i;
}
+ else if (charAt(z, 1) == '>')
+ {
+ token->lemonType = TK3_PTR;
+ token->type = Token::OPERATOR;
+ return (charAt(z, 2) == '>') ? 3 : 2;
+ }
token->lemonType = TK3_MINUS;
token->type = Token::OPERATOR;
return 1;
@@ -453,7 +572,7 @@ int lexerGetToken(const QString& z, TokenPtr token, int sqliteVersion, bool tole
for (i = 1; isIdChar(charAt(z, i)); i++) {}
- token->lemonType = getKeywordId3(z.mid(0, i));
+ token->lemonType = getKeywordId3(z.mid(0, i));
if (token->lemonType == TK3_ID)
token->type = Token::OTHER;
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/lexer_low_lev.h b/SQLiteStudio3/coreSQLiteStudio/parser/lexer_low_lev.h
index d642177..4f2cc35 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/lexer_low_lev.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/lexer_low_lev.h
@@ -11,6 +11,7 @@
* @brief Low level tokenizer function used by the Lexer.
* @param z Query to tokenize.
* @param[out] token Token container to fill with values. Can be also a TolerantToken.
+ * @param prevToken Previous token returned from this function (if this is a subsequent call), or empty pointer othwewise. It's required for a contextual logic.
* @param sqliteVersion SQLite version, for which the tokenizer should work (currently only 3).
* Version affects the list of recognized keywords, a BLOB expression and an object name wrapper with the grave accent character (`).
* @param tolerant If true, then all multi-line and unfinished tokens (strings, comments)
@@ -23,6 +24,6 @@
* Most of the method code was taken from SQLite tokenizer code. It is modified to support both SQLite 3 gramma
* and other SQLiteStudio specific features.
*/
-int lexerGetToken(const QString& z, TokenPtr token, int sqliteVersion, bool tolerant = false);
+int lexerGetToken(const QString& z, TokenPtr& token, const TokenPtr& prevToken, int sqliteVersion, bool tolerant = false);
#endif // LEXER_LOW_LEV_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/parser.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/parser.cpp
index b54c786..b80d45a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/parser.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/parser.cpp
@@ -214,7 +214,7 @@ void Parser::expectedTokenLookup(void* pParser)
Token::CTX_ALIAS, Token::CTX_TABLE_NEW, Token::CTX_INDEX_NEW, Token::CTX_TRIGGER_NEW,
Token::CTX_VIEW_NEW, Token::CTX_COLUMN_NEW, Token::CTX_TRANSACTION,
Token::CTX_CONSTRAINT, Token::CTX_COLUMN_TYPE, Token::CTX_OLD_KW, Token::CTX_NEW_KW,
- Token::CTX_ROWID_KW, Token::INVALID
+ Token::CTX_ROWID_KW, Token::CTX_STRICT_KW, Token::INVALID
});
for (TokenPtr token : tokenSet)
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.cpp
index 8b14f07..b8534cc 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.cpp
@@ -75,3 +75,13 @@ bool ParserTermOrLiteral::isLiteral() const
{
return !nameMode;
}
+
+ParserStubCreateTableOption* parserStubFindCreateTableOption(const QList<ParserStubCreateTableOption*>& options, ParserStubCreateTableOption::Type type)
+{
+ return findFirst<ParserStubCreateTableOption>(options, [type](auto opt) -> bool {return opt->type == type;});
+}
+
+ParserStubCreateTableOption::ParserStubCreateTableOption(Type type) :
+ type(type)
+{
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.h b/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.h
index 5160b10..ec71f8b 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.h
@@ -68,6 +68,21 @@ struct ParserStubTransDetails
SqliteConflictAlgo onConflict = SqliteConflictAlgo::null;
};
+struct ParserStubCreateTableOption
+{
+ enum Type
+ {
+ WITHOUT_ROWID,
+ STRICT
+ };
+
+ ParserStubCreateTableOption(Type type);
+
+ Type type;
+};
+
+ParserStubCreateTableOption* parserStubFindCreateTableOption(const QList<ParserStubCreateTableOption*>& options, ParserStubCreateTableOption::Type type);
+
typedef QList<SqliteCreateTable::Column*> ParserCreateTableColumnList;
typedef QList<SqliteCreateTable::Constraint*> ParserCreateTableConstraintList;
typedef QList<SqliteCreateTable::Column::Constraint*> ParserCreateTableColumnConstraintList;
@@ -83,6 +98,7 @@ typedef QList<ParserSetValue> ParserSetValueList;
typedef QList<SqliteIndexedColumn*> ParserIndexedColumnList;
typedef QList<ParserExprList> ParserExprNestedList;
typedef QList<SqliteWindowDefinition*> ParserWindowDefList;
+typedef QList<ParserStubCreateTableOption*> ParserCreateTableOptionList;
/**
* @brief Stores parameters for defferable foreign keys.
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/parsercontext.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/parsercontext.cpp
index a9eae82..a275882 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/parsercontext.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/parsercontext.cpp
@@ -167,9 +167,9 @@ const QList<ParserError *> &ParserContext::getErrors()
QVariant *ParserContext::handleNumberToken(const QString &tokenValue)
{
recentNumberIsCandidateForMaxNegative = false;
+ bool ok;
if (tokenValue.startsWith("0x", Qt::CaseInsensitive))
{
- bool ok;
qint64 i64 = tokenValue.toLongLong(&ok, 16);
if (!ok)
{
@@ -183,10 +183,12 @@ QVariant *ParserContext::handleNumberToken(const QString &tokenValue)
recentNumberIsCandidateForMaxNegative = true;
return new QVariant(static_cast<qint64>(0L));
}
- else
- {
- return new QVariant(QVariant(tokenValue).toLongLong());
- }
+
+ QVariant varLong = QVariant(tokenValue).toLongLong(&ok);
+ if (!ok)
+ varLong = QVariant(tokenValue).toDouble();
+
+ return new QVariant(varLong);
}
bool ParserContext::isCandidateForMaxNegativeNumber() const
@@ -196,7 +198,7 @@ bool ParserContext::isCandidateForMaxNegativeNumber() const
void ParserContext::cleanUp()
{
- for (ParserError* err : errors)
+ for (ParserError*& err : errors)
delete err;
parsedQueries.clear();
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
index c980096..7be06fb 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
@@ -22,7 +22,6 @@
#include "parser/ast/sqliteattach.h"
#include "parser/ast/sqlitebegintrans.h"
#include "parser/ast/sqlitecommittrans.h"
-#include "parser/ast/sqlitecopy.h"
#include "parser/ast/sqlitecreateindex.h"
#include "parser/ast/sqlitecreatetable.h"
#include "parser/ast/sqlitecreatetrigger.h"
@@ -62,6 +61,7 @@
#define assert(X) Q_ASSERT(X)
#define UNUSED_PARAMETER(X) (void)(X)
#define DONT_INHERIT_TOKENS(X) noTokenInheritanceFields << X
+
/* Next is all token values, in a form suitable for use by makeheaders.
** This section will be null unless lemon is run with the -m switch.
*/
@@ -112,77 +112,80 @@
** defined, then do no error processing.
*/
#define YYCODETYPE unsigned short int
-#define YYNOCODE 321
+#define YYNOCODE 328
#define YYACTIONTYPE unsigned short int
-#define YYWILDCARD 78
+#define YYWILDCARD 80
#define sqlite3_parseTOKENTYPE Token*
typedef union {
int yyinit;
sqlite3_parseTOKENTYPE yy0;
- SqliteWith* yy1;
- SqliteLimit* yy4;
- ParserDeferSubClause* yy9;
- SqliteSelect::Core::JoinSource* yy31;
- SqliteExpr::LikeOp* yy40;
- SqliteWindowDefinition::Window::Frame* yy41;
- ParserCreateTableColumnList* yy42;
- ParserCreateTableColumnConstraintList* yy51;
- ParserResultColumnList* yy53;
- SqliteColumnType* yy57;
- SqliteWindowDefinition::Window::Frame::Exclude* yy63;
- ParserExprList* yy71;
- SqliteCreateTrigger::Scope* yy83;
- ParserStubTransDetails* yy84;
- ParserStubExplain* yy91;
- SqliteForeignKey::Condition::Reaction* yy104;
- ParserQueryList* yy110;
- SqliteCreateTable::Column* yy147;
- SqliteCreateTrigger::Event* yy151;
- ParserStubAlias* yy200;
- ParserSetValueList* yy201;
- SqliteSelect::Core::JoinOp* yy221;
- ParserIndexedColumnList* yy223;
- QVariant* yy229;
- SqliteCreateTable::Constraint* yy246;
- SqliteFilterOver* yy247;
- SqliteFilterOver::Over* yy248;
- SqliteWindowDefinition* yy266;
- SqliteIndexedColumn* yy268;
- SqliteSelect::Core::JoinConstraint* yy295;
- ParserWindowDefList* yy299;
- SqliteInitially* yy312;
- SqliteSelect* yy313;
+ SqliteCreateTable::Column* yy3;
+ SqliteFilterOver::Over* yy11;
+ SqliteWith::CommonTableExpression::AsMode* yy21;
+ ParserResultColumnList* yy27;
+ SqliteSortOrder* yy35;
+ SqliteFilterOver::Filter* yy39;
+ SqliteQuery* yy41;
+ ParserDeferSubClause* yy53;
+ SqliteForeignKey::Condition::Reaction* yy106;
+ ParserOtherSourceList* yy107;
+ SqliteIndexedColumn* yy110;
+ ParserCreateTableConstraintList* yy115;
+ SqliteCreateTrigger::Time* yy120;
+ int* yy130;
+ SqliteConflictAlgo* yy136;
+ SqliteSelect::CompoundOperator* yy142;
+ SqliteWindowDefinition::Window::Frame::RangeOrRows* yy143;
+ SqliteWith::CommonTableExpression* yy146;
+ SqliteWindowDefinition::Window::Frame* yy149;
+ ParserFkConditionList* yy156;
+ SqliteWith* yy161;
+ SqliteWindowDefinition::Window* yy162;
+ ParserCteList* yy164;
+ QStringList* yy173;
+ SqliteFilterOver* yy181;
+ SqliteExpr* yy186;
+ SqliteForeignKey::Condition* yy205;
+ SqliteSelect::Core::JoinConstraint* yy215;
+ bool* yy225;
+ ParserOrderByList* yy226;
+ SqliteWindowDefinition::Window::Frame::Exclude* yy237;
+ ParserQueryList* yy240;
+ SqliteCreateTrigger::Event* yy259;
+ SqliteColumnType* yy267;
+ SqliteExpr::LikeOp* yy274;
+ SqliteWindowDefinition::Window::Frame::Bound* yy285;
+ SqliteSelect* yy297;
+ ParserIndexedBy* yy300;
+ ParserStubInsertOrReplace* yy308;
+ SqliteNulls* yy315;
QString* yy319;
- SqliteWindowDefinition::Window* yy334;
- SqliteQuery* yy363;
- SqliteSelect::CompoundOperator* yy382;
- int* yy386;
- SqliteFilterOver::Filter* yy397;
- SqliteUpsert* yy400;
- ParserOrderByList* yy403;
- SqliteConflictAlgo* yy418;
- SqliteWindowDefinition::Window::Frame::RangeOrRows* yy419;
- ParserFullName* yy440;
- SqliteSelect::Core::SingleSource* yy441;
- SqliteWindowDefinition::Window::Frame::Bound* yy442;
- SqliteWith::CommonTableExpression* yy446;
- ParserOtherSourceList* yy451;
- SqliteCreateTable::Column::Constraint* yy464;
- SqliteSelect::Core* yy470;
- ParserExprNestedList* yy486;
- ParserCreateTableConstraintList* yy493;
- ParserStubInsertOrReplace* yy504;
- SqliteForeignKey::Condition* yy507;
- SqliteExpr* yy512;
- SqliteCreateTrigger::Time* yy532;
- SqliteSortOrder* yy549;
- QStringList* yy575;
- SqliteNulls* yy579;
- ParserFkConditionList* yy584;
- ParserTermOrLiteral* yy590;
- ParserIndexedBy* yy592;
- ParserCteList* yy593;
- bool* yy611;
+ ParserCreateTableColumnConstraintList* yy323;
+ SqliteUpsert* yy332;
+ SqliteLimit* yy360;
+ SqliteSelect::Core* yy378;
+ ParserTermOrLiteral* yy380;
+ ParserCreateTableColumnList* yy390;
+ QVariant* yy393;
+ ParserFullName* yy396;
+ SqliteCreateTable::Constraint* yy400;
+ SqliteCreateTable::Column::Constraint* yy448;
+ SqliteSelect::Core::JoinOp* yy449;
+ ParserCreateTableOptionList* yy455;
+ SqliteCreateTrigger::Scope* yy456;
+ ParserStubExplain* yy499;
+ ParserStubTransDetails* yy512;
+ ParserExprNestedList* yy522;
+ ParserWindowDefList* yy525;
+ SqliteSelect::Core::JoinSource* yy553;
+ SqliteWindowDefinition* yy562;
+ SqliteSelect::Core::SingleSource* yy595;
+ SqliteInitially* yy612;
+ ParserExprList* yy615;
+ ParserSetValueList* yy621;
+ ParserIndexedColumnList* yy627;
+ ParserStubAlias* yy628;
+ ParserStubCreateTableOption* yy629;
} YYMINORTYPE;
#ifndef YYSTACKDEPTH
#define YYSTACKDEPTH 100
@@ -191,8 +194,8 @@ typedef union {
#define sqlite3_parseARG_PDECL ,ParserContext* parserContext
#define sqlite3_parseARG_FETCH ParserContext* parserContext = yypParser->parserContext
#define sqlite3_parseARG_STORE yypParser->parserContext = parserContext
-#define YYNSTATE 844
-#define YYNRULE 472
+#define YYNSTATE 870
+#define YYNRULE 487
#define YYFALLBACK 1
#define YY_NO_ACTION (YYNSTATE+YYNRULE+2)
#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1)
@@ -264,806 +267,778 @@ static const YYMINORTYPE yyzerominor = { 0 };
** shifting non-terminals after a reduce.
** yy_default[] Default action for each state.
*/
-#define YY_ACTTAB_COUNT (3037)
+#define YY_ACTTAB_COUNT (2866)
static const YYACTIONTYPE yy_action[] = {
- /* 0 */ 510, 625, 284, 836, 655, 288, 841, 64, 65, 509,
- /* 10 */ 339, 626, 501, 795, 795, 62, 62, 63, 63, 63,
- /* 20 */ 63, 351, 61, 61, 61, 61, 60, 60, 59, 59,
- /* 30 */ 59, 58, 253, 485, 1085, 61, 61, 61, 61, 60,
- /* 40 */ 60, 59, 59, 59, 58, 253, 835, 290, 794, 1085,
- /* 50 */ 71, 506, 63, 63, 63, 63, 40, 61, 61, 61,
- /* 60 */ 61, 60, 60, 59, 59, 59, 58, 253, 805, 635,
- /* 70 */ 836, 347, 785, 836, 592, 70, 452, 54, 817, 88,
- /* 80 */ 338, 835, 835, 59, 59, 59, 58, 253, 1085, 836,
- /* 90 */ 806, 223, 836, 835, 51, 52, 693, 1085, 635, 508,
- /* 100 */ 325, 53, 1012, 348, 261, 415, 622, 621, 88, 2,
- /* 110 */ 1012, 835, 681, 117, 793, 286, 498, 1012, 324, 807,
- /* 120 */ 833, 634, 834, 833, 510, 810, 157, 466, 453, 439,
- /* 130 */ 436, 435, 793, 809, 808, 807, 501, 1012, 563, 682,
- /* 140 */ 682, 611, 486, 746, 1078, 327, 677, 434, 366, 575,
- /* 150 */ 1012, 254, 1012, 1012, 396, 403, 1012, 296, 425, 303,
- /* 160 */ 749, 1012, 1012, 1012, 1012, 1012, 793, 274, 456, 793,
- /* 170 */ 748, 783, 12, 356, 565, 506, 273, 586, 77, 69,
- /* 180 */ 39, 138, 69, 1012, 701, 440, 22, 701, 768, 834,
- /* 190 */ 833, 805, 834, 833, 14, 836, 785, 111, 1, 489,
- /* 200 */ 798, 54, 702, 804, 835, 702, 587, 589, 834, 833,
- /* 210 */ 588, 834, 833, 806, 223, 570, 659, 701, 51, 52,
- /* 220 */ 701, 137, 508, 649, 706, 53, 1078, 836, 1029, 1029,
- /* 230 */ 21, 412, 386, 2, 1078, 172, 117, 328, 793, 705,
- /* 240 */ 498, 1078, 157, 807, 833, 439, 436, 435, 510, 810,
- /* 250 */ 392, 75, 443, 188, 421, 250, 793, 809, 808, 807,
- /* 260 */ 501, 1078, 784, 434, 1178, 275, 935, 835, 648, 56,
- /* 270 */ 455, 366, 687, 686, 1078, 130, 1078, 1078, 174, 121,
- /* 280 */ 326, 445, 321, 444, 159, 1078, 1078, 1078, 1078, 811,
- /* 290 */ 793, 700, 812, 793, 162, 783, 12, 245, 319, 506,
- /* 300 */ 60, 60, 59, 59, 59, 58, 253, 1078, 840, 526,
- /* 310 */ 836, 650, 651, 513, 834, 833, 563, 805, 836, 798,
- /* 320 */ 785, 717, 805, 23, 611, 54, 527, 526, 158, 257,
- /* 330 */ 835, 797, 699, 695, 835, 835, 242, 241, 240, 806,
- /* 340 */ 223, 523, 51, 52, 806, 208, 834, 833, 508, 53,
- /* 350 */ 1063, 356, 564, 508, 384, 526, 171, 2, 1063, 523,
- /* 360 */ 548, 77, 793, 786, 498, 1063, 431, 807, 833, 798,
- /* 370 */ 578, 329, 836, 810, 723, 579, 466, 451, 729, 465,
- /* 380 */ 793, 809, 808, 807, 835, 1063, 789, 523, 786, 547,
- /* 390 */ 546, 388, 788, 545, 502, 475, 497, 366, 1063, 729,
- /* 400 */ 1063, 1063, 754, 407, 798, 729, 692, 1160, 1160, 1063,
- /* 410 */ 329, 1063, 1063, 76, 793, 635, 117, 793, 516, 783,
- /* 420 */ 12, 786, 787, 835, 519, 88, 370, 108, 835, 834,
- /* 430 */ 833, 1063, 319, 117, 464, 361, 479, 834, 833, 731,
- /* 440 */ 836, 1163, 792, 836, 64, 65, 509, 339, 1160, 1160,
- /* 450 */ 795, 795, 62, 62, 63, 63, 63, 63, 781, 61,
- /* 460 */ 61, 61, 61, 60, 60, 59, 59, 59, 58, 253,
- /* 470 */ 836, 807, 729, 722, 361, 55, 792, 810, 58, 253,
- /* 480 */ 167, 73, 777, 776, 604, 809, 808, 807, 798, 1160,
- /* 490 */ 1160, 834, 833, 729, 64, 65, 509, 339, 66, 729,
- /* 500 */ 795, 795, 62, 62, 63, 63, 63, 63, 474, 61,
- /* 510 */ 61, 61, 61, 60, 60, 59, 59, 59, 58, 253,
- /* 520 */ 836, 770, 836, 798, 712, 771, 64, 65, 509, 339,
- /* 530 */ 1160, 1160, 795, 795, 62, 62, 63, 63, 63, 63,
- /* 540 */ 765, 61, 61, 61, 61, 60, 60, 59, 59, 59,
- /* 550 */ 58, 253, 764, 729, 613, 836, 562, 562, 44, 834,
- /* 560 */ 833, 191, 834, 833, 566, 805, 246, 685, 45, 454,
- /* 570 */ 482, 365, 1160, 1160, 729, 772, 636, 252, 835, 662,
- /* 580 */ 729, 1317, 184, 514, 3, 538, 613, 806, 208, 834,
- /* 590 */ 833, 765, 1163, 313, 1163, 661, 508, 393, 835, 357,
- /* 600 */ 1269, 742, 792, 764, 539, 540, 835, 1269, 130, 64,
- /* 610 */ 65, 509, 339, 1160, 1160, 795, 795, 62, 62, 63,
- /* 620 */ 63, 63, 63, 742, 61, 61, 61, 61, 60, 60,
- /* 630 */ 59, 59, 59, 58, 253, 818, 792, 769, 158, 834,
- /* 640 */ 833, 834, 833, 113, 566, 754, 836, 76, 64, 65,
- /* 650 */ 509, 339, 1160, 1160, 795, 795, 62, 62, 63, 63,
- /* 660 */ 63, 63, 488, 61, 61, 61, 61, 60, 60, 59,
- /* 670 */ 59, 59, 58, 253, 834, 833, 541, 775, 836, 357,
- /* 680 */ 1268, 330, 734, 473, 87, 814, 836, 1268, 836, 64,
- /* 690 */ 65, 509, 339, 1160, 1160, 795, 795, 62, 62, 63,
- /* 700 */ 63, 63, 63, 447, 61, 61, 61, 61, 60, 60,
- /* 710 */ 59, 59, 59, 58, 253, 63, 63, 63, 63, 56,
- /* 720 */ 61, 61, 61, 61, 60, 60, 59, 59, 59, 58,
- /* 730 */ 253, 494, 64, 65, 509, 339, 370, 671, 795, 795,
- /* 740 */ 62, 62, 63, 63, 63, 63, 813, 61, 61, 61,
- /* 750 */ 61, 60, 60, 59, 59, 59, 58, 253, 811, 1086,
- /* 760 */ 571, 812, 190, 488, 309, 834, 833, 312, 591, 64,
- /* 770 */ 65, 509, 339, 469, 1086, 795, 795, 62, 62, 63,
- /* 780 */ 63, 63, 63, 836, 61, 61, 61, 61, 60, 60,
- /* 790 */ 59, 59, 59, 58, 253, 107, 1087, 834, 833, 836,
- /* 800 */ 758, 798, 1164, 836, 485, 834, 833, 834, 833, 349,
- /* 810 */ 802, 1087, 755, 1086, 78, 836, 468, 835, 64, 65,
- /* 820 */ 509, 339, 1086, 571, 795, 795, 62, 62, 63, 63,
- /* 830 */ 63, 63, 510, 61, 61, 61, 61, 60, 60, 59,
- /* 840 */ 59, 59, 58, 253, 501, 1088, 271, 270, 1214, 836,
- /* 850 */ 1087, 78, 603, 493, 791, 64, 65, 509, 339, 1087,
- /* 860 */ 1088, 795, 795, 62, 62, 63, 63, 63, 63, 538,
- /* 870 */ 61, 61, 61, 61, 60, 60, 59, 59, 59, 58,
- /* 880 */ 253, 798, 835, 506, 1167, 777, 776, 20, 539, 398,
- /* 890 */ 117, 675, 69, 1022, 580, 581, 409, 701, 337, 1088,
- /* 900 */ 78, 753, 834, 833, 785, 391, 780, 779, 1088, 54,
- /* 910 */ 8, 835, 167, 576, 745, 702, 805, 620, 834, 833,
- /* 920 */ 798, 670, 834, 833, 327, 677, 51, 52, 44, 835,
- /* 930 */ 701, 1277, 1277, 53, 834, 833, 390, 112, 806, 223,
- /* 940 */ 1229, 2, 1170, 236, 235, 484, 793, 508, 498, 836,
- /* 950 */ 282, 807, 833, 1164, 117, 1164, 712, 810, 68, 136,
- /* 960 */ 399, 775, 782, 835, 793, 809, 808, 807, 807, 85,
- /* 970 */ 714, 836, 835, 504, 810, 466, 467, 42, 576, 775,
- /* 980 */ 1277, 1277, 809, 808, 807, 816, 759, 772, 499, 252,
- /* 990 */ 86, 19, 767, 643, 442, 832, 366, 470, 793, 111,
- /* 1000 */ 798, 793, 830, 783, 12, 27, 64, 65, 509, 339,
- /* 1010 */ 836, 831, 795, 795, 62, 62, 63, 63, 63, 63,
- /* 1020 */ 836, 61, 61, 61, 61, 60, 60, 59, 59, 59,
- /* 1030 */ 58, 253, 50, 1229, 48, 64, 65, 509, 339, 74,
- /* 1040 */ 544, 795, 795, 62, 62, 63, 63, 63, 63, 510,
- /* 1050 */ 61, 61, 61, 61, 60, 60, 59, 59, 59, 58,
- /* 1060 */ 253, 501, 1243, 532, 477, 136, 836, 329, 834, 833,
- /* 1070 */ 483, 724, 4, 83, 836, 500, 780, 779, 835, 341,
- /* 1080 */ 835, 335, 611, 798, 617, 617, 64, 65, 509, 339,
- /* 1090 */ 834, 833, 795, 795, 62, 62, 63, 63, 63, 63,
- /* 1100 */ 506, 61, 61, 61, 61, 60, 60, 59, 59, 59,
- /* 1110 */ 58, 253, 480, 476, 798, 668, 720, 667, 586, 77,
- /* 1120 */ 739, 785, 114, 168, 608, 1172, 54, 532, 6, 834,
- /* 1130 */ 833, 265, 310, 756, 836, 744, 311, 481, 615, 834,
- /* 1140 */ 833, 78, 608, 51, 52, 835, 1172, 587, 589, 775,
- /* 1150 */ 53, 588, 1172, 374, 238, 510, 738, 805, 2, 736,
- /* 1160 */ 271, 270, 836, 793, 689, 498, 836, 501, 807, 833,
- /* 1170 */ 835, 56, 413, 247, 810, 117, 450, 724, 4, 806,
- /* 1180 */ 223, 793, 809, 808, 807, 834, 833, 836, 508, 5,
- /* 1190 */ 535, 836, 531, 834, 833, 717, 1172, 414, 836, 777,
- /* 1200 */ 776, 729, 798, 537, 1172, 536, 506, 844, 835, 733,
- /* 1210 */ 416, 1172, 805, 371, 761, 793, 466, 457, 793, 730,
- /* 1220 */ 783, 12, 729, 78, 732, 835, 338, 785, 729, 805,
- /* 1230 */ 18, 1172, 54, 798, 806, 118, 395, 366, 597, 835,
- /* 1240 */ 718, 786, 835, 508, 1172, 641, 1172, 1172, 549, 51,
- /* 1250 */ 52, 806, 118, 834, 833, 1172, 53, 1172, 1172, 737,
- /* 1260 */ 508, 317, 17, 305, 2, 381, 786, 259, 111, 793,
- /* 1270 */ 837, 498, 666, 713, 807, 833, 835, 1172, 843, 3,
- /* 1280 */ 810, 834, 833, 487, 432, 834, 833, 793, 809, 808,
- /* 1290 */ 807, 111, 754, 836, 529, 665, 713, 836, 406, 786,
- /* 1300 */ 170, 602, 1165, 1277, 1277, 594, 834, 833, 110, 754,
- /* 1310 */ 834, 833, 338, 842, 549, 640, 639, 834, 833, 602,
- /* 1320 */ 707, 793, 529, 594, 793, 835, 783, 12, 631, 64,
- /* 1330 */ 65, 509, 339, 492, 757, 795, 795, 62, 62, 63,
- /* 1340 */ 63, 63, 63, 704, 61, 61, 61, 61, 60, 60,
- /* 1350 */ 59, 59, 59, 58, 253, 64, 65, 509, 339, 298,
- /* 1360 */ 16, 795, 795, 62, 62, 63, 63, 63, 63, 11,
- /* 1370 */ 61, 61, 61, 61, 60, 60, 59, 59, 59, 58,
- /* 1380 */ 253, 395, 64, 65, 509, 339, 743, 4, 795, 795,
- /* 1390 */ 62, 62, 63, 63, 63, 63, 117, 61, 61, 61,
- /* 1400 */ 61, 60, 60, 59, 59, 59, 58, 253, 422, 728,
- /* 1410 */ 4, 559, 834, 833, 166, 168, 834, 833, 56, 496,
- /* 1420 */ 757, 836, 727, 4, 64, 65, 509, 339, 49, 559,
- /* 1430 */ 795, 795, 62, 62, 63, 63, 63, 63, 165, 61,
- /* 1440 */ 61, 61, 61, 60, 60, 59, 59, 59, 58, 253,
- /* 1450 */ 607, 836, 667, 709, 64, 65, 509, 339, 842, 676,
- /* 1460 */ 795, 795, 62, 62, 63, 63, 63, 63, 708, 61,
- /* 1470 */ 61, 61, 61, 60, 60, 59, 59, 59, 58, 253,
- /* 1480 */ 164, 46, 725, 4, 64, 65, 509, 339, 163, 674,
- /* 1490 */ 795, 795, 62, 62, 63, 63, 63, 63, 696, 61,
- /* 1500 */ 61, 61, 61, 60, 60, 59, 59, 59, 58, 253,
- /* 1510 */ 246, 685, 836, 454, 64, 65, 509, 339, 124, 657,
- /* 1520 */ 795, 795, 62, 62, 63, 63, 63, 63, 460, 61,
- /* 1530 */ 61, 61, 61, 60, 60, 59, 59, 59, 58, 253,
- /* 1540 */ 834, 833, 419, 691, 64, 65, 509, 339, 458, 189,
- /* 1550 */ 795, 795, 62, 62, 63, 63, 63, 63, 7, 61,
- /* 1560 */ 61, 61, 61, 60, 60, 59, 59, 59, 58, 253,
- /* 1570 */ 834, 833, 726, 4, 64, 65, 509, 339, 690, 316,
- /* 1580 */ 795, 795, 62, 62, 63, 63, 63, 63, 15, 61,
- /* 1590 */ 61, 61, 61, 60, 60, 59, 59, 59, 58, 253,
- /* 1600 */ 612, 1193, 64, 65, 509, 339, 274, 456, 795, 795,
- /* 1610 */ 62, 62, 63, 63, 63, 63, 825, 61, 61, 61,
- /* 1620 */ 61, 60, 60, 59, 59, 59, 58, 253, 574, 688,
- /* 1630 */ 836, 834, 833, 64, 65, 509, 339, 836, 28, 795,
- /* 1640 */ 795, 62, 62, 63, 63, 63, 63, 684, 61, 61,
- /* 1650 */ 61, 61, 60, 60, 59, 59, 59, 58, 253, 836,
- /* 1660 */ 1244, 64, 65, 509, 339, 683, 836, 795, 795, 62,
- /* 1670 */ 62, 63, 63, 63, 63, 510, 61, 61, 61, 61,
- /* 1680 */ 60, 60, 59, 59, 59, 58, 253, 501, 1242, 420,
- /* 1690 */ 477, 64, 65, 509, 339, 116, 168, 795, 795, 62,
- /* 1700 */ 62, 63, 63, 63, 63, 798, 61, 61, 61, 61,
- /* 1710 */ 60, 60, 59, 59, 59, 58, 253, 123, 600, 280,
- /* 1720 */ 302, 255, 679, 805, 258, 168, 506, 421, 297, 401,
- /* 1730 */ 337, 279, 115, 835, 353, 44, 835, 448, 337, 476,
- /* 1740 */ 835, 823, 835, 835, 836, 806, 208, 785, 836, 834,
- /* 1750 */ 833, 835, 54, 37, 508, 25, 834, 833, 293, 133,
- /* 1760 */ 300, 127, 525, 821, 299, 44, 350, 836, 260, 51,
- /* 1770 */ 52, 352, 178, 835, 263, 805, 53, 104, 834, 833,
- /* 1780 */ 78, 510, 122, 441, 2, 834, 833, 333, 835, 793,
- /* 1790 */ 525, 498, 805, 501, 807, 833, 477, 806, 223, 805,
- /* 1800 */ 810, 713, 256, 754, 568, 835, 508, 793, 809, 808,
- /* 1810 */ 807, 358, 835, 556, 806, 223, 167, 354, 759, 176,
- /* 1820 */ 956, 806, 118, 508, 798, 78, 766, 623, 647, 836,
- /* 1830 */ 508, 36, 506, 713, 267, 836, 638, 331, 438, 717,
- /* 1840 */ 731, 793, 82, 247, 793, 478, 783, 12, 703, 836,
- /* 1850 */ 318, 266, 835, 785, 433, 366, 836, 367, 54, 584,
- /* 1860 */ 712, 836, 332, 834, 833, 81, 634, 834, 833, 24,
- /* 1870 */ 169, 838, 366, 160, 449, 51, 52, 80, 826, 754,
- /* 1880 */ 264, 517, 53, 824, 835, 289, 834, 833, 156, 561,
- /* 1890 */ 2, 835, 324, 397, 717, 793, 835, 498, 835, 517,
- /* 1900 */ 807, 833, 698, 616, 10, 510, 810, 835, 429, 380,
- /* 1910 */ 187, 152, 822, 793, 809, 808, 807, 501, 247, 101,
- /* 1920 */ 99, 64, 38, 509, 339, 835, 35, 795, 795, 62,
- /* 1930 */ 62, 63, 63, 63, 63, 836, 61, 61, 61, 61,
- /* 1940 */ 60, 60, 59, 59, 59, 58, 253, 793, 834, 833,
- /* 1950 */ 793, 713, 783, 12, 834, 833, 506, 34, 33, 836,
- /* 1960 */ 819, 805, 32, 555, 379, 98, 805, 644, 834, 833,
- /* 1970 */ 552, 836, 805, 835, 835, 834, 833, 785, 717, 835,
- /* 1980 */ 834, 833, 54, 806, 223, 835, 378, 697, 806, 223,
- /* 1990 */ 836, 835, 508, 376, 806, 118, 555, 508, 694, 51,
- /* 2000 */ 52, 97, 653, 508, 836, 805, 53, 595, 596, 590,
- /* 2010 */ 585, 510, 410, 337, 2, 656, 552, 247, 835, 793,
- /* 2020 */ 387, 498, 805, 501, 807, 833, 835, 806, 223, 836,
- /* 2030 */ 810, 583, 105, 168, 805, 835, 508, 793, 809, 808,
- /* 2040 */ 807, 366, 577, 377, 806, 118, 490, 835, 408, 336,
- /* 2050 */ 147, 383, 754, 508, 834, 833, 806, 216, 295, 13,
- /* 2060 */ 815, 292, 506, 181, 471, 508, 192, 624, 558, 92,
- /* 2070 */ 534, 793, 619, 835, 793, 533, 783, 12, 834, 833,
- /* 2080 */ 394, 337, 287, 785, 836, 366, 557, 803, 54, 139,
- /* 2090 */ 834, 833, 515, 375, 835, 835, 90, 247, 790, 262,
- /* 2100 */ 835, 759, 754, 582, 243, 51, 52, 109, 836, 834,
- /* 2110 */ 833, 835, 53, 503, 754, 239, 369, 510, 368, 382,
- /* 2120 */ 2, 315, 610, 834, 833, 793, 835, 498, 805, 501,
- /* 2130 */ 807, 833, 839, 179, 805, 180, 810, 829, 827, 805,
- /* 2140 */ 828, 835, 719, 793, 809, 808, 807, 835, 834, 833,
- /* 2150 */ 806, 194, 835, 836, 177, 835, 806, 204, 836, 508,
- /* 2160 */ 512, 806, 226, 285, 554, 508, 430, 553, 506, 759,
- /* 2170 */ 508, 511, 715, 836, 805, 614, 835, 793, 836, 805,
- /* 2180 */ 793, 72, 783, 12, 836, 835, 103, 835, 836, 785,
- /* 2190 */ 175, 820, 835, 836, 54, 801, 806, 224, 800, 173,
- /* 2200 */ 710, 806, 232, 834, 833, 508, 274, 836, 754, 836,
- /* 2210 */ 508, 51, 52, 835, 754, 343, 606, 23, 53, 754,
- /* 2220 */ 43, 569, 472, 510, 342, 805, 2, 834, 833, 67,
- /* 2230 */ 836, 793, 186, 498, 253, 501, 807, 833, 835, 799,
- /* 2240 */ 805, 836, 810, 752, 495, 805, 84, 806, 231, 793,
- /* 2250 */ 809, 808, 807, 835, 754, 251, 508, 283, 835, 754,
- /* 2260 */ 269, 550, 806, 233, 268, 47, 334, 806, 237, 57,
- /* 2270 */ 835, 508, 834, 833, 506, 751, 508, 834, 833, 488,
- /* 2280 */ 750, 161, 836, 793, 747, 601, 793, 389, 783, 12,
- /* 2290 */ 1168, 741, 834, 833, 835, 785, 244, 834, 833, 134,
- /* 2300 */ 54, 520, 463, 834, 833, 754, 756, 834, 833, 678,
- /* 2310 */ 522, 735, 834, 833, 135, 835, 572, 51, 52, 459,
- /* 2320 */ 754, 320, 835, 654, 53, 754, 834, 833, 834, 833,
- /* 2330 */ 456, 805, 2, 1170, 835, 680, 835, 793, 551, 498,
- /* 2340 */ 160, 560, 807, 833, 835, 663, 669, 510, 810, 834,
- /* 2350 */ 833, 542, 664, 806, 272, 793, 809, 808, 807, 501,
- /* 2360 */ 834, 833, 508, 446, 65, 509, 339, 385, 322, 795,
- /* 2370 */ 795, 62, 62, 63, 63, 63, 63, 805, 61, 61,
- /* 2380 */ 61, 61, 60, 60, 59, 59, 59, 58, 253, 793,
- /* 2390 */ 835, 660, 793, 276, 783, 12, 760, 372, 506, 806,
- /* 2400 */ 340, 834, 833, 632, 659, 805, 835, 716, 508, 314,
- /* 2410 */ 307, 754, 805, 404, 658, 637, 835, 618, 835, 785,
- /* 2420 */ 630, 360, 835, 835, 54, 835, 835, 806, 230, 155,
- /* 2430 */ 629, 521, 628, 346, 806, 203, 508, 805, 507, 627,
- /* 2440 */ 154, 51, 52, 508, 835, 308, 835, 359, 53, 30,
- /* 2450 */ 835, 835, 102, 510, 428, 132, 2, 754, 835, 806,
- /* 2460 */ 221, 793, 423, 498, 153, 501, 807, 833, 508, 249,
- /* 2470 */ 294, 805, 810, 291, 281, 835, 805, 411, 277, 793,
- /* 2480 */ 809, 808, 807, 835, 835, 754, 835, 835, 278, 835,
- /* 2490 */ 306, 835, 754, 806, 225, 426, 31, 151, 806, 364,
- /* 2500 */ 609, 835, 508, 131, 506, 100, 150, 508, 605, 149,
- /* 2510 */ 185, 106, 418, 793, 599, 148, 793, 754, 783, 12,
- /* 2520 */ 417, 593, 129, 128, 405, 785, 402, 146, 573, 96,
- /* 2530 */ 54, 145, 400, 95, 144, 94, 143, 93, 142, 30,
- /* 2540 */ 543, 141, 29, 530, 518, 26, 126, 51, 52, 373,
- /* 2550 */ 528, 754, 524, 805, 53, 125, 754, 140, 805, 193,
- /* 2560 */ 79, 778, 2, 344, 774, 763, 835, 793, 721, 498,
- /* 2570 */ 491, 835, 834, 833, 711, 806, 363, 183, 810, 323,
- /* 2580 */ 806, 362, 182, 655, 508, 793, 809, 808, 807, 508,
- /* 2590 */ 437, 234, 598, 304, 424, 509, 339, 301, 355, 795,
- /* 2600 */ 795, 62, 62, 63, 63, 63, 63, 9, 61, 61,
- /* 2610 */ 61, 61, 60, 60, 59, 59, 59, 58, 253, 793,
- /* 2620 */ 796, 773, 793, 762, 783, 12, 642, 805, 248, 345,
- /* 2630 */ 427, 41, 505, 754, 805, 740, 652, 91, 754, 567,
- /* 2640 */ 835, 805, 646, 78, 673, 645, 836, 835, 672, 806,
- /* 2650 */ 220, 1318, 633, 805, 835, 1318, 806, 206, 508, 1318,
- /* 2660 */ 805, 1318, 1318, 806, 219, 508, 835, 805, 1318, 1318,
- /* 2670 */ 1318, 1318, 508, 835, 1318, 806, 218, 1318, 1318, 805,
- /* 2680 */ 835, 805, 806, 205, 508, 1318, 1318, 1318, 1318, 806,
- /* 2690 */ 202, 508, 835, 805, 835, 1318, 1318, 1318, 508, 1318,
- /* 2700 */ 1318, 806, 119, 806, 201, 1318, 835, 754, 1318, 1318,
- /* 2710 */ 508, 1318, 508, 1318, 754, 806, 199, 1318, 1318, 805,
- /* 2720 */ 1318, 754, 1318, 1318, 508, 1318, 1318, 1318, 1318, 1318,
- /* 2730 */ 1318, 1318, 835, 754, 1318, 1318, 1318, 1318, 1318, 1318,
- /* 2740 */ 754, 806, 227, 1318, 1318, 1318, 1318, 754, 1318, 1318,
- /* 2750 */ 508, 1318, 1318, 805, 1318, 1318, 805, 1318, 805, 754,
- /* 2760 */ 1318, 754, 1318, 1318, 1318, 1318, 835, 1318, 1318, 835,
- /* 2770 */ 1318, 835, 805, 754, 1318, 806, 229, 1318, 806, 222,
- /* 2780 */ 806, 228, 1318, 1318, 508, 835, 1318, 508, 805, 508,
- /* 2790 */ 1318, 1318, 1318, 1318, 806, 217, 1318, 1318, 1318, 754,
- /* 2800 */ 805, 835, 1318, 508, 805, 1318, 1318, 1318, 1318, 1318,
- /* 2810 */ 806, 214, 1318, 835, 1318, 1318, 1318, 835, 1318, 508,
- /* 2820 */ 1318, 1318, 806, 198, 805, 1318, 806, 197, 1318, 1318,
- /* 2830 */ 1318, 508, 1318, 754, 1318, 508, 754, 835, 754, 1318,
- /* 2840 */ 805, 1318, 1318, 1318, 1318, 1318, 806, 196, 1318, 1318,
- /* 2850 */ 1318, 1318, 754, 835, 805, 508, 805, 1318, 1318, 1318,
- /* 2860 */ 805, 1318, 806, 195, 1318, 1318, 1318, 835, 754, 835,
- /* 2870 */ 1318, 508, 1318, 835, 1318, 805, 806, 207, 806, 212,
- /* 2880 */ 754, 1318, 806, 211, 754, 508, 1318, 508, 835, 1318,
- /* 2890 */ 805, 508, 805, 1318, 805, 1318, 1318, 806, 120, 1318,
- /* 2900 */ 1318, 1318, 1318, 835, 754, 835, 508, 835, 1318, 1318,
- /* 2910 */ 1318, 1318, 806, 210, 806, 209, 806, 215, 1318, 805,
- /* 2920 */ 754, 508, 1318, 508, 1318, 508, 1318, 1318, 1318, 1318,
- /* 2930 */ 1318, 1318, 835, 1318, 754, 1318, 754, 1318, 1318, 1318,
- /* 2940 */ 754, 806, 213, 1318, 1318, 1318, 1318, 1318, 1318, 1318,
- /* 2950 */ 508, 1318, 1318, 805, 1318, 754, 805, 1318, 1318, 1318,
- /* 2960 */ 1318, 1318, 1318, 1318, 1318, 1318, 835, 1318, 1318, 835,
- /* 2970 */ 754, 1318, 754, 1318, 754, 806, 200, 1318, 806, 89,
- /* 2980 */ 1318, 1318, 1318, 1318, 508, 1318, 1318, 462, 1318, 1318,
- /* 2990 */ 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 754,
- /* 3000 */ 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318,
- /* 3010 */ 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318,
- /* 3020 */ 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318, 1318,
- /* 3030 */ 1318, 1318, 1318, 754, 1318, 1318, 754,
+ /* 0 */ 530, 162, 431, 771, 456, 453, 452, 27, 67, 68,
+ /* 10 */ 529, 282, 521, 770, 818, 818, 65, 65, 66, 66,
+ /* 20 */ 66, 66, 451, 64, 64, 64, 64, 63, 63, 62,
+ /* 30 */ 62, 62, 61, 59, 263, 464, 1230, 807, 67, 68,
+ /* 40 */ 529, 282, 58, 116, 818, 818, 65, 65, 66, 66,
+ /* 50 */ 66, 66, 526, 64, 64, 64, 64, 63, 63, 62,
+ /* 60 */ 62, 62, 61, 59, 263, 681, 1280, 62, 62, 62,
+ /* 70 */ 61, 59, 263, 808, 432, 66, 66, 66, 66, 56,
+ /* 80 */ 64, 64, 64, 64, 63, 63, 62, 62, 62, 61,
+ /* 90 */ 59, 263, 834, 862, 14, 835, 53, 54, 715, 704,
+ /* 100 */ 704, 353, 828, 619, 55, 1042, 508, 633, 295, 781,
+ /* 110 */ 530, 299, 2, 1042, 343, 861, 861, 816, 1042, 354,
+ /* 120 */ 867, 518, 521, 830, 859, 829, 230, 672, 673, 833,
+ /* 130 */ 1108, 821, 324, 861, 528, 327, 816, 832, 831, 830,
+ /* 140 */ 406, 1042, 39, 143, 608, 80, 862, 128, 515, 291,
+ /* 150 */ 472, 265, 709, 708, 1042, 301, 1042, 1042, 828, 585,
+ /* 160 */ 1042, 290, 526, 366, 368, 1042, 1042, 1042, 1042, 1042,
+ /* 170 */ 1042, 816, 861, 609, 816, 611, 806, 12, 610, 364,
+ /* 180 */ 560, 829, 230, 808, 510, 506, 163, 351, 1042, 56,
+ /* 190 */ 528, 782, 132, 82, 861, 371, 587, 365, 21, 428,
+ /* 200 */ 561, 562, 367, 183, 805, 72, 53, 54, 109, 89,
+ /* 210 */ 723, 81, 497, 127, 55, 1108, 860, 859, 483, 468,
+ /* 220 */ 530, 560, 2, 1108, 862, 297, 448, 816, 1108, 724,
+ /* 230 */ 791, 518, 521, 830, 859, 861, 107, 809, 498, 833,
+ /* 240 */ 381, 561, 414, 8, 723, 172, 816, 832, 831, 830,
+ /* 250 */ 369, 1108, 181, 745, 821, 1059, 1059, 141, 72, 52,
+ /* 260 */ 758, 50, 809, 723, 1108, 502, 1108, 1108, 688, 860,
+ /* 270 */ 859, 861, 526, 563, 798, 1108, 1108, 1108, 1108, 861,
+ /* 280 */ 1108, 816, 724, 78, 816, 194, 806, 12, 386, 862,
+ /* 290 */ 734, 382, 687, 808, 334, 79, 809, 723, 1108, 56,
+ /* 300 */ 64, 64, 64, 64, 63, 63, 62, 62, 62, 61,
+ /* 310 */ 59, 263, 751, 858, 415, 798, 53, 54, 790, 614,
+ /* 320 */ 856, 722, 828, 116, 55, 1093, 742, 167, 413, 857,
+ /* 330 */ 469, 173, 2, 1093, 751, 42, 861, 816, 1093, 809,
+ /* 340 */ 751, 518, 821, 830, 859, 829, 230, 860, 859, 833,
+ /* 350 */ 1358, 190, 535, 3, 528, 487, 816, 832, 831, 830,
+ /* 360 */ 815, 1093, 711, 759, 809, 721, 717, 58, 122, 505,
+ /* 370 */ 522, 500, 746, 4, 1093, 817, 1093, 1093, 767, 828,
+ /* 380 */ 1197, 1197, 483, 470, 600, 1093, 828, 1093, 1093, 601,
+ /* 390 */ 1093, 816, 91, 861, 816, 815, 806, 12, 809, 44,
+ /* 400 */ 861, 113, 829, 215, 381, 307, 442, 317, 1093, 829,
+ /* 410 */ 123, 528, 860, 859, 1200, 284, 473, 423, 528, 67,
+ /* 420 */ 68, 529, 282, 1197, 1197, 818, 818, 65, 65, 66,
+ /* 430 */ 66, 66, 66, 74, 64, 64, 64, 64, 63, 63,
+ /* 440 */ 62, 62, 62, 61, 59, 263, 63, 63, 62, 62,
+ /* 450 */ 62, 61, 59, 263, 800, 799, 172, 332, 504, 73,
+ /* 460 */ 626, 775, 116, 1197, 1197, 821, 389, 247, 775, 67,
+ /* 470 */ 68, 529, 282, 69, 264, 818, 818, 65, 65, 66,
+ /* 480 */ 66, 66, 66, 412, 64, 64, 64, 64, 63, 63,
+ /* 490 */ 62, 62, 62, 61, 59, 263, 496, 58, 142, 753,
+ /* 500 */ 588, 734, 67, 68, 529, 282, 1197, 1197, 818, 818,
+ /* 510 */ 65, 65, 66, 66, 66, 66, 862, 64, 64, 64,
+ /* 520 */ 64, 63, 63, 62, 62, 62, 61, 59, 263, 788,
+ /* 530 */ 449, 703, 828, 830, 340, 116, 372, 1307, 177, 833,
+ /* 540 */ 657, 787, 1307, 45, 505, 363, 861, 832, 831, 830,
+ /* 550 */ 643, 92, 339, 254, 861, 829, 230, 407, 803, 802,
+ /* 560 */ 285, 1197, 1197, 380, 528, 342, 699, 795, 658, 261,
+ /* 570 */ 1200, 81, 1200, 66, 66, 66, 66, 40, 64, 64,
+ /* 580 */ 64, 64, 63, 63, 62, 62, 62, 61, 59, 263,
+ /* 590 */ 693, 862, 483, 484, 281, 280, 862, 1201, 286, 836,
+ /* 600 */ 67, 68, 529, 282, 1197, 1197, 818, 818, 65, 65,
+ /* 610 */ 66, 66, 66, 66, 381, 64, 64, 64, 64, 63,
+ /* 620 */ 63, 62, 62, 62, 61, 59, 263, 862, 1, 751,
+ /* 630 */ 430, 141, 798, 827, 812, 800, 799, 788, 647, 860,
+ /* 640 */ 859, 677, 328, 1197, 1197, 861, 409, 492, 648, 787,
+ /* 650 */ 87, 751, 67, 68, 529, 282, 861, 751, 818, 818,
+ /* 660 */ 65, 65, 66, 66, 66, 66, 862, 64, 64, 64,
+ /* 670 */ 64, 63, 63, 62, 62, 62, 61, 59, 263, 251,
+ /* 680 */ 250, 249, 67, 68, 529, 282, 1197, 1197, 818, 818,
+ /* 690 */ 65, 65, 66, 66, 66, 66, 176, 64, 64, 64,
+ /* 700 */ 64, 63, 63, 62, 62, 62, 61, 59, 263, 764,
+ /* 710 */ 502, 135, 777, 656, 860, 859, 657, 1266, 162, 860,
+ /* 720 */ 859, 456, 453, 452, 861, 811, 840, 92, 843, 357,
+ /* 730 */ 861, 350, 764, 255, 707, 531, 471, 841, 163, 451,
+ /* 740 */ 839, 684, 861, 584, 584, 467, 746, 4, 665, 459,
+ /* 750 */ 860, 859, 271, 1201, 644, 1201, 862, 683, 67, 68,
+ /* 760 */ 529, 282, 23, 491, 818, 818, 65, 65, 66, 66,
+ /* 770 */ 66, 66, 486, 64, 64, 64, 64, 63, 63, 62,
+ /* 780 */ 62, 62, 61, 59, 263, 67, 68, 529, 282, 860,
+ /* 790 */ 859, 818, 818, 65, 65, 66, 66, 66, 66, 751,
+ /* 800 */ 64, 64, 64, 64, 63, 63, 62, 62, 62, 61,
+ /* 810 */ 59, 263, 530, 1266, 866, 862, 636, 485, 344, 534,
+ /* 820 */ 457, 751, 503, 768, 521, 344, 180, 751, 597, 466,
+ /* 830 */ 633, 697, 861, 482, 419, 67, 68, 529, 282, 861,
+ /* 840 */ 386, 818, 818, 65, 65, 66, 66, 66, 66, 810,
+ /* 850 */ 64, 64, 64, 64, 63, 63, 62, 62, 62, 61,
+ /* 860 */ 59, 263, 821, 828, 526, 342, 699, 570, 80, 401,
+ /* 870 */ 353, 122, 119, 61, 59, 263, 842, 861, 585, 860,
+ /* 880 */ 859, 81, 744, 376, 861, 808, 829, 223, 692, 481,
+ /* 890 */ 376, 56, 135, 259, 804, 528, 569, 592, 568, 325,
+ /* 900 */ 283, 567, 633, 326, 965, 520, 803, 802, 53, 54,
+ /* 910 */ 22, 246, 245, 861, 371, 586, 55, 179, 126, 341,
+ /* 920 */ 462, 336, 461, 164, 2, 1207, 537, 71, 57, 816,
+ /* 930 */ 602, 603, 425, 518, 79, 830, 859, 334, 830, 608,
+ /* 940 */ 80, 833, 588, 165, 833, 775, 793, 1215, 816, 832,
+ /* 950 */ 831, 830, 832, 831, 830, 795, 519, 261, 197, 862,
+ /* 960 */ 789, 438, 1202, 354, 1315, 1315, 173, 690, 609, 689,
+ /* 970 */ 611, 255, 707, 610, 471, 613, 172, 861, 372, 1306,
+ /* 980 */ 798, 293, 821, 816, 1306, 821, 816, 792, 806, 12,
+ /* 990 */ 67, 68, 529, 282, 429, 861, 818, 818, 65, 65,
+ /* 1000 */ 66, 66, 66, 66, 435, 64, 64, 64, 64, 63,
+ /* 1010 */ 63, 62, 62, 62, 61, 59, 263, 67, 68, 529,
+ /* 1020 */ 282, 734, 81, 818, 818, 65, 65, 66, 66, 66,
+ /* 1030 */ 66, 780, 64, 64, 64, 64, 63, 63, 62, 62,
+ /* 1040 */ 62, 61, 59, 263, 67, 68, 529, 282, 662, 661,
+ /* 1050 */ 818, 818, 65, 65, 66, 66, 66, 66, 1251, 64,
+ /* 1060 */ 64, 64, 64, 63, 63, 62, 62, 62, 61, 59,
+ /* 1070 */ 263, 779, 512, 566, 778, 639, 639, 870, 67, 68,
+ /* 1080 */ 529, 282, 860, 859, 818, 818, 65, 65, 66, 66,
+ /* 1090 */ 66, 66, 51, 64, 64, 64, 64, 63, 63, 62,
+ /* 1100 */ 62, 62, 61, 59, 263, 821, 411, 794, 862, 67,
+ /* 1110 */ 68, 529, 282, 118, 698, 818, 818, 65, 65, 66,
+ /* 1120 */ 66, 66, 66, 437, 64, 64, 64, 64, 63, 63,
+ /* 1130 */ 62, 62, 62, 61, 59, 263, 834, 861, 862, 835,
+ /* 1140 */ 196, 67, 68, 529, 282, 696, 48, 818, 818, 65,
+ /* 1150 */ 65, 66, 66, 66, 66, 776, 64, 64, 64, 64,
+ /* 1160 */ 63, 63, 62, 62, 62, 61, 59, 263, 1204, 869,
+ /* 1170 */ 3, 436, 67, 68, 529, 282, 173, 679, 818, 818,
+ /* 1180 */ 65, 65, 66, 66, 66, 66, 868, 64, 64, 64,
+ /* 1190 */ 64, 63, 63, 62, 62, 62, 61, 59, 263, 774,
+ /* 1200 */ 267, 862, 622, 67, 68, 529, 282, 173, 195, 818,
+ /* 1210 */ 818, 65, 65, 66, 66, 66, 66, 735, 64, 64,
+ /* 1220 */ 64, 64, 63, 63, 62, 62, 62, 61, 59, 263,
+ /* 1230 */ 507, 860, 859, 309, 67, 68, 529, 282, 44, 331,
+ /* 1240 */ 818, 818, 65, 65, 66, 66, 66, 66, 862, 64,
+ /* 1250 */ 64, 64, 64, 63, 63, 62, 62, 62, 61, 59,
+ /* 1260 */ 263, 860, 859, 671, 729, 862, 67, 68, 529, 282,
+ /* 1270 */ 720, 28, 818, 818, 65, 65, 66, 66, 66, 66,
+ /* 1280 */ 735, 64, 64, 64, 64, 63, 63, 62, 62, 62,
+ /* 1290 */ 61, 59, 263, 460, 1281, 67, 68, 529, 282, 862,
+ /* 1300 */ 719, 818, 818, 65, 65, 66, 66, 66, 66, 670,
+ /* 1310 */ 64, 64, 64, 64, 63, 63, 62, 62, 62, 61,
+ /* 1320 */ 59, 263, 530, 1279, 860, 859, 304, 726, 320, 354,
+ /* 1330 */ 735, 44, 269, 81, 521, 837, 47, 494, 67, 68,
+ /* 1340 */ 529, 282, 861, 861, 818, 818, 65, 65, 66, 66,
+ /* 1350 */ 66, 66, 862, 64, 64, 64, 64, 63, 63, 62,
+ /* 1360 */ 62, 62, 61, 59, 263, 598, 46, 828, 530, 606,
+ /* 1370 */ 828, 860, 859, 590, 526, 509, 20, 716, 373, 517,
+ /* 1380 */ 521, 861, 554, 494, 861, 821, 862, 493, 860, 859,
+ /* 1390 */ 829, 230, 828, 829, 230, 808, 843, 256, 399, 528,
+ /* 1400 */ 501, 56, 528, 6, 862, 846, 861, 437, 44, 986,
+ /* 1410 */ 861, 112, 117, 122, 645, 829, 215, 122, 53, 54,
+ /* 1420 */ 526, 861, 860, 859, 528, 77, 55, 408, 417, 862,
+ /* 1430 */ 483, 474, 598, 493, 2, 751, 862, 766, 516, 816,
+ /* 1440 */ 778, 808, 861, 518, 513, 830, 859, 56, 554, 381,
+ /* 1450 */ 530, 833, 381, 499, 539, 828, 441, 751, 816, 832,
+ /* 1460 */ 831, 830, 521, 751, 53, 54, 22, 862, 861, 861,
+ /* 1470 */ 625, 629, 55, 689, 775, 860, 859, 862, 829, 215,
+ /* 1480 */ 2, 864, 122, 19, 266, 816, 739, 528, 551, 518,
+ /* 1490 */ 761, 830, 859, 816, 862, 861, 816, 833, 806, 12,
+ /* 1500 */ 861, 828, 526, 548, 816, 832, 831, 830, 821, 860,
+ /* 1510 */ 859, 345, 756, 642, 755, 861, 551, 828, 637, 81,
+ /* 1520 */ 820, 549, 548, 808, 829, 230, 5, 860, 859, 56,
+ /* 1530 */ 311, 861, 760, 528, 862, 765, 4, 775, 862, 816,
+ /* 1540 */ 829, 230, 816, 863, 806, 12, 53, 54, 754, 528,
+ /* 1550 */ 548, 122, 860, 859, 55, 752, 122, 403, 18, 860,
+ /* 1560 */ 859, 277, 2, 281, 280, 728, 821, 816, 122, 490,
+ /* 1570 */ 862, 518, 346, 830, 859, 753, 735, 276, 316, 833,
+ /* 1580 */ 727, 387, 268, 381, 750, 4, 816, 832, 831, 830,
+ /* 1590 */ 860, 859, 861, 17, 630, 557, 16, 256, 344, 381,
+ /* 1600 */ 860, 859, 1315, 1315, 800, 799, 821, 530, 559, 862,
+ /* 1610 */ 558, 593, 861, 630, 749, 4, 553, 860, 859, 521,
+ /* 1620 */ 411, 816, 494, 725, 816, 11, 806, 12, 67, 38,
+ /* 1630 */ 529, 282, 284, 473, 818, 818, 65, 65, 66, 66,
+ /* 1640 */ 66, 66, 821, 64, 64, 64, 64, 63, 63, 62,
+ /* 1650 */ 62, 62, 61, 59, 263, 828, 115, 860, 859, 526,
+ /* 1660 */ 348, 860, 859, 275, 747, 4, 862, 828, 422, 861,
+ /* 1670 */ 825, 353, 495, 735, 547, 58, 593, 851, 829, 123,
+ /* 1680 */ 808, 861, 828, 852, 828, 861, 56, 528, 171, 821,
+ /* 1690 */ 829, 123, 862, 860, 859, 353, 861, 861, 861, 528,
+ /* 1700 */ 868, 784, 547, 53, 54, 829, 230, 829, 123, 861,
+ /* 1710 */ 270, 55, 748, 4, 528, 730, 528, 256, 90, 2,
+ /* 1720 */ 274, 170, 347, 169, 816, 168, 635, 175, 518, 821,
+ /* 1730 */ 830, 859, 860, 859, 398, 862, 833, 775, 718, 174,
+ /* 1740 */ 129, 657, 402, 816, 832, 831, 830, 477, 828, 775,
+ /* 1750 */ 862, 541, 92, 313, 862, 861, 392, 312, 713, 635,
+ /* 1760 */ 850, 782, 861, 475, 381, 821, 775, 861, 739, 710,
+ /* 1770 */ 7, 829, 123, 849, 861, 712, 862, 663, 816, 256,
+ /* 1780 */ 528, 816, 861, 806, 12, 782, 68, 529, 282, 860,
+ /* 1790 */ 859, 818, 818, 65, 65, 66, 66, 66, 66, 847,
+ /* 1800 */ 64, 64, 64, 64, 63, 63, 62, 62, 62, 61,
+ /* 1810 */ 59, 263, 530, 15, 465, 860, 859, 706, 705, 81,
+ /* 1820 */ 390, 862, 121, 701, 521, 120, 273, 529, 282, 862,
+ /* 1830 */ 775, 818, 818, 65, 65, 66, 66, 66, 66, 396,
+ /* 1840 */ 64, 64, 64, 64, 63, 63, 62, 62, 62, 61,
+ /* 1850 */ 59, 263, 828, 138, 862, 848, 828, 862, 860, 859,
+ /* 1860 */ 37, 25, 72, 1052, 526, 669, 861, 723, 741, 861,
+ /* 1870 */ 861, 545, 862, 860, 859, 829, 230, 860, 859, 829,
+ /* 1880 */ 201, 845, 861, 353, 528, 808, 724, 458, 528, 862,
+ /* 1890 */ 545, 56, 660, 571, 36, 861, 862, 861, 455, 860,
+ /* 1900 */ 859, 723, 1315, 1315, 86, 739, 862, 333, 53, 54,
+ /* 1910 */ 524, 85, 488, 24, 530, 450, 55, 323, 545, 861,
+ /* 1920 */ 84, 862, 397, 828, 2, 678, 521, 714, 300, 816,
+ /* 1930 */ 161, 861, 583, 518, 381, 830, 859, 861, 775, 446,
+ /* 1940 */ 828, 833, 861, 739, 860, 859, 829, 211, 816, 832,
+ /* 1950 */ 831, 830, 860, 859, 861, 528, 339, 861, 638, 193,
+ /* 1960 */ 157, 571, 10, 829, 233, 815, 526, 105, 838, 745,
+ /* 1970 */ 862, 624, 528, 782, 574, 862, 395, 860, 859, 35,
+ /* 1980 */ 860, 859, 861, 816, 103, 828, 816, 808, 806, 12,
+ /* 1990 */ 624, 844, 814, 56, 34, 860, 859, 33, 862, 861,
+ /* 2000 */ 815, 828, 32, 102, 391, 775, 577, 393, 829, 231,
+ /* 2010 */ 53, 54, 860, 859, 394, 861, 530, 528, 55, 860,
+ /* 2020 */ 859, 574, 775, 616, 829, 241, 2, 330, 521, 860,
+ /* 2030 */ 859, 816, 828, 528, 828, 518, 101, 830, 859, 862,
+ /* 2040 */ 577, 618, 616, 833, 860, 859, 861, 828, 861, 828,
+ /* 2050 */ 816, 832, 831, 830, 862, 829, 240, 829, 242, 862,
+ /* 2060 */ 731, 861, 862, 861, 528, 308, 528, 775, 526, 612,
+ /* 2070 */ 829, 243, 829, 262, 607, 605, 862, 426, 828, 528,
+ /* 2080 */ 736, 528, 298, 775, 110, 816, 579, 581, 816, 808,
+ /* 2090 */ 806, 12, 861, 860, 859, 56, 861, 826, 860, 859,
+ /* 2100 */ 173, 829, 356, 296, 599, 306, 581, 575, 152, 739,
+ /* 2110 */ 528, 861, 53, 54, 775, 538, 775, 861, 530, 13,
+ /* 2120 */ 55, 860, 859, 861, 303, 862, 187, 828, 2, 775,
+ /* 2130 */ 521, 775, 580, 816, 538, 439, 198, 518, 556, 830,
+ /* 2140 */ 859, 861, 828, 96, 828, 833, 740, 555, 410, 861,
+ /* 2150 */ 829, 239, 816, 832, 831, 830, 861, 862, 861, 528,
+ /* 2160 */ 775, 862, 860, 859, 862, 829, 355, 829, 210, 144,
+ /* 2170 */ 526, 536, 94, 256, 528, 666, 528, 860, 859, 862,
+ /* 2180 */ 424, 248, 860, 859, 862, 860, 859, 816, 76, 828,
+ /* 2190 */ 816, 808, 806, 12, 1205, 604, 813, 56, 252, 860,
+ /* 2200 */ 859, 272, 862, 861, 828, 862, 114, 675, 385, 775,
+ /* 2210 */ 861, 185, 829, 228, 53, 54, 384, 865, 861, 294,
+ /* 2220 */ 530, 528, 55, 572, 775, 855, 775, 829, 232, 828,
+ /* 2230 */ 2, 1207, 521, 861, 854, 816, 528, 853, 634, 518,
+ /* 2240 */ 533, 830, 859, 861, 862, 184, 287, 833, 860, 859,
+ /* 2250 */ 383, 828, 829, 379, 816, 832, 831, 830, 862, 653,
+ /* 2260 */ 861, 528, 862, 523, 862, 861, 862, 182, 108, 447,
+ /* 2270 */ 532, 775, 526, 641, 829, 378, 737, 861, 75, 359,
+ /* 2280 */ 860, 859, 828, 528, 860, 859, 775, 860, 859, 816,
+ /* 2290 */ 861, 862, 816, 808, 806, 12, 861, 646, 178, 56,
+ /* 2300 */ 632, 824, 860, 859, 284, 829, 377, 860, 859, 358,
+ /* 2310 */ 823, 775, 862, 732, 528, 628, 53, 54, 23, 489,
+ /* 2320 */ 623, 591, 530, 192, 55, 860, 859, 861, 860, 859,
+ /* 2330 */ 43, 828, 2, 775, 521, 822, 70, 816, 166, 305,
+ /* 2340 */ 263, 518, 352, 830, 859, 861, 828, 88, 862, 833,
+ /* 2350 */ 862, 279, 861, 861, 829, 227, 816, 832, 831, 830,
+ /* 2360 */ 861, 480, 862, 528, 775, 700, 260, 860, 859, 829,
+ /* 2370 */ 213, 405, 278, 349, 526, 861, 49, 505, 528, 861,
+ /* 2380 */ 1209, 860, 859, 514, 596, 860, 859, 860, 859, 860,
+ /* 2390 */ 859, 816, 335, 828, 816, 808, 806, 12, 828, 773,
+ /* 2400 */ 594, 56, 1209, 772, 253, 404, 861, 861, 1209, 578,
+ /* 2410 */ 769, 763, 861, 775, 860, 859, 829, 226, 53, 54,
+ /* 2420 */ 862, 829, 225, 862, 676, 528, 55, 582, 775, 573,
+ /* 2430 */ 528, 139, 862, 828, 2, 860, 859, 757, 861, 816,
+ /* 2440 */ 140, 476, 473, 518, 702, 860, 859, 861, 165, 564,
+ /* 2450 */ 862, 833, 691, 686, 1209, 654, 829, 212, 816, 832,
+ /* 2460 */ 831, 830, 1209, 400, 463, 528, 542, 1209, 329, 861,
+ /* 2470 */ 685, 860, 859, 860, 859, 775, 576, 322, 828, 337,
+ /* 2480 */ 775, 420, 861, 681, 544, 860, 859, 682, 659, 680,
+ /* 2490 */ 1209, 861, 861, 816, 543, 861, 816, 828, 806, 12,
+ /* 2500 */ 375, 829, 238, 1209, 362, 1209, 1209, 652, 861, 828,
+ /* 2510 */ 528, 861, 651, 374, 1209, 775, 1209, 1209, 861, 1209,
+ /* 2520 */ 829, 237, 160, 861, 650, 527, 828, 649, 302, 528,
+ /* 2530 */ 106, 445, 829, 209, 30, 640, 777, 1209, 828, 861,
+ /* 2540 */ 861, 528, 861, 860, 859, 828, 860, 859, 159, 829,
+ /* 2550 */ 124, 158, 861, 292, 137, 860, 859, 288, 528, 861,
+ /* 2560 */ 775, 829, 208, 427, 828, 258, 289, 861, 829, 206,
+ /* 2570 */ 528, 861, 656, 860, 859, 31, 321, 528, 861, 775,
+ /* 2580 */ 861, 443, 156, 318, 199, 631, 104, 829, 234, 136,
+ /* 2590 */ 155, 775, 627, 314, 783, 154, 528, 191, 828, 111,
+ /* 2600 */ 828, 310, 828, 738, 434, 828, 621, 617, 775, 433,
+ /* 2610 */ 615, 134, 861, 153, 861, 421, 861, 828, 133, 861,
+ /* 2620 */ 775, 829, 236, 829, 229, 829, 235, 775, 829, 224,
+ /* 2630 */ 528, 861, 528, 595, 528, 151, 418, 528, 828, 100,
+ /* 2640 */ 829, 221, 416, 828, 150, 99, 775, 149, 98, 528,
+ /* 2650 */ 148, 97, 861, 147, 30, 565, 388, 861, 146, 29,
+ /* 2660 */ 552, 829, 205, 550, 131, 828, 829, 204, 546, 828,
+ /* 2670 */ 528, 828, 26, 130, 145, 528, 83, 540, 186, 861,
+ /* 2680 */ 775, 200, 775, 861, 775, 861, 360, 775, 829, 203,
+ /* 2690 */ 786, 801, 829, 202, 829, 214, 511, 528, 189, 775,
+ /* 2700 */ 828, 528, 188, 528, 60, 828, 797, 828, 743, 733,
+ /* 2710 */ 338, 677, 244, 315, 861, 454, 319, 440, 370, 861,
+ /* 2720 */ 775, 861, 620, 829, 219, 775, 819, 9, 829, 218,
+ /* 2730 */ 829, 125, 528, 796, 785, 41, 828, 528, 664, 528,
+ /* 2740 */ 444, 828, 361, 257, 525, 762, 674, 775, 668, 95,
+ /* 2750 */ 861, 775, 695, 775, 655, 861, 828, 667, 694, 829,
+ /* 2760 */ 217, 589, 828, 81, 829, 216, 862, 1359, 528, 1359,
+ /* 2770 */ 861, 1359, 1359, 528, 1359, 1359, 861, 1359, 1359, 829,
+ /* 2780 */ 222, 828, 775, 828, 1359, 829, 220, 775, 528, 775,
+ /* 2790 */ 1359, 1359, 1359, 1359, 528, 861, 1359, 861, 1359, 1359,
+ /* 2800 */ 1359, 1359, 1359, 1359, 829, 207, 829, 93, 1359, 1359,
+ /* 2810 */ 1359, 1359, 1359, 528, 1359, 479, 1359, 1359, 775, 1359,
+ /* 2820 */ 1359, 1359, 1359, 775, 1359, 1359, 1359, 1359, 1359, 1359,
+ /* 2830 */ 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 775, 1359,
+ /* 2840 */ 1359, 1359, 1359, 1359, 775, 1359, 1359, 1359, 1359, 1359,
+ /* 2850 */ 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359, 1359,
+ /* 2860 */ 1359, 1359, 1359, 775, 1359, 775,
};
static const YYCODETYPE yy_lookahead[] = {
- /* 0 */ 4, 228, 67, 4, 231, 70, 106, 79, 80, 81,
- /* 10 */ 82, 238, 16, 85, 86, 87, 88, 89, 90, 91,
- /* 20 */ 92, 110, 94, 95, 96, 97, 98, 99, 100, 101,
- /* 30 */ 102, 103, 104, 199, 106, 94, 95, 96, 97, 98,
- /* 40 */ 99, 100, 101, 102, 103, 104, 212, 112, 129, 121,
- /* 50 */ 88, 55, 89, 90, 91, 92, 93, 94, 95, 96,
- /* 60 */ 97, 98, 99, 100, 101, 102, 103, 104, 199, 199,
- /* 70 */ 4, 114, 76, 4, 59, 113, 207, 81, 208, 209,
- /* 80 */ 199, 212, 212, 100, 101, 102, 103, 104, 160, 4,
- /* 90 */ 221, 222, 4, 212, 98, 99, 100, 169, 199, 230,
- /* 100 */ 129, 105, 106, 204, 234, 24, 236, 208, 209, 113,
- /* 110 */ 114, 212, 285, 244, 118, 180, 120, 121, 147, 123,
- /* 120 */ 124, 122, 123, 124, 4, 129, 127, 258, 259, 130,
- /* 130 */ 131, 132, 136, 137, 138, 139, 16, 141, 78, 42,
- /* 140 */ 43, 207, 308, 309, 24, 318, 319, 148, 279, 65,
- /* 150 */ 154, 113, 156, 157, 75, 71, 160, 142, 143, 144,
- /* 160 */ 31, 165, 166, 167, 168, 169, 170, 152, 153, 173,
- /* 170 */ 41, 175, 176, 113, 114, 55, 250, 243, 244, 113,
- /* 180 */ 83, 84, 113, 187, 118, 34, 260, 118, 307, 123,
- /* 190 */ 124, 199, 123, 124, 113, 4, 76, 121, 113, 207,
- /* 200 */ 4, 81, 136, 118, 212, 136, 272, 273, 123, 124,
- /* 210 */ 276, 123, 124, 221, 222, 131, 140, 151, 98, 99,
- /* 220 */ 151, 116, 230, 15, 136, 105, 106, 4, 162, 163,
- /* 230 */ 296, 297, 81, 113, 114, 116, 244, 121, 118, 151,
- /* 240 */ 120, 121, 127, 123, 124, 130, 131, 132, 4, 129,
- /* 250 */ 258, 113, 44, 115, 199, 104, 136, 137, 138, 139,
- /* 260 */ 16, 141, 114, 148, 180, 186, 115, 212, 60, 121,
- /* 270 */ 154, 279, 156, 157, 154, 121, 156, 157, 127, 128,
- /* 280 */ 129, 130, 131, 132, 133, 165, 166, 167, 168, 155,
- /* 290 */ 170, 121, 158, 173, 124, 175, 176, 113, 147, 55,
- /* 300 */ 98, 99, 100, 101, 102, 103, 104, 187, 191, 118,
- /* 310 */ 4, 128, 129, 196, 123, 124, 78, 199, 4, 123,
- /* 320 */ 76, 199, 199, 169, 207, 81, 135, 136, 43, 274,
- /* 330 */ 212, 135, 162, 163, 212, 212, 142, 143, 144, 221,
- /* 340 */ 222, 118, 98, 99, 221, 222, 123, 124, 230, 105,
- /* 350 */ 106, 113, 114, 230, 146, 164, 121, 113, 114, 136,
- /* 360 */ 243, 244, 118, 5, 120, 121, 81, 123, 124, 4,
- /* 370 */ 7, 199, 4, 129, 121, 12, 258, 259, 35, 207,
- /* 380 */ 136, 137, 138, 139, 212, 141, 114, 164, 30, 272,
- /* 390 */ 273, 269, 114, 276, 36, 52, 207, 279, 154, 56,
- /* 400 */ 156, 157, 279, 40, 4, 62, 100, 42, 43, 165,
- /* 410 */ 199, 167, 168, 160, 170, 199, 244, 173, 301, 175,
- /* 420 */ 176, 63, 114, 212, 208, 209, 141, 113, 212, 123,
- /* 430 */ 124, 187, 147, 244, 262, 263, 313, 123, 124, 316,
- /* 440 */ 4, 26, 136, 4, 79, 80, 81, 82, 83, 84,
- /* 450 */ 85, 86, 87, 88, 89, 90, 91, 92, 114, 94,
- /* 460 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- /* 470 */ 4, 123, 35, 262, 263, 113, 170, 129, 103, 104,
- /* 480 */ 115, 113, 137, 138, 170, 137, 138, 139, 123, 42,
- /* 490 */ 43, 123, 124, 56, 79, 80, 81, 82, 51, 62,
- /* 500 */ 85, 86, 87, 88, 89, 90, 91, 92, 165, 94,
- /* 510 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- /* 520 */ 4, 114, 4, 123, 159, 125, 79, 80, 81, 82,
- /* 530 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- /* 540 */ 10, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- /* 550 */ 103, 104, 22, 35, 118, 4, 117, 118, 121, 123,
- /* 560 */ 124, 113, 123, 124, 78, 199, 245, 246, 121, 248,
- /* 570 */ 52, 210, 42, 43, 56, 214, 215, 216, 212, 21,
- /* 580 */ 62, 192, 193, 194, 195, 199, 150, 221, 222, 123,
- /* 590 */ 124, 10, 177, 199, 179, 37, 230, 203, 212, 113,
- /* 600 */ 114, 32, 136, 22, 218, 219, 212, 121, 121, 79,
- /* 610 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- /* 620 */ 90, 91, 92, 54, 94, 95, 96, 97, 98, 99,
- /* 630 */ 100, 101, 102, 103, 104, 119, 170, 114, 43, 123,
- /* 640 */ 124, 123, 124, 121, 78, 279, 4, 160, 79, 80,
- /* 650 */ 81, 82, 42, 43, 85, 86, 87, 88, 89, 90,
- /* 660 */ 91, 92, 165, 94, 95, 96, 97, 98, 99, 100,
- /* 670 */ 101, 102, 103, 104, 123, 124, 290, 291, 4, 113,
- /* 680 */ 114, 315, 316, 165, 187, 134, 4, 121, 4, 79,
- /* 690 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
- /* 700 */ 90, 91, 92, 100, 94, 95, 96, 97, 98, 99,
- /* 710 */ 100, 101, 102, 103, 104, 89, 90, 91, 92, 121,
- /* 720 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
- /* 730 */ 104, 115, 79, 80, 81, 82, 141, 212, 85, 86,
- /* 740 */ 87, 88, 89, 90, 91, 92, 221, 94, 95, 96,
- /* 750 */ 97, 98, 99, 100, 101, 102, 103, 104, 155, 106,
- /* 760 */ 118, 158, 113, 165, 67, 123, 124, 70, 26, 79,
- /* 770 */ 80, 81, 82, 38, 121, 85, 86, 87, 88, 89,
- /* 780 */ 90, 91, 92, 4, 94, 95, 96, 97, 98, 99,
- /* 790 */ 100, 101, 102, 103, 104, 113, 106, 123, 124, 4,
- /* 800 */ 114, 4, 26, 4, 199, 123, 124, 123, 124, 112,
- /* 810 */ 136, 121, 26, 160, 72, 4, 81, 212, 79, 80,
- /* 820 */ 81, 82, 169, 181, 85, 86, 87, 88, 89, 90,
- /* 830 */ 91, 92, 4, 94, 95, 96, 97, 98, 99, 100,
- /* 840 */ 101, 102, 103, 104, 16, 106, 98, 99, 106, 4,
- /* 850 */ 160, 72, 170, 207, 170, 79, 80, 81, 82, 169,
- /* 860 */ 121, 85, 86, 87, 88, 89, 90, 91, 92, 199,
- /* 870 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
- /* 880 */ 104, 4, 212, 55, 177, 137, 138, 14, 218, 219,
- /* 890 */ 244, 285, 113, 114, 142, 143, 144, 118, 199, 160,
- /* 900 */ 72, 114, 123, 124, 76, 217, 218, 219, 169, 81,
- /* 910 */ 113, 212, 115, 118, 309, 136, 199, 207, 123, 124,
- /* 920 */ 123, 76, 123, 124, 318, 319, 98, 99, 121, 212,
- /* 930 */ 151, 152, 153, 105, 123, 124, 237, 121, 221, 222,
- /* 940 */ 13, 113, 114, 98, 99, 115, 118, 230, 120, 4,
- /* 950 */ 199, 123, 124, 177, 244, 179, 159, 129, 113, 199,
- /* 960 */ 290, 291, 114, 212, 136, 137, 138, 139, 123, 121,
- /* 970 */ 159, 4, 212, 174, 129, 258, 259, 141, 183, 291,
- /* 980 */ 152, 153, 137, 138, 139, 220, 287, 214, 215, 216,
- /* 990 */ 113, 14, 114, 228, 229, 21, 279, 161, 170, 121,
- /* 1000 */ 123, 173, 28, 175, 176, 49, 79, 80, 81, 82,
- /* 1010 */ 4, 37, 85, 86, 87, 88, 89, 90, 91, 92,
- /* 1020 */ 4, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- /* 1030 */ 103, 104, 177, 106, 179, 79, 80, 81, 82, 113,
- /* 1040 */ 289, 85, 86, 87, 88, 89, 90, 91, 92, 4,
- /* 1050 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
- /* 1060 */ 104, 16, 106, 118, 19, 199, 4, 199, 123, 124,
- /* 1070 */ 310, 311, 312, 57, 4, 217, 218, 219, 212, 255,
- /* 1080 */ 212, 257, 207, 4, 117, 118, 79, 80, 81, 82,
- /* 1090 */ 123, 124, 85, 86, 87, 88, 89, 90, 91, 92,
- /* 1100 */ 55, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- /* 1110 */ 103, 104, 19, 68, 4, 239, 114, 241, 243, 244,
- /* 1120 */ 46, 76, 115, 121, 118, 35, 81, 182, 83, 123,
- /* 1130 */ 124, 263, 199, 117, 4, 114, 203, 44, 207, 123,
- /* 1140 */ 124, 72, 136, 98, 99, 212, 56, 272, 273, 291,
- /* 1150 */ 105, 276, 62, 302, 303, 4, 61, 199, 113, 66,
- /* 1160 */ 98, 99, 4, 118, 114, 120, 4, 16, 123, 124,
- /* 1170 */ 212, 121, 297, 280, 129, 244, 310, 311, 312, 221,
- /* 1180 */ 222, 136, 137, 138, 139, 123, 124, 4, 230, 80,
- /* 1190 */ 128, 4, 299, 123, 124, 199, 106, 128, 4, 137,
- /* 1200 */ 138, 35, 123, 141, 114, 143, 55, 0, 212, 32,
- /* 1210 */ 144, 121, 199, 201, 135, 170, 258, 259, 173, 54,
- /* 1220 */ 175, 176, 56, 72, 61, 212, 199, 76, 62, 199,
- /* 1230 */ 14, 141, 81, 123, 221, 222, 29, 279, 172, 212,
- /* 1240 */ 170, 5, 212, 230, 154, 135, 156, 157, 118, 98,
- /* 1250 */ 99, 221, 222, 123, 124, 165, 105, 167, 168, 166,
- /* 1260 */ 230, 114, 14, 199, 113, 269, 30, 203, 121, 118,
- /* 1270 */ 108, 120, 36, 214, 123, 124, 212, 187, 194, 195,
- /* 1280 */ 129, 123, 124, 270, 114, 123, 124, 136, 137, 138,
- /* 1290 */ 139, 121, 279, 4, 136, 59, 214, 4, 286, 63,
- /* 1300 */ 270, 118, 26, 152, 153, 118, 123, 124, 113, 279,
- /* 1310 */ 123, 124, 199, 106, 184, 212, 213, 123, 124, 136,
- /* 1320 */ 261, 170, 164, 136, 173, 212, 175, 176, 134, 79,
- /* 1330 */ 80, 81, 82, 306, 307, 85, 86, 87, 88, 89,
- /* 1340 */ 90, 91, 92, 261, 94, 95, 96, 97, 98, 99,
- /* 1350 */ 100, 101, 102, 103, 104, 79, 80, 81, 82, 207,
- /* 1360 */ 14, 85, 86, 87, 88, 89, 90, 91, 92, 14,
- /* 1370 */ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
- /* 1380 */ 104, 29, 79, 80, 81, 82, 311, 312, 85, 86,
- /* 1390 */ 87, 88, 89, 90, 91, 92, 244, 94, 95, 96,
- /* 1400 */ 97, 98, 99, 100, 101, 102, 103, 104, 114, 311,
- /* 1410 */ 312, 118, 123, 124, 14, 121, 123, 124, 121, 306,
- /* 1420 */ 307, 4, 311, 312, 79, 80, 81, 82, 178, 136,
- /* 1430 */ 85, 86, 87, 88, 89, 90, 91, 92, 114, 94,
- /* 1440 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- /* 1450 */ 239, 4, 241, 164, 79, 80, 81, 82, 106, 114,
- /* 1460 */ 85, 86, 87, 88, 89, 90, 91, 92, 38, 94,
- /* 1470 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- /* 1480 */ 114, 178, 311, 312, 79, 80, 81, 82, 114, 114,
- /* 1490 */ 85, 86, 87, 88, 89, 90, 91, 92, 162, 94,
- /* 1500 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- /* 1510 */ 245, 246, 4, 248, 79, 80, 81, 82, 116, 114,
- /* 1520 */ 85, 86, 87, 88, 89, 90, 91, 92, 116, 94,
- /* 1530 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- /* 1540 */ 123, 124, 277, 100, 79, 80, 81, 82, 121, 114,
- /* 1550 */ 85, 86, 87, 88, 89, 90, 91, 92, 113, 94,
- /* 1560 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- /* 1570 */ 123, 124, 311, 312, 79, 80, 81, 82, 114, 114,
- /* 1580 */ 85, 86, 87, 88, 89, 90, 91, 92, 113, 94,
- /* 1590 */ 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- /* 1600 */ 183, 106, 79, 80, 81, 82, 152, 153, 85, 86,
- /* 1610 */ 87, 88, 89, 90, 91, 92, 108, 94, 95, 96,
- /* 1620 */ 97, 98, 99, 100, 101, 102, 103, 104, 181, 155,
- /* 1630 */ 4, 123, 124, 79, 80, 81, 82, 4, 115, 85,
- /* 1640 */ 86, 87, 88, 89, 90, 91, 92, 114, 94, 95,
- /* 1650 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 4,
- /* 1660 */ 106, 79, 80, 81, 82, 114, 4, 85, 86, 87,
- /* 1670 */ 88, 89, 90, 91, 92, 4, 94, 95, 96, 97,
- /* 1680 */ 98, 99, 100, 101, 102, 103, 104, 16, 106, 114,
- /* 1690 */ 19, 79, 80, 81, 82, 114, 121, 85, 86, 87,
- /* 1700 */ 88, 89, 90, 91, 92, 4, 94, 95, 96, 97,
- /* 1710 */ 98, 99, 100, 101, 102, 103, 104, 9, 114, 11,
- /* 1720 */ 199, 13, 114, 199, 203, 121, 55, 199, 114, 199,
- /* 1730 */ 199, 23, 114, 212, 26, 121, 212, 113, 199, 68,
- /* 1740 */ 212, 108, 212, 212, 4, 221, 222, 76, 4, 123,
- /* 1750 */ 124, 212, 81, 169, 230, 113, 123, 124, 114, 18,
- /* 1760 */ 199, 53, 136, 108, 203, 121, 58, 4, 237, 98,
- /* 1770 */ 99, 63, 64, 212, 49, 199, 105, 69, 123, 124,
- /* 1780 */ 72, 4, 74, 115, 113, 123, 124, 224, 212, 118,
- /* 1790 */ 164, 120, 199, 16, 123, 124, 19, 221, 222, 199,
- /* 1800 */ 129, 214, 274, 279, 114, 212, 230, 136, 137, 138,
- /* 1810 */ 139, 121, 212, 151, 221, 222, 115, 109, 287, 111,
- /* 1820 */ 114, 221, 222, 230, 123, 72, 287, 121, 6, 4,
- /* 1830 */ 230, 113, 55, 214, 258, 4, 8, 313, 49, 199,
- /* 1840 */ 316, 170, 113, 280, 173, 68, 175, 176, 261, 4,
- /* 1850 */ 114, 258, 212, 76, 49, 279, 4, 149, 81, 106,
- /* 1860 */ 159, 4, 224, 123, 124, 113, 122, 123, 124, 113,
- /* 1870 */ 270, 199, 279, 188, 189, 98, 99, 113, 199, 279,
- /* 1880 */ 261, 118, 105, 199, 212, 199, 123, 124, 133, 203,
- /* 1890 */ 113, 212, 147, 185, 199, 118, 212, 120, 212, 136,
- /* 1900 */ 123, 124, 162, 120, 13, 4, 129, 212, 81, 269,
- /* 1910 */ 115, 141, 199, 136, 137, 138, 139, 16, 280, 160,
- /* 1920 */ 146, 79, 80, 81, 82, 212, 88, 85, 86, 87,
- /* 1930 */ 88, 89, 90, 91, 92, 4, 94, 95, 96, 97,
- /* 1940 */ 98, 99, 100, 101, 102, 103, 104, 170, 123, 124,
- /* 1950 */ 173, 214, 175, 176, 123, 124, 55, 88, 88, 4,
- /* 1960 */ 199, 199, 88, 118, 269, 171, 199, 136, 123, 124,
- /* 1970 */ 118, 4, 199, 212, 212, 123, 124, 76, 199, 212,
- /* 1980 */ 123, 124, 81, 221, 222, 212, 18, 162, 221, 222,
- /* 1990 */ 4, 212, 230, 24, 221, 222, 151, 230, 261, 98,
- /* 2000 */ 99, 146, 145, 230, 4, 199, 105, 153, 172, 106,
- /* 2010 */ 106, 4, 25, 199, 113, 114, 164, 280, 212, 118,
- /* 2020 */ 258, 120, 199, 16, 123, 124, 212, 221, 222, 4,
- /* 2030 */ 129, 61, 50, 121, 199, 212, 230, 136, 137, 138,
- /* 2040 */ 139, 279, 50, 270, 221, 222, 279, 212, 269, 282,
- /* 2050 */ 141, 237, 279, 230, 123, 124, 221, 222, 180, 113,
- /* 2060 */ 199, 112, 55, 161, 258, 230, 113, 136, 120, 112,
- /* 2070 */ 114, 170, 117, 212, 173, 114, 175, 176, 123, 124,
- /* 2080 */ 48, 199, 199, 76, 4, 279, 203, 199, 81, 110,
- /* 2090 */ 123, 124, 47, 270, 212, 212, 211, 280, 199, 227,
- /* 2100 */ 212, 287, 279, 136, 264, 98, 99, 227, 4, 123,
- /* 2110 */ 124, 212, 105, 199, 279, 303, 305, 4, 305, 237,
- /* 2120 */ 113, 114, 136, 123, 124, 118, 212, 120, 199, 16,
- /* 2130 */ 123, 124, 198, 200, 199, 107, 129, 198, 64, 199,
- /* 2140 */ 198, 212, 199, 136, 137, 138, 139, 212, 123, 124,
- /* 2150 */ 221, 222, 212, 4, 200, 212, 221, 222, 4, 230,
- /* 2160 */ 198, 221, 222, 199, 164, 230, 77, 203, 55, 287,
- /* 2170 */ 230, 205, 199, 4, 199, 150, 212, 170, 4, 199,
- /* 2180 */ 173, 121, 175, 176, 4, 212, 202, 212, 4, 76,
- /* 2190 */ 73, 206, 212, 4, 81, 267, 221, 222, 246, 116,
- /* 2200 */ 199, 221, 222, 123, 124, 230, 152, 4, 279, 4,
- /* 2210 */ 230, 98, 99, 212, 279, 252, 136, 169, 105, 279,
- /* 2220 */ 167, 117, 166, 4, 253, 199, 113, 123, 124, 168,
- /* 2230 */ 4, 118, 254, 120, 104, 16, 123, 124, 212, 256,
- /* 2240 */ 199, 4, 129, 81, 226, 199, 113, 221, 222, 136,
- /* 2250 */ 137, 138, 139, 212, 279, 104, 230, 199, 212, 279,
- /* 2260 */ 288, 203, 221, 222, 283, 177, 255, 221, 222, 280,
- /* 2270 */ 212, 230, 123, 124, 55, 256, 230, 123, 124, 165,
- /* 2280 */ 271, 199, 4, 170, 271, 136, 173, 45, 175, 176,
- /* 2290 */ 177, 314, 123, 124, 212, 76, 27, 123, 124, 116,
- /* 2300 */ 81, 117, 199, 123, 124, 279, 117, 123, 124, 199,
- /* 2310 */ 136, 314, 123, 124, 267, 212, 136, 98, 99, 248,
- /* 2320 */ 279, 199, 212, 199, 105, 279, 123, 124, 123, 124,
- /* 2330 */ 153, 199, 113, 114, 212, 319, 212, 118, 184, 120,
- /* 2340 */ 188, 136, 123, 124, 212, 233, 223, 4, 129, 123,
- /* 2350 */ 124, 182, 223, 221, 222, 136, 137, 138, 139, 16,
- /* 2360 */ 123, 124, 230, 141, 80, 81, 82, 39, 223, 85,
- /* 2370 */ 86, 87, 88, 89, 90, 91, 92, 199, 94, 95,
- /* 2380 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 170,
- /* 2390 */ 212, 225, 173, 199, 175, 176, 170, 203, 55, 221,
- /* 2400 */ 222, 123, 124, 199, 140, 199, 212, 170, 230, 199,
- /* 2410 */ 199, 279, 199, 199, 223, 233, 212, 267, 212, 76,
- /* 2420 */ 223, 226, 212, 212, 81, 212, 212, 221, 222, 116,
- /* 2430 */ 223, 199, 223, 199, 221, 222, 230, 199, 199, 223,
- /* 2440 */ 116, 98, 99, 230, 212, 199, 212, 226, 105, 171,
- /* 2450 */ 212, 212, 202, 4, 226, 202, 113, 279, 212, 221,
- /* 2460 */ 222, 118, 199, 120, 116, 16, 123, 124, 230, 267,
- /* 2470 */ 199, 199, 129, 199, 199, 212, 199, 33, 199, 136,
- /* 2480 */ 137, 138, 139, 212, 212, 279, 212, 212, 199, 212,
- /* 2490 */ 294, 212, 279, 221, 222, 295, 177, 116, 221, 222,
- /* 2500 */ 252, 212, 230, 79, 55, 240, 116, 230, 252, 116,
- /* 2510 */ 275, 113, 141, 170, 278, 116, 173, 279, 175, 176,
- /* 2520 */ 252, 240, 202, 202, 267, 76, 267, 116, 252, 242,
- /* 2530 */ 81, 116, 77, 242, 116, 242, 116, 242, 116, 171,
- /* 2540 */ 289, 116, 298, 20, 17, 298, 116, 98, 99, 267,
- /* 2550 */ 267, 279, 267, 199, 105, 116, 279, 116, 199, 249,
- /* 2560 */ 300, 291, 113, 251, 291, 224, 212, 118, 266, 120,
- /* 2570 */ 284, 212, 123, 124, 268, 221, 222, 255, 129, 224,
- /* 2580 */ 221, 222, 255, 231, 230, 136, 137, 138, 139, 230,
- /* 2590 */ 225, 235, 252, 268, 268, 81, 82, 251, 197, 85,
- /* 2600 */ 86, 87, 88, 89, 90, 91, 92, 249, 94, 95,
- /* 2610 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 170,
- /* 2620 */ 214, 214, 173, 214, 175, 176, 214, 199, 292, 247,
- /* 2630 */ 293, 281, 241, 279, 199, 317, 232, 265, 279, 304,
- /* 2640 */ 212, 199, 232, 72, 221, 232, 4, 212, 221, 221,
- /* 2650 */ 222, 320, 236, 199, 212, 320, 221, 222, 230, 320,
- /* 2660 */ 199, 320, 320, 221, 222, 230, 212, 199, 320, 320,
- /* 2670 */ 320, 320, 230, 212, 320, 221, 222, 320, 320, 199,
- /* 2680 */ 212, 199, 221, 222, 230, 320, 320, 320, 320, 221,
- /* 2690 */ 222, 230, 212, 199, 212, 320, 320, 320, 230, 320,
- /* 2700 */ 320, 221, 222, 221, 222, 320, 212, 279, 320, 320,
- /* 2710 */ 230, 320, 230, 320, 279, 221, 222, 320, 320, 199,
- /* 2720 */ 320, 279, 320, 320, 230, 320, 320, 320, 320, 320,
- /* 2730 */ 320, 320, 212, 279, 320, 320, 320, 320, 320, 320,
- /* 2740 */ 279, 221, 222, 320, 320, 320, 320, 279, 320, 320,
- /* 2750 */ 230, 320, 320, 199, 320, 320, 199, 320, 199, 279,
- /* 2760 */ 320, 279, 320, 320, 320, 320, 212, 320, 320, 212,
- /* 2770 */ 320, 212, 199, 279, 320, 221, 222, 320, 221, 222,
- /* 2780 */ 221, 222, 320, 320, 230, 212, 320, 230, 199, 230,
- /* 2790 */ 320, 320, 320, 320, 221, 222, 320, 320, 320, 279,
- /* 2800 */ 199, 212, 320, 230, 199, 320, 320, 320, 320, 320,
- /* 2810 */ 221, 222, 320, 212, 320, 320, 320, 212, 320, 230,
- /* 2820 */ 320, 320, 221, 222, 199, 320, 221, 222, 320, 320,
- /* 2830 */ 320, 230, 320, 279, 320, 230, 279, 212, 279, 320,
- /* 2840 */ 199, 320, 320, 320, 320, 320, 221, 222, 320, 320,
- /* 2850 */ 320, 320, 279, 212, 199, 230, 199, 320, 320, 320,
- /* 2860 */ 199, 320, 221, 222, 320, 320, 320, 212, 279, 212,
- /* 2870 */ 320, 230, 320, 212, 320, 199, 221, 222, 221, 222,
- /* 2880 */ 279, 320, 221, 222, 279, 230, 320, 230, 212, 320,
- /* 2890 */ 199, 230, 199, 320, 199, 320, 320, 221, 222, 320,
- /* 2900 */ 320, 320, 320, 212, 279, 212, 230, 212, 320, 320,
- /* 2910 */ 320, 320, 221, 222, 221, 222, 221, 222, 320, 199,
- /* 2920 */ 279, 230, 320, 230, 320, 230, 320, 320, 320, 320,
- /* 2930 */ 320, 320, 212, 320, 279, 320, 279, 320, 320, 320,
- /* 2940 */ 279, 221, 222, 320, 320, 320, 320, 320, 320, 320,
- /* 2950 */ 230, 320, 320, 199, 320, 279, 199, 320, 320, 320,
- /* 2960 */ 320, 320, 320, 320, 320, 320, 212, 320, 320, 212,
- /* 2970 */ 279, 320, 279, 320, 279, 221, 222, 320, 221, 222,
- /* 2980 */ 320, 320, 320, 320, 230, 320, 320, 230, 320, 320,
- /* 2990 */ 320, 320, 320, 320, 320, 320, 320, 320, 320, 279,
- /* 3000 */ 320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
- /* 3010 */ 320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
- /* 3020 */ 320, 320, 320, 320, 320, 320, 320, 320, 320, 320,
- /* 3030 */ 320, 320, 320, 279, 320, 320, 279,
+ /* 0 */ 4, 131, 24, 31, 134, 135, 136, 50, 81, 82,
+ /* 10 */ 83, 84, 16, 41, 87, 88, 89, 90, 91, 92,
+ /* 20 */ 93, 94, 152, 96, 97, 98, 99, 100, 101, 102,
+ /* 30 */ 103, 104, 105, 106, 107, 102, 109, 117, 81, 82,
+ /* 40 */ 83, 84, 122, 122, 87, 88, 89, 90, 91, 92,
+ /* 50 */ 93, 94, 56, 96, 97, 98, 99, 100, 101, 102,
+ /* 60 */ 103, 104, 105, 106, 107, 144, 109, 102, 103, 104,
+ /* 70 */ 105, 106, 107, 77, 148, 91, 92, 93, 94, 83,
+ /* 80 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ /* 90 */ 106, 107, 159, 4, 116, 162, 100, 101, 102, 42,
+ /* 100 */ 43, 203, 203, 177, 108, 109, 83, 211, 68, 44,
+ /* 110 */ 4, 71, 116, 117, 122, 217, 217, 121, 122, 203,
+ /* 120 */ 109, 125, 16, 127, 128, 226, 227, 132, 133, 133,
+ /* 130 */ 24, 4, 68, 217, 235, 71, 140, 141, 142, 143,
+ /* 140 */ 242, 145, 85, 86, 248, 249, 4, 9, 83, 11,
+ /* 150 */ 158, 13, 160, 161, 158, 115, 160, 161, 203, 80,
+ /* 160 */ 164, 23, 56, 113, 26, 169, 170, 171, 172, 173,
+ /* 170 */ 174, 175, 217, 277, 178, 279, 180, 181, 282, 115,
+ /* 180 */ 203, 226, 227, 77, 285, 162, 43, 288, 192, 83,
+ /* 190 */ 235, 293, 54, 117, 217, 116, 117, 59, 302, 303,
+ /* 200 */ 223, 224, 64, 65, 117, 116, 100, 101, 70, 122,
+ /* 210 */ 121, 73, 19, 75, 108, 109, 127, 128, 263, 264,
+ /* 220 */ 4, 203, 116, 117, 4, 185, 83, 121, 122, 140,
+ /* 230 */ 314, 125, 16, 127, 128, 217, 122, 5, 45, 133,
+ /* 240 */ 285, 223, 224, 116, 155, 118, 140, 141, 142, 143,
+ /* 250 */ 112, 145, 114, 122, 127, 166, 167, 203, 116, 182,
+ /* 260 */ 67, 184, 30, 121, 158, 203, 160, 161, 36, 127,
+ /* 270 */ 128, 217, 56, 296, 297, 169, 170, 171, 172, 217,
+ /* 280 */ 174, 175, 140, 116, 178, 118, 180, 181, 145, 4,
+ /* 290 */ 163, 153, 60, 77, 151, 164, 64, 155, 192, 83,
+ /* 300 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ /* 310 */ 106, 107, 35, 21, 296, 297, 100, 101, 117, 60,
+ /* 320 */ 28, 122, 203, 122, 108, 109, 117, 128, 190, 37,
+ /* 330 */ 211, 122, 116, 117, 57, 145, 217, 121, 122, 5,
+ /* 340 */ 63, 125, 4, 127, 128, 226, 227, 127, 128, 133,
+ /* 350 */ 196, 197, 198, 199, 235, 165, 140, 141, 142, 143,
+ /* 360 */ 140, 145, 117, 170, 30, 166, 167, 122, 249, 169,
+ /* 370 */ 36, 317, 318, 319, 158, 133, 160, 161, 316, 203,
+ /* 380 */ 42, 43, 263, 264, 7, 169, 203, 171, 172, 12,
+ /* 390 */ 174, 175, 192, 217, 178, 175, 180, 181, 64, 122,
+ /* 400 */ 217, 116, 226, 227, 285, 146, 147, 148, 192, 226,
+ /* 410 */ 227, 235, 127, 128, 26, 156, 157, 40, 235, 81,
+ /* 420 */ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ /* 430 */ 92, 93, 94, 90, 96, 97, 98, 99, 100, 101,
+ /* 440 */ 102, 103, 104, 105, 106, 107, 100, 101, 102, 103,
+ /* 450 */ 104, 105, 106, 107, 141, 142, 118, 117, 275, 116,
+ /* 460 */ 175, 285, 122, 42, 43, 127, 308, 309, 285, 81,
+ /* 470 */ 82, 83, 84, 52, 116, 87, 88, 89, 90, 91,
+ /* 480 */ 92, 93, 94, 76, 96, 97, 98, 99, 100, 101,
+ /* 490 */ 102, 103, 104, 105, 106, 107, 320, 122, 119, 323,
+ /* 500 */ 80, 163, 81, 82, 83, 84, 85, 86, 87, 88,
+ /* 510 */ 89, 90, 91, 92, 93, 94, 4, 96, 97, 98,
+ /* 520 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 10,
+ /* 530 */ 117, 291, 203, 127, 133, 122, 116, 117, 119, 133,
+ /* 540 */ 203, 22, 122, 122, 169, 208, 217, 141, 142, 143,
+ /* 550 */ 213, 214, 151, 116, 217, 226, 227, 222, 223, 224,
+ /* 560 */ 153, 42, 43, 215, 235, 325, 326, 219, 220, 221,
+ /* 570 */ 182, 73, 184, 91, 92, 93, 94, 95, 96, 97,
+ /* 580 */ 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ /* 590 */ 217, 4, 263, 264, 100, 101, 4, 26, 191, 226,
+ /* 600 */ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ /* 610 */ 91, 92, 93, 94, 285, 96, 97, 98, 99, 100,
+ /* 620 */ 101, 102, 103, 104, 105, 106, 107, 4, 116, 35,
+ /* 630 */ 132, 203, 297, 121, 117, 141, 142, 10, 233, 127,
+ /* 640 */ 128, 236, 203, 42, 43, 217, 207, 53, 243, 22,
+ /* 650 */ 58, 57, 81, 82, 83, 84, 217, 63, 87, 88,
+ /* 660 */ 89, 90, 91, 92, 93, 94, 4, 96, 97, 98,
+ /* 670 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 146,
+ /* 680 */ 147, 148, 81, 82, 83, 84, 85, 86, 87, 88,
+ /* 690 */ 89, 90, 91, 92, 93, 94, 122, 96, 97, 98,
+ /* 700 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 32,
+ /* 710 */ 203, 122, 120, 126, 127, 128, 203, 13, 131, 127,
+ /* 720 */ 128, 134, 135, 136, 217, 117, 213, 214, 203, 260,
+ /* 730 */ 217, 262, 55, 250, 251, 210, 253, 212, 43, 152,
+ /* 740 */ 225, 21, 217, 120, 121, 317, 318, 319, 233, 234,
+ /* 750 */ 127, 128, 239, 182, 241, 184, 4, 37, 81, 82,
+ /* 760 */ 83, 84, 173, 169, 87, 88, 89, 90, 91, 92,
+ /* 770 */ 93, 94, 38, 96, 97, 98, 99, 100, 101, 102,
+ /* 780 */ 103, 104, 105, 106, 107, 81, 82, 83, 84, 127,
+ /* 790 */ 128, 87, 88, 89, 90, 91, 92, 93, 94, 35,
+ /* 800 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ /* 810 */ 106, 107, 4, 109, 195, 4, 154, 83, 203, 200,
+ /* 820 */ 34, 57, 315, 316, 16, 203, 74, 63, 66, 79,
+ /* 830 */ 211, 291, 217, 211, 72, 81, 82, 83, 84, 217,
+ /* 840 */ 145, 87, 88, 89, 90, 91, 92, 93, 94, 117,
+ /* 850 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ /* 860 */ 106, 107, 4, 203, 56, 325, 326, 248, 249, 83,
+ /* 870 */ 203, 249, 118, 105, 106, 107, 124, 217, 80, 127,
+ /* 880 */ 128, 73, 267, 268, 217, 77, 226, 227, 77, 267,
+ /* 890 */ 268, 83, 122, 107, 117, 235, 277, 135, 279, 203,
+ /* 900 */ 255, 282, 211, 207, 118, 222, 223, 224, 100, 101,
+ /* 910 */ 265, 100, 101, 217, 116, 117, 108, 131, 132, 133,
+ /* 920 */ 134, 135, 136, 137, 116, 117, 307, 116, 116, 121,
+ /* 930 */ 146, 147, 148, 125, 164, 127, 128, 151, 127, 248,
+ /* 940 */ 249, 133, 80, 193, 133, 285, 117, 185, 140, 141,
+ /* 950 */ 142, 143, 141, 142, 143, 219, 220, 221, 116, 4,
+ /* 960 */ 293, 117, 26, 203, 156, 157, 122, 244, 277, 246,
+ /* 970 */ 279, 250, 251, 282, 253, 26, 118, 217, 116, 117,
+ /* 980 */ 297, 203, 4, 175, 122, 127, 178, 117, 180, 181,
+ /* 990 */ 81, 82, 83, 84, 303, 217, 87, 88, 89, 90,
+ /* 1000 */ 91, 92, 93, 94, 283, 96, 97, 98, 99, 100,
+ /* 1010 */ 101, 102, 103, 104, 105, 106, 107, 81, 82, 83,
+ /* 1020 */ 84, 163, 73, 87, 88, 89, 90, 91, 92, 93,
+ /* 1030 */ 94, 44, 96, 97, 98, 99, 100, 101, 102, 103,
+ /* 1040 */ 104, 105, 106, 107, 81, 82, 83, 84, 217, 218,
+ /* 1050 */ 87, 88, 89, 90, 91, 92, 93, 94, 109, 96,
+ /* 1060 */ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ /* 1070 */ 107, 117, 312, 295, 314, 120, 121, 0, 81, 82,
+ /* 1080 */ 83, 84, 127, 128, 87, 88, 89, 90, 91, 92,
+ /* 1090 */ 93, 94, 183, 96, 97, 98, 99, 100, 101, 102,
+ /* 1100 */ 103, 104, 105, 106, 107, 127, 29, 129, 4, 81,
+ /* 1110 */ 82, 83, 84, 122, 117, 87, 88, 89, 90, 91,
+ /* 1120 */ 92, 93, 94, 203, 96, 97, 98, 99, 100, 101,
+ /* 1130 */ 102, 103, 104, 105, 106, 107, 159, 217, 4, 162,
+ /* 1140 */ 116, 81, 82, 83, 84, 117, 183, 87, 88, 89,
+ /* 1150 */ 90, 91, 92, 93, 94, 26, 96, 97, 98, 99,
+ /* 1160 */ 100, 101, 102, 103, 104, 105, 106, 107, 182, 198,
+ /* 1170 */ 199, 117, 81, 82, 83, 84, 122, 117, 87, 88,
+ /* 1180 */ 89, 90, 91, 92, 93, 94, 109, 96, 97, 98,
+ /* 1190 */ 99, 100, 101, 102, 103, 104, 105, 106, 107, 117,
+ /* 1200 */ 280, 4, 117, 81, 82, 83, 84, 122, 117, 87,
+ /* 1210 */ 88, 89, 90, 91, 92, 93, 94, 219, 96, 97,
+ /* 1220 */ 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ /* 1230 */ 162, 127, 128, 117, 81, 82, 83, 84, 122, 117,
+ /* 1240 */ 87, 88, 89, 90, 91, 92, 93, 94, 4, 96,
+ /* 1250 */ 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ /* 1260 */ 107, 127, 128, 15, 266, 4, 81, 82, 83, 84,
+ /* 1270 */ 166, 118, 87, 88, 89, 90, 91, 92, 93, 94,
+ /* 1280 */ 219, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+ /* 1290 */ 105, 106, 107, 45, 109, 81, 82, 83, 84, 4,
+ /* 1300 */ 166, 87, 88, 89, 90, 91, 92, 93, 94, 61,
+ /* 1310 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ /* 1320 */ 106, 107, 4, 109, 127, 128, 117, 266, 203, 203,
+ /* 1330 */ 219, 122, 207, 73, 16, 138, 164, 19, 81, 82,
+ /* 1340 */ 83, 84, 217, 217, 87, 88, 89, 90, 91, 92,
+ /* 1350 */ 93, 94, 4, 96, 97, 98, 99, 100, 101, 102,
+ /* 1360 */ 103, 104, 105, 106, 107, 121, 164, 203, 4, 109,
+ /* 1370 */ 203, 127, 128, 117, 56, 211, 14, 266, 122, 211,
+ /* 1380 */ 16, 217, 121, 19, 217, 4, 4, 69, 127, 128,
+ /* 1390 */ 226, 227, 203, 226, 227, 77, 203, 286, 150, 235,
+ /* 1400 */ 118, 83, 235, 85, 4, 212, 217, 203, 122, 117,
+ /* 1410 */ 217, 116, 122, 249, 122, 226, 227, 249, 100, 101,
+ /* 1420 */ 56, 217, 127, 128, 235, 116, 108, 263, 203, 4,
+ /* 1430 */ 263, 264, 188, 69, 116, 35, 4, 117, 312, 121,
+ /* 1440 */ 314, 77, 217, 125, 211, 127, 128, 83, 187, 285,
+ /* 1450 */ 4, 133, 285, 53, 203, 203, 255, 57, 140, 141,
+ /* 1460 */ 142, 143, 16, 63, 100, 101, 265, 4, 217, 217,
+ /* 1470 */ 175, 244, 108, 246, 285, 127, 128, 4, 226, 227,
+ /* 1480 */ 116, 203, 249, 14, 280, 121, 203, 235, 140, 125,
+ /* 1490 */ 47, 127, 128, 175, 4, 217, 178, 133, 180, 181,
+ /* 1500 */ 217, 203, 56, 121, 140, 141, 142, 143, 127, 127,
+ /* 1510 */ 128, 322, 323, 211, 32, 217, 168, 203, 211, 73,
+ /* 1520 */ 139, 139, 140, 77, 226, 227, 82, 127, 128, 83,
+ /* 1530 */ 211, 217, 62, 235, 4, 318, 319, 285, 4, 175,
+ /* 1540 */ 226, 227, 178, 111, 180, 181, 100, 101, 62, 235,
+ /* 1550 */ 168, 249, 127, 128, 108, 55, 249, 274, 14, 127,
+ /* 1560 */ 128, 263, 116, 100, 101, 140, 4, 121, 249, 169,
+ /* 1570 */ 4, 125, 320, 127, 128, 323, 219, 263, 203, 133,
+ /* 1580 */ 155, 205, 207, 285, 318, 319, 140, 141, 142, 143,
+ /* 1590 */ 127, 128, 217, 14, 121, 132, 14, 286, 203, 285,
+ /* 1600 */ 127, 128, 156, 157, 141, 142, 4, 4, 145, 4,
+ /* 1610 */ 147, 121, 217, 140, 318, 319, 305, 127, 128, 16,
+ /* 1620 */ 29, 175, 19, 266, 178, 14, 180, 181, 81, 82,
+ /* 1630 */ 83, 84, 156, 157, 87, 88, 89, 90, 91, 92,
+ /* 1640 */ 93, 94, 4, 96, 97, 98, 99, 100, 101, 102,
+ /* 1650 */ 103, 104, 105, 106, 107, 203, 116, 127, 128, 56,
+ /* 1660 */ 229, 127, 128, 268, 318, 319, 4, 203, 292, 217,
+ /* 1670 */ 140, 203, 69, 219, 140, 122, 186, 111, 226, 227,
+ /* 1680 */ 77, 217, 203, 203, 203, 217, 83, 235, 14, 127,
+ /* 1690 */ 226, 227, 4, 127, 128, 203, 217, 217, 217, 235,
+ /* 1700 */ 109, 139, 168, 100, 101, 226, 227, 226, 227, 217,
+ /* 1710 */ 242, 108, 318, 319, 235, 38, 235, 286, 116, 116,
+ /* 1720 */ 266, 117, 229, 117, 121, 117, 121, 275, 125, 127,
+ /* 1730 */ 127, 128, 127, 128, 242, 4, 133, 285, 166, 275,
+ /* 1740 */ 119, 203, 263, 140, 141, 142, 143, 119, 203, 285,
+ /* 1750 */ 4, 213, 214, 203, 4, 217, 275, 207, 102, 154,
+ /* 1760 */ 203, 293, 217, 122, 285, 127, 285, 217, 203, 159,
+ /* 1770 */ 116, 226, 227, 111, 217, 117, 4, 139, 175, 286,
+ /* 1780 */ 235, 178, 217, 180, 181, 293, 82, 83, 84, 127,
+ /* 1790 */ 128, 87, 88, 89, 90, 91, 92, 93, 94, 111,
+ /* 1800 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ /* 1810 */ 106, 107, 4, 116, 116, 127, 128, 117, 117, 73,
+ /* 1820 */ 275, 4, 117, 117, 16, 117, 50, 83, 84, 4,
+ /* 1830 */ 285, 87, 88, 89, 90, 91, 92, 93, 94, 274,
+ /* 1840 */ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ /* 1850 */ 106, 107, 203, 18, 4, 203, 203, 4, 127, 128,
+ /* 1860 */ 173, 116, 116, 117, 56, 6, 217, 121, 203, 217,
+ /* 1870 */ 217, 121, 4, 127, 128, 226, 227, 127, 128, 226,
+ /* 1880 */ 227, 203, 217, 203, 235, 77, 140, 118, 235, 4,
+ /* 1890 */ 140, 83, 8, 121, 116, 217, 4, 217, 50, 127,
+ /* 1900 */ 128, 155, 156, 157, 116, 203, 4, 117, 100, 101,
+ /* 1910 */ 179, 116, 263, 116, 4, 50, 108, 203, 168, 217,
+ /* 1920 */ 116, 4, 242, 203, 116, 117, 16, 102, 203, 121,
+ /* 1930 */ 137, 217, 207, 125, 285, 127, 128, 217, 285, 83,
+ /* 1940 */ 203, 133, 217, 203, 127, 128, 226, 227, 140, 141,
+ /* 1950 */ 142, 143, 127, 128, 217, 235, 151, 217, 125, 118,
+ /* 1960 */ 145, 189, 13, 226, 227, 140, 56, 164, 203, 122,
+ /* 1970 */ 4, 121, 235, 293, 121, 4, 274, 127, 128, 90,
+ /* 1980 */ 127, 128, 217, 175, 150, 203, 178, 77, 180, 181,
+ /* 1990 */ 140, 123, 175, 83, 90, 127, 128, 90, 4, 217,
+ /* 2000 */ 175, 203, 90, 176, 24, 285, 121, 18, 226, 227,
+ /* 2010 */ 100, 101, 127, 128, 274, 217, 4, 235, 108, 127,
+ /* 2020 */ 128, 168, 285, 121, 226, 227, 116, 117, 16, 127,
+ /* 2030 */ 128, 121, 203, 235, 203, 125, 150, 127, 128, 4,
+ /* 2040 */ 155, 177, 140, 133, 127, 128, 217, 203, 217, 203,
+ /* 2050 */ 140, 141, 142, 143, 4, 226, 227, 226, 227, 4,
+ /* 2060 */ 168, 217, 4, 217, 235, 157, 235, 285, 56, 109,
+ /* 2070 */ 226, 227, 226, 227, 109, 62, 4, 25, 203, 235,
+ /* 2080 */ 163, 235, 203, 285, 51, 175, 207, 121, 178, 77,
+ /* 2090 */ 180, 181, 217, 127, 128, 83, 217, 203, 127, 128,
+ /* 2100 */ 122, 226, 227, 203, 51, 185, 140, 207, 145, 203,
+ /* 2110 */ 235, 217, 100, 101, 285, 121, 285, 217, 4, 116,
+ /* 2120 */ 108, 127, 128, 217, 115, 4, 165, 203, 116, 285,
+ /* 2130 */ 16, 285, 125, 121, 140, 203, 116, 125, 117, 127,
+ /* 2140 */ 128, 217, 203, 115, 203, 133, 175, 117, 49, 217,
+ /* 2150 */ 226, 227, 140, 141, 142, 143, 217, 4, 217, 235,
+ /* 2160 */ 285, 4, 127, 128, 4, 226, 227, 226, 227, 113,
+ /* 2170 */ 56, 48, 216, 286, 235, 140, 235, 127, 128, 4,
+ /* 2180 */ 274, 309, 127, 128, 4, 127, 128, 175, 116, 203,
+ /* 2190 */ 178, 77, 180, 181, 182, 140, 203, 83, 269, 127,
+ /* 2200 */ 128, 232, 4, 217, 203, 4, 232, 149, 311, 285,
+ /* 2210 */ 217, 110, 226, 227, 100, 101, 311, 202, 217, 203,
+ /* 2220 */ 4, 235, 108, 207, 285, 202, 285, 226, 227, 203,
+ /* 2230 */ 116, 117, 16, 217, 202, 121, 235, 65, 188, 125,
+ /* 2240 */ 202, 127, 128, 217, 4, 204, 203, 133, 127, 128,
+ /* 2250 */ 207, 203, 226, 227, 140, 141, 142, 143, 4, 138,
+ /* 2260 */ 217, 235, 4, 203, 4, 217, 4, 204, 206, 78,
+ /* 2270 */ 209, 285, 56, 120, 226, 227, 203, 217, 122, 257,
+ /* 2280 */ 127, 128, 203, 235, 127, 128, 285, 127, 128, 175,
+ /* 2290 */ 217, 4, 178, 77, 180, 181, 217, 140, 119, 83,
+ /* 2300 */ 140, 272, 127, 128, 156, 226, 227, 127, 128, 258,
+ /* 2310 */ 251, 285, 4, 203, 235, 140, 100, 101, 173, 170,
+ /* 2320 */ 140, 120, 4, 259, 108, 127, 128, 217, 127, 128,
+ /* 2330 */ 171, 203, 116, 285, 16, 261, 172, 121, 203, 203,
+ /* 2340 */ 107, 125, 231, 127, 128, 217, 203, 116, 4, 133,
+ /* 2350 */ 4, 294, 217, 217, 226, 227, 140, 141, 142, 143,
+ /* 2360 */ 217, 203, 4, 235, 285, 203, 107, 127, 128, 226,
+ /* 2370 */ 227, 118, 289, 260, 56, 217, 182, 169, 235, 217,
+ /* 2380 */ 35, 127, 128, 313, 186, 127, 128, 127, 128, 127,
+ /* 2390 */ 128, 175, 203, 203, 178, 77, 180, 181, 203, 261,
+ /* 2400 */ 140, 83, 57, 276, 27, 46, 217, 217, 63, 155,
+ /* 2410 */ 276, 321, 217, 285, 127, 128, 226, 227, 100, 101,
+ /* 2420 */ 4, 226, 227, 4, 203, 235, 108, 140, 285, 189,
+ /* 2430 */ 235, 119, 4, 203, 116, 127, 128, 321, 217, 121,
+ /* 2440 */ 272, 253, 157, 125, 326, 127, 128, 217, 193, 187,
+ /* 2450 */ 4, 133, 228, 228, 109, 203, 226, 227, 140, 141,
+ /* 2460 */ 142, 143, 117, 39, 145, 235, 120, 122, 203, 217,
+ /* 2470 */ 238, 127, 128, 127, 128, 285, 168, 203, 203, 228,
+ /* 2480 */ 285, 203, 217, 144, 140, 127, 128, 230, 238, 228,
+ /* 2490 */ 145, 217, 217, 175, 203, 217, 178, 203, 180, 181,
+ /* 2500 */ 231, 226, 227, 158, 203, 160, 161, 228, 217, 203,
+ /* 2510 */ 235, 217, 228, 231, 169, 285, 171, 172, 217, 174,
+ /* 2520 */ 226, 227, 119, 217, 228, 203, 203, 228, 203, 235,
+ /* 2530 */ 206, 231, 226, 227, 176, 272, 120, 192, 203, 217,
+ /* 2540 */ 217, 235, 217, 127, 128, 203, 127, 128, 119, 226,
+ /* 2550 */ 227, 119, 217, 203, 206, 127, 128, 203, 235, 217,
+ /* 2560 */ 285, 226, 227, 33, 203, 272, 203, 217, 226, 227,
+ /* 2570 */ 235, 217, 126, 127, 128, 182, 300, 235, 217, 285,
+ /* 2580 */ 217, 301, 119, 257, 174, 278, 245, 226, 227, 81,
+ /* 2590 */ 119, 285, 278, 257, 175, 119, 235, 281, 203, 116,
+ /* 2600 */ 203, 284, 203, 175, 145, 203, 278, 278, 285, 257,
+ /* 2610 */ 245, 206, 217, 119, 217, 272, 217, 203, 206, 217,
+ /* 2620 */ 285, 226, 227, 226, 227, 226, 227, 285, 226, 227,
+ /* 2630 */ 235, 217, 235, 257, 235, 119, 272, 235, 203, 247,
+ /* 2640 */ 226, 227, 78, 203, 119, 247, 285, 119, 247, 235,
+ /* 2650 */ 119, 247, 217, 119, 176, 295, 272, 217, 119, 304,
+ /* 2660 */ 20, 226, 227, 272, 119, 203, 226, 227, 272, 203,
+ /* 2670 */ 235, 203, 304, 119, 119, 235, 306, 17, 306, 217,
+ /* 2680 */ 285, 254, 285, 217, 285, 217, 256, 285, 226, 227,
+ /* 2690 */ 229, 297, 226, 227, 226, 227, 290, 235, 260, 285,
+ /* 2700 */ 203, 235, 260, 235, 286, 203, 297, 203, 271, 273,
+ /* 2710 */ 229, 236, 240, 256, 217, 230, 273, 273, 201, 217,
+ /* 2720 */ 285, 217, 257, 226, 227, 285, 219, 254, 226, 227,
+ /* 2730 */ 226, 227, 235, 219, 219, 287, 203, 235, 219, 235,
+ /* 2740 */ 299, 203, 252, 298, 246, 324, 237, 285, 237, 270,
+ /* 2750 */ 217, 285, 226, 285, 241, 217, 203, 237, 226, 226,
+ /* 2760 */ 227, 310, 203, 73, 226, 227, 4, 327, 235, 327,
+ /* 2770 */ 217, 327, 327, 235, 327, 327, 217, 327, 327, 226,
+ /* 2780 */ 227, 203, 285, 203, 327, 226, 227, 285, 235, 285,
+ /* 2790 */ 327, 327, 327, 327, 235, 217, 327, 217, 327, 327,
+ /* 2800 */ 327, 327, 327, 327, 226, 227, 226, 227, 327, 327,
+ /* 2810 */ 327, 327, 327, 235, 327, 235, 327, 327, 285, 327,
+ /* 2820 */ 327, 327, 327, 285, 327, 327, 327, 327, 327, 327,
+ /* 2830 */ 327, 327, 327, 327, 327, 327, 327, 327, 285, 327,
+ /* 2840 */ 327, 327, 327, 327, 285, 327, 327, 327, 327, 327,
+ /* 2850 */ 327, 327, 327, 327, 327, 327, 327, 327, 327, 327,
+ /* 2860 */ 327, 327, 327, 285, 327, 285,
};
-#define YY_SHIFT_USE_DFLT (-101)
-#define YY_SHIFT_COUNT (513)
-#define YY_SHIFT_MIN (-100)
-#define YY_SHIFT_MAX (2642)
+#define YY_SHIFT_USE_DFLT (-131)
+#define YY_SHIFT_COUNT (534)
+#define YY_SHIFT_MIN (-130)
+#define YY_SHIFT_MAX (2762)
static const short yy_shift_ofst[] = {
- /* 0 */ 1352, 828, 1151, 1708, 1045, 1777, 1671, 2219, 2219, 2219,
- /* 10 */ 1753, 244, 2113, 2343, 2343, 2343, 2343, 2343, 2343, 2449,
- /* 20 */ 2343, 742, -4, 120, 2007, 1901, 2343, 2343, 2343, 2343,
- /* 30 */ 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343,
- /* 40 */ 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343,
- /* 50 */ 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343,
- /* 60 */ 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 779,
- /* 70 */ 1062, 1062, -1, 518, 518, 1744, 66, 15, 1016, 1744,
- /* 80 */ 2226, 2226, 2226, 2189, 2226, 748, 748, 2203, 400, 365,
- /* 90 */ 151, 69, 1763, 1130, 1852, 1845, 1293, 682, 1187, 682,
- /* 100 */ 1183, 1006, 436, 967, 2278, 2237, 2237, 2237, 2237, 285,
- /* 110 */ 2237, 2226, 2203, 2203, 400, 1685, 1685, 1454, 530, 530,
- /* 120 */ 956, 845, 191, 223, 306, 1626, 1158, 945, 439, 642,
- /* 130 */ 314, 1236, 795, 1236, 88, 797, 343, 466, 85, 2184,
- /* 140 */ 2174, 2169, 2154, 2000, 1662, 2205, 2104, 2180, 1447, 2149,
- /* 150 */ 2080, 1986, 1967, 1417, 2025, 1955, 1931, 1194, 1857, 1831,
- /* 160 */ 368, 1825, 1740, 1701, 1701, 1701, 1289, 811, 1070, 437,
- /* 170 */ 437, 799, 684, 674, 551, 516, 84, 1655, 1633, 1508,
- /* 180 */ 1162, 2203, 1166, 1166, 1207, 1069, 497, 2571, 2571, 2642,
- /* 190 */ 2571, 2571, -101, -101, 447, 739, 690, 653, -72, 610,
- /* 200 */ 610, 610, 610, 610, 610, 776, 415, 927, 569, 1582,
- /* 210 */ 1554, 1523, 1495, 1465, 1435, 1405, 1375, 1345, 1303, 1276,
- /* 220 */ 1250, 1007, 1842, 1612, 2284, 2514, 2514, -37, 626, 626,
- /* 230 */ 626, 626, -59, 202, 115, 348, 348, -17, 566, 486,
- /* 240 */ 208, 208, 208, 170, 1093, 358, 116, 97, 752, 363,
- /* 250 */ 1110, 1079, 877, 196, 603, 974, 154, 487, 735, 735,
- /* 260 */ 76, 1706, 595, 581, 735, 836, 598, 598, 855, 581,
- /* 270 */ 345, 345, 375, 253, 134, 2527, 2441, 2439, 2430, 2523,
- /* 280 */ 2523, 2425, 2368, 2422, 2455, 2420, 2455, 2418, 2455, 2415,
- /* 290 */ 2455, 2411, 2089, 2048, 2399, 2089, 2424, 2048, 2371, 2398,
- /* 300 */ 2393, 2048, 2390, 2424, 2048, 2381, 2319, 2444, 2348, 2089,
- /* 310 */ 2324, 2133, 2089, 2313, 2133, 2222, 2222, 2222, 2222, 2328,
- /* 320 */ 2133, 2222, 2264, 2222, 2328, 2222, 2222, 2152, 2177, 2183,
- /* 330 */ 2269, 2269, 2242, 2242, 2061, 2114, 2088, 2151, 2133, 2162,
- /* 340 */ 2130, 2061, 2053, 2056, 2048, 2054, 2083, 2117, 2060, 2089,
- /* 350 */ 2074, 2074, 2028, 2028, 2028, 2028, -101, -101, -101, -101,
- /* 360 */ -101, -101, -101, -101, -101, -101, 1090, -65, 238, 60,
- /* 370 */ 194, 697, 79, -38, 1690, 1644, 1066, 1614, 81, 1604,
- /* 380 */ 1575, 1294, 1170, 1147, 183, 558, -29, 1050, 1002, 129,
- /* 390 */ 878, 848, 148, 138, 2045, 2032, 1979, 1957, 1961, 1956,
- /* 400 */ 1948, 1953, 1902, 1949, 1946, 1909, 1878, 1992, 1912, 1982,
- /* 410 */ 1970, 1987, 1904, 1903, 1854, 1836, 1855, 1969, 1968, 1794,
- /* 420 */ 1874, 1870, 1869, 1838, 1774, 1759, 1891, 1770, 1795, 1783,
- /* 430 */ 1827, 1745, 1755, 1764, 1805, 1756, 1752, 1736, 1729, 1789,
- /* 440 */ 1828, 1718, 1668, 1822, 1642, 1725, 1741, 1618, 1584, 1624,
- /* 450 */ 1608, 1581, 1551, 1533, 1427, 1474, 1475, 1464, 1445, 1427,
- /* 460 */ 1443, 1412, 1402, 1336, 1374, 1366, 1297, 1324, 1430, 1400,
- /* 470 */ 1195, 1297, 1355, 1346, 1248, 1216, 1165, 1163, 1177, 1109,
- /* 480 */ 1095, 1074, 977, 1021, 926, 830, 816, 807, 873, 787,
- /* 490 */ 707, 786, 522, 686, 649, 616, 522, 523, 448, 407,
- /* 500 */ 344, 362, 308, 278, 272, 235, 184, 119, 105, -81,
- /* 510 */ 38, -43, -89, -100,
+ /* 0 */ 1591, 808, 1446, 138, 1318, 1603, 1364, 2114, 2114, 2114,
+ /* 10 */ 1260, 216, 2012, 2216, 2318, 2216, 2216, 2216, 2216, 2216,
+ /* 20 */ 2216, 949, -4, 106, 1910, 1808, 2216, 2216, 2216, 2216,
+ /* 30 */ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2318, 2216,
+ /* 40 */ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ /* 50 */ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ /* 60 */ 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216, 2216,
+ /* 70 */ 2216, 2216, 1746, 1463, 1463, 587, 1400, 1400, 2446, 89,
+ /* 80 */ 259, 592, 752, 2446, 2419, 2419, 2419, 2416, 2419, 494,
+ /* 90 */ 494, 2258, 978, 338, 786, 142, 1994, 1772, 1853, 1885,
+ /* 100 */ 1966, 1295, 1902, 1295, 1850, 1473, 1605, 752, 955, 2358,
+ /* 110 */ 2428, 2428, 2428, 2428, 143, 2428, 2419, 2258, 2258, 978,
+ /* 120 */ 750, 750, 1476, 519, 519, -43, 811, 1382, 1750, 1825,
+ /* 130 */ 1534, 1348, 1261, 623, 1490, 285, 232, 1244, 232, 1425,
+ /* 140 */ 127, 594, 220, 512, 2346, 2344, 2262, 2240, 2308, 2254,
+ /* 150 */ 2287, 2201, 2260, 2198, 2180, 2175, 2160, 2055, 2050, 662,
+ /* 160 */ 2153, 2157, 2121, 2058, 2035, 2072, 1134, 1104, 858, 858,
+ /* 170 */ 858, 1892, 1917, 1971, 277, 277, 1731, 1817, 1530, 1197,
+ /* 180 */ 1868, 762, 1688, 1662, 1566, 1432, 2258, 2258, 764, 764,
+ /* 190 */ 1077, 498, 200, 2690, 2690, 2762, 2690, 2690, -131, -131,
+ /* 200 */ -131, 421, 601, 601, 601, 601, 601, 601, 601, 601,
+ /* 210 */ 601, 601, 571, 388, 704, 677, 1214, 1185, 1153, -73,
+ /* 220 */ 1122, 1091, 1060, 1028, 997, 963, 936, 909, 754, 1547,
+ /* 230 */ 1257, 1704, 1744, 1744, 482, -16, -16, -16, -16, -16,
+ /* 240 */ -16, 204, 346, -35, -130, 406, 406, 862, 420, 1248,
+ /* 250 */ 1248, 1248, 199, 193, 334, -8, 57, 784, 377, 1638,
+ /* 260 */ 1562, 1602, 768, 1381, -67, 292, 589, 770, 734, 734,
+ /* 270 */ -79, 1292, 695, 627, 734, 190, 375, 375, 77, 627,
+ /* 280 */ 313, 313, 23, 131, 977, 2660, 2660, 2555, 2554, 2545,
+ /* 290 */ 2640, 2640, 2539, 2478, 2534, 2564, 2531, 2564, 2528, 2564,
+ /* 300 */ 2525, 2564, 2516, 2191, 2145, 2494, 2191, 2508, 2410, 2145,
+ /* 310 */ 2410, 2459, 2483, 2476, 2410, 2145, 2471, 2508, 2410, 2145,
+ /* 320 */ 2463, 2393, 2530, 2432, 2191, 2429, 2231, 2191, 2403, 2231,
+ /* 330 */ 2319, 2319, 2319, 2319, 2424, 2231, 2319, 2339, 2319, 2424,
+ /* 340 */ 2319, 2319, 2255, 2285, 2312, 2377, 2377, 2359, 2359, 2164,
+ /* 350 */ 2208, 2194, 2253, 2259, 2231, 2233, 2233, 2164, 2159, 2149,
+ /* 360 */ 2145, 2148, 2179, 2156, 2191, 2172, 2172, 2101, 2101, 2101,
+ /* 370 */ 2101, -131, -131, -131, -131, -131, -131, -131, -131, -131,
+ /* 380 */ -131, 2345, 40, 407, 798, 79, 533, 64, 343, 1256,
+ /* 390 */ 1209, -74, 1116, -22, 1085, 1054, 844, 413, 340, -5,
+ /* 400 */ 720, 401, 245, 209, -28, 65, 201, 87, -80, 167,
+ /* 410 */ 2123, 2099, 2056, 2028, 2030, 2021, 2007, 2020, 1961, 2009,
+ /* 420 */ 2003, 1963, 1920, 2053, 1978, 2033, 2013, 2052, 1965, 1960,
+ /* 430 */ 1908, 1864, 1886, 1980, 1989, 1827, 1912, 1907, 1904, 1889,
+ /* 440 */ 1834, 1847, 1803, 1949, 1815, 1841, 1833, 1856, 1805, 1793,
+ /* 450 */ 1804, 1865, 1797, 1795, 1790, 1788, 1848, 1884, 1778, 1769,
+ /* 460 */ 1859, 1745, 1776, 1835, 1708, 1687, 1698, 1706, 1705, 1701,
+ /* 470 */ 1700, 1641, 1610, 1697, 1658, 1654, 1641, 1656, 1628, 1621,
+ /* 480 */ 1572, 1608, 1606, 1553, 1604, 1677, 1674, 1540, 1553, 1611,
+ /* 490 */ 1582, 1579, 1544, 1500, 1486, 1482, 1444, 1470, 1443, 1469,
+ /* 500 */ 1320, 1309, 1282, 1290, 1286, 1362, 1202, 1172, 1068, 1082,
+ /* 510 */ 986, 1129, 991, 954, 1024, 987, 991, 870, 842, 829,
+ /* 520 */ 777, 812, 732, 608, 517, 574, 437, 419, 379, 242,
+ /* 530 */ 358, 114, 76, 50, 11,
};
-#define YY_REDUCE_USE_DFLT (-228)
-#define YY_REDUCE_COUNT (365)
-#define YY_REDUCE_MIN (-227)
-#define YY_REDUCE_MAX (2757)
+#define YY_REDUCE_USE_DFLT (-105)
+#define YY_REDUCE_COUNT (380)
+#define YY_REDUCE_MIN (-104)
+#define YY_REDUCE_MAX (2580)
static const short yy_reduce_ofst[] = {
- /* 0 */ 389, -131, -8, 117, 1524, 366, 123, 958, 717, 118,
- /* 10 */ -66, 1806, 1767, 1823, 1773, 1762, 1600, 1030, 1593, 1576,
- /* 20 */ 1013, 875, 2757, 2754, 2720, 2695, 2693, 2691, 2676, 2661,
- /* 30 */ 2657, 2655, 2641, 2625, 2605, 2601, 2589, 2573, 2559, 2557,
- /* 40 */ 2554, 2520, 2494, 2482, 2480, 2468, 2461, 2454, 2442, 2435,
- /* 50 */ 2428, 2359, 2354, 2277, 2272, 2238, 2213, 2206, 2178, 2132,
- /* 60 */ 2046, 2041, 2026, 1980, 1975, 1940, 1935, 1929, 1835, 172,
- /* 70 */ 670, 386, -130, 866, 760, -101, 211, 1265, 1113, 216,
- /* 80 */ 1882, 1814, 1531, 1027, 699, 858, 688, -166, 361, 1737,
- /* 90 */ 765, 868, 2194, 2058, 1964, 1883, 1686, 1528, 1561, 55,
- /* 100 */ 1521, 1064, 933, 394, 751, 1779, 1695, 1640, 996, -227,
- /* 110 */ 122, 1539, 605, -119, 773, 606, -173, 321, 1638, 1563,
- /* 120 */ 893, 525, 2289, 2279, 2239, 1888, 1888, 2275, 2274, 2271,
- /* 130 */ 2263, 1211, 2246, 876, 1888, 1619, 1261, 2239, 2234, 2232,
- /* 140 */ 1888, 1888, 1888, 1888, 1888, 1888, 1888, 2214, 1888, 1888,
- /* 150 */ 1888, 1888, 2211, 1888, 1888, 1888, 2210, 2204, 2124, 2122,
- /* 160 */ 2110, 2103, 2082, 1587, 1082, 1059, 2001, 1973, 1943, 1171,
- /* 170 */ 1111, 1914, 1899, 1888, 1861, 1761, 1012, 1713, 1684, 1679,
- /* 180 */ 1672, 1530, 1098, 1075, 1084, 1152, 824, 931, 710, 1103,
- /* 190 */ 646, 189, 851, -74, 1817, 1817, 1817, 1817, 1817, 1817,
- /* 200 */ 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
- /* 210 */ 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
- /* 220 */ 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817,
- /* 230 */ 1817, 1817, 1817, 1817, 2416, 2427, 2423, 1817, 2335, 2335,
- /* 240 */ 2413, 2410, 2404, 2372, 2318, 2391, 2382, 2350, 2337, 2336,
- /* 250 */ 2412, 2409, 2407, 2406, 2358, 2401, 2340, 2346, 2326, 2325,
- /* 260 */ 2365, 2356, 2352, 2355, 2306, 2302, 2327, 2322, 2286, 2341,
- /* 270 */ 2273, 2270, 1817, 2312, 2310, 2260, 2150, 2285, 2283, 2247,
- /* 280 */ 2244, 2282, 2251, 2150, 2295, 2150, 2293, 2150, 2291, 2150,
- /* 290 */ 2287, 2259, 2321, 2276, 2257, 2320, 2281, 2268, 2236, 2235,
- /* 300 */ 2150, 2256, 2150, 2265, 2248, 2150, 2200, 2196, 2202, 2253,
- /* 310 */ 2150, 2228, 2250, 2150, 2221, 2216, 2209, 2207, 2197, 2182,
- /* 320 */ 2195, 2191, 2166, 2145, 2112, 2129, 2123, 2016, 2071, 2047,
- /* 330 */ 1997, 1977, 2013, 2009, 2019, 2011, 1981, 1972, 2018, 1989,
- /* 340 */ 1817, 1983, 1978, 1971, 1963, 1952, 1928, 1985, 1966, 1984,
- /* 350 */ 1954, 1933, 1962, 1942, 1939, 1934, 1813, 1811, 1812, 1880,
- /* 360 */ 1872, 1840, 1817, 1817, 1817, 1885,
+ /* 0 */ 154, 119, 1164, 619, 1252, 1189, 176, 1167, 329, -45,
+ /* 10 */ -104, 1649, -101, 1545, 1481, 1479, 1464, 1452, 1314, 1298,
+ /* 20 */ 183, 691, 2580, 2578, 2559, 2553, 2538, 2533, 2504, 2502,
+ /* 30 */ 2497, 2468, 2466, 2462, 2440, 2435, 2414, 2402, 2399, 2397,
+ /* 40 */ 2395, 2361, 2342, 2335, 2323, 2306, 2294, 2275, 2230, 2195,
+ /* 50 */ 2190, 2143, 2128, 2079, 2048, 2026, 2001, 1986, 1941, 1939,
+ /* 60 */ 1924, 1875, 1846, 1844, 1831, 1829, 1798, 1782, 1737, 1720,
+ /* 70 */ 1653, 660, 622, 18, -23, 513, 428, 54, 337, 615,
+ /* 80 */ 721, 1126, 525, 1538, 1680, 1492, 1468, 760, -102, 683,
+ /* 90 */ 335, 507, 348, 1111, 515, 1395, 2043, 2016, 1900, 1879,
+ /* 100 */ 1725, 1204, 1550, 920, 1375, 1125, 696, 1193, 439, 778,
+ /* 110 */ 1906, 1740, 1702, 1565, 405, 1283, 667, 62, -84, 736,
+ /* 120 */ 540, 240, 483, 1493, 1431, 1311, 373, 2363, 2354, 2322,
+ /* 130 */ 1894, 1894, 2350, 2325, 2136, 1932, 1227, 1714, 723, 1894,
+ /* 140 */ 1454, 1394, 2322, 2301, 2291, 1894, 1894, 1894, 1894, 1894,
+ /* 150 */ 1894, 1894, 2278, 1894, 1894, 1894, 1894, 2274, 1894, 1894,
+ /* 160 */ 1894, 2265, 2252, 2221, 2189, 2162, 2158, 2135, 1357, 1061,
+ /* 170 */ 998, 2110, 2073, 1665, 1346, 1296, 2060, 1993, 1894, 1765,
+ /* 180 */ 1678, 1376, 1652, 1557, 1480, 1278, 1251, 1225, 1266, 1217,
+ /* 190 */ 971, 1319, 469, 1307, 1302, 831, 1233, 1168, 158, 1201,
+ /* 200 */ 645, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887,
+ /* 210 */ 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887,
+ /* 220 */ 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887,
+ /* 230 */ 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887, 1887,
+ /* 240 */ 1887, 1887, 1887, 1887, 2513, 2532, 2526, 2451, 2451, 2520,
+ /* 250 */ 2511, 2509, 2479, 2421, 2498, 2490, 2448, 2441, 2445, 2519,
+ /* 260 */ 2515, 2514, 1887, 2507, 2473, 2517, 2465, 2457, 2444, 2443,
+ /* 270 */ 2485, 2472, 2475, 2481, 2436, 2437, 2442, 2438, 2406, 2461,
+ /* 280 */ 2409, 2394, 2418, 2430, 2427, 2372, 2370, 2263, 2396, 2391,
+ /* 290 */ 2368, 2355, 2384, 2360, 2263, 2404, 2263, 2401, 2263, 2398,
+ /* 300 */ 2263, 2392, 2364, 2412, 2376, 2343, 2405, 2365, 2329, 2352,
+ /* 310 */ 2328, 2317, 2316, 2263, 2314, 2336, 2263, 2341, 2307, 2326,
+ /* 320 */ 2263, 2280, 2276, 2293, 2348, 2263, 2300, 2324, 2263, 2282,
+ /* 330 */ 2299, 2296, 2284, 2279, 2250, 2269, 2261, 2257, 2251, 2232,
+ /* 340 */ 2225, 2224, 2118, 2188, 2168, 2116, 2090, 2134, 2127, 2138,
+ /* 350 */ 2113, 2083, 2070, 2057, 2111, 1887, 1887, 2074, 2064, 2051,
+ /* 360 */ 2022, 2059, 2029, 2061, 2062, 2063, 2041, 2038, 2032, 2023,
+ /* 370 */ 2015, 1905, 1897, 1872, 1974, 1969, 1929, 1887, 1887, 1887,
+ /* 380 */ 1956,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 849, 1158, 1158, 1277, 1158, 1158, 1158, 1158, 1158, 1158,
- /* 10 */ 1277, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
- /* 20 */ 1158, 1277, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
- /* 30 */ 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
- /* 40 */ 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
- /* 50 */ 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
- /* 60 */ 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1029,
- /* 70 */ 1316, 1316, 1316, 1293, 1293, 1316, 1022, 1316, 1316, 1316,
- /* 80 */ 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 896, 1018,
- /* 90 */ 886, 1029, 1316, 1316, 1316, 1316, 1316, 1089, 1103, 1089,
- /* 100 */ 1081, 1072, 1316, 1316, 1194, 1097, 1097, 1097, 1097, 969,
- /* 110 */ 1097, 1316, 1316, 1316, 1316, 1129, 1128, 1316, 1057, 1057,
- /* 120 */ 1160, 1316, 1247, 1252, 1316, 1316, 1316, 1316, 1316, 1316,
- /* 130 */ 1090, 1316, 1316, 1316, 1030, 1018, 1293, 1316, 1316, 1316,
- /* 140 */ 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1104,
- /* 150 */ 1082, 1073, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316,
- /* 160 */ 1316, 1316, 1316, 1018, 1018, 1018, 1316, 1316, 1316, 1293,
- /* 170 */ 1293, 1316, 1316, 1316, 1316, 1316, 883, 1316, 1316, 1316,
- /* 180 */ 855, 1316, 1293, 1293, 849, 1277, 1051, 1277, 1277, 891,
- /* 190 */ 1277, 1277, 1270, 1008, 1067, 1160, 1160, 1160, 1160, 1035,
- /* 200 */ 1077, 1065, 1069, 1171, 1068, 1160, 1160, 1160, 1160, 1160,
- /* 210 */ 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160,
- /* 220 */ 1160, 1160, 1160, 1160, 1131, 1143, 1130, 1138, 1147, 1139,
- /* 230 */ 1142, 1133, 1132, 1134, 1316, 1316, 1316, 1135, 1316, 1316,
- /* 240 */ 1316, 1316, 1316, 1021, 1316, 1316, 991, 1316, 1316, 1221,
- /* 250 */ 1316, 1316, 898, 1316, 1006, 858, 1076, 1019, 1047, 1047,
- /* 260 */ 936, 960, 920, 1057, 1047, 1037, 1051, 1051, 1166, 1057,
- /* 270 */ 1316, 1316, 1136, 1019, 1006, 1261, 1038, 1038, 1038, 1246,
- /* 280 */ 1246, 1038, 1194, 1038, 982, 1038, 982, 1038, 982, 1038,
- /* 290 */ 982, 1038, 880, 1076, 1038, 880, 973, 1076, 1109, 1093,
- /* 300 */ 1038, 1076, 1038, 973, 1076, 1038, 1228, 1226, 1038, 880,
- /* 310 */ 1038, 1179, 880, 1038, 1179, 971, 971, 971, 971, 952,
- /* 320 */ 1179, 971, 936, 971, 952, 971, 971, 1312, 1316, 1038,
- /* 330 */ 1303, 1303, 1060, 1060, 1066, 1051, 1316, 1185, 1179, 1160,
- /* 340 */ 1137, 1066, 1064, 1061, 1076, 1316, 1038, 877, 955, 880,
- /* 350 */ 866, 866, 854, 854, 854, 854, 1274, 1274, 1270, 938,
- /* 360 */ 938, 1024, 1146, 1145, 1144, 907, 1159, 1316, 1316, 1316,
- /* 370 */ 1316, 1316, 1316, 1195, 1316, 1316, 1316, 1316, 1316, 1316,
- /* 380 */ 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316,
- /* 390 */ 1316, 1316, 1316, 1316, 1316, 850, 1316, 1316, 1316, 1316,
- /* 400 */ 1316, 1264, 1316, 1316, 1316, 1316, 1316, 1316, 1225, 1224,
- /* 410 */ 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316,
- /* 420 */ 1316, 1316, 1316, 1316, 1316, 1316, 1213, 1316, 1316, 1316,
- /* 430 */ 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316,
- /* 440 */ 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316,
- /* 450 */ 1316, 1316, 1316, 1316, 994, 1000, 1316, 1316, 1316, 995,
- /* 460 */ 1316, 1316, 1122, 1316, 1316, 1316, 1169, 1316, 1316, 1316,
- /* 470 */ 1316, 1062, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316,
- /* 480 */ 1316, 1316, 1316, 1316, 1316, 1316, 1309, 1052, 1316, 1316,
- /* 490 */ 1159, 1316, 1279, 1316, 1316, 1316, 1278, 1316, 1316, 1316,
- /* 500 */ 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1123, 1122, 1161,
- /* 510 */ 889, 1316, 864, 1316, 846, 851, 1263, 1260, 1262, 1257,
- /* 520 */ 1258, 1256, 1259, 1255, 1253, 1254, 1251, 1249, 1248, 1250,
- /* 530 */ 1245, 1241, 1201, 1199, 1197, 1206, 1205, 1204, 1203, 1202,
- /* 540 */ 1198, 1196, 1200, 1192, 1191, 1100, 1079, 1070, 989, 1240,
- /* 550 */ 1238, 1239, 1190, 1188, 1189, 988, 987, 986, 981, 980,
- /* 560 */ 979, 978, 1267, 1276, 1275, 1273, 1272, 1271, 1265, 1266,
- /* 570 */ 1177, 1176, 1174, 1173, 1175, 882, 1217, 1220, 1219, 1218,
- /* 580 */ 1223, 1222, 1215, 1227, 1232, 1231, 1236, 1235, 1234, 1233,
- /* 590 */ 1230, 1212, 1108, 1107, 1105, 1102, 1112, 1111, 1110, 1101,
- /* 600 */ 1094, 1106, 1084, 1092, 1091, 1080, 1083, 974, 1075, 1071,
- /* 610 */ 1074, 990, 1216, 985, 984, 983, 881, 876, 1040, 875,
- /* 620 */ 874, 885, 958, 959, 967, 970, 965, 968, 964, 963,
- /* 630 */ 962, 966, 961, 957, 888, 887, 897, 951, 934, 923,
- /* 640 */ 890, 925, 922, 921, 926, 943, 942, 949, 948, 947,
- /* 650 */ 946, 945, 941, 944, 940, 939, 927, 919, 918, 937,
- /* 660 */ 917, 954, 953, 950, 916, 977, 976, 975, 972, 915,
- /* 670 */ 914, 913, 912, 911, 910, 1157, 1315, 1311, 1314, 1313,
- /* 680 */ 1310, 1156, 1162, 1150, 1148, 992, 1003, 1002, 1001, 998,
- /* 690 */ 999, 1013, 1011, 1010, 1009, 1046, 1045, 1044, 1043, 1042,
- /* 700 */ 1041, 1034, 1032, 1027, 1026, 1033, 1031, 1028, 1049, 1050,
- /* 710 */ 1048, 1025, 1017, 1015, 1016, 1014, 1099, 1096, 1098, 1095,
- /* 720 */ 1036, 1023, 1020, 1007, 1291, 1289, 1292, 1290, 1288, 1296,
- /* 730 */ 1298, 1297, 1302, 1300, 1299, 1295, 1308, 1307, 1306, 1305,
- /* 740 */ 1304, 1294, 1301, 1287, 1286, 1285, 1284, 1054, 1059, 1058,
- /* 750 */ 1053, 997, 1161, 1149, 1159, 1153, 1282, 1280, 1283, 1182,
- /* 760 */ 1184, 1187, 1186, 1183, 1056, 1055, 1181, 1180, 1281, 1152,
- /* 770 */ 1127, 903, 901, 902, 1209, 1208, 1211, 1210, 1207, 905,
- /* 780 */ 904, 900, 899, 1125, 1121, 1120, 1237, 1154, 1155, 1119,
- /* 790 */ 1124, 1117, 1116, 1115, 1141, 1140, 1126, 1118, 892, 996,
- /* 800 */ 993, 1151, 1114, 1039, 1113, 933, 932, 931, 930, 929,
- /* 810 */ 928, 1005, 1004, 909, 924, 908, 906, 884, 879, 878,
- /* 820 */ 873, 871, 868, 870, 867, 872, 869, 865, 863, 862,
- /* 830 */ 861, 860, 859, 895, 894, 893, 889, 857, 856, 853,
- /* 840 */ 852, 848, 847, 845,
+ /* 0 */ 875, 1195, 1195, 1315, 1195, 1195, 1195, 1195, 1195, 1195,
+ /* 10 */ 1315, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ /* 20 */ 1195, 1315, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ /* 30 */ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ /* 40 */ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ /* 50 */ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ /* 60 */ 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
+ /* 70 */ 1195, 1195, 1059, 1357, 1357, 1357, 1334, 1334, 1357, 1052,
+ /* 80 */ 1357, 1357, 903, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
+ /* 90 */ 1357, 1357, 926, 1048, 916, 1059, 1357, 1357, 1357, 1357,
+ /* 100 */ 1357, 1121, 1135, 1121, 1113, 1102, 1357, 1357, 1357, 1231,
+ /* 110 */ 1129, 1129, 1129, 1129, 999, 1129, 1357, 1357, 1357, 1357,
+ /* 120 */ 1163, 1162, 1357, 1087, 1087, 1197, 1357, 1284, 1289, 1156,
+ /* 130 */ 1357, 1357, 1357, 1357, 1357, 1122, 1357, 1357, 1357, 1060,
+ /* 140 */ 1048, 1334, 1156, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
+ /* 150 */ 1357, 1357, 1357, 1357, 1136, 1114, 1103, 1357, 1357, 1357,
+ /* 160 */ 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1048, 1048,
+ /* 170 */ 1048, 1357, 1357, 1357, 1334, 1334, 1357, 1158, 1357, 1357,
+ /* 180 */ 1357, 913, 1357, 1357, 1357, 881, 1357, 1357, 1334, 1334,
+ /* 190 */ 875, 1315, 1081, 1315, 1315, 921, 1315, 1315, 1308, 1038,
+ /* 200 */ 1038, 1097, 1120, 1119, 1118, 1117, 1065, 1107, 1095, 1099,
+ /* 210 */ 1208, 1098, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
+ /* 220 */ 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
+ /* 230 */ 1197, 1165, 1179, 1164, 1172, 1184, 1173, 1178, 1177, 1176,
+ /* 240 */ 1167, 1166, 1168, 1169, 1357, 1357, 1357, 1357, 1357, 1357,
+ /* 250 */ 1357, 1357, 1051, 1357, 1357, 1021, 1357, 1357, 1258, 1357,
+ /* 260 */ 1357, 928, 1170, 1357, 1036, 884, 1106, 1049, 1077, 1077,
+ /* 270 */ 966, 990, 950, 1087, 1077, 1067, 1081, 1081, 1203, 1087,
+ /* 280 */ 1357, 1357, 1197, 1049, 1036, 1299, 1299, 1068, 1068, 1068,
+ /* 290 */ 1283, 1283, 1068, 1231, 1068, 1012, 1068, 1012, 1068, 1012,
+ /* 300 */ 1068, 1012, 1068, 910, 1106, 1068, 910, 1003, 1109, 1106,
+ /* 310 */ 1109, 1141, 1125, 1068, 1109, 1106, 1068, 1003, 1109, 1106,
+ /* 320 */ 1068, 1265, 1263, 1068, 910, 1068, 1216, 910, 1068, 1216,
+ /* 330 */ 1001, 1001, 1001, 1001, 982, 1216, 1001, 966, 1001, 982,
+ /* 340 */ 1001, 1001, 1353, 1357, 1068, 1344, 1344, 1090, 1090, 1096,
+ /* 350 */ 1081, 1357, 1357, 1222, 1216, 1183, 1171, 1096, 1094, 1091,
+ /* 360 */ 1106, 1357, 1068, 985, 910, 892, 892, 880, 880, 880,
+ /* 370 */ 880, 1312, 1312, 1308, 968, 968, 1054, 1182, 1181, 1180,
+ /* 380 */ 937, 1196, 1357, 1357, 1357, 1357, 1357, 1357, 1232, 1357,
+ /* 390 */ 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
+ /* 400 */ 1357, 1357, 1357, 1357, 1357, 1318, 1357, 1357, 1357, 1357,
+ /* 410 */ 1357, 876, 1357, 1357, 1357, 1357, 1357, 1302, 1357, 1357,
+ /* 420 */ 1357, 1357, 1357, 1357, 1262, 1261, 1357, 1357, 1357, 1357,
+ /* 430 */ 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
+ /* 440 */ 1357, 1110, 1357, 1250, 1357, 1357, 1357, 1357, 1357, 1357,
+ /* 450 */ 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
+ /* 460 */ 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
+ /* 470 */ 1357, 1024, 1030, 1357, 1357, 1357, 1025, 1357, 1357, 1154,
+ /* 480 */ 1357, 1357, 1357, 1206, 1357, 1357, 1357, 1357, 1092, 1357,
+ /* 490 */ 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357,
+ /* 500 */ 1357, 1357, 1357, 1350, 1082, 1357, 1357, 1357, 1198, 1357,
+ /* 510 */ 1196, 1357, 1317, 1357, 1357, 1357, 1316, 1357, 1357, 1357,
+ /* 520 */ 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1155, 1154, 1198,
+ /* 530 */ 919, 899, 1357, 890, 1357, 872, 877, 1301, 1298, 1295,
+ /* 540 */ 1300, 1294, 1296, 1293, 1297, 1292, 1290, 1291, 1288, 1286,
+ /* 550 */ 1285, 1287, 1282, 1278, 1238, 1236, 1234, 1243, 1242, 1241,
+ /* 560 */ 1240, 1239, 1235, 1233, 1237, 1229, 1228, 1132, 1111, 1100,
+ /* 570 */ 1019, 1277, 1275, 1276, 1227, 1225, 1226, 1018, 1017, 1016,
+ /* 580 */ 1011, 1010, 1009, 1008, 1305, 1314, 1313, 1311, 1310, 1309,
+ /* 590 */ 1303, 1304, 1214, 1213, 1211, 1210, 1212, 912, 1254, 1257,
+ /* 600 */ 1256, 1255, 1260, 1259, 1252, 1264, 1269, 1268, 1273, 1272,
+ /* 610 */ 1271, 1270, 1267, 1249, 1140, 1139, 1137, 1134, 1144, 1143,
+ /* 620 */ 1142, 1133, 1126, 1138, 1116, 1124, 1123, 1112, 1115, 1004,
+ /* 630 */ 1105, 1101, 1104, 1020, 1253, 1015, 1014, 1013, 911, 902,
+ /* 640 */ 1070, 901, 900, 915, 988, 989, 997, 1000, 995, 998,
+ /* 650 */ 994, 993, 992, 996, 991, 987, 918, 917, 927, 981,
+ /* 660 */ 964, 953, 920, 955, 952, 951, 956, 973, 972, 979,
+ /* 670 */ 978, 977, 976, 975, 971, 974, 970, 969, 957, 949,
+ /* 680 */ 948, 967, 947, 984, 983, 980, 946, 1007, 1006, 1005,
+ /* 690 */ 1002, 945, 944, 943, 942, 941, 940, 1194, 1356, 1352,
+ /* 700 */ 1355, 1354, 1351, 1193, 1199, 1187, 1185, 1022, 1033, 1032,
+ /* 710 */ 1031, 1028, 1029, 1043, 1041, 1040, 1039, 1076, 1075, 1074,
+ /* 720 */ 1073, 1072, 1071, 1064, 1062, 1057, 1056, 1063, 1061, 1058,
+ /* 730 */ 1079, 1080, 1078, 1055, 1047, 1045, 1046, 1044, 1131, 1128,
+ /* 740 */ 1130, 1127, 1066, 1053, 1050, 1037, 1332, 1330, 1333, 1331,
+ /* 750 */ 1329, 1337, 1339, 1338, 1343, 1341, 1340, 1336, 1349, 1348,
+ /* 760 */ 1347, 1346, 1345, 1335, 1342, 1328, 1327, 1326, 1325, 1084,
+ /* 770 */ 1089, 1088, 1083, 1027, 1186, 1196, 1190, 1323, 1321, 1324,
+ /* 780 */ 1320, 1319, 1219, 1221, 1224, 1223, 1220, 1086, 1085, 1218,
+ /* 790 */ 1217, 1322, 1189, 1161, 933, 931, 932, 1246, 1245, 1248,
+ /* 800 */ 1247, 1244, 935, 934, 930, 929, 1159, 1153, 1152, 1274,
+ /* 810 */ 1191, 1192, 1151, 1157, 1149, 1148, 1147, 1175, 1174, 1160,
+ /* 820 */ 1150, 922, 1026, 1023, 1188, 1146, 1069, 1145, 963, 962,
+ /* 830 */ 961, 960, 959, 958, 1035, 1034, 939, 954, 938, 936,
+ /* 840 */ 914, 904, 909, 907, 908, 906, 905, 897, 894, 896,
+ /* 850 */ 893, 898, 895, 891, 889, 888, 887, 886, 885, 925,
+ /* 860 */ 924, 923, 919, 883, 882, 879, 878, 874, 873, 871,
};
/* The next table maps tokens into fallback tokens. If a construct
@@ -1122,6 +1097,7 @@ static const YYCODETYPE yyFallback[] = {
4, /* LAST => ID */
4, /* LIKE_KW => ID */
4, /* MATCH => ID */
+ 4, /* MATERIALIZED => ID */
4, /* NO => ID */
4, /* NULLS => ID */
4, /* OTHERS => ID */
@@ -1156,6 +1132,7 @@ static const YYCODETYPE yyFallback[] = {
4, /* RENAME => ID */
4, /* CTIME_KW => ID */
4, /* IF => ID */
+ 4, /* FILTER => ID */
};
#endif /* YYFALLBACK */
@@ -1316,26 +1293,27 @@ static const char *const yyTokenName[] = {
"FOLLOWING", "FOR", "GENERATED", "GROUPS",
"IGNORE", "IMMEDIATE", "INDEXED", "INITIALLY",
"INSTEAD", "LAST", "LIKE_KW", "MATCH",
- "NO", "NULLS", "OTHERS", "PLAN",
- "QUERY", "KEY", "OF", "OFFSET",
- "PARTITION", "PRAGMA", "PRECEDING", "RAISE",
- "RANGE", "RECURSIVE", "RELEASE", "REPLACE",
- "RESTRICT", "ROW", "ROWS", "ROLLBACK",
- "SAVEPOINT", "TEMP", "TIES", "TRIGGER",
- "UNBOUNDED", "VACUUM", "VIEW", "VIRTUAL",
- "WITH", "WITHOUT", "REINDEX", "RENAME",
- "CTIME_KW", "IF", "ANY", "OR",
- "AND", "NOT", "IS", "BETWEEN",
- "IN", "ISNULL", "NOTNULL", "NE",
- "EQ", "GT", "LE", "LT",
- "GE", "ESCAPE", "BITAND", "BITOR",
- "LSHIFT", "RSHIFT", "PLUS", "MINUS",
- "STAR", "SLASH", "REM", "CONCAT",
- "COLLATE", "BITNOT", "SEMI", "TRANSACTION",
- "ID_TRANS", "COMMIT", "TO", "CREATE",
- "TABLE", "LP", "RP", "AS",
- "DOT", "ID_TAB_NEW", "ID_DB", "CTX_ROWID_KW",
- "EXISTS", "COMMA", "ID_COL_NEW", "STRING",
+ "MATERIALIZED", "NO", "NULLS", "OTHERS",
+ "PLAN", "QUERY", "KEY", "OF",
+ "OFFSET", "PARTITION", "PRAGMA", "PRECEDING",
+ "RAISE", "RANGE", "RECURSIVE", "RELEASE",
+ "REPLACE", "RESTRICT", "ROW", "ROWS",
+ "ROLLBACK", "SAVEPOINT", "TEMP", "TIES",
+ "TRIGGER", "UNBOUNDED", "VACUUM", "VIEW",
+ "VIRTUAL", "WITH", "WITHOUT", "REINDEX",
+ "RENAME", "CTIME_KW", "IF", "FILTER",
+ "ANY", "OR", "AND", "NOT",
+ "IS", "BETWEEN", "IN", "ISNULL",
+ "NOTNULL", "NE", "EQ", "GT",
+ "LE", "LT", "GE", "ESCAPE",
+ "BITAND", "BITOR", "LSHIFT", "RSHIFT",
+ "PLUS", "MINUS", "STAR", "SLASH",
+ "REM", "CONCAT", "PTR", "COLLATE",
+ "BITNOT", "SEMI", "TRANSACTION", "ID_TRANS",
+ "COMMIT", "TO", "CREATE", "TABLE",
+ "LP", "RP", "AS", "DOT",
+ "ID_TAB_NEW", "ID_DB", "COMMA", "CTX_ROWID_KW",
+ "CTX_STRICT_KW", "EXISTS", "ID_COL_NEW", "STRING",
"JOIN_KW", "ID_COL_TYPE", "RIGHT_ASSOC", "CONSTRAINT",
"DEFAULT", "NULL", "PRIMARY", "UNIQUE",
"CHECK", "REFERENCES", "ID_CONSTR", "ID_COLLATE",
@@ -1347,44 +1325,45 @@ static const char *const yyTokenName[] = {
"EXCEPT", "INTERSECT", "DISTINCT", "ID_ALIAS",
"FROM", "USING", "JOIN", "ID_JOIN_OPTS",
"ID_IDX", "ORDER", "GROUP", "HAVING",
- "LIMIT", "WHERE", "ID_COL", "INTO",
- "NOTHING", "ID_FN", "ID_ERR_MSG", "VARIABLE",
- "CASE", "WHEN", "THEN", "ELSE",
- "INDEX", "ID_IDX_NEW", "ID_PRAGMA", "ID_TRIG_NEW",
- "ID_TRIG", "ALTER", "ADD", "WINDOW",
- "OVER", "FILTER", "error", "cmd",
+ "LIMIT", "WHERE", "RETURNING", "ID_COL",
+ "INTO", "NOTHING", "ID_FN", "ID_ERR_MSG",
+ "VARIABLE", "CASE", "WHEN", "THEN",
+ "ELSE", "INDEX", "ID_IDX_NEW", "ID_PRAGMA",
+ "ID_TRIG_NEW", "ID_TRIG", "ALTER", "ADD",
+ "WINDOW", "OVER", "error", "cmd",
"input", "cmdlist", "ecmd", "explain",
"cmdx", "transtype", "trans_opt", "nm",
"savepoint_opt", "temp", "ifnotexists", "fullname",
"columnlist", "conslist_opt", "table_options", "select",
- "column", "columnid", "type", "carglist",
- "id", "id_opt", "ids", "typetoken",
- "typename", "signed", "plus_num", "minus_num",
- "ccons", "term", "expr", "onconf",
- "sortorder", "autoinc", "idxlist_opt", "refargs",
- "defer_subclause", "gen_always", "tnm", "refarg",
- "refact", "init_deferred_pred_opt", "conslist", "tconscomma",
- "tcons", "idxlist", "defer_subclause_opt", "resolvetype",
- "orconf", "raisetype", "ifexists", "select_stmt",
- "with", "selectnowith", "oneselect", "multiselect_op",
- "values", "distinct", "selcollist", "from",
- "where_opt", "groupby_opt", "having_opt", "orderby_opt",
- "limit_opt", "window_clause", "nexprlist", "exprlist",
- "sclp", "as", "joinsrc", "singlesrc",
- "seltablist", "joinop", "joinconstr_opt", "dbnm",
- "indexed_opt", "idlist", "sortlist", "nulls",
- "delete_stmt", "update_stmt", "setlist", "idlist_opt",
- "insert_stmt", "insert_cmd", "upsert", "exprx",
- "not_opt", "likeop", "case_operand", "case_exprlist",
- "case_else", "filter_over", "uniqueflag", "idxlist_single",
- "collate", "vinto", "nmnum", "number",
- "trigger_time", "trigger_event", "foreach_clause", "when_clause",
- "trigger_cmd_list", "trigger_cmd", "database_kw_opt", "key_opt",
- "kwcolumn_opt", "create_vtab", "vtabarglist", "vtabarg",
- "vtabargtoken", "anylist", "wqlist", "wqcte",
- "windowdefn_list", "windowdefn", "window", "frame_opt",
- "range_or_rows", "frame_bound_s", "frame_exclude_opt", "frame_bound_e",
- "frame_bound", "frame_exclude", "filter_clause", "over_clause",
+ "table_option", "column", "columnid", "type",
+ "carglist", "id", "id_opt", "ids",
+ "typetoken", "typename", "signed", "plus_num",
+ "minus_num", "ccons", "term", "expr",
+ "onconf", "sortorder", "autoinc", "idxlist_opt",
+ "refargs", "defer_subclause", "gen_always", "tnm",
+ "refarg", "refact", "init_deferred_pred_opt", "conslist",
+ "tconscomma", "tcons", "idxlist", "defer_subclause_opt",
+ "resolvetype", "orconf", "raisetype", "ifexists",
+ "select_stmt", "with", "selectnowith", "oneselect",
+ "multiselect_op", "values", "distinct", "selcollist",
+ "from", "where_opt", "groupby_opt", "having_opt",
+ "orderby_opt", "limit_opt", "window_clause", "nexprlist",
+ "exprlist", "sclp", "as", "joinsrc",
+ "singlesrc", "seltablist", "joinop", "joinconstr_opt",
+ "dbnm", "indexed_opt", "idlist", "sortlist",
+ "nulls", "delete_stmt", "returning", "update_stmt",
+ "setlist", "idlist_opt", "insert_stmt", "insert_cmd",
+ "upsert", "exprx", "not_opt", "likeop",
+ "case_operand", "case_exprlist", "case_else", "filter_over",
+ "uniqueflag", "idxlist_single", "collate", "vinto",
+ "nmnum", "number", "trigger_time", "trigger_event",
+ "foreach_clause", "when_clause", "trigger_cmd_list", "trigger_cmd",
+ "database_kw_opt", "key_opt", "kwcolumn_opt", "create_vtab",
+ "vtabarglist", "vtabarg", "vtabargtoken", "anylist",
+ "wqlist", "wqas", "wqcte", "windowdefn_list",
+ "windowdefn", "window", "frame_opt", "range_or_rows",
+ "frame_bound_s", "frame_exclude_opt", "frame_bound_e", "frame_bound",
+ "frame_exclude", "filter_clause", "over_clause",
};
#endif /* NDEBUG */
@@ -1426,444 +1405,459 @@ static const char *const yyRuleName[] = {
/* 31 */ "cmd ::= CREATE temp TABLE ifnotexists nm DOT ID_TAB_NEW",
/* 32 */ "cmd ::= CREATE temp TABLE ifnotexists ID_DB|ID_TAB_NEW",
/* 33 */ "table_options ::=",
- /* 34 */ "table_options ::= WITHOUT nm",
- /* 35 */ "table_options ::= WITHOUT CTX_ROWID_KW",
- /* 36 */ "ifnotexists ::=",
- /* 37 */ "ifnotexists ::= IF NOT EXISTS",
- /* 38 */ "temp ::= TEMP",
- /* 39 */ "temp ::=",
- /* 40 */ "columnlist ::= columnlist COMMA column",
- /* 41 */ "columnlist ::= column",
- /* 42 */ "column ::= columnid type carglist",
- /* 43 */ "columnid ::= nm",
- /* 44 */ "columnid ::= ID_COL_NEW",
- /* 45 */ "id ::= ID",
- /* 46 */ "id_opt ::= id",
- /* 47 */ "id_opt ::=",
- /* 48 */ "ids ::= ID|STRING",
- /* 49 */ "nm ::= id",
- /* 50 */ "nm ::= STRING",
- /* 51 */ "nm ::= JOIN_KW",
- /* 52 */ "type ::=",
- /* 53 */ "type ::= typetoken",
- /* 54 */ "typetoken ::= typename",
- /* 55 */ "typetoken ::= typename LP signed RP",
- /* 56 */ "typetoken ::= typename LP signed COMMA signed RP",
- /* 57 */ "typename ::= ids",
- /* 58 */ "typename ::= typename ids",
- /* 59 */ "typename ::= ID_COL_TYPE",
- /* 60 */ "signed ::= plus_num",
- /* 61 */ "signed ::= minus_num",
- /* 62 */ "carglist ::= carglist ccons",
- /* 63 */ "carglist ::=",
- /* 64 */ "ccons ::= CONSTRAINT nm",
- /* 65 */ "ccons ::= DEFAULT term",
- /* 66 */ "ccons ::= DEFAULT LP expr RP",
- /* 67 */ "ccons ::= DEFAULT PLUS term",
- /* 68 */ "ccons ::= DEFAULT MINUS term",
- /* 69 */ "ccons ::= DEFAULT id",
- /* 70 */ "ccons ::= DEFAULT CTIME_KW",
- /* 71 */ "ccons ::= NULL onconf",
- /* 72 */ "ccons ::= NOT NULL onconf",
- /* 73 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
- /* 74 */ "ccons ::= UNIQUE onconf",
- /* 75 */ "ccons ::= CHECK LP expr RP",
- /* 76 */ "ccons ::= REFERENCES nm idxlist_opt refargs",
- /* 77 */ "ccons ::= defer_subclause",
- /* 78 */ "ccons ::= COLLATE ids",
- /* 79 */ "ccons ::= gen_always AS LP expr RP id_opt",
- /* 80 */ "ccons ::= CONSTRAINT ID_CONSTR",
- /* 81 */ "ccons ::= COLLATE ID_COLLATE",
- /* 82 */ "ccons ::= REFERENCES ID_TAB",
- /* 83 */ "ccons ::= CHECK LP RP",
- /* 84 */ "term ::= NULL",
- /* 85 */ "term ::= INTEGER",
- /* 86 */ "term ::= FLOAT",
- /* 87 */ "term ::= STRING|BLOB",
- /* 88 */ "tnm ::= term",
- /* 89 */ "tnm ::= nm",
- /* 90 */ "gen_always ::= GENERATED ALWAYS",
- /* 91 */ "gen_always ::=",
- /* 92 */ "autoinc ::=",
- /* 93 */ "autoinc ::= AUTOINCR",
- /* 94 */ "refargs ::=",
- /* 95 */ "refargs ::= refargs refarg",
- /* 96 */ "refarg ::= MATCH nm",
- /* 97 */ "refarg ::= ON INSERT refact",
- /* 98 */ "refarg ::= ON DELETE refact",
- /* 99 */ "refarg ::= ON UPDATE refact",
- /* 100 */ "refarg ::= MATCH ID_FK_MATCH",
- /* 101 */ "refact ::= SET NULL",
- /* 102 */ "refact ::= SET DEFAULT",
- /* 103 */ "refact ::= CASCADE",
- /* 104 */ "refact ::= RESTRICT",
- /* 105 */ "refact ::= NO ACTION",
- /* 106 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
- /* 107 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
- /* 108 */ "init_deferred_pred_opt ::=",
- /* 109 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
- /* 110 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
- /* 111 */ "conslist_opt ::=",
- /* 112 */ "conslist_opt ::= COMMA conslist",
- /* 113 */ "conslist ::= conslist tconscomma tcons",
- /* 114 */ "conslist ::= tcons",
- /* 115 */ "tconscomma ::= COMMA",
- /* 116 */ "tconscomma ::=",
- /* 117 */ "tcons ::= CONSTRAINT nm",
- /* 118 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf",
- /* 119 */ "tcons ::= UNIQUE LP idxlist RP onconf",
- /* 120 */ "tcons ::= CHECK LP expr RP onconf",
- /* 121 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt",
- /* 122 */ "tcons ::= CONSTRAINT ID_CONSTR",
- /* 123 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES ID_TAB",
- /* 124 */ "tcons ::= CHECK LP RP onconf",
- /* 125 */ "defer_subclause_opt ::=",
- /* 126 */ "defer_subclause_opt ::= defer_subclause",
- /* 127 */ "onconf ::=",
- /* 128 */ "onconf ::= ON CONFLICT resolvetype",
- /* 129 */ "orconf ::=",
- /* 130 */ "orconf ::= OR resolvetype",
- /* 131 */ "resolvetype ::= raisetype",
- /* 132 */ "resolvetype ::= IGNORE",
- /* 133 */ "resolvetype ::= REPLACE",
- /* 134 */ "cmd ::= DROP TABLE ifexists fullname",
- /* 135 */ "cmd ::= DROP TABLE ifexists nm DOT ID_TAB",
- /* 136 */ "cmd ::= DROP TABLE ifexists ID_DB|ID_TAB",
- /* 137 */ "ifexists ::= IF EXISTS",
- /* 138 */ "ifexists ::=",
- /* 139 */ "cmd ::= CREATE temp VIEW ifnotexists fullname idxlist_opt AS select",
- /* 140 */ "cmd ::= CREATE temp VIEW ifnotexists nm DOT ID_VIEW_NEW",
- /* 141 */ "cmd ::= CREATE temp VIEW ifnotexists ID_DB|ID_VIEW_NEW",
- /* 142 */ "cmd ::= DROP VIEW ifexists fullname",
- /* 143 */ "cmd ::= DROP VIEW ifexists nm DOT ID_VIEW",
- /* 144 */ "cmd ::= DROP VIEW ifexists ID_DB|ID_VIEW",
- /* 145 */ "cmd ::= select_stmt",
- /* 146 */ "select_stmt ::= select",
- /* 147 */ "select ::= with selectnowith",
- /* 148 */ "selectnowith ::= oneselect",
- /* 149 */ "selectnowith ::= selectnowith multiselect_op oneselect",
- /* 150 */ "selectnowith ::= values",
- /* 151 */ "selectnowith ::= selectnowith COMMA values",
- /* 152 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
- /* 153 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt",
- /* 154 */ "values ::= VALUES LP nexprlist RP",
- /* 155 */ "values ::= values COMMA LP exprlist RP",
- /* 156 */ "multiselect_op ::= UNION",
- /* 157 */ "multiselect_op ::= UNION ALL",
- /* 158 */ "multiselect_op ::= EXCEPT",
- /* 159 */ "multiselect_op ::= INTERSECT",
- /* 160 */ "distinct ::= DISTINCT",
- /* 161 */ "distinct ::= ALL",
- /* 162 */ "distinct ::=",
- /* 163 */ "sclp ::= selcollist COMMA",
- /* 164 */ "sclp ::=",
- /* 165 */ "selcollist ::= sclp expr as",
- /* 166 */ "selcollist ::= sclp STAR",
- /* 167 */ "selcollist ::= sclp tnm DOT STAR",
- /* 168 */ "selcollist ::= sclp",
- /* 169 */ "selcollist ::= sclp ID_TAB DOT STAR",
- /* 170 */ "as ::= AS nm",
- /* 171 */ "as ::= ids",
- /* 172 */ "as ::= AS ID_ALIAS",
- /* 173 */ "as ::= ID_ALIAS",
- /* 174 */ "as ::=",
- /* 175 */ "from ::=",
- /* 176 */ "from ::= FROM joinsrc",
- /* 177 */ "joinsrc ::= singlesrc seltablist",
- /* 178 */ "joinsrc ::=",
- /* 179 */ "seltablist ::= seltablist joinop singlesrc joinconstr_opt",
- /* 180 */ "seltablist ::=",
- /* 181 */ "singlesrc ::= nm dbnm as indexed_opt",
- /* 182 */ "singlesrc ::= LP select RP as",
- /* 183 */ "singlesrc ::= LP joinsrc RP as",
- /* 184 */ "singlesrc ::= nm dbnm LP exprlist RP as",
- /* 185 */ "singlesrc ::=",
- /* 186 */ "singlesrc ::= nm DOT",
- /* 187 */ "singlesrc ::= nm DOT ID_TAB",
- /* 188 */ "singlesrc ::= ID_DB|ID_TAB",
- /* 189 */ "singlesrc ::= nm DOT ID_VIEW",
- /* 190 */ "singlesrc ::= ID_DB|ID_VIEW",
- /* 191 */ "joinconstr_opt ::= ON expr",
- /* 192 */ "joinconstr_opt ::= USING LP idlist RP",
- /* 193 */ "joinconstr_opt ::=",
- /* 194 */ "dbnm ::=",
- /* 195 */ "dbnm ::= DOT nm",
- /* 196 */ "fullname ::= nm dbnm",
- /* 197 */ "joinop ::= COMMA",
- /* 198 */ "joinop ::= JOIN",
- /* 199 */ "joinop ::= JOIN_KW JOIN",
- /* 200 */ "joinop ::= JOIN_KW nm JOIN",
- /* 201 */ "joinop ::= JOIN_KW nm nm JOIN",
- /* 202 */ "joinop ::= ID_JOIN_OPTS",
- /* 203 */ "indexed_opt ::=",
- /* 204 */ "indexed_opt ::= INDEXED BY nm",
- /* 205 */ "indexed_opt ::= NOT INDEXED",
- /* 206 */ "indexed_opt ::= INDEXED BY ID_IDX",
- /* 207 */ "orderby_opt ::=",
- /* 208 */ "orderby_opt ::= ORDER BY sortlist",
- /* 209 */ "sortlist ::= sortlist COMMA expr sortorder nulls",
- /* 210 */ "sortlist ::= expr sortorder nulls",
- /* 211 */ "sortorder ::= ASC",
- /* 212 */ "sortorder ::= DESC",
- /* 213 */ "sortorder ::=",
- /* 214 */ "nulls ::= NULLS FIRST",
- /* 215 */ "nulls ::= NULLS LAST",
- /* 216 */ "nulls ::=",
- /* 217 */ "groupby_opt ::=",
- /* 218 */ "groupby_opt ::= GROUP BY nexprlist",
- /* 219 */ "groupby_opt ::= GROUP BY",
- /* 220 */ "having_opt ::=",
- /* 221 */ "having_opt ::= HAVING expr",
- /* 222 */ "limit_opt ::=",
- /* 223 */ "limit_opt ::= LIMIT expr",
- /* 224 */ "limit_opt ::= LIMIT expr OFFSET expr",
- /* 225 */ "limit_opt ::= LIMIT expr COMMA expr",
- /* 226 */ "cmd ::= delete_stmt",
- /* 227 */ "delete_stmt ::= with DELETE FROM fullname indexed_opt where_opt",
- /* 228 */ "delete_stmt ::= with DELETE FROM",
- /* 229 */ "delete_stmt ::= with DELETE FROM nm DOT",
- /* 230 */ "delete_stmt ::= with DELETE FROM nm DOT ID_TAB",
- /* 231 */ "delete_stmt ::= with DELETE FROM ID_DB|ID_TAB",
- /* 232 */ "where_opt ::=",
- /* 233 */ "where_opt ::= WHERE expr",
- /* 234 */ "where_opt ::= WHERE",
- /* 235 */ "cmd ::= update_stmt",
- /* 236 */ "update_stmt ::= with UPDATE orconf fullname indexed_opt SET setlist from where_opt",
- /* 237 */ "update_stmt ::= with UPDATE orconf",
- /* 238 */ "update_stmt ::= with UPDATE orconf nm DOT",
- /* 239 */ "update_stmt ::= with UPDATE orconf nm DOT ID_TAB",
- /* 240 */ "update_stmt ::= with UPDATE orconf ID_DB|ID_TAB",
- /* 241 */ "setlist ::= setlist COMMA nm EQ expr",
- /* 242 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
- /* 243 */ "setlist ::= nm EQ expr",
- /* 244 */ "setlist ::= LP idlist RP EQ expr",
- /* 245 */ "setlist ::=",
- /* 246 */ "setlist ::= setlist COMMA",
- /* 247 */ "setlist ::= setlist COMMA ID_COL",
- /* 248 */ "setlist ::= ID_COL",
- /* 249 */ "idlist_opt ::=",
- /* 250 */ "idlist_opt ::= LP idlist RP",
- /* 251 */ "idlist ::= idlist COMMA nm",
- /* 252 */ "idlist ::= nm",
- /* 253 */ "idlist ::=",
- /* 254 */ "idlist ::= idlist COMMA ID_COL",
- /* 255 */ "idlist ::= ID_COL",
- /* 256 */ "cmd ::= insert_stmt",
- /* 257 */ "insert_stmt ::= with insert_cmd INTO fullname idlist_opt select upsert",
- /* 258 */ "insert_stmt ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES",
- /* 259 */ "insert_stmt ::= with insert_cmd INTO",
- /* 260 */ "insert_stmt ::= with insert_cmd INTO nm DOT",
- /* 261 */ "insert_stmt ::= with insert_cmd INTO ID_DB|ID_TAB",
- /* 262 */ "insert_stmt ::= with insert_cmd INTO nm DOT ID_TAB",
- /* 263 */ "insert_cmd ::= INSERT orconf",
- /* 264 */ "insert_cmd ::= REPLACE",
- /* 265 */ "upsert ::=",
- /* 266 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt",
- /* 267 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING",
- /* 268 */ "upsert ::= ON CONFLICT DO NOTHING",
- /* 269 */ "exprx ::= expr not_opt IN ID_DB",
- /* 270 */ "exprx ::= expr not_opt IN nm DOT ID_TAB",
- /* 271 */ "exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN",
- /* 272 */ "exprx ::= tnm DOT ID_TAB|ID_COL",
- /* 273 */ "exprx ::= tnm DOT nm DOT ID_COL",
- /* 274 */ "exprx ::= expr COLLATE ID_COLLATE",
- /* 275 */ "exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP",
- /* 276 */ "exprx ::= CTIME_KW",
- /* 277 */ "exprx ::= LP nexprlist RP",
- /* 278 */ "exprx ::= tnm",
- /* 279 */ "exprx ::= tnm DOT nm",
- /* 280 */ "exprx ::= tnm DOT nm DOT nm",
- /* 281 */ "exprx ::= VARIABLE",
- /* 282 */ "exprx ::= expr COLLATE ids",
- /* 283 */ "exprx ::= CAST LP expr AS typetoken RP",
- /* 284 */ "exprx ::= ID LP distinct exprlist RP",
- /* 285 */ "exprx ::= ID LP STAR RP",
- /* 286 */ "exprx ::= expr AND expr",
- /* 287 */ "exprx ::= expr OR expr",
- /* 288 */ "exprx ::= expr LT|GT|GE|LE expr",
- /* 289 */ "exprx ::= expr EQ|NE expr",
- /* 290 */ "exprx ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
- /* 291 */ "exprx ::= expr PLUS|MINUS expr",
- /* 292 */ "exprx ::= expr STAR|SLASH|REM expr",
- /* 293 */ "exprx ::= expr CONCAT expr",
- /* 294 */ "exprx ::= expr not_opt likeop expr",
- /* 295 */ "exprx ::= expr not_opt likeop expr ESCAPE expr",
- /* 296 */ "exprx ::= expr ISNULL|NOTNULL",
- /* 297 */ "exprx ::= expr NOT NULL",
- /* 298 */ "exprx ::= expr IS not_opt expr",
- /* 299 */ "exprx ::= NOT expr",
- /* 300 */ "exprx ::= BITNOT expr",
- /* 301 */ "exprx ::= MINUS expr",
- /* 302 */ "exprx ::= PLUS expr",
- /* 303 */ "exprx ::= expr not_opt BETWEEN expr AND expr",
- /* 304 */ "exprx ::= expr not_opt IN LP exprlist RP",
- /* 305 */ "exprx ::= LP select RP",
- /* 306 */ "exprx ::= expr not_opt IN LP select RP",
- /* 307 */ "exprx ::= expr not_opt IN nm dbnm",
- /* 308 */ "exprx ::= EXISTS LP select RP",
- /* 309 */ "exprx ::= CASE case_operand case_exprlist case_else END",
- /* 310 */ "exprx ::= RAISE LP IGNORE RP",
- /* 311 */ "exprx ::= RAISE LP raisetype COMMA nm RP",
- /* 312 */ "exprx ::= ID LP distinct exprlist RP filter_over",
- /* 313 */ "exprx ::= ID LP STAR RP filter_over",
- /* 314 */ "expr ::=",
- /* 315 */ "expr ::= exprx",
- /* 316 */ "not_opt ::=",
- /* 317 */ "not_opt ::= NOT",
- /* 318 */ "likeop ::= LIKE_KW|MATCH",
- /* 319 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 320 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 321 */ "case_else ::= ELSE expr",
- /* 322 */ "case_else ::=",
- /* 323 */ "case_operand ::= exprx",
- /* 324 */ "case_operand ::=",
- /* 325 */ "exprlist ::= nexprlist",
- /* 326 */ "exprlist ::=",
- /* 327 */ "nexprlist ::= nexprlist COMMA expr",
- /* 328 */ "nexprlist ::= exprx",
- /* 329 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt",
- /* 330 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB",
- /* 331 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW",
- /* 332 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW",
- /* 333 */ "uniqueflag ::= UNIQUE",
- /* 334 */ "uniqueflag ::=",
- /* 335 */ "idxlist_opt ::=",
- /* 336 */ "idxlist_opt ::= LP idxlist RP",
- /* 337 */ "idxlist ::= idxlist COMMA idxlist_single",
- /* 338 */ "idxlist ::= idxlist_single",
- /* 339 */ "idxlist_single ::= nm collate sortorder",
- /* 340 */ "idxlist_single ::= ID_COL",
- /* 341 */ "collate ::=",
- /* 342 */ "collate ::= COLLATE ids",
- /* 343 */ "collate ::= COLLATE ID_COLLATE",
- /* 344 */ "cmd ::= DROP INDEX ifexists fullname",
- /* 345 */ "cmd ::= DROP INDEX ifexists nm DOT ID_IDX",
- /* 346 */ "cmd ::= DROP INDEX ifexists ID_DB|ID_IDX",
- /* 347 */ "cmd ::= VACUUM vinto",
- /* 348 */ "cmd ::= VACUUM nm vinto",
- /* 349 */ "vinto ::= INTO expr",
- /* 350 */ "vinto ::=",
- /* 351 */ "cmd ::= PRAGMA nm dbnm",
- /* 352 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
- /* 353 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
- /* 354 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
- /* 355 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
- /* 356 */ "cmd ::= PRAGMA nm DOT ID_PRAGMA",
- /* 357 */ "cmd ::= PRAGMA ID_DB|ID_PRAGMA",
- /* 358 */ "nmnum ::= plus_num",
- /* 359 */ "nmnum ::= nm",
- /* 360 */ "nmnum ::= ON",
- /* 361 */ "nmnum ::= DELETE",
- /* 362 */ "nmnum ::= DEFAULT",
- /* 363 */ "plus_num ::= PLUS number",
- /* 364 */ "plus_num ::= number",
- /* 365 */ "minus_num ::= MINUS number",
- /* 366 */ "number ::= INTEGER",
- /* 367 */ "number ::= FLOAT",
- /* 368 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END",
- /* 369 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause",
- /* 370 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list",
- /* 371 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB",
- /* 372 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW",
- /* 373 */ "cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW",
- /* 374 */ "trigger_time ::= BEFORE",
- /* 375 */ "trigger_time ::= AFTER",
- /* 376 */ "trigger_time ::= INSTEAD OF",
- /* 377 */ "trigger_time ::=",
- /* 378 */ "trigger_event ::= DELETE",
- /* 379 */ "trigger_event ::= INSERT",
- /* 380 */ "trigger_event ::= UPDATE",
- /* 381 */ "trigger_event ::= UPDATE OF idlist",
- /* 382 */ "foreach_clause ::=",
- /* 383 */ "foreach_clause ::= FOR EACH ROW",
- /* 384 */ "when_clause ::=",
- /* 385 */ "when_clause ::= WHEN expr",
- /* 386 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
- /* 387 */ "trigger_cmd_list ::= trigger_cmd SEMI",
- /* 388 */ "trigger_cmd_list ::= SEMI",
- /* 389 */ "trigger_cmd ::= update_stmt",
- /* 390 */ "trigger_cmd ::= insert_stmt",
- /* 391 */ "trigger_cmd ::= delete_stmt",
- /* 392 */ "trigger_cmd ::= select_stmt",
- /* 393 */ "raisetype ::= ROLLBACK|ABORT|FAIL",
- /* 394 */ "cmd ::= DROP TRIGGER ifexists fullname",
- /* 395 */ "cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG",
- /* 396 */ "cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG",
- /* 397 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
- /* 398 */ "cmd ::= DETACH database_kw_opt expr",
- /* 399 */ "key_opt ::=",
- /* 400 */ "key_opt ::= KEY expr",
- /* 401 */ "database_kw_opt ::= DATABASE",
- /* 402 */ "database_kw_opt ::=",
- /* 403 */ "cmd ::= REINDEX",
- /* 404 */ "cmd ::= REINDEX nm dbnm",
- /* 405 */ "cmd ::= REINDEX ID_COLLATE",
- /* 406 */ "cmd ::= REINDEX nm DOT ID_TAB|ID_IDX",
- /* 407 */ "cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB",
- /* 408 */ "cmd ::= ANALYZE",
- /* 409 */ "cmd ::= ANALYZE nm dbnm",
- /* 410 */ "cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX",
- /* 411 */ "cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB",
- /* 412 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 413 */ "cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column",
- /* 414 */ "cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW",
- /* 415 */ "cmd ::= ALTER TABLE nm DOT ID_TAB",
- /* 416 */ "cmd ::= ALTER TABLE ID_DB|ID_TAB",
- /* 417 */ "kwcolumn_opt ::=",
- /* 418 */ "kwcolumn_opt ::= COLUMNKW",
- /* 419 */ "cmd ::= create_vtab",
- /* 420 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm",
- /* 421 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP",
- /* 422 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW",
- /* 423 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW",
- /* 424 */ "vtabarglist ::= vtabarg",
- /* 425 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
- /* 426 */ "vtabarg ::=",
- /* 427 */ "vtabarg ::= vtabarg vtabargtoken",
- /* 428 */ "vtabargtoken ::= ANY",
- /* 429 */ "vtabargtoken ::= LP anylist RP",
- /* 430 */ "anylist ::=",
- /* 431 */ "anylist ::= anylist LP anylist RP",
- /* 432 */ "anylist ::= anylist ANY",
- /* 433 */ "with ::=",
- /* 434 */ "with ::= WITH wqlist",
- /* 435 */ "with ::= WITH RECURSIVE wqlist",
- /* 436 */ "wqlist ::= wqcte",
- /* 437 */ "wqlist ::= wqlist COMMA wqcte",
- /* 438 */ "wqlist ::= ID_TAB_NEW",
- /* 439 */ "wqcte ::= nm idxlist_opt AS LP select RP",
- /* 440 */ "windowdefn_list ::= windowdefn",
- /* 441 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn",
- /* 442 */ "windowdefn ::= nm AS LP window RP",
- /* 443 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt",
- /* 444 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt",
- /* 445 */ "window ::= ORDER BY sortlist frame_opt",
- /* 446 */ "window ::= nm ORDER BY sortlist frame_opt",
- /* 447 */ "window ::= frame_opt",
- /* 448 */ "window ::= nm frame_opt",
- /* 449 */ "frame_opt ::=",
- /* 450 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt",
- /* 451 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt",
- /* 452 */ "range_or_rows ::= RANGE|ROWS|GROUPS",
- /* 453 */ "frame_bound_s ::= frame_bound",
- /* 454 */ "frame_bound_s ::= UNBOUNDED PRECEDING",
- /* 455 */ "frame_bound_e ::= frame_bound",
- /* 456 */ "frame_bound_e ::= UNBOUNDED FOLLOWING",
- /* 457 */ "frame_bound ::= expr PRECEDING|FOLLOWING",
- /* 458 */ "frame_bound ::= CURRENT ROW",
- /* 459 */ "frame_exclude_opt ::=",
- /* 460 */ "frame_exclude_opt ::= EXCLUDE frame_exclude",
- /* 461 */ "frame_exclude ::= NO OTHERS",
- /* 462 */ "frame_exclude ::= CURRENT ROW",
- /* 463 */ "frame_exclude ::= GROUP",
- /* 464 */ "frame_exclude ::= TIES",
- /* 465 */ "window_clause ::= WINDOW windowdefn_list",
- /* 466 */ "filter_over ::= filter_clause over_clause",
- /* 467 */ "filter_over ::= over_clause",
- /* 468 */ "filter_over ::= filter_clause",
- /* 469 */ "over_clause ::= OVER LP window RP",
- /* 470 */ "over_clause ::= OVER nm",
- /* 471 */ "filter_clause ::= FILTER LP WHERE expr RP",
+ /* 34 */ "table_options ::= table_option",
+ /* 35 */ "table_options ::= table_options COMMA table_option",
+ /* 36 */ "table_option ::= WITHOUT nm",
+ /* 37 */ "table_option ::= nm",
+ /* 38 */ "table_option ::= WITHOUT CTX_ROWID_KW",
+ /* 39 */ "table_option ::= CTX_STRICT_KW",
+ /* 40 */ "ifnotexists ::=",
+ /* 41 */ "ifnotexists ::= IF NOT EXISTS",
+ /* 42 */ "temp ::= TEMP",
+ /* 43 */ "temp ::=",
+ /* 44 */ "columnlist ::= columnlist COMMA column",
+ /* 45 */ "columnlist ::= column",
+ /* 46 */ "column ::= columnid type carglist",
+ /* 47 */ "columnid ::= nm",
+ /* 48 */ "columnid ::= ID_COL_NEW",
+ /* 49 */ "id ::= ID",
+ /* 50 */ "id_opt ::= id",
+ /* 51 */ "id_opt ::=",
+ /* 52 */ "ids ::= ID|STRING",
+ /* 53 */ "nm ::= id",
+ /* 54 */ "nm ::= STRING",
+ /* 55 */ "nm ::= JOIN_KW",
+ /* 56 */ "type ::=",
+ /* 57 */ "type ::= typetoken",
+ /* 58 */ "typetoken ::= typename",
+ /* 59 */ "typetoken ::= typename LP signed RP",
+ /* 60 */ "typetoken ::= typename LP signed COMMA signed RP",
+ /* 61 */ "typename ::= ids",
+ /* 62 */ "typename ::= typename ids",
+ /* 63 */ "typename ::= ID_COL_TYPE",
+ /* 64 */ "signed ::= plus_num",
+ /* 65 */ "signed ::= minus_num",
+ /* 66 */ "carglist ::= carglist ccons",
+ /* 67 */ "carglist ::=",
+ /* 68 */ "ccons ::= CONSTRAINT nm",
+ /* 69 */ "ccons ::= DEFAULT term",
+ /* 70 */ "ccons ::= DEFAULT LP expr RP",
+ /* 71 */ "ccons ::= DEFAULT PLUS term",
+ /* 72 */ "ccons ::= DEFAULT MINUS term",
+ /* 73 */ "ccons ::= DEFAULT id",
+ /* 74 */ "ccons ::= DEFAULT CTIME_KW",
+ /* 75 */ "ccons ::= NULL onconf",
+ /* 76 */ "ccons ::= NOT NULL onconf",
+ /* 77 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
+ /* 78 */ "ccons ::= UNIQUE onconf",
+ /* 79 */ "ccons ::= CHECK LP expr RP",
+ /* 80 */ "ccons ::= REFERENCES nm idxlist_opt refargs",
+ /* 81 */ "ccons ::= defer_subclause",
+ /* 82 */ "ccons ::= COLLATE ids",
+ /* 83 */ "ccons ::= gen_always AS LP expr RP id_opt",
+ /* 84 */ "ccons ::= CONSTRAINT ID_CONSTR",
+ /* 85 */ "ccons ::= COLLATE ID_COLLATE",
+ /* 86 */ "ccons ::= REFERENCES ID_TAB",
+ /* 87 */ "ccons ::= CHECK LP RP",
+ /* 88 */ "term ::= NULL",
+ /* 89 */ "term ::= INTEGER",
+ /* 90 */ "term ::= FLOAT",
+ /* 91 */ "term ::= STRING|BLOB",
+ /* 92 */ "tnm ::= term",
+ /* 93 */ "tnm ::= nm",
+ /* 94 */ "gen_always ::= GENERATED ALWAYS",
+ /* 95 */ "gen_always ::=",
+ /* 96 */ "autoinc ::=",
+ /* 97 */ "autoinc ::= AUTOINCR",
+ /* 98 */ "refargs ::=",
+ /* 99 */ "refargs ::= refargs refarg",
+ /* 100 */ "refarg ::= MATCH nm",
+ /* 101 */ "refarg ::= ON INSERT refact",
+ /* 102 */ "refarg ::= ON DELETE refact",
+ /* 103 */ "refarg ::= ON UPDATE refact",
+ /* 104 */ "refarg ::= MATCH ID_FK_MATCH",
+ /* 105 */ "refact ::= SET NULL",
+ /* 106 */ "refact ::= SET DEFAULT",
+ /* 107 */ "refact ::= CASCADE",
+ /* 108 */ "refact ::= RESTRICT",
+ /* 109 */ "refact ::= NO ACTION",
+ /* 110 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
+ /* 111 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
+ /* 112 */ "init_deferred_pred_opt ::=",
+ /* 113 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
+ /* 114 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
+ /* 115 */ "conslist_opt ::=",
+ /* 116 */ "conslist_opt ::= COMMA conslist",
+ /* 117 */ "conslist ::= conslist tconscomma tcons",
+ /* 118 */ "conslist ::= tcons",
+ /* 119 */ "tconscomma ::= COMMA",
+ /* 120 */ "tconscomma ::=",
+ /* 121 */ "tcons ::= CONSTRAINT nm",
+ /* 122 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf",
+ /* 123 */ "tcons ::= UNIQUE LP idxlist RP onconf",
+ /* 124 */ "tcons ::= CHECK LP expr RP onconf",
+ /* 125 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt",
+ /* 126 */ "tcons ::= CONSTRAINT ID_CONSTR",
+ /* 127 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES ID_TAB",
+ /* 128 */ "tcons ::= CHECK LP RP onconf",
+ /* 129 */ "defer_subclause_opt ::=",
+ /* 130 */ "defer_subclause_opt ::= defer_subclause",
+ /* 131 */ "onconf ::=",
+ /* 132 */ "onconf ::= ON CONFLICT resolvetype",
+ /* 133 */ "orconf ::=",
+ /* 134 */ "orconf ::= OR resolvetype",
+ /* 135 */ "resolvetype ::= raisetype",
+ /* 136 */ "resolvetype ::= IGNORE",
+ /* 137 */ "resolvetype ::= REPLACE",
+ /* 138 */ "cmd ::= DROP TABLE ifexists fullname",
+ /* 139 */ "cmd ::= DROP TABLE ifexists nm DOT ID_TAB",
+ /* 140 */ "cmd ::= DROP TABLE ifexists ID_DB|ID_TAB",
+ /* 141 */ "ifexists ::= IF EXISTS",
+ /* 142 */ "ifexists ::=",
+ /* 143 */ "cmd ::= CREATE temp VIEW ifnotexists fullname idxlist_opt AS select",
+ /* 144 */ "cmd ::= CREATE temp VIEW ifnotexists nm DOT ID_VIEW_NEW",
+ /* 145 */ "cmd ::= CREATE temp VIEW ifnotexists ID_DB|ID_VIEW_NEW",
+ /* 146 */ "cmd ::= DROP VIEW ifexists fullname",
+ /* 147 */ "cmd ::= DROP VIEW ifexists nm DOT ID_VIEW",
+ /* 148 */ "cmd ::= DROP VIEW ifexists ID_DB|ID_VIEW",
+ /* 149 */ "cmd ::= select_stmt",
+ /* 150 */ "select_stmt ::= select",
+ /* 151 */ "select ::= with selectnowith",
+ /* 152 */ "selectnowith ::= oneselect",
+ /* 153 */ "selectnowith ::= selectnowith multiselect_op oneselect",
+ /* 154 */ "selectnowith ::= values",
+ /* 155 */ "selectnowith ::= selectnowith COMMA values",
+ /* 156 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
+ /* 157 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt",
+ /* 158 */ "values ::= VALUES LP nexprlist RP",
+ /* 159 */ "values ::= values COMMA LP exprlist RP",
+ /* 160 */ "multiselect_op ::= UNION",
+ /* 161 */ "multiselect_op ::= UNION ALL",
+ /* 162 */ "multiselect_op ::= EXCEPT",
+ /* 163 */ "multiselect_op ::= INTERSECT",
+ /* 164 */ "distinct ::= DISTINCT",
+ /* 165 */ "distinct ::= ALL",
+ /* 166 */ "distinct ::=",
+ /* 167 */ "sclp ::= selcollist COMMA",
+ /* 168 */ "sclp ::=",
+ /* 169 */ "selcollist ::= sclp expr as",
+ /* 170 */ "selcollist ::= sclp STAR",
+ /* 171 */ "selcollist ::= sclp tnm DOT STAR",
+ /* 172 */ "selcollist ::= sclp",
+ /* 173 */ "selcollist ::= sclp ID_TAB DOT STAR",
+ /* 174 */ "as ::= AS nm",
+ /* 175 */ "as ::= ids",
+ /* 176 */ "as ::= AS ID_ALIAS",
+ /* 177 */ "as ::= ID_ALIAS",
+ /* 178 */ "as ::=",
+ /* 179 */ "from ::=",
+ /* 180 */ "from ::= FROM joinsrc",
+ /* 181 */ "joinsrc ::= singlesrc seltablist",
+ /* 182 */ "joinsrc ::=",
+ /* 183 */ "seltablist ::= seltablist joinop singlesrc joinconstr_opt",
+ /* 184 */ "seltablist ::=",
+ /* 185 */ "singlesrc ::= nm dbnm as indexed_opt",
+ /* 186 */ "singlesrc ::= LP select RP as",
+ /* 187 */ "singlesrc ::= LP joinsrc RP as",
+ /* 188 */ "singlesrc ::= nm dbnm LP exprlist RP as",
+ /* 189 */ "singlesrc ::=",
+ /* 190 */ "singlesrc ::= nm DOT",
+ /* 191 */ "singlesrc ::= nm DOT ID_TAB",
+ /* 192 */ "singlesrc ::= ID_DB|ID_TAB",
+ /* 193 */ "singlesrc ::= nm DOT ID_VIEW",
+ /* 194 */ "singlesrc ::= ID_DB|ID_VIEW",
+ /* 195 */ "joinconstr_opt ::= ON expr",
+ /* 196 */ "joinconstr_opt ::= USING LP idlist RP",
+ /* 197 */ "joinconstr_opt ::=",
+ /* 198 */ "dbnm ::=",
+ /* 199 */ "dbnm ::= DOT nm",
+ /* 200 */ "fullname ::= nm dbnm",
+ /* 201 */ "joinop ::= COMMA",
+ /* 202 */ "joinop ::= JOIN",
+ /* 203 */ "joinop ::= JOIN_KW JOIN",
+ /* 204 */ "joinop ::= JOIN_KW nm JOIN",
+ /* 205 */ "joinop ::= JOIN_KW nm nm JOIN",
+ /* 206 */ "joinop ::= ID_JOIN_OPTS",
+ /* 207 */ "indexed_opt ::=",
+ /* 208 */ "indexed_opt ::= INDEXED BY nm",
+ /* 209 */ "indexed_opt ::= NOT INDEXED",
+ /* 210 */ "indexed_opt ::= INDEXED BY ID_IDX",
+ /* 211 */ "orderby_opt ::=",
+ /* 212 */ "orderby_opt ::= ORDER BY sortlist",
+ /* 213 */ "sortlist ::= sortlist COMMA expr sortorder nulls",
+ /* 214 */ "sortlist ::= expr sortorder nulls",
+ /* 215 */ "sortorder ::= ASC",
+ /* 216 */ "sortorder ::= DESC",
+ /* 217 */ "sortorder ::=",
+ /* 218 */ "nulls ::= NULLS FIRST",
+ /* 219 */ "nulls ::= NULLS LAST",
+ /* 220 */ "nulls ::=",
+ /* 221 */ "groupby_opt ::=",
+ /* 222 */ "groupby_opt ::= GROUP BY nexprlist",
+ /* 223 */ "groupby_opt ::= GROUP BY",
+ /* 224 */ "having_opt ::=",
+ /* 225 */ "having_opt ::= HAVING expr",
+ /* 226 */ "limit_opt ::=",
+ /* 227 */ "limit_opt ::= LIMIT expr",
+ /* 228 */ "limit_opt ::= LIMIT expr OFFSET expr",
+ /* 229 */ "limit_opt ::= LIMIT expr COMMA expr",
+ /* 230 */ "cmd ::= delete_stmt",
+ /* 231 */ "delete_stmt ::= with DELETE FROM fullname indexed_opt where_opt returning",
+ /* 232 */ "delete_stmt ::= with DELETE FROM",
+ /* 233 */ "delete_stmt ::= with DELETE FROM nm DOT",
+ /* 234 */ "delete_stmt ::= with DELETE FROM nm DOT ID_TAB",
+ /* 235 */ "delete_stmt ::= with DELETE FROM ID_DB|ID_TAB",
+ /* 236 */ "where_opt ::=",
+ /* 237 */ "where_opt ::= WHERE expr",
+ /* 238 */ "where_opt ::= WHERE",
+ /* 239 */ "returning ::=",
+ /* 240 */ "returning ::= RETURNING selcollist",
+ /* 241 */ "cmd ::= update_stmt",
+ /* 242 */ "update_stmt ::= with UPDATE orconf fullname indexed_opt SET setlist from where_opt returning",
+ /* 243 */ "update_stmt ::= with UPDATE orconf",
+ /* 244 */ "update_stmt ::= with UPDATE orconf nm DOT",
+ /* 245 */ "update_stmt ::= with UPDATE orconf nm DOT ID_TAB",
+ /* 246 */ "update_stmt ::= with UPDATE orconf ID_DB|ID_TAB",
+ /* 247 */ "setlist ::= setlist COMMA nm EQ expr",
+ /* 248 */ "setlist ::= setlist COMMA LP idlist RP EQ expr",
+ /* 249 */ "setlist ::= nm EQ expr",
+ /* 250 */ "setlist ::= LP idlist RP EQ expr",
+ /* 251 */ "setlist ::=",
+ /* 252 */ "setlist ::= setlist COMMA",
+ /* 253 */ "setlist ::= setlist COMMA ID_COL",
+ /* 254 */ "setlist ::= ID_COL",
+ /* 255 */ "idlist_opt ::=",
+ /* 256 */ "idlist_opt ::= LP idlist RP",
+ /* 257 */ "idlist ::= idlist COMMA nm",
+ /* 258 */ "idlist ::= nm",
+ /* 259 */ "idlist ::=",
+ /* 260 */ "idlist ::= idlist COMMA ID_COL",
+ /* 261 */ "idlist ::= ID_COL",
+ /* 262 */ "cmd ::= insert_stmt",
+ /* 263 */ "insert_stmt ::= with insert_cmd INTO fullname idlist_opt select upsert returning",
+ /* 264 */ "insert_stmt ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES returning",
+ /* 265 */ "insert_stmt ::= with insert_cmd INTO",
+ /* 266 */ "insert_stmt ::= with insert_cmd INTO nm DOT",
+ /* 267 */ "insert_stmt ::= with insert_cmd INTO ID_DB|ID_TAB",
+ /* 268 */ "insert_stmt ::= with insert_cmd INTO nm DOT ID_TAB",
+ /* 269 */ "insert_cmd ::= INSERT orconf",
+ /* 270 */ "insert_cmd ::= REPLACE",
+ /* 271 */ "upsert ::=",
+ /* 272 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt",
+ /* 273 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING",
+ /* 274 */ "upsert ::= ON CONFLICT DO NOTHING",
+ /* 275 */ "exprx ::= expr not_opt IN ID_DB",
+ /* 276 */ "exprx ::= expr not_opt IN nm DOT ID_TAB",
+ /* 277 */ "exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN",
+ /* 278 */ "exprx ::= tnm DOT ID_TAB|ID_COL",
+ /* 279 */ "exprx ::= tnm DOT nm DOT ID_COL",
+ /* 280 */ "exprx ::= expr COLLATE ID_COLLATE",
+ /* 281 */ "exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP",
+ /* 282 */ "exprx ::= CTIME_KW",
+ /* 283 */ "exprx ::= LP nexprlist RP",
+ /* 284 */ "exprx ::= tnm",
+ /* 285 */ "exprx ::= tnm DOT nm",
+ /* 286 */ "exprx ::= tnm DOT",
+ /* 287 */ "exprx ::= tnm DOT nm DOT nm",
+ /* 288 */ "exprx ::= tnm DOT nm DOT",
+ /* 289 */ "exprx ::= VARIABLE",
+ /* 290 */ "exprx ::= expr COLLATE ids",
+ /* 291 */ "exprx ::= CAST LP expr AS typetoken RP",
+ /* 292 */ "exprx ::= ID LP distinct exprlist RP",
+ /* 293 */ "exprx ::= ID LP STAR RP",
+ /* 294 */ "exprx ::= expr AND expr",
+ /* 295 */ "exprx ::= expr OR expr",
+ /* 296 */ "exprx ::= expr LT|GT|GE|LE expr",
+ /* 297 */ "exprx ::= expr EQ|NE expr",
+ /* 298 */ "exprx ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
+ /* 299 */ "exprx ::= expr PLUS|MINUS expr",
+ /* 300 */ "exprx ::= expr STAR|SLASH|REM expr",
+ /* 301 */ "exprx ::= expr CONCAT expr",
+ /* 302 */ "exprx ::= expr not_opt likeop expr",
+ /* 303 */ "exprx ::= expr not_opt likeop expr ESCAPE expr",
+ /* 304 */ "exprx ::= expr ISNULL|NOTNULL",
+ /* 305 */ "exprx ::= expr NOT NULL",
+ /* 306 */ "exprx ::= expr IS not_opt expr",
+ /* 307 */ "exprx ::= expr IS NOT DISTINCT FROM expr",
+ /* 308 */ "exprx ::= expr IS DISTINCT FROM expr",
+ /* 309 */ "exprx ::= NOT expr",
+ /* 310 */ "exprx ::= BITNOT expr",
+ /* 311 */ "exprx ::= MINUS expr",
+ /* 312 */ "exprx ::= PLUS expr",
+ /* 313 */ "exprx ::= expr PTR expr",
+ /* 314 */ "exprx ::= expr not_opt BETWEEN expr AND expr",
+ /* 315 */ "exprx ::= expr not_opt IN LP exprlist RP",
+ /* 316 */ "exprx ::= LP select RP",
+ /* 317 */ "exprx ::= expr not_opt IN LP select RP",
+ /* 318 */ "exprx ::= expr not_opt IN nm dbnm",
+ /* 319 */ "exprx ::= EXISTS LP select RP",
+ /* 320 */ "exprx ::= CASE case_operand case_exprlist case_else END",
+ /* 321 */ "exprx ::= RAISE LP IGNORE RP",
+ /* 322 */ "exprx ::= RAISE LP raisetype COMMA nm RP",
+ /* 323 */ "exprx ::= ID LP distinct exprlist RP filter_over",
+ /* 324 */ "exprx ::= ID LP STAR RP filter_over",
+ /* 325 */ "expr ::=",
+ /* 326 */ "expr ::= exprx",
+ /* 327 */ "not_opt ::=",
+ /* 328 */ "not_opt ::= NOT",
+ /* 329 */ "likeop ::= LIKE_KW|MATCH",
+ /* 330 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 331 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 332 */ "case_else ::= ELSE expr",
+ /* 333 */ "case_else ::=",
+ /* 334 */ "case_operand ::= exprx",
+ /* 335 */ "case_operand ::=",
+ /* 336 */ "exprlist ::= nexprlist",
+ /* 337 */ "exprlist ::=",
+ /* 338 */ "nexprlist ::= nexprlist COMMA expr",
+ /* 339 */ "nexprlist ::= exprx",
+ /* 340 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt",
+ /* 341 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB",
+ /* 342 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW",
+ /* 343 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW",
+ /* 344 */ "uniqueflag ::= UNIQUE",
+ /* 345 */ "uniqueflag ::=",
+ /* 346 */ "idxlist_opt ::=",
+ /* 347 */ "idxlist_opt ::= LP idxlist RP",
+ /* 348 */ "idxlist ::= idxlist COMMA idxlist_single",
+ /* 349 */ "idxlist ::= idxlist_single",
+ /* 350 */ "idxlist_single ::= nm collate sortorder",
+ /* 351 */ "idxlist_single ::= ID_COL",
+ /* 352 */ "collate ::=",
+ /* 353 */ "collate ::= COLLATE ids",
+ /* 354 */ "collate ::= COLLATE ID_COLLATE",
+ /* 355 */ "cmd ::= DROP INDEX ifexists fullname",
+ /* 356 */ "cmd ::= DROP INDEX ifexists nm DOT ID_IDX",
+ /* 357 */ "cmd ::= DROP INDEX ifexists ID_DB|ID_IDX",
+ /* 358 */ "cmd ::= VACUUM vinto",
+ /* 359 */ "cmd ::= VACUUM nm vinto",
+ /* 360 */ "vinto ::= INTO expr",
+ /* 361 */ "vinto ::=",
+ /* 362 */ "cmd ::= PRAGMA nm dbnm",
+ /* 363 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
+ /* 364 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
+ /* 365 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
+ /* 366 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
+ /* 367 */ "cmd ::= PRAGMA nm DOT ID_PRAGMA",
+ /* 368 */ "cmd ::= PRAGMA ID_DB|ID_PRAGMA",
+ /* 369 */ "nmnum ::= plus_num",
+ /* 370 */ "nmnum ::= nm",
+ /* 371 */ "nmnum ::= ON",
+ /* 372 */ "nmnum ::= DELETE",
+ /* 373 */ "nmnum ::= DEFAULT",
+ /* 374 */ "plus_num ::= PLUS number",
+ /* 375 */ "plus_num ::= number",
+ /* 376 */ "minus_num ::= MINUS number",
+ /* 377 */ "number ::= INTEGER",
+ /* 378 */ "number ::= FLOAT",
+ /* 379 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END",
+ /* 380 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause",
+ /* 381 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list",
+ /* 382 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB",
+ /* 383 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW",
+ /* 384 */ "cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW",
+ /* 385 */ "trigger_time ::= BEFORE",
+ /* 386 */ "trigger_time ::= AFTER",
+ /* 387 */ "trigger_time ::= INSTEAD OF",
+ /* 388 */ "trigger_time ::=",
+ /* 389 */ "trigger_event ::= DELETE",
+ /* 390 */ "trigger_event ::= INSERT",
+ /* 391 */ "trigger_event ::= UPDATE",
+ /* 392 */ "trigger_event ::= UPDATE OF idlist",
+ /* 393 */ "foreach_clause ::=",
+ /* 394 */ "foreach_clause ::= FOR EACH ROW",
+ /* 395 */ "when_clause ::=",
+ /* 396 */ "when_clause ::= WHEN expr",
+ /* 397 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
+ /* 398 */ "trigger_cmd_list ::= trigger_cmd SEMI",
+ /* 399 */ "trigger_cmd_list ::= SEMI",
+ /* 400 */ "trigger_cmd ::= update_stmt",
+ /* 401 */ "trigger_cmd ::= insert_stmt",
+ /* 402 */ "trigger_cmd ::= delete_stmt",
+ /* 403 */ "trigger_cmd ::= select_stmt",
+ /* 404 */ "raisetype ::= ROLLBACK|ABORT|FAIL",
+ /* 405 */ "cmd ::= DROP TRIGGER ifexists fullname",
+ /* 406 */ "cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG",
+ /* 407 */ "cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG",
+ /* 408 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
+ /* 409 */ "cmd ::= DETACH database_kw_opt expr",
+ /* 410 */ "key_opt ::=",
+ /* 411 */ "key_opt ::= KEY expr",
+ /* 412 */ "database_kw_opt ::= DATABASE",
+ /* 413 */ "database_kw_opt ::=",
+ /* 414 */ "cmd ::= REINDEX",
+ /* 415 */ "cmd ::= REINDEX nm dbnm",
+ /* 416 */ "cmd ::= REINDEX ID_COLLATE",
+ /* 417 */ "cmd ::= REINDEX nm DOT ID_TAB|ID_IDX",
+ /* 418 */ "cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB",
+ /* 419 */ "cmd ::= ANALYZE",
+ /* 420 */ "cmd ::= ANALYZE nm dbnm",
+ /* 421 */ "cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX",
+ /* 422 */ "cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB",
+ /* 423 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 424 */ "cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column",
+ /* 425 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm",
+ /* 426 */ "cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW",
+ /* 427 */ "cmd ::= ALTER TABLE nm DOT ID_TAB",
+ /* 428 */ "cmd ::= ALTER TABLE ID_DB|ID_TAB",
+ /* 429 */ "kwcolumn_opt ::=",
+ /* 430 */ "kwcolumn_opt ::= COLUMNKW",
+ /* 431 */ "cmd ::= create_vtab",
+ /* 432 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm",
+ /* 433 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP",
+ /* 434 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW",
+ /* 435 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW",
+ /* 436 */ "vtabarglist ::= vtabarg",
+ /* 437 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
+ /* 438 */ "vtabarg ::=",
+ /* 439 */ "vtabarg ::= vtabarg vtabargtoken",
+ /* 440 */ "vtabargtoken ::= ANY",
+ /* 441 */ "vtabargtoken ::= LP anylist RP",
+ /* 442 */ "anylist ::=",
+ /* 443 */ "anylist ::= anylist LP anylist RP",
+ /* 444 */ "anylist ::= anylist ANY",
+ /* 445 */ "with ::=",
+ /* 446 */ "with ::= WITH wqlist",
+ /* 447 */ "with ::= WITH RECURSIVE wqlist",
+ /* 448 */ "wqas ::= AS",
+ /* 449 */ "wqas ::= AS MATERIALIZED",
+ /* 450 */ "wqas ::= AS NOT MATERIALIZED",
+ /* 451 */ "wqlist ::= wqcte",
+ /* 452 */ "wqlist ::= wqlist COMMA wqcte",
+ /* 453 */ "wqlist ::= ID_TAB_NEW",
+ /* 454 */ "wqcte ::= nm idxlist_opt wqas LP select RP",
+ /* 455 */ "windowdefn_list ::= windowdefn",
+ /* 456 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn",
+ /* 457 */ "windowdefn ::= nm AS LP window RP",
+ /* 458 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt",
+ /* 459 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt",
+ /* 460 */ "window ::= ORDER BY sortlist frame_opt",
+ /* 461 */ "window ::= nm ORDER BY sortlist frame_opt",
+ /* 462 */ "window ::= frame_opt",
+ /* 463 */ "window ::= nm frame_opt",
+ /* 464 */ "frame_opt ::=",
+ /* 465 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt",
+ /* 466 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt",
+ /* 467 */ "range_or_rows ::= RANGE|ROWS|GROUPS",
+ /* 468 */ "frame_bound_s ::= frame_bound",
+ /* 469 */ "frame_bound_s ::= UNBOUNDED PRECEDING",
+ /* 470 */ "frame_bound_e ::= frame_bound",
+ /* 471 */ "frame_bound_e ::= UNBOUNDED FOLLOWING",
+ /* 472 */ "frame_bound ::= expr PRECEDING|FOLLOWING",
+ /* 473 */ "frame_bound ::= CURRENT ROW",
+ /* 474 */ "frame_exclude_opt ::=",
+ /* 475 */ "frame_exclude_opt ::= EXCLUDE frame_exclude",
+ /* 476 */ "frame_exclude ::= NO OTHERS",
+ /* 477 */ "frame_exclude ::= CURRENT ROW",
+ /* 478 */ "frame_exclude ::= GROUP",
+ /* 479 */ "frame_exclude ::= TIES",
+ /* 480 */ "window_clause ::= WINDOW windowdefn_list",
+ /* 481 */ "filter_over ::= filter_clause over_clause",
+ /* 482 */ "filter_over ::= over_clause",
+ /* 483 */ "filter_over ::= filter_clause",
+ /* 484 */ "over_clause ::= OVER LP window RP",
+ /* 485 */ "over_clause ::= OVER nm",
+ /* 486 */ "filter_clause ::= FILTER LP WHERE expr RP",
};
#endif /* NDEBUG */
@@ -1944,384 +1938,399 @@ static void yy_destructor(
** which appear on the RHS of the rule, but which are not used
** inside the C code.
*/
- case 191: /* cmd */
- case 194: /* ecmd */
- case 196: /* cmdx */
- case 243: /* select_stmt */
- case 272: /* delete_stmt */
- case 273: /* update_stmt */
- case 276: /* insert_stmt */
- case 297: /* trigger_cmd */
- case 301: /* create_vtab */
-{
-parser_safe_delete((yypminor->yy363));
+ case 195: /* cmd */
+ case 198: /* ecmd */
+ case 200: /* cmdx */
+ case 248: /* select_stmt */
+ case 277: /* delete_stmt */
+ case 279: /* update_stmt */
+ case 282: /* insert_stmt */
+ case 303: /* trigger_cmd */
+ case 307: /* create_vtab */
+{
+parser_safe_delete((yypminor->yy41));
}
break;
- case 195: /* explain */
+ case 199: /* explain */
{
-parser_safe_delete((yypminor->yy91));
+parser_safe_delete((yypminor->yy499));
}
break;
- case 197: /* transtype */
- case 198: /* trans_opt */
+ case 201: /* transtype */
+ case 202: /* trans_opt */
{
-parser_safe_delete((yypminor->yy84));
+parser_safe_delete((yypminor->yy512));
}
break;
- case 199: /* nm */
- case 206: /* table_options */
- case 209: /* columnid */
- case 212: /* id */
- case 213: /* id_opt */
- case 214: /* ids */
- case 216: /* typename */
- case 267: /* dbnm */
- case 288: /* collate */
- case 303: /* vtabarg */
- case 304: /* vtabargtoken */
- case 305: /* anylist */
+ case 203: /* nm */
+ case 214: /* columnid */
+ case 217: /* id */
+ case 218: /* id_opt */
+ case 219: /* ids */
+ case 221: /* typename */
+ case 272: /* dbnm */
+ case 294: /* collate */
+ case 309: /* vtabarg */
+ case 310: /* vtabargtoken */
+ case 311: /* anylist */
{
parser_safe_delete((yypminor->yy319));
}
break;
- case 200: /* savepoint_opt */
- case 202: /* ifnotexists */
- case 225: /* autoinc */
- case 229: /* gen_always */
- case 235: /* tconscomma */
- case 242: /* ifexists */
- case 280: /* not_opt */
- case 286: /* uniqueflag */
- case 298: /* database_kw_opt */
- case 300: /* kwcolumn_opt */
-{
-parser_safe_delete((yypminor->yy611));
+ case 204: /* savepoint_opt */
+ case 206: /* ifnotexists */
+ case 230: /* autoinc */
+ case 234: /* gen_always */
+ case 240: /* tconscomma */
+ case 247: /* ifexists */
+ case 286: /* not_opt */
+ case 292: /* uniqueflag */
+ case 304: /* database_kw_opt */
+ case 306: /* kwcolumn_opt */
+{
+parser_safe_delete((yypminor->yy225));
}
break;
- case 201: /* temp */
- case 249: /* distinct */
+ case 205: /* temp */
+ case 254: /* distinct */
{
-parser_safe_delete((yypminor->yy386));
+parser_safe_delete((yypminor->yy130));
}
break;
- case 203: /* fullname */
+ case 207: /* fullname */
{
-parser_safe_delete((yypminor->yy440));
+parser_safe_delete((yypminor->yy396));
}
break;
- case 204: /* columnlist */
+ case 208: /* columnlist */
{
-parser_safe_delete((yypminor->yy42));
+parser_safe_delete((yypminor->yy390));
}
break;
- case 205: /* conslist_opt */
- case 234: /* conslist */
+ case 209: /* conslist_opt */
+ case 239: /* conslist */
{
-parser_safe_delete((yypminor->yy493));
+parser_safe_delete((yypminor->yy115));
}
break;
- case 207: /* select */
- case 245: /* selectnowith */
+ case 210: /* table_options */
{
-parser_safe_delete((yypminor->yy313));
+parser_safe_delete((yypminor->yy455));
}
break;
- case 208: /* column */
+ case 211: /* select */
+ case 250: /* selectnowith */
{
-parser_safe_delete((yypminor->yy147));
+parser_safe_delete((yypminor->yy297));
}
break;
- case 210: /* type */
- case 215: /* typetoken */
+ case 212: /* table_option */
{
-parser_safe_delete((yypminor->yy57));
+parser_safe_delete((yypminor->yy629));
}
break;
- case 211: /* carglist */
+ case 213: /* column */
{
-parser_safe_delete((yypminor->yy51));
+parser_safe_delete((yypminor->yy3));
}
break;
- case 217: /* signed */
- case 218: /* plus_num */
- case 219: /* minus_num */
- case 221: /* term */
- case 290: /* nmnum */
- case 291: /* number */
-{
-parser_safe_delete((yypminor->yy229));
+ case 215: /* type */
+ case 220: /* typetoken */
+{
+parser_safe_delete((yypminor->yy267));
}
break;
- case 220: /* ccons */
+ case 216: /* carglist */
{
-parser_safe_delete((yypminor->yy464));
+parser_safe_delete((yypminor->yy323));
}
break;
- case 222: /* expr */
- case 252: /* where_opt */
- case 254: /* having_opt */
- case 279: /* exprx */
- case 282: /* case_operand */
- case 284: /* case_else */
- case 289: /* vinto */
- case 295: /* when_clause */
- case 299: /* key_opt */
+ case 222: /* signed */
+ case 223: /* plus_num */
+ case 224: /* minus_num */
+ case 226: /* term */
+ case 296: /* nmnum */
+ case 297: /* number */
+{
+parser_safe_delete((yypminor->yy393));
+}
+ break;
+ case 225: /* ccons */
{
-parser_safe_delete((yypminor->yy512));
+parser_safe_delete((yypminor->yy448));
}
break;
- case 223: /* onconf */
- case 239: /* resolvetype */
- case 240: /* orconf */
+ case 227: /* expr */
+ case 257: /* where_opt */
+ case 259: /* having_opt */
+ case 285: /* exprx */
+ case 288: /* case_operand */
+ case 290: /* case_else */
+ case 295: /* vinto */
+ case 301: /* when_clause */
+ case 305: /* key_opt */
+{
+parser_safe_delete((yypminor->yy186));
+}
+ break;
+ case 228: /* onconf */
+ case 244: /* resolvetype */
+ case 245: /* orconf */
{
-parser_safe_delete((yypminor->yy418));
+parser_safe_delete((yypminor->yy136));
}
break;
- case 224: /* sortorder */
+ case 229: /* sortorder */
{
-parser_safe_delete((yypminor->yy549));
+parser_safe_delete((yypminor->yy35));
}
break;
- case 226: /* idxlist_opt */
- case 237: /* idxlist */
+ case 231: /* idxlist_opt */
+ case 242: /* idxlist */
{
-parser_safe_delete((yypminor->yy223));
+parser_safe_delete((yypminor->yy627));
}
break;
- case 227: /* refargs */
+ case 232: /* refargs */
{
-parser_safe_delete((yypminor->yy584));
+parser_safe_delete((yypminor->yy156));
}
break;
- case 228: /* defer_subclause */
- case 238: /* defer_subclause_opt */
+ case 233: /* defer_subclause */
+ case 243: /* defer_subclause_opt */
{
-parser_safe_delete((yypminor->yy9));
+parser_safe_delete((yypminor->yy53));
}
break;
- case 230: /* tnm */
+ case 235: /* tnm */
{
-parser_safe_delete((yypminor->yy590));
+parser_safe_delete((yypminor->yy380));
}
break;
- case 231: /* refarg */
+ case 236: /* refarg */
{
-parser_safe_delete((yypminor->yy507));
+parser_safe_delete((yypminor->yy205));
}
break;
- case 232: /* refact */
+ case 237: /* refact */
{
-parser_safe_delete((yypminor->yy104));
+parser_safe_delete((yypminor->yy106));
}
break;
- case 233: /* init_deferred_pred_opt */
+ case 238: /* init_deferred_pred_opt */
{
-parser_safe_delete((yypminor->yy312));
+parser_safe_delete((yypminor->yy612));
}
break;
- case 236: /* tcons */
+ case 241: /* tcons */
{
-parser_safe_delete((yypminor->yy246));
+parser_safe_delete((yypminor->yy400));
}
break;
- case 244: /* with */
+ case 249: /* with */
{
-parser_safe_delete((yypminor->yy1));
+parser_safe_delete((yypminor->yy161));
}
break;
- case 246: /* oneselect */
+ case 251: /* oneselect */
{
-parser_safe_delete((yypminor->yy470));
+parser_safe_delete((yypminor->yy378));
}
break;
- case 247: /* multiselect_op */
+ case 252: /* multiselect_op */
{
-parser_safe_delete((yypminor->yy382));
+parser_safe_delete((yypminor->yy142));
}
break;
- case 248: /* values */
+ case 253: /* values */
{
-parser_safe_delete((yypminor->yy486));
+parser_safe_delete((yypminor->yy522));
}
break;
- case 250: /* selcollist */
- case 260: /* sclp */
+ case 255: /* selcollist */
+ case 265: /* sclp */
+ case 278: /* returning */
{
-parser_safe_delete((yypminor->yy53));
+parser_safe_delete((yypminor->yy27));
}
break;
- case 251: /* from */
- case 262: /* joinsrc */
+ case 256: /* from */
+ case 267: /* joinsrc */
{
-parser_safe_delete((yypminor->yy31));
+parser_safe_delete((yypminor->yy553));
}
break;
- case 253: /* groupby_opt */
- case 258: /* nexprlist */
- case 259: /* exprlist */
- case 283: /* case_exprlist */
+ case 258: /* groupby_opt */
+ case 263: /* nexprlist */
+ case 264: /* exprlist */
+ case 289: /* case_exprlist */
{
-parser_safe_delete((yypminor->yy71));
+parser_safe_delete((yypminor->yy615));
}
break;
- case 255: /* orderby_opt */
- case 270: /* sortlist */
+ case 260: /* orderby_opt */
+ case 275: /* sortlist */
{
-parser_safe_delete((yypminor->yy403));
+parser_safe_delete((yypminor->yy226));
}
break;
- case 256: /* limit_opt */
+ case 261: /* limit_opt */
{
-parser_safe_delete((yypminor->yy4));
+parser_safe_delete((yypminor->yy360));
}
break;
- case 257: /* window_clause */
- case 308: /* windowdefn_list */
+ case 262: /* window_clause */
+ case 315: /* windowdefn_list */
{
-parser_safe_delete((yypminor->yy299));
+parser_safe_delete((yypminor->yy525));
}
break;
- case 261: /* as */
+ case 266: /* as */
{
-parser_safe_delete((yypminor->yy200));
+parser_safe_delete((yypminor->yy628));
}
break;
- case 263: /* singlesrc */
+ case 268: /* singlesrc */
{
-parser_safe_delete((yypminor->yy441));
+parser_safe_delete((yypminor->yy595));
}
break;
- case 264: /* seltablist */
+ case 269: /* seltablist */
{
-parser_safe_delete((yypminor->yy451));
+parser_safe_delete((yypminor->yy107));
}
break;
- case 265: /* joinop */
+ case 270: /* joinop */
{
-parser_safe_delete((yypminor->yy221));
+parser_safe_delete((yypminor->yy449));
}
break;
- case 266: /* joinconstr_opt */
+ case 271: /* joinconstr_opt */
{
-parser_safe_delete((yypminor->yy295));
+parser_safe_delete((yypminor->yy215));
}
break;
- case 268: /* indexed_opt */
+ case 273: /* indexed_opt */
{
-parser_safe_delete((yypminor->yy592));
+parser_safe_delete((yypminor->yy300));
}
break;
- case 269: /* idlist */
- case 275: /* idlist_opt */
- case 302: /* vtabarglist */
+ case 274: /* idlist */
+ case 281: /* idlist_opt */
+ case 308: /* vtabarglist */
{
-parser_safe_delete((yypminor->yy575));
+parser_safe_delete((yypminor->yy173));
}
break;
- case 271: /* nulls */
+ case 276: /* nulls */
{
-parser_safe_delete((yypminor->yy579));
+parser_safe_delete((yypminor->yy315));
}
break;
- case 274: /* setlist */
+ case 280: /* setlist */
{
-parser_safe_delete((yypminor->yy201));
+parser_safe_delete((yypminor->yy621));
}
break;
- case 277: /* insert_cmd */
+ case 283: /* insert_cmd */
{
-parser_safe_delete((yypminor->yy504));
+parser_safe_delete((yypminor->yy308));
}
break;
- case 278: /* upsert */
+ case 284: /* upsert */
{
-parser_safe_delete((yypminor->yy400));
+parser_safe_delete((yypminor->yy332));
}
break;
- case 281: /* likeop */
+ case 287: /* likeop */
{
-parser_safe_delete((yypminor->yy40));
+parser_safe_delete((yypminor->yy274));
}
break;
- case 285: /* filter_over */
+ case 291: /* filter_over */
{
-parser_safe_delete((yypminor->yy247));
+parser_safe_delete((yypminor->yy181));
}
break;
- case 287: /* idxlist_single */
+ case 293: /* idxlist_single */
{
-parser_safe_delete((yypminor->yy268));
+parser_safe_delete((yypminor->yy110));
}
break;
- case 292: /* trigger_time */
+ case 298: /* trigger_time */
{
-parser_safe_delete((yypminor->yy532));
+parser_safe_delete((yypminor->yy120));
}
break;
- case 293: /* trigger_event */
+ case 299: /* trigger_event */
{
-parser_safe_delete((yypminor->yy151));
+parser_safe_delete((yypminor->yy259));
}
break;
- case 294: /* foreach_clause */
+ case 300: /* foreach_clause */
{
-parser_safe_delete((yypminor->yy83));
+parser_safe_delete((yypminor->yy456));
}
break;
- case 296: /* trigger_cmd_list */
+ case 302: /* trigger_cmd_list */
{
-parser_safe_delete((yypminor->yy110));
+parser_safe_delete((yypminor->yy240));
}
break;
- case 306: /* wqlist */
+ case 312: /* wqlist */
{
-parser_safe_delete((yypminor->yy593));
+parser_safe_delete((yypminor->yy164));
}
break;
- case 307: /* wqcte */
+ case 313: /* wqas */
{
-parser_safe_delete((yypminor->yy446));
+parser_safe_delete((yypminor->yy21));
}
break;
- case 309: /* windowdefn */
+ case 314: /* wqcte */
{
-parser_safe_delete((yypminor->yy266));
+parser_safe_delete((yypminor->yy146));
}
break;
- case 310: /* window */
+ case 316: /* windowdefn */
{
-parser_safe_delete((yypminor->yy334));
+parser_safe_delete((yypminor->yy562));
}
break;
- case 311: /* frame_opt */
+ case 317: /* window */
{
-parser_safe_delete((yypminor->yy41));
+parser_safe_delete((yypminor->yy162));
}
break;
- case 312: /* range_or_rows */
+ case 318: /* frame_opt */
{
-parser_safe_delete((yypminor->yy419));
+parser_safe_delete((yypminor->yy149));
}
break;
- case 313: /* frame_bound_s */
- case 315: /* frame_bound_e */
+ case 319: /* range_or_rows */
{
-parser_safe_delete((yypminor->yy442));
+parser_safe_delete((yypminor->yy143));
}
break;
- case 316: /* frame_bound */
+ case 320: /* frame_bound_s */
+ case 322: /* frame_bound_e */
{
-parser_safe_delete((yypminor->yy442));parser_safe_delete((yypminor->yy442));parser_safe_delete((yypminor->yy442));
+parser_safe_delete((yypminor->yy285));
}
break;
- case 318: /* filter_clause */
+ case 323: /* frame_bound */
{
-parser_safe_delete((yypminor->yy397));
+parser_safe_delete((yypminor->yy285));parser_safe_delete((yypminor->yy285));parser_safe_delete((yypminor->yy285));
}
break;
- case 319: /* over_clause */
+ case 325: /* filter_clause */
{
-parser_safe_delete((yypminor->yy248));
+parser_safe_delete((yypminor->yy39));
+}
+ break;
+ case 326: /* over_clause */
+{
+parser_safe_delete((yypminor->yy11));
}
break;
default: break; /* If no destructor action specified: do nothing */
@@ -2572,478 +2581,493 @@ static const struct {
YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
unsigned char nrhs; /* Number of right-hand side symbols in the rule */
} yyRuleInfo[] = {
- { 192, 1 },
- { 193, 2 },
- { 193, 1 },
- { 194, 1 },
- { 194, 3 },
- { 195, 0 },
- { 195, 1 },
- { 195, 3 },
{ 196, 1 },
- { 191, 3 },
- { 198, 0 },
- { 198, 1 },
- { 198, 2 },
- { 198, 2 },
- { 197, 0 },
- { 197, 1 },
+ { 197, 2 },
{ 197, 1 },
- { 197, 1 },
- { 191, 2 },
- { 191, 2 },
- { 191, 2 },
+ { 198, 1 },
+ { 198, 3 },
+ { 199, 0 },
+ { 199, 1 },
+ { 199, 3 },
{ 200, 1 },
- { 200, 0 },
- { 191, 2 },
- { 191, 3 },
- { 191, 5 },
- { 191, 2 },
- { 191, 3 },
- { 191, 5 },
- { 191, 10 },
- { 191, 7 },
- { 191, 7 },
- { 191, 5 },
- { 206, 0 },
- { 206, 2 },
- { 206, 2 },
+ { 195, 3 },
{ 202, 0 },
- { 202, 3 },
- { 201, 1 },
+ { 202, 1 },
+ { 202, 2 },
+ { 202, 2 },
{ 201, 0 },
- { 204, 3 },
+ { 201, 1 },
+ { 201, 1 },
+ { 201, 1 },
+ { 195, 2 },
+ { 195, 2 },
+ { 195, 2 },
{ 204, 1 },
- { 208, 3 },
- { 209, 1 },
- { 209, 1 },
- { 212, 1 },
- { 213, 1 },
- { 213, 0 },
- { 214, 1 },
- { 199, 1 },
- { 199, 1 },
- { 199, 1 },
+ { 204, 0 },
+ { 195, 2 },
+ { 195, 3 },
+ { 195, 5 },
+ { 195, 2 },
+ { 195, 3 },
+ { 195, 5 },
+ { 195, 10 },
+ { 195, 7 },
+ { 195, 7 },
+ { 195, 5 },
{ 210, 0 },
{ 210, 1 },
- { 215, 1 },
- { 215, 4 },
- { 215, 6 },
- { 216, 1 },
- { 216, 2 },
- { 216, 1 },
- { 217, 1 },
+ { 210, 3 },
+ { 212, 2 },
+ { 212, 1 },
+ { 212, 2 },
+ { 212, 1 },
+ { 206, 0 },
+ { 206, 3 },
+ { 205, 1 },
+ { 205, 0 },
+ { 208, 3 },
+ { 208, 1 },
+ { 213, 3 },
+ { 214, 1 },
+ { 214, 1 },
{ 217, 1 },
- { 211, 2 },
- { 211, 0 },
- { 220, 2 },
- { 220, 2 },
- { 220, 4 },
- { 220, 3 },
- { 220, 3 },
- { 220, 2 },
- { 220, 2 },
- { 220, 2 },
- { 220, 3 },
- { 220, 5 },
- { 220, 2 },
- { 220, 4 },
- { 220, 4 },
+ { 218, 1 },
+ { 218, 0 },
+ { 219, 1 },
+ { 203, 1 },
+ { 203, 1 },
+ { 203, 1 },
+ { 215, 0 },
+ { 215, 1 },
{ 220, 1 },
- { 220, 2 },
+ { 220, 4 },
{ 220, 6 },
- { 220, 2 },
- { 220, 2 },
- { 220, 2 },
- { 220, 3 },
- { 221, 1 },
- { 221, 1 },
{ 221, 1 },
+ { 221, 2 },
{ 221, 1 },
- { 230, 1 },
- { 230, 1 },
- { 229, 2 },
- { 229, 0 },
- { 225, 0 },
+ { 222, 1 },
+ { 222, 1 },
+ { 216, 2 },
+ { 216, 0 },
+ { 225, 2 },
+ { 225, 2 },
+ { 225, 4 },
+ { 225, 3 },
+ { 225, 3 },
+ { 225, 2 },
+ { 225, 2 },
+ { 225, 2 },
+ { 225, 3 },
+ { 225, 5 },
+ { 225, 2 },
+ { 225, 4 },
+ { 225, 4 },
{ 225, 1 },
- { 227, 0 },
- { 227, 2 },
- { 231, 2 },
- { 231, 3 },
- { 231, 3 },
- { 231, 3 },
- { 231, 2 },
- { 232, 2 },
- { 232, 2 },
- { 232, 1 },
- { 232, 1 },
- { 232, 2 },
- { 228, 3 },
- { 228, 2 },
- { 233, 0 },
- { 233, 2 },
- { 233, 2 },
- { 205, 0 },
- { 205, 2 },
- { 234, 3 },
- { 234, 1 },
+ { 225, 2 },
+ { 225, 6 },
+ { 225, 2 },
+ { 225, 2 },
+ { 225, 2 },
+ { 225, 3 },
+ { 226, 1 },
+ { 226, 1 },
+ { 226, 1 },
+ { 226, 1 },
{ 235, 1 },
- { 235, 0 },
+ { 235, 1 },
+ { 234, 2 },
+ { 234, 0 },
+ { 230, 0 },
+ { 230, 1 },
+ { 232, 0 },
+ { 232, 2 },
{ 236, 2 },
- { 236, 7 },
- { 236, 5 },
- { 236, 5 },
- { 236, 10 },
+ { 236, 3 },
+ { 236, 3 },
+ { 236, 3 },
{ 236, 2 },
- { 236, 7 },
- { 236, 4 },
+ { 237, 2 },
+ { 237, 2 },
+ { 237, 1 },
+ { 237, 1 },
+ { 237, 2 },
+ { 233, 3 },
+ { 233, 2 },
{ 238, 0 },
- { 238, 1 },
- { 223, 0 },
- { 223, 3 },
- { 240, 0 },
- { 240, 2 },
- { 239, 1 },
+ { 238, 2 },
+ { 238, 2 },
+ { 209, 0 },
+ { 209, 2 },
+ { 239, 3 },
{ 239, 1 },
- { 239, 1 },
- { 191, 4 },
- { 191, 6 },
- { 191, 4 },
- { 242, 2 },
- { 242, 0 },
- { 191, 8 },
- { 191, 7 },
- { 191, 5 },
- { 191, 4 },
- { 191, 6 },
- { 191, 4 },
- { 191, 1 },
+ { 240, 1 },
+ { 240, 0 },
+ { 241, 2 },
+ { 241, 7 },
+ { 241, 5 },
+ { 241, 5 },
+ { 241, 10 },
+ { 241, 2 },
+ { 241, 7 },
+ { 241, 4 },
+ { 243, 0 },
{ 243, 1 },
- { 207, 2 },
- { 245, 1 },
- { 245, 3 },
- { 245, 1 },
- { 245, 3 },
- { 246, 9 },
- { 246, 10 },
- { 248, 4 },
- { 248, 5 },
- { 247, 1 },
+ { 228, 0 },
+ { 228, 3 },
+ { 245, 0 },
+ { 245, 2 },
+ { 244, 1 },
+ { 244, 1 },
+ { 244, 1 },
+ { 195, 4 },
+ { 195, 6 },
+ { 195, 4 },
{ 247, 2 },
- { 247, 1 },
- { 247, 1 },
- { 249, 1 },
- { 249, 1 },
- { 249, 0 },
- { 260, 2 },
- { 260, 0 },
+ { 247, 0 },
+ { 195, 8 },
+ { 195, 7 },
+ { 195, 5 },
+ { 195, 4 },
+ { 195, 6 },
+ { 195, 4 },
+ { 195, 1 },
+ { 248, 1 },
+ { 211, 2 },
+ { 250, 1 },
{ 250, 3 },
- { 250, 2 },
- { 250, 4 },
{ 250, 1 },
- { 250, 4 },
- { 261, 2 },
- { 261, 1 },
- { 261, 2 },
- { 261, 1 },
- { 261, 0 },
- { 251, 0 },
- { 251, 2 },
- { 262, 2 },
- { 262, 0 },
- { 264, 4 },
- { 264, 0 },
- { 263, 4 },
- { 263, 4 },
- { 263, 4 },
- { 263, 6 },
- { 263, 0 },
- { 263, 2 },
- { 263, 3 },
- { 263, 1 },
- { 263, 3 },
- { 263, 1 },
+ { 250, 3 },
+ { 251, 9 },
+ { 251, 10 },
+ { 253, 4 },
+ { 253, 5 },
+ { 252, 1 },
+ { 252, 2 },
+ { 252, 1 },
+ { 252, 1 },
+ { 254, 1 },
+ { 254, 1 },
+ { 254, 0 },
+ { 265, 2 },
+ { 265, 0 },
+ { 255, 3 },
+ { 255, 2 },
+ { 255, 4 },
+ { 255, 1 },
+ { 255, 4 },
{ 266, 2 },
- { 266, 4 },
+ { 266, 1 },
+ { 266, 2 },
+ { 266, 1 },
{ 266, 0 },
- { 267, 0 },
+ { 256, 0 },
+ { 256, 2 },
{ 267, 2 },
- { 203, 2 },
- { 265, 1 },
- { 265, 1 },
- { 265, 2 },
- { 265, 3 },
- { 265, 4 },
- { 265, 1 },
+ { 267, 0 },
+ { 269, 4 },
+ { 269, 0 },
+ { 268, 4 },
+ { 268, 4 },
+ { 268, 4 },
+ { 268, 6 },
{ 268, 0 },
- { 268, 3 },
{ 268, 2 },
{ 268, 3 },
- { 255, 0 },
- { 255, 3 },
- { 270, 5 },
- { 270, 3 },
- { 224, 1 },
- { 224, 1 },
- { 224, 0 },
- { 271, 2 },
+ { 268, 1 },
+ { 268, 3 },
+ { 268, 1 },
{ 271, 2 },
+ { 271, 4 },
{ 271, 0 },
- { 253, 0 },
- { 253, 3 },
- { 253, 2 },
- { 254, 0 },
- { 254, 2 },
- { 256, 0 },
- { 256, 2 },
- { 256, 4 },
- { 256, 4 },
- { 191, 1 },
- { 272, 6 },
- { 272, 3 },
- { 272, 5 },
- { 272, 6 },
- { 272, 4 },
- { 252, 0 },
- { 252, 2 },
- { 252, 1 },
- { 191, 1 },
- { 273, 9 },
+ { 272, 0 },
+ { 272, 2 },
+ { 207, 2 },
+ { 270, 1 },
+ { 270, 1 },
+ { 270, 2 },
+ { 270, 3 },
+ { 270, 4 },
+ { 270, 1 },
+ { 273, 0 },
{ 273, 3 },
- { 273, 5 },
- { 273, 6 },
- { 273, 4 },
- { 274, 5 },
- { 274, 7 },
- { 274, 3 },
- { 274, 5 },
- { 274, 0 },
- { 274, 2 },
- { 274, 3 },
- { 274, 1 },
- { 275, 0 },
+ { 273, 2 },
+ { 273, 3 },
+ { 260, 0 },
+ { 260, 3 },
+ { 275, 5 },
{ 275, 3 },
- { 269, 3 },
- { 269, 1 },
- { 269, 0 },
- { 269, 3 },
- { 269, 1 },
- { 191, 1 },
- { 276, 7 },
- { 276, 7 },
- { 276, 3 },
- { 276, 5 },
- { 276, 4 },
- { 276, 6 },
- { 277, 2 },
- { 277, 1 },
+ { 229, 1 },
+ { 229, 1 },
+ { 229, 0 },
+ { 276, 2 },
+ { 276, 2 },
+ { 276, 0 },
+ { 258, 0 },
+ { 258, 3 },
+ { 258, 2 },
+ { 259, 0 },
+ { 259, 2 },
+ { 261, 0 },
+ { 261, 2 },
+ { 261, 4 },
+ { 261, 4 },
+ { 195, 1 },
+ { 277, 7 },
+ { 277, 3 },
+ { 277, 5 },
+ { 277, 6 },
+ { 277, 4 },
+ { 257, 0 },
+ { 257, 2 },
+ { 257, 1 },
{ 278, 0 },
- { 278, 11 },
- { 278, 8 },
- { 278, 4 },
- { 279, 4 },
- { 279, 6 },
- { 279, 1 },
- { 279, 3 },
- { 279, 5 },
- { 279, 3 },
- { 279, 6 },
- { 279, 1 },
- { 279, 3 },
- { 279, 1 },
+ { 278, 2 },
+ { 195, 1 },
+ { 279, 10 },
{ 279, 3 },
{ 279, 5 },
- { 279, 1 },
- { 279, 3 },
{ 279, 6 },
- { 279, 5 },
- { 279, 4 },
- { 279, 3 },
- { 279, 3 },
- { 279, 3 },
- { 279, 3 },
- { 279, 3 },
- { 279, 3 },
- { 279, 3 },
- { 279, 3 },
{ 279, 4 },
- { 279, 6 },
- { 279, 2 },
- { 279, 3 },
- { 279, 4 },
- { 279, 2 },
- { 279, 2 },
- { 279, 2 },
- { 279, 2 },
- { 279, 6 },
- { 279, 6 },
- { 279, 3 },
- { 279, 6 },
- { 279, 5 },
- { 279, 4 },
- { 279, 5 },
- { 279, 4 },
- { 279, 6 },
- { 279, 6 },
- { 279, 5 },
- { 222, 0 },
- { 222, 1 },
+ { 280, 5 },
+ { 280, 7 },
+ { 280, 3 },
+ { 280, 5 },
{ 280, 0 },
+ { 280, 2 },
+ { 280, 3 },
{ 280, 1 },
- { 281, 1 },
- { 283, 5 },
- { 283, 4 },
- { 284, 2 },
+ { 281, 0 },
+ { 281, 3 },
+ { 274, 3 },
+ { 274, 1 },
+ { 274, 0 },
+ { 274, 3 },
+ { 274, 1 },
+ { 195, 1 },
+ { 282, 8 },
+ { 282, 8 },
+ { 282, 3 },
+ { 282, 5 },
+ { 282, 4 },
+ { 282, 6 },
+ { 283, 2 },
+ { 283, 1 },
{ 284, 0 },
- { 282, 1 },
- { 282, 0 },
- { 259, 1 },
- { 259, 0 },
- { 258, 3 },
- { 258, 1 },
- { 191, 12 },
- { 191, 8 },
- { 191, 7 },
- { 191, 5 },
- { 286, 1 },
+ { 284, 11 },
+ { 284, 8 },
+ { 284, 4 },
+ { 285, 4 },
+ { 285, 6 },
+ { 285, 1 },
+ { 285, 3 },
+ { 285, 5 },
+ { 285, 3 },
+ { 285, 6 },
+ { 285, 1 },
+ { 285, 3 },
+ { 285, 1 },
+ { 285, 3 },
+ { 285, 2 },
+ { 285, 5 },
+ { 285, 4 },
+ { 285, 1 },
+ { 285, 3 },
+ { 285, 6 },
+ { 285, 5 },
+ { 285, 4 },
+ { 285, 3 },
+ { 285, 3 },
+ { 285, 3 },
+ { 285, 3 },
+ { 285, 3 },
+ { 285, 3 },
+ { 285, 3 },
+ { 285, 3 },
+ { 285, 4 },
+ { 285, 6 },
+ { 285, 2 },
+ { 285, 3 },
+ { 285, 4 },
+ { 285, 6 },
+ { 285, 5 },
+ { 285, 2 },
+ { 285, 2 },
+ { 285, 2 },
+ { 285, 2 },
+ { 285, 3 },
+ { 285, 6 },
+ { 285, 6 },
+ { 285, 3 },
+ { 285, 6 },
+ { 285, 5 },
+ { 285, 4 },
+ { 285, 5 },
+ { 285, 4 },
+ { 285, 6 },
+ { 285, 6 },
+ { 285, 5 },
+ { 227, 0 },
+ { 227, 1 },
{ 286, 0 },
- { 226, 0 },
- { 226, 3 },
- { 237, 3 },
- { 237, 1 },
- { 287, 3 },
+ { 286, 1 },
{ 287, 1 },
+ { 289, 5 },
+ { 289, 4 },
+ { 290, 2 },
+ { 290, 0 },
+ { 288, 1 },
{ 288, 0 },
- { 288, 2 },
- { 288, 2 },
- { 191, 4 },
- { 191, 6 },
- { 191, 4 },
- { 191, 2 },
- { 191, 3 },
- { 289, 2 },
- { 289, 0 },
- { 191, 3 },
- { 191, 5 },
- { 191, 6 },
- { 191, 5 },
- { 191, 6 },
- { 191, 4 },
- { 191, 2 },
- { 290, 1 },
- { 290, 1 },
- { 290, 1 },
- { 290, 1 },
- { 290, 1 },
- { 218, 2 },
- { 218, 1 },
- { 219, 2 },
- { 291, 1 },
- { 291, 1 },
- { 191, 15 },
- { 191, 12 },
- { 191, 14 },
- { 191, 10 },
- { 191, 7 },
- { 191, 5 },
- { 292, 1 },
+ { 264, 1 },
+ { 264, 0 },
+ { 263, 3 },
+ { 263, 1 },
+ { 195, 12 },
+ { 195, 8 },
+ { 195, 7 },
+ { 195, 5 },
{ 292, 1 },
- { 292, 2 },
{ 292, 0 },
- { 293, 1 },
- { 293, 1 },
- { 293, 1 },
+ { 231, 0 },
+ { 231, 3 },
+ { 242, 3 },
+ { 242, 1 },
{ 293, 3 },
+ { 293, 1 },
{ 294, 0 },
- { 294, 3 },
- { 295, 0 },
+ { 294, 2 },
+ { 294, 2 },
+ { 195, 4 },
+ { 195, 6 },
+ { 195, 4 },
+ { 195, 2 },
+ { 195, 3 },
{ 295, 2 },
- { 296, 3 },
- { 296, 2 },
+ { 295, 0 },
+ { 195, 3 },
+ { 195, 5 },
+ { 195, 6 },
+ { 195, 5 },
+ { 195, 6 },
+ { 195, 4 },
+ { 195, 2 },
{ 296, 1 },
+ { 296, 1 },
+ { 296, 1 },
+ { 296, 1 },
+ { 296, 1 },
+ { 223, 2 },
+ { 223, 1 },
+ { 224, 2 },
{ 297, 1 },
{ 297, 1 },
- { 297, 1 },
- { 297, 1 },
- { 241, 1 },
- { 191, 4 },
- { 191, 6 },
- { 191, 4 },
- { 191, 6 },
- { 191, 3 },
- { 299, 0 },
- { 299, 2 },
+ { 195, 15 },
+ { 195, 12 },
+ { 195, 14 },
+ { 195, 10 },
+ { 195, 7 },
+ { 195, 5 },
{ 298, 1 },
+ { 298, 1 },
+ { 298, 2 },
{ 298, 0 },
- { 191, 1 },
- { 191, 3 },
- { 191, 2 },
- { 191, 4 },
- { 191, 2 },
- { 191, 1 },
- { 191, 3 },
- { 191, 4 },
- { 191, 2 },
- { 191, 6 },
- { 191, 6 },
- { 191, 6 },
- { 191, 5 },
- { 191, 3 },
+ { 299, 1 },
+ { 299, 1 },
+ { 299, 1 },
+ { 299, 3 },
{ 300, 0 },
- { 300, 1 },
- { 191, 1 },
- { 301, 8 },
- { 301, 11 },
- { 301, 7 },
- { 301, 5 },
- { 302, 1 },
+ { 300, 3 },
+ { 301, 0 },
+ { 301, 2 },
{ 302, 3 },
- { 303, 0 },
- { 303, 2 },
- { 304, 1 },
- { 304, 3 },
+ { 302, 2 },
+ { 302, 1 },
+ { 303, 1 },
+ { 303, 1 },
+ { 303, 1 },
+ { 303, 1 },
+ { 246, 1 },
+ { 195, 4 },
+ { 195, 6 },
+ { 195, 4 },
+ { 195, 6 },
+ { 195, 3 },
{ 305, 0 },
- { 305, 4 },
{ 305, 2 },
- { 244, 0 },
- { 244, 2 },
- { 244, 3 },
- { 306, 1 },
- { 306, 3 },
+ { 304, 1 },
+ { 304, 0 },
+ { 195, 1 },
+ { 195, 3 },
+ { 195, 2 },
+ { 195, 4 },
+ { 195, 2 },
+ { 195, 1 },
+ { 195, 3 },
+ { 195, 4 },
+ { 195, 2 },
+ { 195, 6 },
+ { 195, 6 },
+ { 195, 6 },
+ { 195, 6 },
+ { 195, 5 },
+ { 195, 3 },
+ { 306, 0 },
{ 306, 1 },
- { 307, 6 },
+ { 195, 1 },
+ { 307, 8 },
+ { 307, 11 },
+ { 307, 7 },
+ { 307, 5 },
{ 308, 1 },
{ 308, 3 },
- { 309, 5 },
- { 310, 5 },
- { 310, 6 },
- { 310, 4 },
- { 310, 5 },
+ { 309, 0 },
+ { 309, 2 },
{ 310, 1 },
- { 310, 2 },
+ { 310, 3 },
{ 311, 0 },
- { 311, 3 },
- { 311, 6 },
- { 312, 1 },
+ { 311, 4 },
+ { 311, 2 },
+ { 249, 0 },
+ { 249, 2 },
+ { 249, 3 },
{ 313, 1 },
{ 313, 2 },
+ { 313, 3 },
+ { 312, 1 },
+ { 312, 3 },
+ { 312, 1 },
+ { 314, 6 },
{ 315, 1 },
- { 315, 2 },
- { 316, 2 },
- { 316, 2 },
- { 314, 0 },
- { 314, 2 },
- { 317, 2 },
- { 317, 2 },
- { 317, 1 },
+ { 315, 3 },
+ { 316, 5 },
+ { 317, 5 },
+ { 317, 6 },
+ { 317, 4 },
+ { 317, 5 },
{ 317, 1 },
- { 257, 2 },
- { 285, 2 },
- { 285, 1 },
- { 285, 1 },
- { 319, 4 },
- { 319, 2 },
- { 318, 5 },
+ { 317, 2 },
+ { 318, 0 },
+ { 318, 3 },
+ { 318, 6 },
+ { 319, 1 },
+ { 320, 1 },
+ { 320, 2 },
+ { 322, 1 },
+ { 322, 2 },
+ { 323, 2 },
+ { 323, 2 },
+ { 321, 0 },
+ { 321, 2 },
+ { 324, 2 },
+ { 324, 2 },
+ { 324, 1 },
+ { 324, 1 },
+ { 262, 2 },
+ { 291, 2 },
+ { 291, 1 },
+ { 291, 1 },
+ { 326, 4 },
+ { 326, 2 },
+ { 325, 5 },
};
static void yy_accept(yyParser*); /* Forward Declaration */
@@ -3103,279 +3127,299 @@ static void yy_reduce(
** break;
*/
case 1: /* cmdlist ::= cmdlist ecmd */
-{parserContext->addQuery(yymsp[0].minor.yy363); DONT_INHERIT_TOKENS("cmdlist");}
+{parserContext->addQuery(yymsp[0].minor.yy41); DONT_INHERIT_TOKENS("cmdlist");}
break;
case 2: /* cmdlist ::= ecmd */
-{parserContext->addQuery(yymsp[0].minor.yy363);}
+{parserContext->addQuery(yymsp[0].minor.yy41);}
break;
case 3: /* ecmd ::= SEMI */
-{yygotominor.yy363 = new SqliteEmptyQuery();}
+{yygotominor.yy41 = new SqliteEmptyQuery();}
break;
case 4: /* ecmd ::= explain cmdx SEMI */
{
- yygotominor.yy363 = yymsp[-1].minor.yy363;
- yygotominor.yy363->explain = yymsp[-2].minor.yy91->explain;
- yygotominor.yy363->queryPlan = yymsp[-2].minor.yy91->queryPlan;
- delete yymsp[-2].minor.yy91;
- objectForTokens = yygotominor.yy363;
+ yygotominor.yy41 = yymsp[-1].minor.yy41;
+ yygotominor.yy41->explain = yymsp[-2].minor.yy499->explain;
+ yygotominor.yy41->queryPlan = yymsp[-2].minor.yy499->queryPlan;
+ delete yymsp[-2].minor.yy499;
+ objectForTokens = yygotominor.yy41;
}
break;
case 5: /* explain ::= */
-{yygotominor.yy91 = new ParserStubExplain(false, false);}
+{yygotominor.yy499 = new ParserStubExplain(false, false);}
break;
case 6: /* explain ::= EXPLAIN */
-{yygotominor.yy91 = new ParserStubExplain(true, false);}
+{yygotominor.yy499 = new ParserStubExplain(true, false);}
break;
case 7: /* explain ::= EXPLAIN QUERY PLAN */
-{yygotominor.yy91 = new ParserStubExplain(true, true);}
+{yygotominor.yy499 = new ParserStubExplain(true, true);}
break;
case 8: /* cmdx ::= cmd */
- case 389: /* trigger_cmd ::= update_stmt */ yytestcase(yyruleno==389);
- case 390: /* trigger_cmd ::= insert_stmt */ yytestcase(yyruleno==390);
- case 391: /* trigger_cmd ::= delete_stmt */ yytestcase(yyruleno==391);
- case 392: /* trigger_cmd ::= select_stmt */ yytestcase(yyruleno==392);
- case 419: /* cmd ::= create_vtab */ yytestcase(yyruleno==419);
-{yygotominor.yy363 = yymsp[0].minor.yy363;}
+ case 400: /* trigger_cmd ::= update_stmt */ yytestcase(yyruleno==400);
+ case 401: /* trigger_cmd ::= insert_stmt */ yytestcase(yyruleno==401);
+ case 402: /* trigger_cmd ::= delete_stmt */ yytestcase(yyruleno==402);
+ case 403: /* trigger_cmd ::= select_stmt */ yytestcase(yyruleno==403);
+ case 431: /* cmd ::= create_vtab */ yytestcase(yyruleno==431);
+{yygotominor.yy41 = yymsp[0].minor.yy41;}
break;
case 9: /* cmd ::= BEGIN transtype trans_opt */
{
- yygotominor.yy363 = new SqliteBeginTrans(
- yymsp[-1].minor.yy84->type,
- yymsp[0].minor.yy84->transactionKw,
- yymsp[0].minor.yy84->name
+ yygotominor.yy41 = new SqliteBeginTrans(
+ yymsp[-1].minor.yy512->type,
+ yymsp[0].minor.yy512->transactionKw,
+ yymsp[0].minor.yy512->name
);
- delete yymsp[0].minor.yy84;
- delete yymsp[-1].minor.yy84;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[0].minor.yy512;
+ delete yymsp[-1].minor.yy512;
+ objectForTokens = yygotominor.yy41;
}
break;
case 10: /* trans_opt ::= */
case 14: /* transtype ::= */ yytestcase(yyruleno==14);
-{yygotominor.yy84 = new ParserStubTransDetails();}
+{yygotominor.yy512 = new ParserStubTransDetails();}
break;
case 11: /* trans_opt ::= TRANSACTION */
{
- yygotominor.yy84 = new ParserStubTransDetails();
- yygotominor.yy84->transactionKw = true;
+ yygotominor.yy512 = new ParserStubTransDetails();
+ yygotominor.yy512->transactionKw = true;
}
break;
case 12: /* trans_opt ::= TRANSACTION nm */
case 13: /* trans_opt ::= TRANSACTION ID_TRANS */ yytestcase(yyruleno==13);
{
- yygotominor.yy84 = new ParserStubTransDetails();
- yygotominor.yy84->transactionKw = true;
- yygotominor.yy84->name = *(yymsp[0].minor.yy319);
+ yygotominor.yy512 = new ParserStubTransDetails();
+ yygotominor.yy512->transactionKw = true;
+ yygotominor.yy512->name = *(yymsp[0].minor.yy319);
delete yymsp[0].minor.yy319;
}
break;
case 15: /* transtype ::= DEFERRED */
{
- yygotominor.yy84 = new ParserStubTransDetails();
- yygotominor.yy84->type = SqliteBeginTrans::Type::DEFERRED;
+ yygotominor.yy512 = new ParserStubTransDetails();
+ yygotominor.yy512->type = SqliteBeginTrans::Type::DEFERRED;
}
break;
case 16: /* transtype ::= IMMEDIATE */
{
- yygotominor.yy84 = new ParserStubTransDetails();
- yygotominor.yy84->type = SqliteBeginTrans::Type::IMMEDIATE;
+ yygotominor.yy512 = new ParserStubTransDetails();
+ yygotominor.yy512->type = SqliteBeginTrans::Type::IMMEDIATE;
}
break;
case 17: /* transtype ::= EXCLUSIVE */
{
- yygotominor.yy84 = new ParserStubTransDetails();
- yygotominor.yy84->type = SqliteBeginTrans::Type::EXCLUSIVE;
+ yygotominor.yy512 = new ParserStubTransDetails();
+ yygotominor.yy512->type = SqliteBeginTrans::Type::EXCLUSIVE;
}
break;
case 18: /* cmd ::= COMMIT trans_opt */
{
- yygotominor.yy363 = new SqliteCommitTrans(
- yymsp[0].minor.yy84->transactionKw,
- yymsp[0].minor.yy84->name,
+ yygotominor.yy41 = new SqliteCommitTrans(
+ yymsp[0].minor.yy512->transactionKw,
+ yymsp[0].minor.yy512->name,
false
);
- delete yymsp[0].minor.yy84;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[0].minor.yy512;
+ objectForTokens = yygotominor.yy41;
}
break;
case 19: /* cmd ::= END trans_opt */
{
- yygotominor.yy363 = new SqliteCommitTrans(
- yymsp[0].minor.yy84->transactionKw,
- yymsp[0].minor.yy84->name,
+ yygotominor.yy41 = new SqliteCommitTrans(
+ yymsp[0].minor.yy512->transactionKw,
+ yymsp[0].minor.yy512->name,
true
);
- delete yymsp[0].minor.yy84;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[0].minor.yy512;
+ objectForTokens = yygotominor.yy41;
}
break;
case 20: /* cmd ::= ROLLBACK trans_opt */
{
- yygotominor.yy363 = new SqliteRollback(
- yymsp[0].minor.yy84->transactionKw,
- yymsp[0].minor.yy84->name
+ yygotominor.yy41 = new SqliteRollback(
+ yymsp[0].minor.yy512->transactionKw,
+ yymsp[0].minor.yy512->name
);
- delete yymsp[0].minor.yy84;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[0].minor.yy512;
+ objectForTokens = yygotominor.yy41;
}
break;
case 21: /* savepoint_opt ::= SAVEPOINT */
- case 37: /* ifnotexists ::= IF NOT EXISTS */ yytestcase(yyruleno==37);
- case 90: /* gen_always ::= GENERATED ALWAYS */ yytestcase(yyruleno==90);
- case 93: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==93);
- case 115: /* tconscomma ::= COMMA */ yytestcase(yyruleno==115);
- case 137: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==137);
- case 317: /* not_opt ::= NOT */ yytestcase(yyruleno==317);
- case 333: /* uniqueflag ::= UNIQUE */ yytestcase(yyruleno==333);
- case 401: /* database_kw_opt ::= DATABASE */ yytestcase(yyruleno==401);
- case 417: /* kwcolumn_opt ::= */ yytestcase(yyruleno==417);
-{yygotominor.yy611 = new bool(true);}
+ case 41: /* ifnotexists ::= IF NOT EXISTS */ yytestcase(yyruleno==41);
+ case 94: /* gen_always ::= GENERATED ALWAYS */ yytestcase(yyruleno==94);
+ case 97: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==97);
+ case 119: /* tconscomma ::= COMMA */ yytestcase(yyruleno==119);
+ case 141: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==141);
+ case 328: /* not_opt ::= NOT */ yytestcase(yyruleno==328);
+ case 344: /* uniqueflag ::= UNIQUE */ yytestcase(yyruleno==344);
+ case 412: /* database_kw_opt ::= DATABASE */ yytestcase(yyruleno==412);
+ case 429: /* kwcolumn_opt ::= */ yytestcase(yyruleno==429);
+{yygotominor.yy225 = new bool(true);}
break;
case 22: /* savepoint_opt ::= */
- case 36: /* ifnotexists ::= */ yytestcase(yyruleno==36);
- case 91: /* gen_always ::= */ yytestcase(yyruleno==91);
- case 92: /* autoinc ::= */ yytestcase(yyruleno==92);
- case 116: /* tconscomma ::= */ yytestcase(yyruleno==116);
- case 138: /* ifexists ::= */ yytestcase(yyruleno==138);
- case 316: /* not_opt ::= */ yytestcase(yyruleno==316);
- case 334: /* uniqueflag ::= */ yytestcase(yyruleno==334);
- case 402: /* database_kw_opt ::= */ yytestcase(yyruleno==402);
- case 418: /* kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==418);
-{yygotominor.yy611 = new bool(false);}
+ case 40: /* ifnotexists ::= */ yytestcase(yyruleno==40);
+ case 95: /* gen_always ::= */ yytestcase(yyruleno==95);
+ case 96: /* autoinc ::= */ yytestcase(yyruleno==96);
+ case 120: /* tconscomma ::= */ yytestcase(yyruleno==120);
+ case 142: /* ifexists ::= */ yytestcase(yyruleno==142);
+ case 327: /* not_opt ::= */ yytestcase(yyruleno==327);
+ case 345: /* uniqueflag ::= */ yytestcase(yyruleno==345);
+ case 413: /* database_kw_opt ::= */ yytestcase(yyruleno==413);
+ case 430: /* kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==430);
+{yygotominor.yy225 = new bool(false);}
break;
case 23: /* cmd ::= SAVEPOINT nm */
{
- yygotominor.yy363 = new SqliteSavepoint(*(yymsp[0].minor.yy319));
+ yygotominor.yy41 = new SqliteSavepoint(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
case 24: /* cmd ::= RELEASE savepoint_opt nm */
{
- yygotominor.yy363 = new SqliteRelease(*(yymsp[-1].minor.yy611), *(yymsp[0].minor.yy319));
+ yygotominor.yy41 = new SqliteRelease(*(yymsp[-1].minor.yy225), *(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
case 25: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
case 26: /* cmd ::= SAVEPOINT ID_TRANS */ yytestcase(yyruleno==26);
{
- yygotominor.yy363 = new SqliteRollback(
- yymsp[-3].minor.yy84->transactionKw,
- *(yymsp[-1].minor.yy611),
+ yygotominor.yy41 = new SqliteRollback(
+ yymsp[-3].minor.yy512->transactionKw,
+ *(yymsp[-1].minor.yy225),
*(yymsp[0].minor.yy319)
);
- delete yymsp[-1].minor.yy611;
- delete yymsp[-3].minor.yy84;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[-1].minor.yy225;
+ delete yymsp[-3].minor.yy512;
+ objectForTokens = yygotominor.yy41;
}
break;
case 27: /* cmd ::= RELEASE savepoint_opt ID_TRANS */
case 28: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt ID_TRANS */ yytestcase(yyruleno==28);
-{ yy_destructor(yypParser,200,&yymsp[-1].minor);
+{ yy_destructor(yypParser,204,&yymsp[-1].minor);
}
break;
case 29: /* cmd ::= CREATE temp TABLE ifnotexists fullname LP columnlist conslist_opt RP table_options */
{
- yygotominor.yy363 = new SqliteCreateTable(
- *(yymsp[-6].minor.yy611),
- *(yymsp[-8].minor.yy386),
- yymsp[-5].minor.yy440->name1,
- yymsp[-5].minor.yy440->name2,
- *(yymsp[-3].minor.yy42),
- *(yymsp[-2].minor.yy493),
- *(yymsp[0].minor.yy319)
+ yygotominor.yy41 = new SqliteCreateTable(
+ *(yymsp[-6].minor.yy225),
+ *(yymsp[-8].minor.yy130),
+ yymsp[-5].minor.yy396->name1,
+ yymsp[-5].minor.yy396->name2,
+ *(yymsp[-3].minor.yy390),
+ *(yymsp[-2].minor.yy115),
+ *(yymsp[0].minor.yy455)
);
- delete yymsp[-6].minor.yy611;
- delete yymsp[-8].minor.yy386;
- delete yymsp[-3].minor.yy42;
- delete yymsp[-2].minor.yy493;
- delete yymsp[-5].minor.yy440;
- delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[-6].minor.yy225;
+ delete yymsp[-8].minor.yy130;
+ delete yymsp[-3].minor.yy390;
+ delete yymsp[-2].minor.yy115;
+ delete yymsp[-5].minor.yy396;
+ delete yymsp[0].minor.yy455;
+ objectForTokens = yygotominor.yy41;
}
break;
case 30: /* cmd ::= CREATE temp TABLE ifnotexists fullname AS select */
{
- yygotominor.yy363 = new SqliteCreateTable(
- *(yymsp[-3].minor.yy611),
- *(yymsp[-5].minor.yy386),
- yymsp[-2].minor.yy440->name1,
- yymsp[-2].minor.yy440->name2,
- yymsp[0].minor.yy313
+ yygotominor.yy41 = new SqliteCreateTable(
+ *(yymsp[-3].minor.yy225),
+ *(yymsp[-5].minor.yy130),
+ yymsp[-2].minor.yy396->name1,
+ yymsp[-2].minor.yy396->name2,
+ yymsp[0].minor.yy297
);
- delete yymsp[-3].minor.yy611;
- delete yymsp[-5].minor.yy386;
- delete yymsp[-2].minor.yy440;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[-3].minor.yy225;
+ delete yymsp[-5].minor.yy130;
+ delete yymsp[-2].minor.yy396;
+ objectForTokens = yygotominor.yy41;
}
break;
case 31: /* cmd ::= CREATE temp TABLE ifnotexists nm DOT ID_TAB_NEW */
- case 140: /* cmd ::= CREATE temp VIEW ifnotexists nm DOT ID_VIEW_NEW */ yytestcase(yyruleno==140);
- case 372: /* cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW */ yytestcase(yyruleno==372);
-{ yy_destructor(yypParser,201,&yymsp[-5].minor);
- yy_destructor(yypParser,199,&yymsp[-2].minor);
+ case 144: /* cmd ::= CREATE temp VIEW ifnotexists nm DOT ID_VIEW_NEW */ yytestcase(yyruleno==144);
+ case 383: /* cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW */ yytestcase(yyruleno==383);
+{ yy_destructor(yypParser,205,&yymsp[-5].minor);
+ yy_destructor(yypParser,203,&yymsp[-2].minor);
}
break;
case 32: /* cmd ::= CREATE temp TABLE ifnotexists ID_DB|ID_TAB_NEW */
- case 141: /* cmd ::= CREATE temp VIEW ifnotexists ID_DB|ID_VIEW_NEW */ yytestcase(yyruleno==141);
- case 373: /* cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW */ yytestcase(yyruleno==373);
-{ yy_destructor(yypParser,201,&yymsp[-3].minor);
+ case 145: /* cmd ::= CREATE temp VIEW ifnotexists ID_DB|ID_VIEW_NEW */ yytestcase(yyruleno==145);
+ case 384: /* cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW */ yytestcase(yyruleno==384);
+{ yy_destructor(yypParser,205,&yymsp[-3].minor);
}
break;
case 33: /* table_options ::= */
- case 194: /* dbnm ::= */ yytestcase(yyruleno==194);
- case 341: /* collate ::= */ yytestcase(yyruleno==341);
- case 426: /* vtabarg ::= */ yytestcase(yyruleno==426);
- case 430: /* anylist ::= */ yytestcase(yyruleno==430);
-{yygotominor.yy319 = new QString();}
+{yygotominor.yy455 = new ParserCreateTableOptionList();}
break;
- case 34: /* table_options ::= WITHOUT nm */
- case 35: /* table_options ::= WITHOUT CTX_ROWID_KW */ yytestcase(yyruleno==35);
+ case 34: /* table_options ::= table_option */
+{
+ yygotominor.yy455 = new ParserCreateTableOptionList();
+ yygotominor.yy455->append(yymsp[0].minor.yy629);
+ }
+ break;
+ case 35: /* table_options ::= table_options COMMA table_option */
+{
+ yymsp[-2].minor.yy455->append(yymsp[0].minor.yy629);
+ yygotominor.yy455 = yymsp[-2].minor.yy455;
+ DONT_INHERIT_TOKENS("table_options");
+ }
+ break;
+ case 36: /* table_option ::= WITHOUT nm */
{
if (yymsp[0].minor.yy319->toLower() != "rowid")
parserContext->errorAtToken(QString("Invalid table option: %1").arg(*(yymsp[0].minor.yy319)));
- yygotominor.yy319 = yymsp[0].minor.yy319;
+ yygotominor.yy629 = new ParserStubCreateTableOption(ParserStubCreateTableOption::WITHOUT_ROWID);
+ delete yymsp[0].minor.yy319;
}
break;
- case 38: /* temp ::= TEMP */
-{yygotominor.yy386 = new int( (yymsp[0].minor.yy0->value.length() > 4) ? 2 : 1 );}
+ case 37: /* table_option ::= nm */
+ case 38: /* table_option ::= WITHOUT CTX_ROWID_KW */ yytestcase(yyruleno==38);
+ case 39: /* table_option ::= CTX_STRICT_KW */ yytestcase(yyruleno==39);
+{
+ if (yymsp[0].minor.yy319->toLower() != "strict")
+ parserContext->errorAtToken(QString("Invalid table option: %1").arg(*(yymsp[0].minor.yy319)));
+
+ yygotominor.yy629 = new ParserStubCreateTableOption(ParserStubCreateTableOption::STRICT);
+ delete yymsp[0].minor.yy319;
+ }
+ break;
+ case 42: /* temp ::= TEMP */
+{yygotominor.yy130 = new int( (yymsp[0].minor.yy0->value.length() > 4) ? 2 : 1 );}
break;
- case 39: /* temp ::= */
- case 162: /* distinct ::= */ yytestcase(yyruleno==162);
-{yygotominor.yy386 = new int(0);}
+ case 43: /* temp ::= */
+ case 166: /* distinct ::= */ yytestcase(yyruleno==166);
+{yygotominor.yy130 = new int(0);}
break;
- case 40: /* columnlist ::= columnlist COMMA column */
+ case 44: /* columnlist ::= columnlist COMMA column */
{
- yymsp[-2].minor.yy42->append(yymsp[0].minor.yy147);
- yygotominor.yy42 = yymsp[-2].minor.yy42;
+ yymsp[-2].minor.yy390->append(yymsp[0].minor.yy3);
+ yygotominor.yy390 = yymsp[-2].minor.yy390;
DONT_INHERIT_TOKENS("columnlist");
}
break;
- case 41: /* columnlist ::= column */
+ case 45: /* columnlist ::= column */
{
- yygotominor.yy42 = new ParserCreateTableColumnList();
- yygotominor.yy42->append(yymsp[0].minor.yy147);
+ yygotominor.yy390 = new ParserCreateTableColumnList();
+ yygotominor.yy390->append(yymsp[0].minor.yy3);
}
break;
- case 42: /* column ::= columnid type carglist */
+ case 46: /* column ::= columnid type carglist */
{
- yygotominor.yy147 = new SqliteCreateTable::Column(*(yymsp[-2].minor.yy319), yymsp[-1].minor.yy57, *(yymsp[0].minor.yy51));
+ yygotominor.yy3 = new SqliteCreateTable::Column(*(yymsp[-2].minor.yy319), yymsp[-1].minor.yy267, *(yymsp[0].minor.yy323));
delete yymsp[-2].minor.yy319;
- delete yymsp[0].minor.yy51;
- objectForTokens = yygotominor.yy147;
+ delete yymsp[0].minor.yy323;
+ objectForTokens = yygotominor.yy3;
}
break;
- case 43: /* columnid ::= nm */
- case 44: /* columnid ::= ID_COL_NEW */ yytestcase(yyruleno==44);
- case 49: /* nm ::= id */ yytestcase(yyruleno==49);
- case 57: /* typename ::= ids */ yytestcase(yyruleno==57);
- case 195: /* dbnm ::= DOT nm */ yytestcase(yyruleno==195);
- case 342: /* collate ::= COLLATE ids */ yytestcase(yyruleno==342);
- case 343: /* collate ::= COLLATE ID_COLLATE */ yytestcase(yyruleno==343);
+ case 47: /* columnid ::= nm */
+ case 48: /* columnid ::= ID_COL_NEW */ yytestcase(yyruleno==48);
+ case 53: /* nm ::= id */ yytestcase(yyruleno==53);
+ case 61: /* typename ::= ids */ yytestcase(yyruleno==61);
+ case 199: /* dbnm ::= DOT nm */ yytestcase(yyruleno==199);
+ case 353: /* collate ::= COLLATE ids */ yytestcase(yyruleno==353);
+ case 354: /* collate ::= COLLATE ID_COLLATE */ yytestcase(yyruleno==354);
{yygotominor.yy319 = yymsp[0].minor.yy319;}
break;
- case 45: /* id ::= ID */
+ case 49: /* id ::= ID */
{
yygotominor.yy319 = new QString(
stripObjName(
@@ -3384,2006 +3428,2096 @@ static void yy_reduce(
);
}
break;
- case 46: /* id_opt ::= id */
+ case 50: /* id_opt ::= id */
{
yygotominor.yy319 = yymsp[0].minor.yy319;
}
break;
- case 47: /* id_opt ::= */
+ case 51: /* id_opt ::= */
{
yygotominor.yy319 = new QString();
}
break;
- case 48: /* ids ::= ID|STRING */
- case 51: /* nm ::= JOIN_KW */ yytestcase(yyruleno==51);
+ case 52: /* ids ::= ID|STRING */
+ case 55: /* nm ::= JOIN_KW */ yytestcase(yyruleno==55);
{yygotominor.yy319 = new QString(yymsp[0].minor.yy0->value);}
break;
- case 50: /* nm ::= STRING */
+ case 54: /* nm ::= STRING */
{yygotominor.yy319 = new QString(stripString(yymsp[0].minor.yy0->value));}
break;
- case 52: /* type ::= */
-{yygotominor.yy57 = nullptr;}
+ case 56: /* type ::= */
+{yygotominor.yy267 = nullptr;}
break;
- case 53: /* type ::= typetoken */
-{yygotominor.yy57 = yymsp[0].minor.yy57;}
+ case 57: /* type ::= typetoken */
+{yygotominor.yy267 = yymsp[0].minor.yy267;}
break;
- case 54: /* typetoken ::= typename */
+ case 58: /* typetoken ::= typename */
{
- yygotominor.yy57 = new SqliteColumnType(*(yymsp[0].minor.yy319));
+ yygotominor.yy267 = new SqliteColumnType(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy57;
+ objectForTokens = yygotominor.yy267;
}
break;
- case 55: /* typetoken ::= typename LP signed RP */
+ case 59: /* typetoken ::= typename LP signed RP */
{
- yygotominor.yy57 = new SqliteColumnType(*(yymsp[-3].minor.yy319), *(yymsp[-1].minor.yy229));
+ yygotominor.yy267 = new SqliteColumnType(*(yymsp[-3].minor.yy319), *(yymsp[-1].minor.yy393));
delete yymsp[-3].minor.yy319;
- delete yymsp[-1].minor.yy229;
- objectForTokens = yygotominor.yy57;
+ delete yymsp[-1].minor.yy393;
+ objectForTokens = yygotominor.yy267;
}
break;
- case 56: /* typetoken ::= typename LP signed COMMA signed RP */
+ case 60: /* typetoken ::= typename LP signed COMMA signed RP */
{
- yygotominor.yy57 = new SqliteColumnType(*(yymsp[-5].minor.yy319), *(yymsp[-3].minor.yy229), *(yymsp[-1].minor.yy229));
+ yygotominor.yy267 = new SqliteColumnType(*(yymsp[-5].minor.yy319), *(yymsp[-3].minor.yy393), *(yymsp[-1].minor.yy393));
delete yymsp[-5].minor.yy319;
- delete yymsp[-3].minor.yy229;
- delete yymsp[-1].minor.yy229;
- objectForTokens = yygotominor.yy57;
+ delete yymsp[-3].minor.yy393;
+ delete yymsp[-1].minor.yy393;
+ objectForTokens = yygotominor.yy267;
}
break;
- case 58: /* typename ::= typename ids */
- case 59: /* typename ::= ID_COL_TYPE */ yytestcase(yyruleno==59);
+ case 62: /* typename ::= typename ids */
+ case 63: /* typename ::= ID_COL_TYPE */ yytestcase(yyruleno==63);
{
yymsp[-1].minor.yy319->append(" " + *(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
yygotominor.yy319 = yymsp[-1].minor.yy319;
}
break;
- case 60: /* signed ::= plus_num */
- case 61: /* signed ::= minus_num */ yytestcase(yyruleno==61);
- case 358: /* nmnum ::= plus_num */ yytestcase(yyruleno==358);
- case 363: /* plus_num ::= PLUS number */ yytestcase(yyruleno==363);
- case 364: /* plus_num ::= number */ yytestcase(yyruleno==364);
-{yygotominor.yy229 = yymsp[0].minor.yy229;}
+ case 64: /* signed ::= plus_num */
+ case 65: /* signed ::= minus_num */ yytestcase(yyruleno==65);
+ case 369: /* nmnum ::= plus_num */ yytestcase(yyruleno==369);
+ case 374: /* plus_num ::= PLUS number */ yytestcase(yyruleno==374);
+ case 375: /* plus_num ::= number */ yytestcase(yyruleno==375);
+{yygotominor.yy393 = yymsp[0].minor.yy393;}
break;
- case 62: /* carglist ::= carglist ccons */
+ case 66: /* carglist ::= carglist ccons */
{
- yymsp[-1].minor.yy51->append(yymsp[0].minor.yy464);
- yygotominor.yy51 = yymsp[-1].minor.yy51;
+ yymsp[-1].minor.yy323->append(yymsp[0].minor.yy448);
+ yygotominor.yy323 = yymsp[-1].minor.yy323;
DONT_INHERIT_TOKENS("carglist");
}
break;
- case 63: /* carglist ::= */
-{yygotominor.yy51 = new ParserCreateTableColumnConstraintList();}
+ case 67: /* carglist ::= */
+{yygotominor.yy323 = new ParserCreateTableColumnConstraintList();}
break;
- case 64: /* ccons ::= CONSTRAINT nm */
+ case 68: /* ccons ::= CONSTRAINT nm */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initDefNameOnly(*(yymsp[0].minor.yy319));
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initDefNameOnly(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy464;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 65: /* ccons ::= DEFAULT term */
+ case 69: /* ccons ::= DEFAULT term */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initDefTerm(*(yymsp[0].minor.yy229));
- delete yymsp[0].minor.yy229;
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initDefTerm(*(yymsp[0].minor.yy393));
+ delete yymsp[0].minor.yy393;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 66: /* ccons ::= DEFAULT LP expr RP */
+ case 70: /* ccons ::= DEFAULT LP expr RP */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initDefExpr(yymsp[-1].minor.yy512);
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initDefExpr(yymsp[-1].minor.yy186);
+ objectForTokens = yygotominor.yy448;
}
break;
- case 67: /* ccons ::= DEFAULT PLUS term */
+ case 71: /* ccons ::= DEFAULT PLUS term */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initDefTerm(*(yymsp[0].minor.yy229), false);
- delete yymsp[0].minor.yy229;
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initDefTerm(*(yymsp[0].minor.yy393), false);
+ delete yymsp[0].minor.yy393;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 68: /* ccons ::= DEFAULT MINUS term */
+ case 72: /* ccons ::= DEFAULT MINUS term */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initDefTerm(*(yymsp[0].minor.yy229), true);
- delete yymsp[0].minor.yy229;
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initDefTerm(*(yymsp[0].minor.yy393), true);
+ delete yymsp[0].minor.yy393;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 69: /* ccons ::= DEFAULT id */
+ case 73: /* ccons ::= DEFAULT id */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initDefId(*(yymsp[0].minor.yy319));
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initDefId(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy464;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 70: /* ccons ::= DEFAULT CTIME_KW */
+ case 74: /* ccons ::= DEFAULT CTIME_KW */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initDefCTime(yymsp[0].minor.yy0->value);
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initDefCTime(yymsp[0].minor.yy0->value);
+ objectForTokens = yygotominor.yy448;
}
break;
- case 71: /* ccons ::= NULL onconf */
+ case 75: /* ccons ::= NULL onconf */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initNull(*(yymsp[0].minor.yy418));
- delete yymsp[0].minor.yy418;
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initNull(*(yymsp[0].minor.yy136));
+ delete yymsp[0].minor.yy136;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 72: /* ccons ::= NOT NULL onconf */
+ case 76: /* ccons ::= NOT NULL onconf */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initNotNull(*(yymsp[0].minor.yy418));
- delete yymsp[0].minor.yy418;
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initNotNull(*(yymsp[0].minor.yy136));
+ delete yymsp[0].minor.yy136;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 73: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
+ case 77: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initPk(*(yymsp[-2].minor.yy549), *(yymsp[-1].minor.yy418), *(yymsp[0].minor.yy611));
- delete yymsp[-2].minor.yy549;
- delete yymsp[0].minor.yy611;
- delete yymsp[-1].minor.yy418;
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initPk(*(yymsp[-2].minor.yy35), *(yymsp[-1].minor.yy136), *(yymsp[0].minor.yy225));
+ delete yymsp[-2].minor.yy35;
+ delete yymsp[0].minor.yy225;
+ delete yymsp[-1].minor.yy136;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 74: /* ccons ::= UNIQUE onconf */
+ case 78: /* ccons ::= UNIQUE onconf */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initUnique(*(yymsp[0].minor.yy418));
- delete yymsp[0].minor.yy418;
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initUnique(*(yymsp[0].minor.yy136));
+ delete yymsp[0].minor.yy136;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 75: /* ccons ::= CHECK LP expr RP */
+ case 79: /* ccons ::= CHECK LP expr RP */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initCheck(yymsp[-1].minor.yy512);
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initCheck(yymsp[-1].minor.yy186);
+ objectForTokens = yygotominor.yy448;
}
break;
- case 76: /* ccons ::= REFERENCES nm idxlist_opt refargs */
+ case 80: /* ccons ::= REFERENCES nm idxlist_opt refargs */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initFk(*(yymsp[-2].minor.yy319), *(yymsp[-1].minor.yy223), *(yymsp[0].minor.yy584));
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initFk(*(yymsp[-2].minor.yy319), *(yymsp[-1].minor.yy627), *(yymsp[0].minor.yy156));
delete yymsp[-2].minor.yy319;
- delete yymsp[0].minor.yy584;
- delete yymsp[-1].minor.yy223;
- objectForTokens = yygotominor.yy464;
+ delete yymsp[0].minor.yy156;
+ delete yymsp[-1].minor.yy627;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 77: /* ccons ::= defer_subclause */
+ case 81: /* ccons ::= defer_subclause */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initDefer(yymsp[0].minor.yy9->initially, yymsp[0].minor.yy9->deferrable);
- delete yymsp[0].minor.yy9;
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initDefer(yymsp[0].minor.yy53->initially, yymsp[0].minor.yy53->deferrable);
+ delete yymsp[0].minor.yy53;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 78: /* ccons ::= COLLATE ids */
+ case 82: /* ccons ::= COLLATE ids */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initColl(*(yymsp[0].minor.yy319));
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initColl(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy464;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 79: /* ccons ::= gen_always AS LP expr RP id_opt */
- case 80: /* ccons ::= CONSTRAINT ID_CONSTR */ yytestcase(yyruleno==80);
- case 81: /* ccons ::= COLLATE ID_COLLATE */ yytestcase(yyruleno==81);
- case 82: /* ccons ::= REFERENCES ID_TAB */ yytestcase(yyruleno==82);
+ case 83: /* ccons ::= gen_always AS LP expr RP id_opt */
+ case 84: /* ccons ::= CONSTRAINT ID_CONSTR */ yytestcase(yyruleno==84);
+ case 85: /* ccons ::= COLLATE ID_COLLATE */ yytestcase(yyruleno==85);
+ case 86: /* ccons ::= REFERENCES ID_TAB */ yytestcase(yyruleno==86);
{
if (!yymsp[0].minor.yy319->isNull() && yymsp[0].minor.yy319->toLower() != "stored" && yymsp[0].minor.yy319->toLower() != "virtual")
parserContext->errorAtToken(QString("Invalid generated column type: %1").arg(*(yymsp[0].minor.yy319)));
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initGeneratedAs(yymsp[-2].minor.yy512, *(yymsp[-5].minor.yy611), *(yymsp[0].minor.yy319));
- delete yymsp[-5].minor.yy611;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initGeneratedAs(yymsp[-2].minor.yy186, *(yymsp[-5].minor.yy225), *(yymsp[0].minor.yy319));
+ delete yymsp[-5].minor.yy225;
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy464;
+ objectForTokens = yygotominor.yy448;
}
break;
- case 83: /* ccons ::= CHECK LP RP */
+ case 87: /* ccons ::= CHECK LP RP */
{
- yygotominor.yy464 = new SqliteCreateTable::Column::Constraint();
- yygotominor.yy464->initCheck();
- objectForTokens = yygotominor.yy464;
+ yygotominor.yy448 = new SqliteCreateTable::Column::Constraint();
+ yygotominor.yy448->initCheck();
+ objectForTokens = yygotominor.yy448;
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 84: /* term ::= NULL */
-{yygotominor.yy229 = new QVariant();}
+ case 88: /* term ::= NULL */
+{yygotominor.yy393 = new QVariant();}
break;
- case 85: /* term ::= INTEGER */
- case 366: /* number ::= INTEGER */ yytestcase(yyruleno==366);
-{yygotominor.yy229 = parserContext->handleNumberToken(yymsp[0].minor.yy0->value);}
+ case 89: /* term ::= INTEGER */
+ case 377: /* number ::= INTEGER */ yytestcase(yyruleno==377);
+{yygotominor.yy393 = parserContext->handleNumberToken(yymsp[0].minor.yy0->value);}
break;
- case 86: /* term ::= FLOAT */
- case 367: /* number ::= FLOAT */ yytestcase(yyruleno==367);
-{yygotominor.yy229 = new QVariant(QVariant(yymsp[0].minor.yy0->value).toDouble());}
+ case 90: /* term ::= FLOAT */
+ case 378: /* number ::= FLOAT */ yytestcase(yyruleno==378);
+{yygotominor.yy393 = new QVariant(QVariant(yymsp[0].minor.yy0->value).toDouble());}
break;
- case 87: /* term ::= STRING|BLOB */
-{yygotominor.yy229 = new QVariant(stripString(yymsp[0].minor.yy0->value));}
+ case 91: /* term ::= STRING|BLOB */
+{
+ if (yymsp[0].minor.yy0->value.length() >= 3 && yymsp[0].minor.yy0->value.startsWith("x'", Qt::CaseInsensitive))
+ yygotominor.yy393 = new QVariant(blobFromLiteral(yymsp[0].minor.yy0->value));
+ else
+ yygotominor.yy393 = new QVariant(stripString(yymsp[0].minor.yy0->value));
+ }
break;
- case 88: /* tnm ::= term */
+ case 92: /* tnm ::= term */
{
- yygotominor.yy590 = new ParserTermOrLiteral(*(yymsp[0].minor.yy229));
- delete yymsp[0].minor.yy229;
+ yygotominor.yy380 = new ParserTermOrLiteral(*(yymsp[0].minor.yy393));
+ delete yymsp[0].minor.yy393;
}
break;
- case 89: /* tnm ::= nm */
+ case 93: /* tnm ::= nm */
{
- yygotominor.yy590 = new ParserTermOrLiteral(*(yymsp[0].minor.yy319));
+ yygotominor.yy380 = new ParserTermOrLiteral(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
}
break;
- case 94: /* refargs ::= */
-{yygotominor.yy584 = new ParserFkConditionList();}
+ case 98: /* refargs ::= */
+{yygotominor.yy156 = new ParserFkConditionList();}
break;
- case 95: /* refargs ::= refargs refarg */
+ case 99: /* refargs ::= refargs refarg */
{
- yymsp[-1].minor.yy584->append(yymsp[0].minor.yy507);
- yygotominor.yy584 = yymsp[-1].minor.yy584;
+ yymsp[-1].minor.yy156->append(yymsp[0].minor.yy205);
+ yygotominor.yy156 = yymsp[-1].minor.yy156;
DONT_INHERIT_TOKENS("refargs");
}
break;
- case 96: /* refarg ::= MATCH nm */
+ case 100: /* refarg ::= MATCH nm */
{
- yygotominor.yy507 = new SqliteForeignKey::Condition(*(yymsp[0].minor.yy319));
+ yygotominor.yy205 = new SqliteForeignKey::Condition(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
}
break;
- case 97: /* refarg ::= ON INSERT refact */
-{yygotominor.yy507 = new SqliteForeignKey::Condition(SqliteForeignKey::Condition::INSERT, *(yymsp[0].minor.yy104)); delete yymsp[0].minor.yy104;}
+ case 101: /* refarg ::= ON INSERT refact */
+{yygotominor.yy205 = new SqliteForeignKey::Condition(SqliteForeignKey::Condition::INSERT, *(yymsp[0].minor.yy106)); delete yymsp[0].minor.yy106;}
break;
- case 98: /* refarg ::= ON DELETE refact */
-{yygotominor.yy507 = new SqliteForeignKey::Condition(SqliteForeignKey::Condition::DELETE, *(yymsp[0].minor.yy104)); delete yymsp[0].minor.yy104;}
+ case 102: /* refarg ::= ON DELETE refact */
+{yygotominor.yy205 = new SqliteForeignKey::Condition(SqliteForeignKey::Condition::DELETE, *(yymsp[0].minor.yy106)); delete yymsp[0].minor.yy106;}
break;
- case 99: /* refarg ::= ON UPDATE refact */
- case 100: /* refarg ::= MATCH ID_FK_MATCH */ yytestcase(yyruleno==100);
-{yygotominor.yy507 = new SqliteForeignKey::Condition(SqliteForeignKey::Condition::UPDATE, *(yymsp[0].minor.yy104)); delete yymsp[0].minor.yy104;}
+ case 103: /* refarg ::= ON UPDATE refact */
+ case 104: /* refarg ::= MATCH ID_FK_MATCH */ yytestcase(yyruleno==104);
+{yygotominor.yy205 = new SqliteForeignKey::Condition(SqliteForeignKey::Condition::UPDATE, *(yymsp[0].minor.yy106)); delete yymsp[0].minor.yy106;}
break;
- case 101: /* refact ::= SET NULL */
-{yygotominor.yy104 = new SqliteForeignKey::Condition::Reaction(SqliteForeignKey::Condition::SET_NULL);}
+ case 105: /* refact ::= SET NULL */
+{yygotominor.yy106 = new SqliteForeignKey::Condition::Reaction(SqliteForeignKey::Condition::SET_NULL);}
break;
- case 102: /* refact ::= SET DEFAULT */
-{yygotominor.yy104 = new SqliteForeignKey::Condition::Reaction(SqliteForeignKey::Condition::SET_DEFAULT);}
+ case 106: /* refact ::= SET DEFAULT */
+{yygotominor.yy106 = new SqliteForeignKey::Condition::Reaction(SqliteForeignKey::Condition::SET_DEFAULT);}
break;
- case 103: /* refact ::= CASCADE */
-{yygotominor.yy104 = new SqliteForeignKey::Condition::Reaction(SqliteForeignKey::Condition::CASCADE);}
+ case 107: /* refact ::= CASCADE */
+{yygotominor.yy106 = new SqliteForeignKey::Condition::Reaction(SqliteForeignKey::Condition::CASCADE);}
break;
- case 104: /* refact ::= RESTRICT */
-{yygotominor.yy104 = new SqliteForeignKey::Condition::Reaction(SqliteForeignKey::Condition::RESTRICT);}
+ case 108: /* refact ::= RESTRICT */
+{yygotominor.yy106 = new SqliteForeignKey::Condition::Reaction(SqliteForeignKey::Condition::RESTRICT);}
break;
- case 105: /* refact ::= NO ACTION */
-{yygotominor.yy104 = new SqliteForeignKey::Condition::Reaction(SqliteForeignKey::Condition::NO_ACTION);}
+ case 109: /* refact ::= NO ACTION */
+{yygotominor.yy106 = new SqliteForeignKey::Condition::Reaction(SqliteForeignKey::Condition::NO_ACTION);}
break;
- case 106: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
+ case 110: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
{
- yygotominor.yy9 = new ParserDeferSubClause(SqliteDeferrable::NOT_DEFERRABLE, *(yymsp[0].minor.yy312));
- delete yymsp[0].minor.yy312;
+ yygotominor.yy53 = new ParserDeferSubClause(SqliteDeferrable::NOT_DEFERRABLE, *(yymsp[0].minor.yy612));
+ delete yymsp[0].minor.yy612;
}
break;
- case 107: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
+ case 111: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
{
- yygotominor.yy9 = new ParserDeferSubClause(SqliteDeferrable::DEFERRABLE, *(yymsp[0].minor.yy312));
- delete yymsp[0].minor.yy312;
+ yygotominor.yy53 = new ParserDeferSubClause(SqliteDeferrable::DEFERRABLE, *(yymsp[0].minor.yy612));
+ delete yymsp[0].minor.yy612;
}
break;
- case 108: /* init_deferred_pred_opt ::= */
-{yygotominor.yy312 = new SqliteInitially(SqliteInitially::null);}
+ case 112: /* init_deferred_pred_opt ::= */
+{yygotominor.yy612 = new SqliteInitially(SqliteInitially::null);}
break;
- case 109: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
-{yygotominor.yy312 = new SqliteInitially(SqliteInitially::DEFERRED);}
+ case 113: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
+{yygotominor.yy612 = new SqliteInitially(SqliteInitially::DEFERRED);}
break;
- case 110: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
-{yygotominor.yy312 = new SqliteInitially(SqliteInitially::IMMEDIATE);}
+ case 114: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
+{yygotominor.yy612 = new SqliteInitially(SqliteInitially::IMMEDIATE);}
break;
- case 111: /* conslist_opt ::= */
-{yygotominor.yy493 = new ParserCreateTableConstraintList();}
+ case 115: /* conslist_opt ::= */
+{yygotominor.yy115 = new ParserCreateTableConstraintList();}
break;
- case 112: /* conslist_opt ::= COMMA conslist */
-{yygotominor.yy493 = yymsp[0].minor.yy493;}
+ case 116: /* conslist_opt ::= COMMA conslist */
+{yygotominor.yy115 = yymsp[0].minor.yy115;}
break;
- case 113: /* conslist ::= conslist tconscomma tcons */
+ case 117: /* conslist ::= conslist tconscomma tcons */
{
- yymsp[0].minor.yy246->afterComma = *(yymsp[-1].minor.yy611);
- yymsp[-2].minor.yy493->append(yymsp[0].minor.yy246);
- yygotominor.yy493 = yymsp[-2].minor.yy493;
- delete yymsp[-1].minor.yy611;
+ yymsp[0].minor.yy400->afterComma = *(yymsp[-1].minor.yy225);
+ yymsp[-2].minor.yy115->append(yymsp[0].minor.yy400);
+ yygotominor.yy115 = yymsp[-2].minor.yy115;
+ delete yymsp[-1].minor.yy225;
DONT_INHERIT_TOKENS("conslist");
}
break;
- case 114: /* conslist ::= tcons */
+ case 118: /* conslist ::= tcons */
{
- yygotominor.yy493 = new ParserCreateTableConstraintList();
- yygotominor.yy493->append(yymsp[0].minor.yy246);
+ yygotominor.yy115 = new ParserCreateTableConstraintList();
+ yygotominor.yy115->append(yymsp[0].minor.yy400);
}
break;
- case 117: /* tcons ::= CONSTRAINT nm */
+ case 121: /* tcons ::= CONSTRAINT nm */
{
- yygotominor.yy246 = new SqliteCreateTable::Constraint();
- yygotominor.yy246->initNameOnly(*(yymsp[0].minor.yy319));
+ yygotominor.yy400 = new SqliteCreateTable::Constraint();
+ yygotominor.yy400->initNameOnly(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy246;
+ objectForTokens = yygotominor.yy400;
}
break;
- case 118: /* tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf */
+ case 122: /* tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf */
{
- yygotominor.yy246 = new SqliteCreateTable::Constraint();
- yygotominor.yy246->initPk(*(yymsp[-3].minor.yy223), *(yymsp[-2].minor.yy611), *(yymsp[0].minor.yy418));
- delete yymsp[-2].minor.yy611;
- delete yymsp[0].minor.yy418;
- delete yymsp[-3].minor.yy223;
- objectForTokens = yygotominor.yy246;
+ yygotominor.yy400 = new SqliteCreateTable::Constraint();
+ yygotominor.yy400->initPk(*(yymsp[-3].minor.yy627), *(yymsp[-2].minor.yy225), *(yymsp[0].minor.yy136));
+ delete yymsp[-2].minor.yy225;
+ delete yymsp[0].minor.yy136;
+ delete yymsp[-3].minor.yy627;
+ objectForTokens = yygotominor.yy400;
}
break;
- case 119: /* tcons ::= UNIQUE LP idxlist RP onconf */
+ case 123: /* tcons ::= UNIQUE LP idxlist RP onconf */
{
- yygotominor.yy246 = new SqliteCreateTable::Constraint();
- yygotominor.yy246->initUnique(*(yymsp[-2].minor.yy223), *(yymsp[0].minor.yy418));
- delete yymsp[0].minor.yy418;
- delete yymsp[-2].minor.yy223;
- objectForTokens = yygotominor.yy246;
+ yygotominor.yy400 = new SqliteCreateTable::Constraint();
+ yygotominor.yy400->initUnique(*(yymsp[-2].minor.yy627), *(yymsp[0].minor.yy136));
+ delete yymsp[0].minor.yy136;
+ delete yymsp[-2].minor.yy627;
+ objectForTokens = yygotominor.yy400;
}
break;
- case 120: /* tcons ::= CHECK LP expr RP onconf */
+ case 124: /* tcons ::= CHECK LP expr RP onconf */
{
- yygotominor.yy246 = new SqliteCreateTable::Constraint();
- yygotominor.yy246->initCheck(yymsp[-2].minor.yy512, *(yymsp[0].minor.yy418));
- objectForTokens = yygotominor.yy246;
+ yygotominor.yy400 = new SqliteCreateTable::Constraint();
+ yygotominor.yy400->initCheck(yymsp[-2].minor.yy186, *(yymsp[0].minor.yy136));
+ objectForTokens = yygotominor.yy400;
}
break;
- case 121: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt */
- case 122: /* tcons ::= CONSTRAINT ID_CONSTR */ yytestcase(yyruleno==122);
- case 123: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES ID_TAB */ yytestcase(yyruleno==123);
+ case 125: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt */
+ case 126: /* tcons ::= CONSTRAINT ID_CONSTR */ yytestcase(yyruleno==126);
+ case 127: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES ID_TAB */ yytestcase(yyruleno==127);
{
- yygotominor.yy246 = new SqliteCreateTable::Constraint();
- yygotominor.yy246->initFk(
- *(yymsp[-6].minor.yy223),
+ yygotominor.yy400 = new SqliteCreateTable::Constraint();
+ yygotominor.yy400->initFk(
+ *(yymsp[-6].minor.yy627),
*(yymsp[-3].minor.yy319),
- *(yymsp[-2].minor.yy223),
- *(yymsp[-1].minor.yy584),
- yymsp[0].minor.yy9->initially,
- yymsp[0].minor.yy9->deferrable
+ *(yymsp[-2].minor.yy627),
+ *(yymsp[-1].minor.yy156),
+ yymsp[0].minor.yy53->initially,
+ yymsp[0].minor.yy53->deferrable
);
delete yymsp[-3].minor.yy319;
- delete yymsp[-1].minor.yy584;
- delete yymsp[0].minor.yy9;
- delete yymsp[-2].minor.yy223;
- delete yymsp[-6].minor.yy223;
- objectForTokens = yygotominor.yy246;
+ delete yymsp[-1].minor.yy156;
+ delete yymsp[0].minor.yy53;
+ delete yymsp[-2].minor.yy627;
+ delete yymsp[-6].minor.yy627;
+ objectForTokens = yygotominor.yy400;
}
break;
- case 124: /* tcons ::= CHECK LP RP onconf */
+ case 128: /* tcons ::= CHECK LP RP onconf */
{
- yygotominor.yy246 = new SqliteCreateTable::Constraint();
- yygotominor.yy246->initCheck();
- objectForTokens = yygotominor.yy246;
+ yygotominor.yy400 = new SqliteCreateTable::Constraint();
+ yygotominor.yy400->initCheck();
+ objectForTokens = yygotominor.yy400;
parserContext->minorErrorAfterLastToken("Syntax error");
- yy_destructor(yypParser,223,&yymsp[0].minor);
+ yy_destructor(yypParser,228,&yymsp[0].minor);
}
break;
- case 125: /* defer_subclause_opt ::= */
-{yygotominor.yy9 = new ParserDeferSubClause(SqliteDeferrable::null, SqliteInitially::null);}
- break;
- case 126: /* defer_subclause_opt ::= defer_subclause */
-{yygotominor.yy9 = yymsp[0].minor.yy9;}
- break;
- case 127: /* onconf ::= */
- case 129: /* orconf ::= */ yytestcase(yyruleno==129);
-{yygotominor.yy418 = new SqliteConflictAlgo(SqliteConflictAlgo::null);}
- break;
- case 128: /* onconf ::= ON CONFLICT resolvetype */
- case 130: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==130);
-{yygotominor.yy418 = yymsp[0].minor.yy418;}
- break;
- case 131: /* resolvetype ::= raisetype */
- case 132: /* resolvetype ::= IGNORE */ yytestcase(yyruleno==132);
- case 133: /* resolvetype ::= REPLACE */ yytestcase(yyruleno==133);
-{yygotominor.yy418 = new SqliteConflictAlgo(sqliteConflictAlgo(yymsp[0].minor.yy0->value));}
- break;
- case 134: /* cmd ::= DROP TABLE ifexists fullname */
-{
- yygotominor.yy363 = new SqliteDropTable(*(yymsp[-1].minor.yy611), yymsp[0].minor.yy440->name1, yymsp[0].minor.yy440->name2);
- delete yymsp[-1].minor.yy611;
- delete yymsp[0].minor.yy440;
- objectForTokens = yygotominor.yy363;
- }
- break;
- case 135: /* cmd ::= DROP TABLE ifexists nm DOT ID_TAB */
- case 136: /* cmd ::= DROP TABLE ifexists ID_DB|ID_TAB */ yytestcase(yyruleno==136);
- case 143: /* cmd ::= DROP VIEW ifexists nm DOT ID_VIEW */ yytestcase(yyruleno==143);
- case 144: /* cmd ::= DROP VIEW ifexists ID_DB|ID_VIEW */ yytestcase(yyruleno==144);
- case 187: /* singlesrc ::= nm DOT ID_TAB */ yytestcase(yyruleno==187);
- case 188: /* singlesrc ::= ID_DB|ID_TAB */ yytestcase(yyruleno==188);
- case 189: /* singlesrc ::= nm DOT ID_VIEW */ yytestcase(yyruleno==189);
- case 190: /* singlesrc ::= ID_DB|ID_VIEW */ yytestcase(yyruleno==190);
- case 331: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW */ yytestcase(yyruleno==331);
- case 332: /* cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW */ yytestcase(yyruleno==332);
- case 345: /* cmd ::= DROP INDEX ifexists nm DOT ID_IDX */ yytestcase(yyruleno==345);
- case 346: /* cmd ::= DROP INDEX ifexists ID_DB|ID_IDX */ yytestcase(yyruleno==346);
- case 356: /* cmd ::= PRAGMA nm DOT ID_PRAGMA */ yytestcase(yyruleno==356);
- case 357: /* cmd ::= PRAGMA ID_DB|ID_PRAGMA */ yytestcase(yyruleno==357);
- case 395: /* cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG */ yytestcase(yyruleno==395);
- case 396: /* cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG */ yytestcase(yyruleno==396);
- case 406: /* cmd ::= REINDEX nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==406);
- case 407: /* cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==407);
- case 410: /* cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==410);
- case 411: /* cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==411);
- case 415: /* cmd ::= ALTER TABLE nm DOT ID_TAB */ yytestcase(yyruleno==415);
- case 416: /* cmd ::= ALTER TABLE ID_DB|ID_TAB */ yytestcase(yyruleno==416);
- case 422: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW */ yytestcase(yyruleno==422);
- case 423: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW */ yytestcase(yyruleno==423);
-{ yy_destructor(yypParser,199,&yymsp[-2].minor);
+ case 129: /* defer_subclause_opt ::= */
+{yygotominor.yy53 = new ParserDeferSubClause(SqliteDeferrable::null, SqliteInitially::null);}
+ break;
+ case 130: /* defer_subclause_opt ::= defer_subclause */
+{yygotominor.yy53 = yymsp[0].minor.yy53;}
+ break;
+ case 131: /* onconf ::= */
+ case 133: /* orconf ::= */ yytestcase(yyruleno==133);
+{yygotominor.yy136 = new SqliteConflictAlgo(SqliteConflictAlgo::null);}
+ break;
+ case 132: /* onconf ::= ON CONFLICT resolvetype */
+ case 134: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==134);
+{yygotominor.yy136 = yymsp[0].minor.yy136;}
+ break;
+ case 135: /* resolvetype ::= raisetype */
+ case 136: /* resolvetype ::= IGNORE */ yytestcase(yyruleno==136);
+ case 137: /* resolvetype ::= REPLACE */ yytestcase(yyruleno==137);
+{yygotominor.yy136 = new SqliteConflictAlgo(sqliteConflictAlgo(yymsp[0].minor.yy0->value));}
+ break;
+ case 138: /* cmd ::= DROP TABLE ifexists fullname */
+{
+ yygotominor.yy41 = new SqliteDropTable(*(yymsp[-1].minor.yy225), yymsp[0].minor.yy396->name1, yymsp[0].minor.yy396->name2);
+ delete yymsp[-1].minor.yy225;
+ delete yymsp[0].minor.yy396;
+ objectForTokens = yygotominor.yy41;
+ }
+ break;
+ case 139: /* cmd ::= DROP TABLE ifexists nm DOT ID_TAB */
+ case 140: /* cmd ::= DROP TABLE ifexists ID_DB|ID_TAB */ yytestcase(yyruleno==140);
+ case 147: /* cmd ::= DROP VIEW ifexists nm DOT ID_VIEW */ yytestcase(yyruleno==147);
+ case 148: /* cmd ::= DROP VIEW ifexists ID_DB|ID_VIEW */ yytestcase(yyruleno==148);
+ case 191: /* singlesrc ::= nm DOT ID_TAB */ yytestcase(yyruleno==191);
+ case 192: /* singlesrc ::= ID_DB|ID_TAB */ yytestcase(yyruleno==192);
+ case 193: /* singlesrc ::= nm DOT ID_VIEW */ yytestcase(yyruleno==193);
+ case 194: /* singlesrc ::= ID_DB|ID_VIEW */ yytestcase(yyruleno==194);
+ case 342: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW */ yytestcase(yyruleno==342);
+ case 343: /* cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW */ yytestcase(yyruleno==343);
+ case 356: /* cmd ::= DROP INDEX ifexists nm DOT ID_IDX */ yytestcase(yyruleno==356);
+ case 357: /* cmd ::= DROP INDEX ifexists ID_DB|ID_IDX */ yytestcase(yyruleno==357);
+ case 367: /* cmd ::= PRAGMA nm DOT ID_PRAGMA */ yytestcase(yyruleno==367);
+ case 368: /* cmd ::= PRAGMA ID_DB|ID_PRAGMA */ yytestcase(yyruleno==368);
+ case 406: /* cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG */ yytestcase(yyruleno==406);
+ case 407: /* cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG */ yytestcase(yyruleno==407);
+ case 417: /* cmd ::= REINDEX nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==417);
+ case 418: /* cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==418);
+ case 421: /* cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==421);
+ case 422: /* cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==422);
+ case 427: /* cmd ::= ALTER TABLE nm DOT ID_TAB */ yytestcase(yyruleno==427);
+ case 428: /* cmd ::= ALTER TABLE ID_DB|ID_TAB */ yytestcase(yyruleno==428);
+ case 434: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW */ yytestcase(yyruleno==434);
+ case 435: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW */ yytestcase(yyruleno==435);
+{ yy_destructor(yypParser,203,&yymsp[-2].minor);
}
break;
- case 139: /* cmd ::= CREATE temp VIEW ifnotexists fullname idxlist_opt AS select */
+ case 143: /* cmd ::= CREATE temp VIEW ifnotexists fullname idxlist_opt AS select */
{
- yygotominor.yy363 = new SqliteCreateView(*(yymsp[-6].minor.yy386), *(yymsp[-4].minor.yy611), yymsp[-3].minor.yy440->name1, yymsp[-3].minor.yy440->name2, yymsp[0].minor.yy313, *(yymsp[-2].minor.yy223));
- delete yymsp[-6].minor.yy386;
- delete yymsp[-4].minor.yy611;
- delete yymsp[-3].minor.yy440;
- delete yymsp[-2].minor.yy223;
- objectForTokens = yygotominor.yy363;
+ yygotominor.yy41 = new SqliteCreateView(*(yymsp[-6].minor.yy130), *(yymsp[-4].minor.yy225), yymsp[-3].minor.yy396->name1, yymsp[-3].minor.yy396->name2, yymsp[0].minor.yy297, *(yymsp[-2].minor.yy627));
+ delete yymsp[-6].minor.yy130;
+ delete yymsp[-4].minor.yy225;
+ delete yymsp[-3].minor.yy396;
+ delete yymsp[-2].minor.yy627;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 142: /* cmd ::= DROP VIEW ifexists fullname */
+ case 146: /* cmd ::= DROP VIEW ifexists fullname */
{
- yygotominor.yy363 = new SqliteDropView(*(yymsp[-1].minor.yy611), yymsp[0].minor.yy440->name1, yymsp[0].minor.yy440->name2);
- delete yymsp[-1].minor.yy611;
- delete yymsp[0].minor.yy440;
- objectForTokens = yygotominor.yy363;
+ yygotominor.yy41 = new SqliteDropView(*(yymsp[-1].minor.yy225), yymsp[0].minor.yy396->name1, yymsp[0].minor.yy396->name2);
+ delete yymsp[-1].minor.yy225;
+ delete yymsp[0].minor.yy396;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 145: /* cmd ::= select_stmt */
- case 226: /* cmd ::= delete_stmt */ yytestcase(yyruleno==226);
- case 235: /* cmd ::= update_stmt */ yytestcase(yyruleno==235);
- case 256: /* cmd ::= insert_stmt */ yytestcase(yyruleno==256);
+ case 149: /* cmd ::= select_stmt */
+ case 230: /* cmd ::= delete_stmt */ yytestcase(yyruleno==230);
+ case 241: /* cmd ::= update_stmt */ yytestcase(yyruleno==241);
+ case 262: /* cmd ::= insert_stmt */ yytestcase(yyruleno==262);
{
- yygotominor.yy363 = yymsp[0].minor.yy363;
- objectForTokens = yygotominor.yy363;
+ yygotominor.yy41 = yymsp[0].minor.yy41;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 146: /* select_stmt ::= select */
+ case 150: /* select_stmt ::= select */
{
- yygotominor.yy363 = yymsp[0].minor.yy313;
+ yygotominor.yy41 = yymsp[0].minor.yy297;
// since it's used in trigger:
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 147: /* select ::= with selectnowith */
+ case 151: /* select ::= with selectnowith */
{
- yygotominor.yy313 = yymsp[0].minor.yy313;
- yymsp[0].minor.yy313->setWith(yymsp[-1].minor.yy1);
- objectForTokens = yygotominor.yy313;
+ yygotominor.yy297 = yymsp[0].minor.yy297;
+ yymsp[0].minor.yy297->setWith(yymsp[-1].minor.yy161);
+ objectForTokens = yygotominor.yy297;
}
break;
- case 148: /* selectnowith ::= oneselect */
+ case 152: /* selectnowith ::= oneselect */
{
- yygotominor.yy313 = SqliteSelect::append(yymsp[0].minor.yy470);
- objectForTokens = yygotominor.yy313;
+ yygotominor.yy297 = SqliteSelect::append(yymsp[0].minor.yy378);
+ objectForTokens = yygotominor.yy297;
}
break;
- case 149: /* selectnowith ::= selectnowith multiselect_op oneselect */
+ case 153: /* selectnowith ::= selectnowith multiselect_op oneselect */
{
- yygotominor.yy313 = SqliteSelect::append(yymsp[-2].minor.yy313, *(yymsp[-1].minor.yy382), yymsp[0].minor.yy470);
- delete yymsp[-1].minor.yy382;
- objectForTokens = yygotominor.yy313;
+ yygotominor.yy297 = SqliteSelect::append(yymsp[-2].minor.yy297, *(yymsp[-1].minor.yy142), yymsp[0].minor.yy378);
+ delete yymsp[-1].minor.yy142;
+ objectForTokens = yygotominor.yy297;
}
break;
- case 150: /* selectnowith ::= values */
+ case 154: /* selectnowith ::= values */
{
- yygotominor.yy313 = SqliteSelect::append(*(yymsp[0].minor.yy486));
- delete yymsp[0].minor.yy486;
- objectForTokens = yygotominor.yy313;
+ yygotominor.yy297 = SqliteSelect::append(*(yymsp[0].minor.yy522));
+ delete yymsp[0].minor.yy522;
+ objectForTokens = yygotominor.yy297;
}
break;
- case 151: /* selectnowith ::= selectnowith COMMA values */
+ case 155: /* selectnowith ::= selectnowith COMMA values */
{
- yygotominor.yy313 = SqliteSelect::append(yymsp[-2].minor.yy313, SqliteSelect::CompoundOperator::UNION_ALL, *(yymsp[0].minor.yy486));
- delete yymsp[0].minor.yy486;
- objectForTokens = yygotominor.yy313;
+ yygotominor.yy297 = SqliteSelect::append(yymsp[-2].minor.yy297, SqliteSelect::CompoundOperator::UNION_ALL, *(yymsp[0].minor.yy522));
+ delete yymsp[0].minor.yy522;
+ objectForTokens = yygotominor.yy297;
}
break;
- case 152: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
+ case 156: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
{
- yygotominor.yy470 = new SqliteSelect::Core(
- *(yymsp[-7].minor.yy386),
- *(yymsp[-6].minor.yy53),
- yymsp[-5].minor.yy31,
- yymsp[-4].minor.yy512,
- *(yymsp[-3].minor.yy71),
- yymsp[-2].minor.yy512,
- *(yymsp[-1].minor.yy403),
- yymsp[0].minor.yy4
+ yygotominor.yy378 = new SqliteSelect::Core(
+ *(yymsp[-7].minor.yy130),
+ *(yymsp[-6].minor.yy27),
+ yymsp[-5].minor.yy553,
+ yymsp[-4].minor.yy186,
+ *(yymsp[-3].minor.yy615),
+ yymsp[-2].minor.yy186,
+ *(yymsp[-1].minor.yy226),
+ yymsp[0].minor.yy360
);
- delete yymsp[-6].minor.yy53;
- delete yymsp[-7].minor.yy386;
- delete yymsp[-3].minor.yy71;
- delete yymsp[-1].minor.yy403;
- objectForTokens = yygotominor.yy470;
- }
- break;
- case 153: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
-{
- yygotominor.yy470 = new SqliteSelect::Core(
- *(yymsp[-8].minor.yy386),
- *(yymsp[-7].minor.yy53),
- yymsp[-6].minor.yy31,
- yymsp[-5].minor.yy512,
- *(yymsp[-4].minor.yy71),
- yymsp[-3].minor.yy512,
- *(yymsp[-2].minor.yy299),
- *(yymsp[-1].minor.yy403),
- yymsp[0].minor.yy4
+ delete yymsp[-6].minor.yy27;
+ delete yymsp[-7].minor.yy130;
+ delete yymsp[-3].minor.yy615;
+ delete yymsp[-1].minor.yy226;
+ objectForTokens = yygotominor.yy378;
+ }
+ break;
+ case 157: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
+{
+ yygotominor.yy378 = new SqliteSelect::Core(
+ *(yymsp[-8].minor.yy130),
+ *(yymsp[-7].minor.yy27),
+ yymsp[-6].minor.yy553,
+ yymsp[-5].minor.yy186,
+ *(yymsp[-4].minor.yy615),
+ yymsp[-3].minor.yy186,
+ *(yymsp[-2].minor.yy525),
+ *(yymsp[-1].minor.yy226),
+ yymsp[0].minor.yy360
);
- delete yymsp[-7].minor.yy53;
- delete yymsp[-8].minor.yy386;
- delete yymsp[-4].minor.yy71;
- delete yymsp[-1].minor.yy403;
- delete yymsp[-2].minor.yy299;
- objectForTokens = yygotominor.yy470;
+ delete yymsp[-7].minor.yy27;
+ delete yymsp[-8].minor.yy130;
+ delete yymsp[-4].minor.yy615;
+ delete yymsp[-1].minor.yy226;
+ delete yymsp[-2].minor.yy525;
+ objectForTokens = yygotominor.yy378;
}
break;
- case 154: /* values ::= VALUES LP nexprlist RP */
+ case 158: /* values ::= VALUES LP nexprlist RP */
{
- yygotominor.yy486 = new ParserExprNestedList();
- yygotominor.yy486->append(*(yymsp[-1].minor.yy71));
- delete yymsp[-1].minor.yy71;
+ yygotominor.yy522 = new ParserExprNestedList();
+ yygotominor.yy522->append(*(yymsp[-1].minor.yy615));
+ delete yymsp[-1].minor.yy615;
}
break;
- case 155: /* values ::= values COMMA LP exprlist RP */
+ case 159: /* values ::= values COMMA LP exprlist RP */
{
- yymsp[-4].minor.yy486->append(*(yymsp[-1].minor.yy71));
- yygotominor.yy486 = yymsp[-4].minor.yy486;
- delete yymsp[-1].minor.yy71;
+ yymsp[-4].minor.yy522->append(*(yymsp[-1].minor.yy615));
+ yygotominor.yy522 = yymsp[-4].minor.yy522;
+ delete yymsp[-1].minor.yy615;
DONT_INHERIT_TOKENS("values");
}
break;
- case 156: /* multiselect_op ::= UNION */
-{yygotominor.yy382 = new SqliteSelect::CompoundOperator(SqliteSelect::CompoundOperator::UNION);}
+ case 160: /* multiselect_op ::= UNION */
+{yygotominor.yy142 = new SqliteSelect::CompoundOperator(SqliteSelect::CompoundOperator::UNION);}
break;
- case 157: /* multiselect_op ::= UNION ALL */
-{yygotominor.yy382 = new SqliteSelect::CompoundOperator(SqliteSelect::CompoundOperator::UNION_ALL);}
+ case 161: /* multiselect_op ::= UNION ALL */
+{yygotominor.yy142 = new SqliteSelect::CompoundOperator(SqliteSelect::CompoundOperator::UNION_ALL);}
break;
- case 158: /* multiselect_op ::= EXCEPT */
-{yygotominor.yy382 = new SqliteSelect::CompoundOperator(SqliteSelect::CompoundOperator::EXCEPT);}
+ case 162: /* multiselect_op ::= EXCEPT */
+{yygotominor.yy142 = new SqliteSelect::CompoundOperator(SqliteSelect::CompoundOperator::EXCEPT);}
break;
- case 159: /* multiselect_op ::= INTERSECT */
-{yygotominor.yy382 = new SqliteSelect::CompoundOperator(SqliteSelect::CompoundOperator::INTERSECT);}
+ case 163: /* multiselect_op ::= INTERSECT */
+{yygotominor.yy142 = new SqliteSelect::CompoundOperator(SqliteSelect::CompoundOperator::INTERSECT);}
break;
- case 160: /* distinct ::= DISTINCT */
-{yygotominor.yy386 = new int(1);}
+ case 164: /* distinct ::= DISTINCT */
+{yygotominor.yy130 = new int(1);}
break;
- case 161: /* distinct ::= ALL */
-{yygotominor.yy386 = new int(2);}
+ case 165: /* distinct ::= ALL */
+{yygotominor.yy130 = new int(2);}
break;
- case 163: /* sclp ::= selcollist COMMA */
-{yygotominor.yy53 = yymsp[-1].minor.yy53;}
+ case 167: /* sclp ::= selcollist COMMA */
+{yygotominor.yy27 = yymsp[-1].minor.yy27;}
break;
- case 164: /* sclp ::= */
-{yygotominor.yy53 = new ParserResultColumnList();}
+ case 168: /* sclp ::= */
+ case 239: /* returning ::= */ yytestcase(yyruleno==239);
+{yygotominor.yy27 = new ParserResultColumnList();}
break;
- case 165: /* selcollist ::= sclp expr as */
+ case 169: /* selcollist ::= sclp expr as */
{
SqliteSelect::Core::ResultColumn* obj =
new SqliteSelect::Core::ResultColumn(
- yymsp[-1].minor.yy512,
- yymsp[0].minor.yy200 ? yymsp[0].minor.yy200->asKw : false,
- yymsp[0].minor.yy200 ? yymsp[0].minor.yy200->name : QString()
+ yymsp[-1].minor.yy186,
+ yymsp[0].minor.yy628 ? yymsp[0].minor.yy628->asKw : false,
+ yymsp[0].minor.yy628 ? yymsp[0].minor.yy628->name : QString()
);
- yymsp[-2].minor.yy53->append(obj);
- yygotominor.yy53 = yymsp[-2].minor.yy53;
- delete yymsp[0].minor.yy200;
+ yymsp[-2].minor.yy27->append(obj);
+ yygotominor.yy27 = yymsp[-2].minor.yy27;
+ delete yymsp[0].minor.yy628;
objectForTokens = obj;
DONT_INHERIT_TOKENS("sclp");
}
break;
- case 166: /* selcollist ::= sclp STAR */
+ case 170: /* selcollist ::= sclp STAR */
{
SqliteSelect::Core::ResultColumn* obj =
new SqliteSelect::Core::ResultColumn(true);
- yymsp[-1].minor.yy53->append(obj);
- yygotominor.yy53 = yymsp[-1].minor.yy53;
+ yymsp[-1].minor.yy27->append(obj);
+ yygotominor.yy27 = yymsp[-1].minor.yy27;
objectForTokens = obj;
DONT_INHERIT_TOKENS("sclp");
}
break;
- case 167: /* selcollist ::= sclp tnm DOT STAR */
+ case 171: /* selcollist ::= sclp tnm DOT STAR */
{
SqliteSelect::Core::ResultColumn* obj =
new SqliteSelect::Core::ResultColumn(
true,
- yymsp[-2].minor.yy590->toName()
+ yymsp[-2].minor.yy380->toName()
);
- if (!yymsp[-2].minor.yy590->isName())
+ if (!yymsp[-2].minor.yy380->isName())
parserContext->errorAtToken("Syntax error <expected name, not literal value>", -3);
- yymsp[-3].minor.yy53->append(obj);
- yygotominor.yy53 = yymsp[-3].minor.yy53;
- delete yymsp[-2].minor.yy590;
+ yymsp[-3].minor.yy27->append(obj);
+ yygotominor.yy27 = yymsp[-3].minor.yy27;
+ delete yymsp[-2].minor.yy380;
objectForTokens = obj;
DONT_INHERIT_TOKENS("sclp");
}
break;
- case 168: /* selcollist ::= sclp */
- case 169: /* selcollist ::= sclp ID_TAB DOT STAR */ yytestcase(yyruleno==169);
+ case 172: /* selcollist ::= sclp */
+ case 173: /* selcollist ::= sclp ID_TAB DOT STAR */ yytestcase(yyruleno==173);
{
parserContext->minorErrorBeforeNextToken("Syntax error");
- yygotominor.yy53 = yymsp[0].minor.yy53;
+ yygotominor.yy27 = yymsp[0].minor.yy27;
}
break;
- case 170: /* as ::= AS nm */
+ case 174: /* as ::= AS nm */
{
- yygotominor.yy200 = new ParserStubAlias(*(yymsp[0].minor.yy319), true);
+ yygotominor.yy628 = new ParserStubAlias(*(yymsp[0].minor.yy319), true);
delete yymsp[0].minor.yy319;
}
break;
- case 171: /* as ::= ids */
- case 172: /* as ::= AS ID_ALIAS */ yytestcase(yyruleno==172);
- case 173: /* as ::= ID_ALIAS */ yytestcase(yyruleno==173);
+ case 175: /* as ::= ids */
+ case 176: /* as ::= AS ID_ALIAS */ yytestcase(yyruleno==176);
+ case 177: /* as ::= ID_ALIAS */ yytestcase(yyruleno==177);
{
- yygotominor.yy200 = new ParserStubAlias(*(yymsp[0].minor.yy319), false);
+ yygotominor.yy628 = new ParserStubAlias(*(yymsp[0].minor.yy319), false);
delete yymsp[0].minor.yy319;
}
break;
- case 174: /* as ::= */
-{yygotominor.yy200 = nullptr;}
+ case 178: /* as ::= */
+{yygotominor.yy628 = nullptr;}
break;
- case 175: /* from ::= */
-{yygotominor.yy31 = nullptr;}
+ case 179: /* from ::= */
+{yygotominor.yy553 = nullptr;}
break;
- case 176: /* from ::= FROM joinsrc */
-{yygotominor.yy31 = yymsp[0].minor.yy31;}
+ case 180: /* from ::= FROM joinsrc */
+{yygotominor.yy553 = yymsp[0].minor.yy553;}
break;
- case 177: /* joinsrc ::= singlesrc seltablist */
+ case 181: /* joinsrc ::= singlesrc seltablist */
{
- yygotominor.yy31 = new SqliteSelect::Core::JoinSource(
- yymsp[-1].minor.yy441,
- *(yymsp[0].minor.yy451)
+ yygotominor.yy553 = new SqliteSelect::Core::JoinSource(
+ yymsp[-1].minor.yy595,
+ *(yymsp[0].minor.yy107)
);
- delete yymsp[0].minor.yy451;
- objectForTokens = yygotominor.yy31;
+ delete yymsp[0].minor.yy107;
+ objectForTokens = yygotominor.yy553;
}
break;
- case 178: /* joinsrc ::= */
+ case 182: /* joinsrc ::= */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
- yygotominor.yy31 = new SqliteSelect::Core::JoinSource();
- objectForTokens = yygotominor.yy31;
+ yygotominor.yy553 = new SqliteSelect::Core::JoinSource();
+ objectForTokens = yygotominor.yy553;
}
break;
- case 179: /* seltablist ::= seltablist joinop singlesrc joinconstr_opt */
+ case 183: /* seltablist ::= seltablist joinop singlesrc joinconstr_opt */
{
SqliteSelect::Core::JoinSourceOther* src =
- new SqliteSelect::Core::JoinSourceOther(yymsp[-2].minor.yy221, yymsp[-1].minor.yy441, yymsp[0].minor.yy295);
+ new SqliteSelect::Core::JoinSourceOther(yymsp[-2].minor.yy449, yymsp[-1].minor.yy595, yymsp[0].minor.yy215);
- yymsp[-3].minor.yy451->append(src);
- yygotominor.yy451 = yymsp[-3].minor.yy451;
+ yymsp[-3].minor.yy107->append(src);
+ yygotominor.yy107 = yymsp[-3].minor.yy107;
objectForTokens = src;
DONT_INHERIT_TOKENS("seltablist");
}
break;
- case 180: /* seltablist ::= */
+ case 184: /* seltablist ::= */
{
- yygotominor.yy451 = new ParserOtherSourceList();
+ yygotominor.yy107 = new ParserOtherSourceList();
}
break;
- case 181: /* singlesrc ::= nm dbnm as indexed_opt */
+ case 185: /* singlesrc ::= nm dbnm as indexed_opt */
{
- yygotominor.yy441 = new SqliteSelect::Core::SingleSource(
+ yygotominor.yy595 = new SqliteSelect::Core::SingleSource(
*(yymsp[-3].minor.yy319),
*(yymsp[-2].minor.yy319),
- yymsp[-1].minor.yy200 ? yymsp[-1].minor.yy200->asKw : false,
- yymsp[-1].minor.yy200 ? yymsp[-1].minor.yy200->name : QString(),
- yymsp[0].minor.yy592 ? yymsp[0].minor.yy592->notIndexedKw : false,
- yymsp[0].minor.yy592 ? yymsp[0].minor.yy592->indexedBy : QString()
+ yymsp[-1].minor.yy628 ? yymsp[-1].minor.yy628->asKw : false,
+ yymsp[-1].minor.yy628 ? yymsp[-1].minor.yy628->name : QString(),
+ yymsp[0].minor.yy300 ? yymsp[0].minor.yy300->notIndexedKw : false,
+ yymsp[0].minor.yy300 ? yymsp[0].minor.yy300->indexedBy : QString()
);
delete yymsp[-3].minor.yy319;
delete yymsp[-2].minor.yy319;
- delete yymsp[-1].minor.yy200;
- if (yymsp[0].minor.yy592)
- delete yymsp[0].minor.yy592;
- objectForTokens = yygotominor.yy441;
+ delete yymsp[-1].minor.yy628;
+ if (yymsp[0].minor.yy300)
+ delete yymsp[0].minor.yy300;
+ objectForTokens = yygotominor.yy595;
}
break;
- case 182: /* singlesrc ::= LP select RP as */
+ case 186: /* singlesrc ::= LP select RP as */
{
- yygotominor.yy441 = new SqliteSelect::Core::SingleSource(
- yymsp[-2].minor.yy313,
- yymsp[0].minor.yy200 ? yymsp[0].minor.yy200->asKw : false,
- yymsp[0].minor.yy200 ? yymsp[0].minor.yy200->name : QString()
+ yygotominor.yy595 = new SqliteSelect::Core::SingleSource(
+ yymsp[-2].minor.yy297,
+ yymsp[0].minor.yy628 ? yymsp[0].minor.yy628->asKw : false,
+ yymsp[0].minor.yy628 ? yymsp[0].minor.yy628->name : QString()
);
- delete yymsp[0].minor.yy200;
- objectForTokens = yygotominor.yy441;
+ delete yymsp[0].minor.yy628;
+ objectForTokens = yygotominor.yy595;
}
break;
- case 183: /* singlesrc ::= LP joinsrc RP as */
+ case 187: /* singlesrc ::= LP joinsrc RP as */
{
- yygotominor.yy441 = new SqliteSelect::Core::SingleSource(
- yymsp[-2].minor.yy31,
- yymsp[0].minor.yy200 ? yymsp[0].minor.yy200->asKw : false,
- yymsp[0].minor.yy200 ? yymsp[0].minor.yy200->name : QString()
+ yygotominor.yy595 = new SqliteSelect::Core::SingleSource(
+ yymsp[-2].minor.yy553,
+ yymsp[0].minor.yy628 ? yymsp[0].minor.yy628->asKw : false,
+ yymsp[0].minor.yy628 ? yymsp[0].minor.yy628->name : QString()
);
- delete yymsp[0].minor.yy200;
- objectForTokens = yygotominor.yy441;
+ delete yymsp[0].minor.yy628;
+ objectForTokens = yygotominor.yy595;
}
break;
- case 184: /* singlesrc ::= nm dbnm LP exprlist RP as */
+ case 188: /* singlesrc ::= nm dbnm LP exprlist RP as */
{
- yygotominor.yy441 = new SqliteSelect::Core::SingleSource(
+ yygotominor.yy595 = new SqliteSelect::Core::SingleSource(
*(yymsp[-5].minor.yy319),
*(yymsp[-4].minor.yy319),
- yymsp[0].minor.yy200 ? yymsp[0].minor.yy200->asKw : false,
- yymsp[0].minor.yy200 ? yymsp[0].minor.yy200->name : QString(),
- *(yymsp[-2].minor.yy71)
+ yymsp[0].minor.yy628 ? yymsp[0].minor.yy628->asKw : false,
+ yymsp[0].minor.yy628 ? yymsp[0].minor.yy628->name : QString(),
+ *(yymsp[-2].minor.yy615)
);
delete yymsp[-5].minor.yy319;
delete yymsp[-4].minor.yy319;
- delete yymsp[0].minor.yy200;
- if (yymsp[-2].minor.yy71)
- delete yymsp[-2].minor.yy71;
+ delete yymsp[0].minor.yy628;
+ if (yymsp[-2].minor.yy615)
+ delete yymsp[-2].minor.yy615;
- objectForTokens = yygotominor.yy441;
+ objectForTokens = yygotominor.yy595;
}
break;
- case 185: /* singlesrc ::= */
+ case 189: /* singlesrc ::= */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
- yygotominor.yy441 = new SqliteSelect::Core::SingleSource();
- objectForTokens = yygotominor.yy441;
+ yygotominor.yy595 = new SqliteSelect::Core::SingleSource();
+ objectForTokens = yygotominor.yy595;
}
break;
- case 186: /* singlesrc ::= nm DOT */
+ case 190: /* singlesrc ::= nm DOT */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
- yygotominor.yy441 = new SqliteSelect::Core::SingleSource();
- yygotominor.yy441->database = *(yymsp[-1].minor.yy319);
+ yygotominor.yy595 = new SqliteSelect::Core::SingleSource();
+ yygotominor.yy595->database = *(yymsp[-1].minor.yy319);
delete yymsp[-1].minor.yy319;
- objectForTokens = yygotominor.yy441;
+ objectForTokens = yygotominor.yy595;
}
break;
- case 191: /* joinconstr_opt ::= ON expr */
+ case 195: /* joinconstr_opt ::= ON expr */
{
- yygotominor.yy295 = new SqliteSelect::Core::JoinConstraint(yymsp[0].minor.yy512);
- objectForTokens = yygotominor.yy295;
+ yygotominor.yy215 = new SqliteSelect::Core::JoinConstraint(yymsp[0].minor.yy186);
+ objectForTokens = yygotominor.yy215;
}
break;
- case 192: /* joinconstr_opt ::= USING LP idlist RP */
+ case 196: /* joinconstr_opt ::= USING LP idlist RP */
{
- yygotominor.yy295 = new SqliteSelect::Core::JoinConstraint(*(yymsp[-1].minor.yy575));
- delete yymsp[-1].minor.yy575;
- objectForTokens = yygotominor.yy295;
+ yygotominor.yy215 = new SqliteSelect::Core::JoinConstraint(*(yymsp[-1].minor.yy173));
+ delete yymsp[-1].minor.yy173;
+ objectForTokens = yygotominor.yy215;
}
break;
- case 193: /* joinconstr_opt ::= */
-{yygotominor.yy295 = nullptr;}
+ case 197: /* joinconstr_opt ::= */
+{yygotominor.yy215 = nullptr;}
+ break;
+ case 198: /* dbnm ::= */
+ case 352: /* collate ::= */ yytestcase(yyruleno==352);
+ case 438: /* vtabarg ::= */ yytestcase(yyruleno==438);
+ case 442: /* anylist ::= */ yytestcase(yyruleno==442);
+{yygotominor.yy319 = new QString();}
break;
- case 196: /* fullname ::= nm dbnm */
+ case 200: /* fullname ::= nm dbnm */
{
- yygotominor.yy440 = new ParserFullName();
- yygotominor.yy440->name1 = *(yymsp[-1].minor.yy319);
- yygotominor.yy440->name2 = *(yymsp[0].minor.yy319);
+ yygotominor.yy396 = new ParserFullName();
+ yygotominor.yy396->name1 = *(yymsp[-1].minor.yy319);
+ yygotominor.yy396->name2 = *(yymsp[0].minor.yy319);
delete yymsp[-1].minor.yy319;
delete yymsp[0].minor.yy319;
}
break;
- case 197: /* joinop ::= COMMA */
+ case 201: /* joinop ::= COMMA */
{
- yygotominor.yy221 = new SqliteSelect::Core::JoinOp(true);
- objectForTokens = yygotominor.yy221;
+ yygotominor.yy449 = new SqliteSelect::Core::JoinOp(true);
+ objectForTokens = yygotominor.yy449;
}
break;
- case 198: /* joinop ::= JOIN */
+ case 202: /* joinop ::= JOIN */
{
- yygotominor.yy221 = new SqliteSelect::Core::JoinOp(false);
- objectForTokens = yygotominor.yy221;
+ yygotominor.yy449 = new SqliteSelect::Core::JoinOp(false);
+ objectForTokens = yygotominor.yy449;
}
break;
- case 199: /* joinop ::= JOIN_KW JOIN */
+ case 203: /* joinop ::= JOIN_KW JOIN */
{
- yygotominor.yy221 = new SqliteSelect::Core::JoinOp(yymsp[-1].minor.yy0->value);
- objectForTokens = yygotominor.yy221;
+ yygotominor.yy449 = new SqliteSelect::Core::JoinOp(yymsp[-1].minor.yy0->value);
+ objectForTokens = yygotominor.yy449;
}
break;
- case 200: /* joinop ::= JOIN_KW nm JOIN */
+ case 204: /* joinop ::= JOIN_KW nm JOIN */
{
- yygotominor.yy221 = new SqliteSelect::Core::JoinOp(yymsp[-2].minor.yy0->value, *(yymsp[-1].minor.yy319));
+ yygotominor.yy449 = new SqliteSelect::Core::JoinOp(yymsp[-2].minor.yy0->value, *(yymsp[-1].minor.yy319));
delete yymsp[-1].minor.yy319;
- objectForTokens = yygotominor.yy221;
+ objectForTokens = yygotominor.yy449;
}
break;
- case 201: /* joinop ::= JOIN_KW nm nm JOIN */
- case 202: /* joinop ::= ID_JOIN_OPTS */ yytestcase(yyruleno==202);
+ case 205: /* joinop ::= JOIN_KW nm nm JOIN */
+ case 206: /* joinop ::= ID_JOIN_OPTS */ yytestcase(yyruleno==206);
{
- yygotominor.yy221 = new SqliteSelect::Core::JoinOp(yymsp[-3].minor.yy0->value, *(yymsp[-2].minor.yy319), *(yymsp[-1].minor.yy319));
+ yygotominor.yy449 = new SqliteSelect::Core::JoinOp(yymsp[-3].minor.yy0->value, *(yymsp[-2].minor.yy319), *(yymsp[-1].minor.yy319));
delete yymsp[-2].minor.yy319;
- objectForTokens = yygotominor.yy221;
+ objectForTokens = yygotominor.yy449;
}
break;
- case 203: /* indexed_opt ::= */
-{yygotominor.yy592 = nullptr;}
+ case 207: /* indexed_opt ::= */
+{yygotominor.yy300 = nullptr;}
break;
- case 204: /* indexed_opt ::= INDEXED BY nm */
+ case 208: /* indexed_opt ::= INDEXED BY nm */
{
- yygotominor.yy592 = new ParserIndexedBy(*(yymsp[0].minor.yy319));
+ yygotominor.yy300 = new ParserIndexedBy(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
}
break;
- case 205: /* indexed_opt ::= NOT INDEXED */
- case 206: /* indexed_opt ::= INDEXED BY ID_IDX */ yytestcase(yyruleno==206);
-{yygotominor.yy592 = new ParserIndexedBy(true);}
+ case 209: /* indexed_opt ::= NOT INDEXED */
+ case 210: /* indexed_opt ::= INDEXED BY ID_IDX */ yytestcase(yyruleno==210);
+{yygotominor.yy300 = new ParserIndexedBy(true);}
break;
- case 207: /* orderby_opt ::= */
-{yygotominor.yy403 = new ParserOrderByList();}
+ case 211: /* orderby_opt ::= */
+{yygotominor.yy226 = new ParserOrderByList();}
break;
- case 208: /* orderby_opt ::= ORDER BY sortlist */
-{yygotominor.yy403 = yymsp[0].minor.yy403;}
+ case 212: /* orderby_opt ::= ORDER BY sortlist */
+{yygotominor.yy226 = yymsp[0].minor.yy226;}
break;
- case 209: /* sortlist ::= sortlist COMMA expr sortorder nulls */
+ case 213: /* sortlist ::= sortlist COMMA expr sortorder nulls */
{
- SqliteOrderBy* obj = new SqliteOrderBy(yymsp[-2].minor.yy512, *(yymsp[-1].minor.yy549), *(yymsp[0].minor.yy579));
- yymsp[-4].minor.yy403->append(obj);
- yygotominor.yy403 = yymsp[-4].minor.yy403;
- delete yymsp[-1].minor.yy549;
- delete yymsp[0].minor.yy579;
+ SqliteOrderBy* obj = new SqliteOrderBy(yymsp[-2].minor.yy186, *(yymsp[-1].minor.yy35), *(yymsp[0].minor.yy315));
+ yymsp[-4].minor.yy226->append(obj);
+ yygotominor.yy226 = yymsp[-4].minor.yy226;
+ delete yymsp[-1].minor.yy35;
+ delete yymsp[0].minor.yy315;
objectForTokens = obj;
DONT_INHERIT_TOKENS("sortlist");
}
break;
- case 210: /* sortlist ::= expr sortorder nulls */
+ case 214: /* sortlist ::= expr sortorder nulls */
{
- SqliteOrderBy* obj = new SqliteOrderBy(yymsp[-2].minor.yy512, *(yymsp[-1].minor.yy549), *(yymsp[0].minor.yy579));
- yygotominor.yy403 = new ParserOrderByList();
- yygotominor.yy403->append(obj);
- delete yymsp[-1].minor.yy549;
- delete yymsp[0].minor.yy579;
+ SqliteOrderBy* obj = new SqliteOrderBy(yymsp[-2].minor.yy186, *(yymsp[-1].minor.yy35), *(yymsp[0].minor.yy315));
+ yygotominor.yy226 = new ParserOrderByList();
+ yygotominor.yy226->append(obj);
+ delete yymsp[-1].minor.yy35;
+ delete yymsp[0].minor.yy315;
objectForTokens = obj;
}
break;
- case 211: /* sortorder ::= ASC */
-{yygotominor.yy549 = new SqliteSortOrder(SqliteSortOrder::ASC);}
+ case 215: /* sortorder ::= ASC */
+{yygotominor.yy35 = new SqliteSortOrder(SqliteSortOrder::ASC);}
break;
- case 212: /* sortorder ::= DESC */
-{yygotominor.yy549 = new SqliteSortOrder(SqliteSortOrder::DESC);}
+ case 216: /* sortorder ::= DESC */
+{yygotominor.yy35 = new SqliteSortOrder(SqliteSortOrder::DESC);}
break;
- case 213: /* sortorder ::= */
-{yygotominor.yy549 = new SqliteSortOrder(SqliteSortOrder::null);}
+ case 217: /* sortorder ::= */
+{yygotominor.yy35 = new SqliteSortOrder(SqliteSortOrder::null);}
break;
- case 214: /* nulls ::= NULLS FIRST */
-{yygotominor.yy579 = new SqliteNulls(SqliteNulls::FIRST);}
+ case 218: /* nulls ::= NULLS FIRST */
+{yygotominor.yy315 = new SqliteNulls(SqliteNulls::FIRST);}
break;
- case 215: /* nulls ::= NULLS LAST */
-{yygotominor.yy579 = new SqliteNulls(SqliteNulls::LAST);}
+ case 219: /* nulls ::= NULLS LAST */
+{yygotominor.yy315 = new SqliteNulls(SqliteNulls::LAST);}
break;
- case 216: /* nulls ::= */
-{yygotominor.yy579 = new SqliteNulls(SqliteNulls::null);}
+ case 220: /* nulls ::= */
+{yygotominor.yy315 = new SqliteNulls(SqliteNulls::null);}
break;
- case 217: /* groupby_opt ::= */
- case 326: /* exprlist ::= */ yytestcase(yyruleno==326);
-{yygotominor.yy71 = new ParserExprList();}
+ case 221: /* groupby_opt ::= */
+ case 337: /* exprlist ::= */ yytestcase(yyruleno==337);
+{yygotominor.yy615 = new ParserExprList();}
break;
- case 218: /* groupby_opt ::= GROUP BY nexprlist */
- case 325: /* exprlist ::= nexprlist */ yytestcase(yyruleno==325);
-{yygotominor.yy71 = yymsp[0].minor.yy71;}
+ case 222: /* groupby_opt ::= GROUP BY nexprlist */
+ case 336: /* exprlist ::= nexprlist */ yytestcase(yyruleno==336);
+{yygotominor.yy615 = yymsp[0].minor.yy615;}
break;
- case 219: /* groupby_opt ::= GROUP BY */
+ case 223: /* groupby_opt ::= GROUP BY */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
- yygotominor.yy71 = new ParserExprList();
+ yygotominor.yy615 = new ParserExprList();
}
break;
- case 220: /* having_opt ::= */
- case 232: /* where_opt ::= */ yytestcase(yyruleno==232);
- case 322: /* case_else ::= */ yytestcase(yyruleno==322);
- case 324: /* case_operand ::= */ yytestcase(yyruleno==324);
- case 350: /* vinto ::= */ yytestcase(yyruleno==350);
- case 384: /* when_clause ::= */ yytestcase(yyruleno==384);
- case 399: /* key_opt ::= */ yytestcase(yyruleno==399);
-{yygotominor.yy512 = nullptr;}
+ case 224: /* having_opt ::= */
+ case 236: /* where_opt ::= */ yytestcase(yyruleno==236);
+ case 333: /* case_else ::= */ yytestcase(yyruleno==333);
+ case 335: /* case_operand ::= */ yytestcase(yyruleno==335);
+ case 361: /* vinto ::= */ yytestcase(yyruleno==361);
+ case 395: /* when_clause ::= */ yytestcase(yyruleno==395);
+ case 410: /* key_opt ::= */ yytestcase(yyruleno==410);
+{yygotominor.yy186 = nullptr;}
break;
- case 221: /* having_opt ::= HAVING expr */
- case 233: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==233);
- case 315: /* expr ::= exprx */ yytestcase(yyruleno==315);
- case 321: /* case_else ::= ELSE expr */ yytestcase(yyruleno==321);
- case 323: /* case_operand ::= exprx */ yytestcase(yyruleno==323);
- case 349: /* vinto ::= INTO expr */ yytestcase(yyruleno==349);
- case 385: /* when_clause ::= WHEN expr */ yytestcase(yyruleno==385);
- case 400: /* key_opt ::= KEY expr */ yytestcase(yyruleno==400);
-{yygotominor.yy512 = yymsp[0].minor.yy512;}
+ case 225: /* having_opt ::= HAVING expr */
+ case 237: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==237);
+ case 326: /* expr ::= exprx */ yytestcase(yyruleno==326);
+ case 332: /* case_else ::= ELSE expr */ yytestcase(yyruleno==332);
+ case 334: /* case_operand ::= exprx */ yytestcase(yyruleno==334);
+ case 360: /* vinto ::= INTO expr */ yytestcase(yyruleno==360);
+ case 396: /* when_clause ::= WHEN expr */ yytestcase(yyruleno==396);
+ case 411: /* key_opt ::= KEY expr */ yytestcase(yyruleno==411);
+{yygotominor.yy186 = yymsp[0].minor.yy186;}
break;
- case 222: /* limit_opt ::= */
-{yygotominor.yy4 = nullptr;}
+ case 226: /* limit_opt ::= */
+{yygotominor.yy360 = nullptr;}
break;
- case 223: /* limit_opt ::= LIMIT expr */
+ case 227: /* limit_opt ::= LIMIT expr */
{
- yygotominor.yy4 = new SqliteLimit(yymsp[0].minor.yy512);
- objectForTokens = yygotominor.yy4;
+ yygotominor.yy360 = new SqliteLimit(yymsp[0].minor.yy186);
+ objectForTokens = yygotominor.yy360;
}
break;
- case 224: /* limit_opt ::= LIMIT expr OFFSET expr */
+ case 228: /* limit_opt ::= LIMIT expr OFFSET expr */
{
- yygotominor.yy4 = new SqliteLimit(yymsp[-2].minor.yy512, yymsp[0].minor.yy512, true);
- objectForTokens = yygotominor.yy4;
+ yygotominor.yy360 = new SqliteLimit(yymsp[-2].minor.yy186, yymsp[0].minor.yy186, true);
+ objectForTokens = yygotominor.yy360;
}
break;
- case 225: /* limit_opt ::= LIMIT expr COMMA expr */
+ case 229: /* limit_opt ::= LIMIT expr COMMA expr */
{
- yygotominor.yy4 = new SqliteLimit(yymsp[-2].minor.yy512, yymsp[0].minor.yy512, false);
- objectForTokens = yygotominor.yy4;
+ yygotominor.yy360 = new SqliteLimit(yymsp[-2].minor.yy186, yymsp[0].minor.yy186, false);
+ objectForTokens = yygotominor.yy360;
}
break;
- case 227: /* delete_stmt ::= with DELETE FROM fullname indexed_opt where_opt */
+ case 231: /* delete_stmt ::= with DELETE FROM fullname indexed_opt where_opt returning */
{
- if (yymsp[-1].minor.yy592)
+ if (yymsp[-2].minor.yy300)
{
- if (!yymsp[-1].minor.yy592->indexedBy.isNull())
+ if (!yymsp[-2].minor.yy300->indexedBy.isNull())
{
- yygotominor.yy363 = new SqliteDelete(
- yymsp[-2].minor.yy440->name1,
- yymsp[-2].minor.yy440->name2,
- yymsp[-1].minor.yy592->indexedBy,
- yymsp[0].minor.yy512,
- yymsp[-5].minor.yy1
+ yygotominor.yy41 = new SqliteDelete(
+ yymsp[-3].minor.yy396->name1,
+ yymsp[-3].minor.yy396->name2,
+ yymsp[-2].minor.yy300->indexedBy,
+ yymsp[-1].minor.yy186,
+ yymsp[-6].minor.yy161,
+ *(yymsp[0].minor.yy27)
);
}
else
{
- yygotominor.yy363 = new SqliteDelete(
- yymsp[-2].minor.yy440->name1,
- yymsp[-2].minor.yy440->name2,
- yymsp[-1].minor.yy592->notIndexedKw,
- yymsp[0].minor.yy512,
- yymsp[-5].minor.yy1
+ yygotominor.yy41 = new SqliteDelete(
+ yymsp[-3].minor.yy396->name1,
+ yymsp[-3].minor.yy396->name2,
+ yymsp[-2].minor.yy300->notIndexedKw,
+ yymsp[-1].minor.yy186,
+ yymsp[-6].minor.yy161,
+ *(yymsp[0].minor.yy27)
);
}
- delete yymsp[-1].minor.yy592;
+ delete yymsp[-2].minor.yy300;
}
else
{
- yygotominor.yy363 = new SqliteDelete(
- yymsp[-2].minor.yy440->name1,
- yymsp[-2].minor.yy440->name2,
+ yygotominor.yy41 = new SqliteDelete(
+ yymsp[-3].minor.yy396->name1,
+ yymsp[-3].minor.yy396->name2,
false,
- yymsp[0].minor.yy512,
- yymsp[-5].minor.yy1
+ yymsp[-1].minor.yy186,
+ yymsp[-6].minor.yy161,
+ *(yymsp[0].minor.yy27)
);
}
- delete yymsp[-2].minor.yy440;
+ delete yymsp[-3].minor.yy396;
+ delete yymsp[0].minor.yy27;
// since it's used in trigger:
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 228: /* delete_stmt ::= with DELETE FROM */
+ case 232: /* delete_stmt ::= with DELETE FROM */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
SqliteDelete* q = new SqliteDelete();
- q->with = yymsp[-2].minor.yy1;
- yygotominor.yy363 = q;
- objectForTokens = yygotominor.yy363;
+ q->with = yymsp[-2].minor.yy161;
+ yygotominor.yy41 = q;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 229: /* delete_stmt ::= with DELETE FROM nm DOT */
+ case 233: /* delete_stmt ::= with DELETE FROM nm DOT */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
SqliteDelete* q = new SqliteDelete();
- q->with = yymsp[-4].minor.yy1;
+ q->with = yymsp[-4].minor.yy161;
q->database = *(yymsp[-1].minor.yy319);
- yygotominor.yy363 = q;
- objectForTokens = yygotominor.yy363;
+ yygotominor.yy41 = q;
+ objectForTokens = yygotominor.yy41;
delete yymsp[-1].minor.yy319;
}
break;
- case 230: /* delete_stmt ::= with DELETE FROM nm DOT ID_TAB */
- case 239: /* update_stmt ::= with UPDATE orconf nm DOT ID_TAB */ yytestcase(yyruleno==239);
-{ yy_destructor(yypParser,244,&yymsp[-5].minor);
- yy_destructor(yypParser,199,&yymsp[-2].minor);
+ case 234: /* delete_stmt ::= with DELETE FROM nm DOT ID_TAB */
+ case 245: /* update_stmt ::= with UPDATE orconf nm DOT ID_TAB */ yytestcase(yyruleno==245);
+{ yy_destructor(yypParser,249,&yymsp[-5].minor);
+ yy_destructor(yypParser,203,&yymsp[-2].minor);
}
break;
- case 231: /* delete_stmt ::= with DELETE FROM ID_DB|ID_TAB */
- case 240: /* update_stmt ::= with UPDATE orconf ID_DB|ID_TAB */ yytestcase(yyruleno==240);
-{ yy_destructor(yypParser,244,&yymsp[-3].minor);
+ case 235: /* delete_stmt ::= with DELETE FROM ID_DB|ID_TAB */
+ case 246: /* update_stmt ::= with UPDATE orconf ID_DB|ID_TAB */ yytestcase(yyruleno==246);
+{ yy_destructor(yypParser,249,&yymsp[-3].minor);
}
break;
- case 234: /* where_opt ::= WHERE */
+ case 238: /* where_opt ::= WHERE */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
- yygotominor.yy512 = new SqliteExpr();
+ yygotominor.yy186 = new SqliteExpr();
}
break;
- case 236: /* update_stmt ::= with UPDATE orconf fullname indexed_opt SET setlist from where_opt */
+ case 240: /* returning ::= RETURNING selcollist */
+{yygotominor.yy27 = yymsp[0].minor.yy27;}
+ break;
+ case 242: /* update_stmt ::= with UPDATE orconf fullname indexed_opt SET setlist from where_opt returning */
{
- yygotominor.yy363 = new SqliteUpdate(
- *(yymsp[-6].minor.yy418),
- yymsp[-5].minor.yy440->name1,
- yymsp[-5].minor.yy440->name2,
- yymsp[-4].minor.yy592 ? yymsp[-4].minor.yy592->notIndexedKw : false,
- yymsp[-4].minor.yy592 ? yymsp[-4].minor.yy592->indexedBy : QString(),
- *(yymsp[-2].minor.yy201),
- yymsp[-1].minor.yy31,
- yymsp[0].minor.yy512,
- yymsp[-8].minor.yy1
+ yygotominor.yy41 = new SqliteUpdate(
+ *(yymsp[-7].minor.yy136),
+ yymsp[-6].minor.yy396->name1,
+ yymsp[-6].minor.yy396->name2,
+ yymsp[-5].minor.yy300 ? yymsp[-5].minor.yy300->notIndexedKw : false,
+ yymsp[-5].minor.yy300 ? yymsp[-5].minor.yy300->indexedBy : QString(),
+ *(yymsp[-3].minor.yy621),
+ yymsp[-2].minor.yy553,
+ yymsp[-1].minor.yy186,
+ yymsp[-9].minor.yy161,
+ *(yymsp[0].minor.yy27)
);
- delete yymsp[-6].minor.yy418;
- delete yymsp[-5].minor.yy440;
- delete yymsp[-2].minor.yy201;
- if (yymsp[-4].minor.yy592)
- delete yymsp[-4].minor.yy592;
+ delete yymsp[-7].minor.yy136;
+ delete yymsp[-6].minor.yy396;
+ delete yymsp[-3].minor.yy621;
+ delete yymsp[0].minor.yy27;
+ if (yymsp[-5].minor.yy300)
+ delete yymsp[-5].minor.yy300;
// since it's used in trigger:
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 237: /* update_stmt ::= with UPDATE orconf */
+ case 243: /* update_stmt ::= with UPDATE orconf */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
SqliteUpdate* q = new SqliteUpdate();
- q->with = yymsp[-2].minor.yy1;
- yygotominor.yy363 = q;
- objectForTokens = yygotominor.yy363;
- delete yymsp[0].minor.yy418;
+ q->with = yymsp[-2].minor.yy161;
+ yygotominor.yy41 = q;
+ objectForTokens = yygotominor.yy41;
+ delete yymsp[0].minor.yy136;
}
break;
- case 238: /* update_stmt ::= with UPDATE orconf nm DOT */
+ case 244: /* update_stmt ::= with UPDATE orconf nm DOT */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
SqliteUpdate* q = new SqliteUpdate();
- q->with = yymsp[-4].minor.yy1;
+ q->with = yymsp[-4].minor.yy161;
q->database = *(yymsp[-1].minor.yy319);
- yygotominor.yy363 = q;
- objectForTokens = yygotominor.yy363;
- delete yymsp[-2].minor.yy418;
+ yygotominor.yy41 = q;
+ objectForTokens = yygotominor.yy41;
+ delete yymsp[-2].minor.yy136;
delete yymsp[-1].minor.yy319;
}
break;
- case 241: /* setlist ::= setlist COMMA nm EQ expr */
+ case 247: /* setlist ::= setlist COMMA nm EQ expr */
{
- yymsp[-4].minor.yy201->append(ParserSetValue(*(yymsp[-2].minor.yy319), yymsp[0].minor.yy512));
- yygotominor.yy201 = yymsp[-4].minor.yy201;
+ yymsp[-4].minor.yy621->append(ParserSetValue(*(yymsp[-2].minor.yy319), yymsp[0].minor.yy186));
+ yygotominor.yy621 = yymsp[-4].minor.yy621;
delete yymsp[-2].minor.yy319;
}
break;
- case 242: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
+ case 248: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
{
- yymsp[-6].minor.yy201->append(ParserSetValue(*(yymsp[-3].minor.yy575), yymsp[0].minor.yy512));
- yygotominor.yy201 = yymsp[-6].minor.yy201;
- delete yymsp[-3].minor.yy575;
+ yymsp[-6].minor.yy621->append(ParserSetValue(*(yymsp[-3].minor.yy173), yymsp[0].minor.yy186));
+ yygotominor.yy621 = yymsp[-6].minor.yy621;
+ delete yymsp[-3].minor.yy173;
}
break;
- case 243: /* setlist ::= nm EQ expr */
+ case 249: /* setlist ::= nm EQ expr */
{
- yygotominor.yy201 = new ParserSetValueList();
- yygotominor.yy201->append(ParserSetValue(*(yymsp[-2].minor.yy319), yymsp[0].minor.yy512));
+ yygotominor.yy621 = new ParserSetValueList();
+ yygotominor.yy621->append(ParserSetValue(*(yymsp[-2].minor.yy319), yymsp[0].minor.yy186));
delete yymsp[-2].minor.yy319;
}
break;
- case 244: /* setlist ::= LP idlist RP EQ expr */
+ case 250: /* setlist ::= LP idlist RP EQ expr */
{
- yygotominor.yy201 = new ParserSetValueList();
- yygotominor.yy201->append(ParserSetValue(*(yymsp[-3].minor.yy575), yymsp[0].minor.yy512));
- delete yymsp[-3].minor.yy575;
+ yygotominor.yy621 = new ParserSetValueList();
+ yygotominor.yy621->append(ParserSetValue(*(yymsp[-3].minor.yy173), yymsp[0].minor.yy186));
+ delete yymsp[-3].minor.yy173;
}
break;
- case 245: /* setlist ::= */
+ case 251: /* setlist ::= */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
- yygotominor.yy201 = new ParserSetValueList();
+ yygotominor.yy621 = new ParserSetValueList();
}
break;
- case 246: /* setlist ::= setlist COMMA */
+ case 252: /* setlist ::= setlist COMMA */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
- yygotominor.yy201 = yymsp[-1].minor.yy201;
+ yygotominor.yy621 = yymsp[-1].minor.yy621;
}
break;
- case 247: /* setlist ::= setlist COMMA ID_COL */
- case 248: /* setlist ::= ID_COL */ yytestcase(yyruleno==248);
-{ yy_destructor(yypParser,274,&yymsp[-2].minor);
+ case 253: /* setlist ::= setlist COMMA ID_COL */
+ case 254: /* setlist ::= ID_COL */ yytestcase(yyruleno==254);
+{ yy_destructor(yypParser,280,&yymsp[-2].minor);
}
break;
- case 249: /* idlist_opt ::= */
-{yygotominor.yy575 = new QStringList();}
+ case 255: /* idlist_opt ::= */
+{yygotominor.yy173 = new QStringList();}
break;
- case 250: /* idlist_opt ::= LP idlist RP */
-{yygotominor.yy575 = yymsp[-1].minor.yy575;}
+ case 256: /* idlist_opt ::= LP idlist RP */
+{yygotominor.yy173 = yymsp[-1].minor.yy173;}
break;
- case 251: /* idlist ::= idlist COMMA nm */
+ case 257: /* idlist ::= idlist COMMA nm */
{
- yygotominor.yy575 = yymsp[-2].minor.yy575;
- *(yygotominor.yy575) << *(yymsp[0].minor.yy319);
+ yygotominor.yy173 = yymsp[-2].minor.yy173;
+ *(yygotominor.yy173) << *(yymsp[0].minor.yy319);
delete yymsp[0].minor.yy319;
}
break;
- case 252: /* idlist ::= nm */
+ case 258: /* idlist ::= nm */
{
- yygotominor.yy575 = new QStringList();
- *(yygotominor.yy575) << *(yymsp[0].minor.yy319);
+ yygotominor.yy173 = new QStringList();
+ *(yygotominor.yy173) << *(yymsp[0].minor.yy319);
delete yymsp[0].minor.yy319;
}
break;
- case 253: /* idlist ::= */
+ case 259: /* idlist ::= */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
- yygotominor.yy575 = new QStringList();
+ yygotominor.yy173 = new QStringList();
}
break;
- case 254: /* idlist ::= idlist COMMA ID_COL */
- case 255: /* idlist ::= ID_COL */ yytestcase(yyruleno==255);
-{ yy_destructor(yypParser,269,&yymsp[-2].minor);
+ case 260: /* idlist ::= idlist COMMA ID_COL */
+ case 261: /* idlist ::= ID_COL */ yytestcase(yyruleno==261);
+{ yy_destructor(yypParser,274,&yymsp[-2].minor);
}
break;
- case 257: /* insert_stmt ::= with insert_cmd INTO fullname idlist_opt select upsert */
-{
- yygotominor.yy363 = new SqliteInsert(
- yymsp[-5].minor.yy504->replace,
- yymsp[-5].minor.yy504->orConflict,
- yymsp[-3].minor.yy440->name1,
- yymsp[-3].minor.yy440->name2,
- *(yymsp[-2].minor.yy575),
- yymsp[-1].minor.yy313,
- yymsp[-6].minor.yy1,
- yymsp[0].minor.yy400
+ case 263: /* insert_stmt ::= with insert_cmd INTO fullname idlist_opt select upsert returning */
+{
+ yygotominor.yy41 = new SqliteInsert(
+ yymsp[-6].minor.yy308->replace,
+ yymsp[-6].minor.yy308->orConflict,
+ yymsp[-4].minor.yy396->name1,
+ yymsp[-4].minor.yy396->name2,
+ *(yymsp[-3].minor.yy173),
+ yymsp[-2].minor.yy297,
+ yymsp[-7].minor.yy161,
+ yymsp[-1].minor.yy332,
+ *(yymsp[0].minor.yy27)
);
- delete yymsp[-3].minor.yy440;
- delete yymsp[-5].minor.yy504;
- delete yymsp[-2].minor.yy575;
+ delete yymsp[-4].minor.yy396;
+ delete yymsp[-6].minor.yy308;
+ delete yymsp[-3].minor.yy173;
+ delete yymsp[0].minor.yy27;
// since it's used in trigger:
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 258: /* insert_stmt ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */
+ case 264: /* insert_stmt ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES returning */
{
- yygotominor.yy363 = new SqliteInsert(
- yymsp[-5].minor.yy504->replace,
- yymsp[-5].minor.yy504->orConflict,
- yymsp[-3].minor.yy440->name1,
- yymsp[-3].minor.yy440->name2,
- *(yymsp[-2].minor.yy575),
- yymsp[-6].minor.yy1
+ yygotominor.yy41 = new SqliteInsert(
+ yymsp[-6].minor.yy308->replace,
+ yymsp[-6].minor.yy308->orConflict,
+ yymsp[-4].minor.yy396->name1,
+ yymsp[-4].minor.yy396->name2,
+ *(yymsp[-3].minor.yy173),
+ yymsp[-7].minor.yy161,
+ *(yymsp[0].minor.yy27)
);
- delete yymsp[-3].minor.yy440;
- delete yymsp[-5].minor.yy504;
- delete yymsp[-2].minor.yy575;
+ delete yymsp[-4].minor.yy396;
+ delete yymsp[-6].minor.yy308;
+ delete yymsp[-3].minor.yy173;
+ delete yymsp[0].minor.yy27;
// since it's used in trigger:
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 259: /* insert_stmt ::= with insert_cmd INTO */
+ case 265: /* insert_stmt ::= with insert_cmd INTO */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
SqliteInsert* q = new SqliteInsert();
- q->replaceKw = yymsp[-1].minor.yy504->replace;
- q->onConflict = yymsp[-1].minor.yy504->orConflict;
- q->with = yymsp[-2].minor.yy1;
- yygotominor.yy363 = q;
- objectForTokens = yygotominor.yy363;
- delete yymsp[-1].minor.yy504;
+ q->replaceKw = yymsp[-1].minor.yy308->replace;
+ q->onConflict = yymsp[-1].minor.yy308->orConflict;
+ q->with = yymsp[-2].minor.yy161;
+ yygotominor.yy41 = q;
+ objectForTokens = yygotominor.yy41;
+ delete yymsp[-1].minor.yy308;
}
break;
- case 260: /* insert_stmt ::= with insert_cmd INTO nm DOT */
+ case 266: /* insert_stmt ::= with insert_cmd INTO nm DOT */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
SqliteInsert* q = new SqliteInsert();
- q->replaceKw = yymsp[-3].minor.yy504->replace;
- q->onConflict = yymsp[-3].minor.yy504->orConflict;
- q->with = yymsp[-4].minor.yy1;
+ q->replaceKw = yymsp[-3].minor.yy308->replace;
+ q->onConflict = yymsp[-3].minor.yy308->orConflict;
+ q->with = yymsp[-4].minor.yy161;
q->database = *(yymsp[-1].minor.yy319);
- yygotominor.yy363 = q;
- objectForTokens = yygotominor.yy363;
- delete yymsp[-3].minor.yy504;
+ yygotominor.yy41 = q;
+ objectForTokens = yygotominor.yy41;
+ delete yymsp[-3].minor.yy308;
delete yymsp[-1].minor.yy319;
}
break;
- case 261: /* insert_stmt ::= with insert_cmd INTO ID_DB|ID_TAB */
-{ yy_destructor(yypParser,244,&yymsp[-3].minor);
- yy_destructor(yypParser,277,&yymsp[-2].minor);
+ case 267: /* insert_stmt ::= with insert_cmd INTO ID_DB|ID_TAB */
+{ yy_destructor(yypParser,249,&yymsp[-3].minor);
+ yy_destructor(yypParser,283,&yymsp[-2].minor);
}
break;
- case 262: /* insert_stmt ::= with insert_cmd INTO nm DOT ID_TAB */
-{ yy_destructor(yypParser,244,&yymsp[-5].minor);
- yy_destructor(yypParser,277,&yymsp[-4].minor);
- yy_destructor(yypParser,199,&yymsp[-2].minor);
+ case 268: /* insert_stmt ::= with insert_cmd INTO nm DOT ID_TAB */
+{ yy_destructor(yypParser,249,&yymsp[-5].minor);
+ yy_destructor(yypParser,283,&yymsp[-4].minor);
+ yy_destructor(yypParser,203,&yymsp[-2].minor);
}
break;
- case 263: /* insert_cmd ::= INSERT orconf */
+ case 269: /* insert_cmd ::= INSERT orconf */
{
- yygotominor.yy504 = new ParserStubInsertOrReplace(false, *(yymsp[0].minor.yy418));
- delete yymsp[0].minor.yy418;
+ yygotominor.yy308 = new ParserStubInsertOrReplace(false, *(yymsp[0].minor.yy136));
+ delete yymsp[0].minor.yy136;
}
break;
- case 264: /* insert_cmd ::= REPLACE */
-{yygotominor.yy504 = new ParserStubInsertOrReplace(true);}
+ case 270: /* insert_cmd ::= REPLACE */
+{yygotominor.yy308 = new ParserStubInsertOrReplace(true);}
break;
- case 265: /* upsert ::= */
+ case 271: /* upsert ::= */
{
- yygotominor.yy400 = nullptr;
+ yygotominor.yy332 = nullptr;
}
break;
- case 266: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
+ case 272: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
{
- yygotominor.yy400 = new SqliteUpsert(*(yymsp[-7].minor.yy403), yymsp[-5].minor.yy512, *(yymsp[-1].minor.yy201), yymsp[0].minor.yy512);
- delete yymsp[-7].minor.yy403;
- delete yymsp[-1].minor.yy201;
- objectForTokens = yygotominor.yy400;
+ yygotominor.yy332 = new SqliteUpsert(*(yymsp[-7].minor.yy226), yymsp[-5].minor.yy186, *(yymsp[-1].minor.yy621), yymsp[0].minor.yy186);
+ delete yymsp[-7].minor.yy226;
+ delete yymsp[-1].minor.yy621;
+ objectForTokens = yygotominor.yy332;
}
break;
- case 267: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
+ case 273: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
{
- yygotominor.yy400 = new SqliteUpsert(*(yymsp[-4].minor.yy403), yymsp[-2].minor.yy512);
- delete yymsp[-4].minor.yy403;
- objectForTokens = yygotominor.yy400;
+ yygotominor.yy332 = new SqliteUpsert(*(yymsp[-4].minor.yy226), yymsp[-2].minor.yy186);
+ delete yymsp[-4].minor.yy226;
+ objectForTokens = yygotominor.yy332;
}
break;
- case 268: /* upsert ::= ON CONFLICT DO NOTHING */
+ case 274: /* upsert ::= ON CONFLICT DO NOTHING */
{
- yygotominor.yy400 = new SqliteUpsert();
- objectForTokens = yygotominor.yy400;
+ yygotominor.yy332 = new SqliteUpsert();
+ objectForTokens = yygotominor.yy332;
}
break;
- case 269: /* exprx ::= expr not_opt IN ID_DB */
-{ yy_destructor(yypParser,222,&yymsp[-3].minor);
+ case 275: /* exprx ::= expr not_opt IN ID_DB */
+{ yy_destructor(yypParser,227,&yymsp[-3].minor);
}
break;
- case 270: /* exprx ::= expr not_opt IN nm DOT ID_TAB */
- case 271: /* exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN */ yytestcase(yyruleno==271);
-{ yy_destructor(yypParser,222,&yymsp[-5].minor);
- yy_destructor(yypParser,199,&yymsp[-2].minor);
+ case 276: /* exprx ::= expr not_opt IN nm DOT ID_TAB */
+ case 277: /* exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN */ yytestcase(yyruleno==277);
+{ yy_destructor(yypParser,227,&yymsp[-5].minor);
+ yy_destructor(yypParser,203,&yymsp[-2].minor);
}
break;
- case 272: /* exprx ::= tnm DOT ID_TAB|ID_COL */
-{ yy_destructor(yypParser,230,&yymsp[-2].minor);
+ case 278: /* exprx ::= tnm DOT ID_TAB|ID_COL */
+{ yy_destructor(yypParser,235,&yymsp[-2].minor);
}
break;
- case 273: /* exprx ::= tnm DOT nm DOT ID_COL */
-{ yy_destructor(yypParser,230,&yymsp[-4].minor);
- yy_destructor(yypParser,199,&yymsp[-2].minor);
+ case 279: /* exprx ::= tnm DOT nm DOT ID_COL */
+{ yy_destructor(yypParser,235,&yymsp[-4].minor);
+ yy_destructor(yypParser,203,&yymsp[-2].minor);
}
break;
- case 274: /* exprx ::= expr COLLATE ID_COLLATE */
- case 275: /* exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP */ yytestcase(yyruleno==275);
-{ yy_destructor(yypParser,222,&yymsp[-2].minor);
+ case 280: /* exprx ::= expr COLLATE ID_COLLATE */
+ case 281: /* exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP */ yytestcase(yyruleno==281);
+{ yy_destructor(yypParser,227,&yymsp[-2].minor);
}
break;
- case 276: /* exprx ::= CTIME_KW */
+ case 282: /* exprx ::= CTIME_KW */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initCTime(yymsp[0].minor.yy0->value);
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initCTime(yymsp[0].minor.yy0->value);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 277: /* exprx ::= LP nexprlist RP */
+ case 283: /* exprx ::= LP nexprlist RP */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initRowValue(*(yymsp[-1].minor.yy71));
- delete yymsp[-1].minor.yy71;
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initRowValue(*(yymsp[-1].minor.yy615));
+ delete yymsp[-1].minor.yy615;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 278: /* exprx ::= tnm */
+ case 284: /* exprx ::= tnm */
{
- yygotominor.yy512 = new SqliteExpr();
- if (yymsp[0].minor.yy590->isLiteral())
- yygotominor.yy512->initLiteral(yymsp[0].minor.yy590->toLiteral());
+ yygotominor.yy186 = new SqliteExpr();
+ if (yymsp[0].minor.yy380->isLiteral())
+ yygotominor.yy186->initLiteral(yymsp[0].minor.yy380->toLiteral());
else
- yygotominor.yy512->initId(yymsp[0].minor.yy590->toName());
+ yygotominor.yy186->initId(yymsp[0].minor.yy380->toName());
//parserContext->errorBeforeLastToken("Syntax error <expected literal value>");
- delete yymsp[0].minor.yy590;
- objectForTokens = yygotominor.yy512;
+ delete yymsp[0].minor.yy380;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 279: /* exprx ::= tnm DOT nm */
+ case 285: /* exprx ::= tnm DOT nm */
{
- yygotominor.yy512 = new SqliteExpr();
- if (yymsp[-2].minor.yy590->isName())
- yygotominor.yy512->initId(yymsp[-2].minor.yy590->toName(), *(yymsp[0].minor.yy319));
+ yygotominor.yy186 = new SqliteExpr();
+ if (yymsp[-2].minor.yy380->isName())
+ yygotominor.yy186->initId(yymsp[-2].minor.yy380->toName(), *(yymsp[0].minor.yy319));
else
parserContext->errorAtToken("Syntax error <expected name>", -3);
- delete yymsp[-2].minor.yy590;
+ delete yymsp[-2].minor.yy380;
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy512;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 280: /* exprx ::= tnm DOT nm DOT nm */
+ case 286: /* exprx ::= tnm DOT */
{
- yygotominor.yy512 = new SqliteExpr();
- if (yymsp[-4].minor.yy590->isName())
- yygotominor.yy512->initId(yymsp[-4].minor.yy590->toName(), *(yymsp[-2].minor.yy319), *(yymsp[0].minor.yy319));
+ yygotominor.yy186 = new SqliteExpr();
+ objectForTokens = yygotominor.yy186;
+ if (yymsp[-1].minor.yy380->isName())
+ {
+ yygotominor.yy186->initId(yymsp[-1].minor.yy380->toName(), QString());
+ parserContext->minorErrorAfterLastToken("Syntax error <expr>");
+ }
+ else
+ parserContext->errorAtToken("Syntax error <expected name>", -3);
+
+ delete yymsp[-1].minor.yy380;
+ }
+ break;
+ case 287: /* exprx ::= tnm DOT nm DOT nm */
+{
+ yygotominor.yy186 = new SqliteExpr();
+ if (yymsp[-4].minor.yy380->isName())
+ yygotominor.yy186->initId(yymsp[-4].minor.yy380->toName(), *(yymsp[-2].minor.yy319), *(yymsp[0].minor.yy319));
else
parserContext->errorAtToken("Syntax error <expected name>", -5);
- delete yymsp[-4].minor.yy590;
+ delete yymsp[-4].minor.yy380;
delete yymsp[-2].minor.yy319;
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy512;
+ objectForTokens = yygotominor.yy186;
+ }
+ break;
+ case 288: /* exprx ::= tnm DOT nm DOT */
+{
+ yygotominor.yy186 = new SqliteExpr();
+ objectForTokens = yygotominor.yy186;
+ if (yymsp[-3].minor.yy380->isName())
+ {
+ yygotominor.yy186->initId(yymsp[-3].minor.yy380->toName(), *(yymsp[-1].minor.yy319), QString());
+ parserContext->minorErrorAfterLastToken("Syntax error <expr>");
+ }
+ else
+ parserContext->errorAtToken("Syntax error <expected name>", -5);
+
+ delete yymsp[-3].minor.yy380;
+ delete yymsp[-1].minor.yy319;
}
break;
- case 281: /* exprx ::= VARIABLE */
+ case 289: /* exprx ::= VARIABLE */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initBindParam(yymsp[0].minor.yy0->value);
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initBindParam(yymsp[0].minor.yy0->value);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 282: /* exprx ::= expr COLLATE ids */
+ case 290: /* exprx ::= expr COLLATE ids */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initCollate(yymsp[-2].minor.yy512, *(yymsp[0].minor.yy319));
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initCollate(yymsp[-2].minor.yy186, *(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy512;
+ objectForTokens = yygotominor.yy186;
+ }
+ break;
+ case 291: /* exprx ::= CAST LP expr AS typetoken RP */
+{
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initCast(yymsp[-3].minor.yy186, yymsp[-1].minor.yy267);
+ objectForTokens = yygotominor.yy186;
+ }
+ break;
+ case 292: /* exprx ::= ID LP distinct exprlist RP */
+{
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initFunction(stripObjName(yymsp[-4].minor.yy0->value), *(yymsp[-2].minor.yy130), *(yymsp[-1].minor.yy615));
+ delete yymsp[-2].minor.yy130;
+ delete yymsp[-1].minor.yy615;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 283: /* exprx ::= CAST LP expr AS typetoken RP */
+ case 293: /* exprx ::= ID LP STAR RP */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initCast(yymsp[-3].minor.yy512, yymsp[-1].minor.yy57);
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initFunction(stripObjName(yymsp[-3].minor.yy0->value), true);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 284: /* exprx ::= ID LP distinct exprlist RP */
+ case 294: /* exprx ::= expr AND expr */
+ case 295: /* exprx ::= expr OR expr */ yytestcase(yyruleno==295);
+ case 296: /* exprx ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==296);
+ case 297: /* exprx ::= expr EQ|NE expr */ yytestcase(yyruleno==297);
+ case 298: /* exprx ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==298);
+ case 299: /* exprx ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==299);
+ case 300: /* exprx ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==300);
+ case 301: /* exprx ::= expr CONCAT expr */ yytestcase(yyruleno==301);
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initFunction(yymsp[-4].minor.yy0->value, *(yymsp[-2].minor.yy386), *(yymsp[-1].minor.yy71));
- delete yymsp[-2].minor.yy386;
- delete yymsp[-1].minor.yy71;
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initBinOp(yymsp[-2].minor.yy186, yymsp[-1].minor.yy0->value, yymsp[0].minor.yy186);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 285: /* exprx ::= ID LP STAR RP */
+ case 302: /* exprx ::= expr not_opt likeop expr */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initFunction(yymsp[-3].minor.yy0->value, true);
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initLike(yymsp[-3].minor.yy186, *(yymsp[-2].minor.yy225), *(yymsp[-1].minor.yy274), yymsp[0].minor.yy186);
+ delete yymsp[-2].minor.yy225;
+ delete yymsp[-1].minor.yy274;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 286: /* exprx ::= expr AND expr */
- case 287: /* exprx ::= expr OR expr */ yytestcase(yyruleno==287);
- case 288: /* exprx ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==288);
- case 289: /* exprx ::= expr EQ|NE expr */ yytestcase(yyruleno==289);
- case 290: /* exprx ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==290);
- case 291: /* exprx ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==291);
- case 292: /* exprx ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==292);
- case 293: /* exprx ::= expr CONCAT expr */ yytestcase(yyruleno==293);
+ case 303: /* exprx ::= expr not_opt likeop expr ESCAPE expr */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initBinOp(yymsp[-2].minor.yy512, yymsp[-1].minor.yy0->value, yymsp[0].minor.yy512);
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initLike(yymsp[-5].minor.yy186, *(yymsp[-4].minor.yy225), *(yymsp[-3].minor.yy274), yymsp[-2].minor.yy186, yymsp[0].minor.yy186);
+ delete yymsp[-4].minor.yy225;
+ delete yymsp[-3].minor.yy274;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 294: /* exprx ::= expr not_opt likeop expr */
+ case 304: /* exprx ::= expr ISNULL|NOTNULL */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initLike(yymsp[-3].minor.yy512, *(yymsp[-2].minor.yy611), *(yymsp[-1].minor.yy40), yymsp[0].minor.yy512);
- delete yymsp[-2].minor.yy611;
- delete yymsp[-1].minor.yy40;
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initNull(yymsp[-1].minor.yy186, yymsp[0].minor.yy0->value);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 295: /* exprx ::= expr not_opt likeop expr ESCAPE expr */
+ case 305: /* exprx ::= expr NOT NULL */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initLike(yymsp[-5].minor.yy512, *(yymsp[-4].minor.yy611), *(yymsp[-3].minor.yy40), yymsp[-2].minor.yy512, yymsp[0].minor.yy512);
- delete yymsp[-4].minor.yy611;
- delete yymsp[-3].minor.yy40;
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initNull(yymsp[-2].minor.yy186, "NOT NULL");
+ objectForTokens = yygotominor.yy186;
}
break;
- case 296: /* exprx ::= expr ISNULL|NOTNULL */
+ case 306: /* exprx ::= expr IS not_opt expr */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initNull(yymsp[-1].minor.yy512, yymsp[0].minor.yy0->value);
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initIs(yymsp[-3].minor.yy186, *(yymsp[-1].minor.yy225), yymsp[0].minor.yy186);
+ delete yymsp[-1].minor.yy225;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 297: /* exprx ::= expr NOT NULL */
+ case 307: /* exprx ::= expr IS NOT DISTINCT FROM expr */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initNull(yymsp[-2].minor.yy512, "NOT NULL");
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initDistinct(yymsp[-5].minor.yy186, true, yymsp[0].minor.yy186);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 298: /* exprx ::= expr IS not_opt expr */
+ case 308: /* exprx ::= expr IS DISTINCT FROM expr */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initIs(yymsp[-3].minor.yy512, *(yymsp[-1].minor.yy611), yymsp[0].minor.yy512);
- delete yymsp[-1].minor.yy611;
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initDistinct(yymsp[-4].minor.yy186, false, yymsp[0].minor.yy186);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 299: /* exprx ::= NOT expr */
+ case 309: /* exprx ::= NOT expr */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initUnaryOp(yymsp[0].minor.yy512, yymsp[-1].minor.yy0->value);
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initUnaryOp(yymsp[0].minor.yy186, yymsp[-1].minor.yy0->value);
}
break;
- case 300: /* exprx ::= BITNOT expr */
- case 302: /* exprx ::= PLUS expr */ yytestcase(yyruleno==302);
+ case 310: /* exprx ::= BITNOT expr */
+ case 312: /* exprx ::= PLUS expr */ yytestcase(yyruleno==312);
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initUnaryOp(yymsp[0].minor.yy512, yymsp[-1].minor.yy0->value);
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initUnaryOp(yymsp[0].minor.yy186, yymsp[-1].minor.yy0->value);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 301: /* exprx ::= MINUS expr */
+ case 311: /* exprx ::= MINUS expr */
{
- yygotominor.yy512 = new SqliteExpr();
- if (yymsp[0].minor.yy512->mode == SqliteExpr::Mode::LITERAL_VALUE &&
+ yygotominor.yy186 = new SqliteExpr();
+ if (yymsp[0].minor.yy186->mode == SqliteExpr::Mode::LITERAL_VALUE &&
parserContext->isCandidateForMaxNegativeNumber() &&
- yymsp[0].minor.yy512->literalValue == static_cast<qint64>(0L))
+ yymsp[0].minor.yy186->literalValue == static_cast<qint64>(0L))
{
- yygotominor.yy512->initLiteral(std::numeric_limits<qint64>::min());
- delete yymsp[0].minor.yy512;
+ yygotominor.yy186->initLiteral(std::numeric_limits<qint64>::min());
+ delete yymsp[0].minor.yy186;
}
else
{
- yygotominor.yy512->initUnaryOp(yymsp[0].minor.yy512, yymsp[-1].minor.yy0->value);
+ yygotominor.yy186->initUnaryOp(yymsp[0].minor.yy186, yymsp[-1].minor.yy0->value);
}
- objectForTokens = yygotominor.yy512;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 303: /* exprx ::= expr not_opt BETWEEN expr AND expr */
+ case 313: /* exprx ::= expr PTR expr */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initBetween(yymsp[-5].minor.yy512, *(yymsp[-4].minor.yy611), yymsp[-2].minor.yy512, yymsp[0].minor.yy512);
- delete yymsp[-4].minor.yy611;
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initPtrOp(yymsp[-2].minor.yy186, yymsp[-1].minor.yy0->value, yymsp[0].minor.yy186);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 304: /* exprx ::= expr not_opt IN LP exprlist RP */
+ case 314: /* exprx ::= expr not_opt BETWEEN expr AND expr */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initIn(yymsp[-5].minor.yy512, *(yymsp[-4].minor.yy611), *(yymsp[-1].minor.yy71));
- delete yymsp[-4].minor.yy611;
- delete yymsp[-1].minor.yy71;
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initBetween(yymsp[-5].minor.yy186, *(yymsp[-4].minor.yy225), yymsp[-2].minor.yy186, yymsp[0].minor.yy186);
+ delete yymsp[-4].minor.yy225;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 305: /* exprx ::= LP select RP */
+ case 315: /* exprx ::= expr not_opt IN LP exprlist RP */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initSubSelect(yymsp[-1].minor.yy313);
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initIn(yymsp[-5].minor.yy186, *(yymsp[-4].minor.yy225), *(yymsp[-1].minor.yy615));
+ delete yymsp[-4].minor.yy225;
+ delete yymsp[-1].minor.yy615;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 306: /* exprx ::= expr not_opt IN LP select RP */
+ case 316: /* exprx ::= LP select RP */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initIn(yymsp[-5].minor.yy512, *(yymsp[-4].minor.yy611), yymsp[-1].minor.yy313);
- delete yymsp[-4].minor.yy611;
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initSubSelect(yymsp[-1].minor.yy297);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 307: /* exprx ::= expr not_opt IN nm dbnm */
+ case 317: /* exprx ::= expr not_opt IN LP select RP */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initIn(yymsp[-4].minor.yy512, *(yymsp[-3].minor.yy611), *(yymsp[-1].minor.yy319), *(yymsp[0].minor.yy319));
- delete yymsp[-3].minor.yy611;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initIn(yymsp[-5].minor.yy186, *(yymsp[-4].minor.yy225), yymsp[-1].minor.yy297);
+ delete yymsp[-4].minor.yy225;
+ objectForTokens = yygotominor.yy186;
+ }
+ break;
+ case 318: /* exprx ::= expr not_opt IN nm dbnm */
+{
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initIn(yymsp[-4].minor.yy186, *(yymsp[-3].minor.yy225), *(yymsp[-1].minor.yy319), *(yymsp[0].minor.yy319));
+ delete yymsp[-3].minor.yy225;
delete yymsp[-1].minor.yy319;
- objectForTokens = yygotominor.yy512;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 308: /* exprx ::= EXISTS LP select RP */
+ case 319: /* exprx ::= EXISTS LP select RP */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initExists(yymsp[-1].minor.yy313);
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initExists(yymsp[-1].minor.yy297);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 309: /* exprx ::= CASE case_operand case_exprlist case_else END */
+ case 320: /* exprx ::= CASE case_operand case_exprlist case_else END */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initCase(yymsp[-3].minor.yy512, *(yymsp[-2].minor.yy71), yymsp[-1].minor.yy512);
- delete yymsp[-2].minor.yy71;
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initCase(yymsp[-3].minor.yy186, *(yymsp[-2].minor.yy615), yymsp[-1].minor.yy186);
+ delete yymsp[-2].minor.yy615;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 310: /* exprx ::= RAISE LP IGNORE RP */
+ case 321: /* exprx ::= RAISE LP IGNORE RP */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initRaise(yymsp[-1].minor.yy0->value);
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initRaise(yymsp[-1].minor.yy0->value);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 311: /* exprx ::= RAISE LP raisetype COMMA nm RP */
+ case 322: /* exprx ::= RAISE LP raisetype COMMA nm RP */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initRaise(yymsp[-3].minor.yy0->value, *(yymsp[-1].minor.yy319));
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initRaise(yymsp[-3].minor.yy0->value, *(yymsp[-1].minor.yy319));
delete yymsp[-1].minor.yy319;
- objectForTokens = yygotominor.yy512;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 312: /* exprx ::= ID LP distinct exprlist RP filter_over */
+ case 323: /* exprx ::= ID LP distinct exprlist RP filter_over */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initWindowFunction(yymsp[-5].minor.yy0->value, *(yymsp[-3].minor.yy386), *(yymsp[-2].minor.yy71), yymsp[0].minor.yy247);
- delete yymsp[-3].minor.yy386;
- delete yymsp[-2].minor.yy71;
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initWindowFunction(stripObjName(yymsp[-5].minor.yy0->value), *(yymsp[-3].minor.yy130), *(yymsp[-2].minor.yy615), yymsp[0].minor.yy181);
+ delete yymsp[-3].minor.yy130;
+ delete yymsp[-2].minor.yy615;
+ objectForTokens = yygotominor.yy186;
}
break;
- case 313: /* exprx ::= ID LP STAR RP filter_over */
+ case 324: /* exprx ::= ID LP STAR RP filter_over */
{
- yygotominor.yy512 = new SqliteExpr();
- yygotominor.yy512->initWindowFunction(yymsp[-4].minor.yy0->value, yymsp[0].minor.yy247);
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ yygotominor.yy186->initWindowFunction(stripObjName(yymsp[-4].minor.yy0->value), yymsp[0].minor.yy181);
+ objectForTokens = yygotominor.yy186;
}
break;
- case 314: /* expr ::= */
+ case 325: /* expr ::= */
{
- yygotominor.yy512 = new SqliteExpr();
- objectForTokens = yygotominor.yy512;
+ yygotominor.yy186 = new SqliteExpr();
+ objectForTokens = yygotominor.yy186;
parserContext->minorErrorAfterLastToken("Syntax error <expr>");
}
break;
- case 318: /* likeop ::= LIKE_KW|MATCH */
-{yygotominor.yy40 = new SqliteExpr::LikeOp(SqliteExpr::likeOp(yymsp[0].minor.yy0->value));}
+ case 329: /* likeop ::= LIKE_KW|MATCH */
+{yygotominor.yy274 = new SqliteExpr::LikeOp(SqliteExpr::likeOp(yymsp[0].minor.yy0->value));}
break;
- case 319: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ case 330: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
{
- yymsp[-4].minor.yy71->append(yymsp[-2].minor.yy512);
- yymsp[-4].minor.yy71->append(yymsp[0].minor.yy512);
- yygotominor.yy71 = yymsp[-4].minor.yy71;
+ yymsp[-4].minor.yy615->append(yymsp[-2].minor.yy186);
+ yymsp[-4].minor.yy615->append(yymsp[0].minor.yy186);
+ yygotominor.yy615 = yymsp[-4].minor.yy615;
}
break;
- case 320: /* case_exprlist ::= WHEN expr THEN expr */
+ case 331: /* case_exprlist ::= WHEN expr THEN expr */
{
- yygotominor.yy71 = new ParserExprList();
- yygotominor.yy71->append(yymsp[-2].minor.yy512);
- yygotominor.yy71->append(yymsp[0].minor.yy512);
+ yygotominor.yy615 = new ParserExprList();
+ yygotominor.yy615->append(yymsp[-2].minor.yy186);
+ yygotominor.yy615->append(yymsp[0].minor.yy186);
}
break;
- case 327: /* nexprlist ::= nexprlist COMMA expr */
+ case 338: /* nexprlist ::= nexprlist COMMA expr */
{
- yymsp[-2].minor.yy71->append(yymsp[0].minor.yy512);
- yygotominor.yy71 = yymsp[-2].minor.yy71;
+ yymsp[-2].minor.yy615->append(yymsp[0].minor.yy186);
+ yygotominor.yy615 = yymsp[-2].minor.yy615;
DONT_INHERIT_TOKENS("nexprlist");
}
break;
- case 328: /* nexprlist ::= exprx */
+ case 339: /* nexprlist ::= exprx */
{
- yygotominor.yy71 = new ParserExprList();
- yygotominor.yy71->append(yymsp[0].minor.yy512);
+ yygotominor.yy615 = new ParserExprList();
+ yygotominor.yy615->append(yymsp[0].minor.yy186);
}
break;
- case 329: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
+ case 340: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
{
- yygotominor.yy363 = new SqliteCreateIndex(
- *(yymsp[-10].minor.yy611),
- *(yymsp[-8].minor.yy611),
+ yygotominor.yy41 = new SqliteCreateIndex(
+ *(yymsp[-10].minor.yy225),
+ *(yymsp[-8].minor.yy225),
*(yymsp[-7].minor.yy319),
*(yymsp[-6].minor.yy319),
*(yymsp[-4].minor.yy319),
- *(yymsp[-2].minor.yy403),
- yymsp[0].minor.yy512
+ *(yymsp[-2].minor.yy226),
+ yymsp[0].minor.yy186
);
- delete yymsp[-8].minor.yy611;
- delete yymsp[-10].minor.yy611;
+ delete yymsp[-8].minor.yy225;
+ delete yymsp[-10].minor.yy225;
delete yymsp[-7].minor.yy319;
delete yymsp[-6].minor.yy319;
delete yymsp[-4].minor.yy319;
- delete yymsp[-2].minor.yy403;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[-2].minor.yy226;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 330: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB */
-{ yy_destructor(yypParser,199,&yymsp[-3].minor);
+ case 341: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB */
+{ yy_destructor(yypParser,203,&yymsp[-3].minor);
}
break;
- case 335: /* idxlist_opt ::= */
-{yygotominor.yy223 = new ParserIndexedColumnList();}
+ case 346: /* idxlist_opt ::= */
+{yygotominor.yy627 = new ParserIndexedColumnList();}
break;
- case 336: /* idxlist_opt ::= LP idxlist RP */
-{yygotominor.yy223 = yymsp[-1].minor.yy223;}
+ case 347: /* idxlist_opt ::= LP idxlist RP */
+{yygotominor.yy627 = yymsp[-1].minor.yy627;}
break;
- case 337: /* idxlist ::= idxlist COMMA idxlist_single */
+ case 348: /* idxlist ::= idxlist COMMA idxlist_single */
{
- yymsp[-2].minor.yy223->append(yymsp[0].minor.yy268);
- yygotominor.yy223 = yymsp[-2].minor.yy223;
+ yymsp[-2].minor.yy627->append(yymsp[0].minor.yy110);
+ yygotominor.yy627 = yymsp[-2].minor.yy627;
DONT_INHERIT_TOKENS("idxlist");
}
break;
- case 338: /* idxlist ::= idxlist_single */
+ case 349: /* idxlist ::= idxlist_single */
{
- yygotominor.yy223 = new ParserIndexedColumnList();
- yygotominor.yy223->append(yymsp[0].minor.yy268);
+ yygotominor.yy627 = new ParserIndexedColumnList();
+ yygotominor.yy627->append(yymsp[0].minor.yy110);
}
break;
- case 339: /* idxlist_single ::= nm collate sortorder */
- case 340: /* idxlist_single ::= ID_COL */ yytestcase(yyruleno==340);
+ case 350: /* idxlist_single ::= nm collate sortorder */
+ case 351: /* idxlist_single ::= ID_COL */ yytestcase(yyruleno==351);
{
SqliteIndexedColumn* obj =
new SqliteIndexedColumn(
*(yymsp[-2].minor.yy319),
*(yymsp[-1].minor.yy319),
- *(yymsp[0].minor.yy549)
+ *(yymsp[0].minor.yy35)
);
- yygotominor.yy268 = obj;
- delete yymsp[0].minor.yy549;
+ yygotominor.yy110 = obj;
+ delete yymsp[0].minor.yy35;
delete yymsp[-2].minor.yy319;
delete yymsp[-1].minor.yy319;
- objectForTokens = yygotominor.yy268;
+ objectForTokens = yygotominor.yy110;
}
break;
- case 344: /* cmd ::= DROP INDEX ifexists fullname */
+ case 355: /* cmd ::= DROP INDEX ifexists fullname */
{
- yygotominor.yy363 = new SqliteDropIndex(*(yymsp[-1].minor.yy611), yymsp[0].minor.yy440->name1, yymsp[0].minor.yy440->name2);
- delete yymsp[-1].minor.yy611;
- delete yymsp[0].minor.yy440;
- objectForTokens = yygotominor.yy363;
+ yygotominor.yy41 = new SqliteDropIndex(*(yymsp[-1].minor.yy225), yymsp[0].minor.yy396->name1, yymsp[0].minor.yy396->name2);
+ delete yymsp[-1].minor.yy225;
+ delete yymsp[0].minor.yy396;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 347: /* cmd ::= VACUUM vinto */
+ case 358: /* cmd ::= VACUUM vinto */
{
- yygotominor.yy363 = new SqliteVacuum(yymsp[0].minor.yy512);
- objectForTokens = yygotominor.yy363;
+ yygotominor.yy41 = new SqliteVacuum(yymsp[0].minor.yy186);
+ objectForTokens = yygotominor.yy41;
}
break;
- case 348: /* cmd ::= VACUUM nm vinto */
+ case 359: /* cmd ::= VACUUM nm vinto */
{
- yygotominor.yy363 = new SqliteVacuum(*(yymsp[-1].minor.yy319), yymsp[0].minor.yy512);
+ yygotominor.yy41 = new SqliteVacuum(*(yymsp[-1].minor.yy319), yymsp[0].minor.yy186);
delete yymsp[-1].minor.yy319;
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 351: /* cmd ::= PRAGMA nm dbnm */
+ case 362: /* cmd ::= PRAGMA nm dbnm */
{
- yygotominor.yy363 = new SqlitePragma(*(yymsp[-1].minor.yy319), *(yymsp[0].minor.yy319));
+ yygotominor.yy41 = new SqlitePragma(*(yymsp[-1].minor.yy319), *(yymsp[0].minor.yy319));
delete yymsp[-1].minor.yy319;
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 352: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
- case 354: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ yytestcase(yyruleno==354);
+ case 363: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
+ case 365: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ yytestcase(yyruleno==365);
{
- yygotominor.yy363 = new SqlitePragma(*(yymsp[-3].minor.yy319), *(yymsp[-2].minor.yy319), *(yymsp[0].minor.yy229), true);
+ yygotominor.yy41 = new SqlitePragma(*(yymsp[-3].minor.yy319), *(yymsp[-2].minor.yy319), *(yymsp[0].minor.yy393), true);
delete yymsp[-3].minor.yy319;
delete yymsp[-2].minor.yy319;
- delete yymsp[0].minor.yy229;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[0].minor.yy393;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 353: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
- case 355: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ yytestcase(yyruleno==355);
+ case 364: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ case 366: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ yytestcase(yyruleno==366);
{
- yygotominor.yy363 = new SqlitePragma(*(yymsp[-4].minor.yy319), *(yymsp[-3].minor.yy319), *(yymsp[-1].minor.yy229), false);
+ yygotominor.yy41 = new SqlitePragma(*(yymsp[-4].minor.yy319), *(yymsp[-3].minor.yy319), *(yymsp[-1].minor.yy393), false);
delete yymsp[-4].minor.yy319;
delete yymsp[-3].minor.yy319;
- delete yymsp[-1].minor.yy229;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[-1].minor.yy393;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 359: /* nmnum ::= nm */
+ case 370: /* nmnum ::= nm */
{
- yygotominor.yy229 = new QVariant(*(yymsp[0].minor.yy319));
+ yygotominor.yy393 = new QVariant(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
}
break;
- case 360: /* nmnum ::= ON */
- case 361: /* nmnum ::= DELETE */ yytestcase(yyruleno==361);
- case 362: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==362);
-{yygotominor.yy229 = new QVariant(yymsp[0].minor.yy0->value);}
+ case 371: /* nmnum ::= ON */
+ case 372: /* nmnum ::= DELETE */ yytestcase(yyruleno==372);
+ case 373: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==373);
+{yygotominor.yy393 = new QVariant(yymsp[0].minor.yy0->value);}
break;
- case 365: /* minus_num ::= MINUS number */
+ case 376: /* minus_num ::= MINUS number */
{
- if (yymsp[0].minor.yy229->type() == QVariant::Double)
- *(yymsp[0].minor.yy229) = -(yymsp[0].minor.yy229->toDouble());
- else if (yymsp[0].minor.yy229->type() == QVariant::LongLong)
+ if (yymsp[0].minor.yy393->type() == QVariant::Double)
+ *(yymsp[0].minor.yy393) = -(yymsp[0].minor.yy393->toDouble());
+ else if (yymsp[0].minor.yy393->type() == QVariant::LongLong)
{
if (parserContext->isCandidateForMaxNegativeNumber())
- *(yymsp[0].minor.yy229) = std::numeric_limits<qint64>::min();
+ *(yymsp[0].minor.yy393) = std::numeric_limits<qint64>::min();
else
- *(yymsp[0].minor.yy229) = -(yymsp[0].minor.yy229->toLongLong());
+ *(yymsp[0].minor.yy393) = -(yymsp[0].minor.yy393->toLongLong());
}
else
Q_ASSERT_X(true, "producing minus number", "QVariant is neither of Double or LongLong.");
- yygotominor.yy229 = yymsp[0].minor.yy229;
+ yygotominor.yy393 = yymsp[0].minor.yy393;
}
break;
- case 368: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END */
+ case 379: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END */
{
- yygotominor.yy363 = new SqliteCreateTrigger(
- *(yymsp[-13].minor.yy386),
- *(yymsp[-11].minor.yy611),
+ yygotominor.yy41 = new SqliteCreateTrigger(
+ *(yymsp[-13].minor.yy130),
+ *(yymsp[-11].minor.yy225),
*(yymsp[-10].minor.yy319),
*(yymsp[-9].minor.yy319),
*(yymsp[-5].minor.yy319),
- *(yymsp[-8].minor.yy532),
- yymsp[-7].minor.yy151,
- *(yymsp[-4].minor.yy83),
- yymsp[-3].minor.yy512,
- *(yymsp[-1].minor.yy110),
+ *(yymsp[-8].minor.yy120),
+ yymsp[-7].minor.yy259,
+ *(yymsp[-4].minor.yy456),
+ yymsp[-3].minor.yy186,
+ *(yymsp[-1].minor.yy240),
3
);
- delete yymsp[-11].minor.yy611;
- delete yymsp[-13].minor.yy386;
- delete yymsp[-8].minor.yy532;
- delete yymsp[-4].minor.yy83;
+ delete yymsp[-11].minor.yy225;
+ delete yymsp[-13].minor.yy130;
+ delete yymsp[-8].minor.yy120;
+ delete yymsp[-4].minor.yy456;
delete yymsp[-10].minor.yy319;
delete yymsp[-5].minor.yy319;
delete yymsp[-9].minor.yy319;
- delete yymsp[-1].minor.yy110;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[-1].minor.yy240;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 369: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause */
+ case 380: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause */
{
QList<SqliteQuery *> CL;
- yygotominor.yy363 = new SqliteCreateTrigger(
- *(yymsp[-10].minor.yy386),
- *(yymsp[-8].minor.yy611),
+ yygotominor.yy41 = new SqliteCreateTrigger(
+ *(yymsp[-10].minor.yy130),
+ *(yymsp[-8].minor.yy225),
*(yymsp[-7].minor.yy319),
*(yymsp[-6].minor.yy319),
*(yymsp[-2].minor.yy319),
- *(yymsp[-5].minor.yy532),
- yymsp[-4].minor.yy151,
- *(yymsp[-1].minor.yy83),
- yymsp[0].minor.yy512,
+ *(yymsp[-5].minor.yy120),
+ yymsp[-4].minor.yy259,
+ *(yymsp[-1].minor.yy456),
+ yymsp[0].minor.yy186,
CL,
3
);
- delete yymsp[-8].minor.yy611;
- delete yymsp[-10].minor.yy386;
- delete yymsp[-5].minor.yy532;
- delete yymsp[-1].minor.yy83;
+ delete yymsp[-8].minor.yy225;
+ delete yymsp[-10].minor.yy130;
+ delete yymsp[-5].minor.yy120;
+ delete yymsp[-1].minor.yy456;
delete yymsp[-7].minor.yy319;
delete yymsp[-2].minor.yy319;
delete yymsp[-6].minor.yy319;
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 370: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list */
+ case 381: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list */
{
- yygotominor.yy363 = new SqliteCreateTrigger(
- *(yymsp[-12].minor.yy386),
- *(yymsp[-10].minor.yy611),
+ yygotominor.yy41 = new SqliteCreateTrigger(
+ *(yymsp[-12].minor.yy130),
+ *(yymsp[-10].minor.yy225),
*(yymsp[-9].minor.yy319),
*(yymsp[-8].minor.yy319),
*(yymsp[-4].minor.yy319),
- *(yymsp[-7].minor.yy532),
- yymsp[-6].minor.yy151,
- *(yymsp[-3].minor.yy83),
- yymsp[-2].minor.yy512,
- *(yymsp[0].minor.yy110),
+ *(yymsp[-7].minor.yy120),
+ yymsp[-6].minor.yy259,
+ *(yymsp[-3].minor.yy456),
+ yymsp[-2].minor.yy186,
+ *(yymsp[0].minor.yy240),
3
);
- delete yymsp[-10].minor.yy611;
- delete yymsp[-12].minor.yy386;
- delete yymsp[-7].minor.yy532;
- delete yymsp[-3].minor.yy83;
+ delete yymsp[-10].minor.yy225;
+ delete yymsp[-12].minor.yy130;
+ delete yymsp[-7].minor.yy120;
+ delete yymsp[-3].minor.yy456;
delete yymsp[-9].minor.yy319;
delete yymsp[-4].minor.yy319;
delete yymsp[-8].minor.yy319;
- delete yymsp[0].minor.yy110;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[0].minor.yy240;
+ objectForTokens = yygotominor.yy41;
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 371: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB */
-{ yy_destructor(yypParser,201,&yymsp[-8].minor);
- yy_destructor(yypParser,199,&yymsp[-5].minor);
- yy_destructor(yypParser,292,&yymsp[-3].minor);
- yy_destructor(yypParser,293,&yymsp[-2].minor);
+ case 382: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB */
+{ yy_destructor(yypParser,205,&yymsp[-8].minor);
+ yy_destructor(yypParser,203,&yymsp[-5].minor);
+ yy_destructor(yypParser,298,&yymsp[-3].minor);
+ yy_destructor(yypParser,299,&yymsp[-2].minor);
}
break;
- case 374: /* trigger_time ::= BEFORE */
-{yygotominor.yy532 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::BEFORE);}
+ case 385: /* trigger_time ::= BEFORE */
+{yygotominor.yy120 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::BEFORE);}
break;
- case 375: /* trigger_time ::= AFTER */
-{yygotominor.yy532 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::AFTER);}
+ case 386: /* trigger_time ::= AFTER */
+{yygotominor.yy120 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::AFTER);}
break;
- case 376: /* trigger_time ::= INSTEAD OF */
-{yygotominor.yy532 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::INSTEAD_OF);}
+ case 387: /* trigger_time ::= INSTEAD OF */
+{yygotominor.yy120 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::INSTEAD_OF);}
break;
- case 377: /* trigger_time ::= */
-{yygotominor.yy532 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::null);}
+ case 388: /* trigger_time ::= */
+{yygotominor.yy120 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::null);}
break;
- case 378: /* trigger_event ::= DELETE */
+ case 389: /* trigger_event ::= DELETE */
{
- yygotominor.yy151 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::DELETE);
- objectForTokens = yygotominor.yy151;
+ yygotominor.yy259 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::DELETE);
+ objectForTokens = yygotominor.yy259;
}
break;
- case 379: /* trigger_event ::= INSERT */
+ case 390: /* trigger_event ::= INSERT */
{
- yygotominor.yy151 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::INSERT);
- objectForTokens = yygotominor.yy151;
+ yygotominor.yy259 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::INSERT);
+ objectForTokens = yygotominor.yy259;
}
break;
- case 380: /* trigger_event ::= UPDATE */
+ case 391: /* trigger_event ::= UPDATE */
{
- yygotominor.yy151 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::UPDATE);
- objectForTokens = yygotominor.yy151;
+ yygotominor.yy259 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::UPDATE);
+ objectForTokens = yygotominor.yy259;
}
break;
- case 381: /* trigger_event ::= UPDATE OF idlist */
+ case 392: /* trigger_event ::= UPDATE OF idlist */
{
- yygotominor.yy151 = new SqliteCreateTrigger::Event(*(yymsp[0].minor.yy575));
- delete yymsp[0].minor.yy575;
- objectForTokens = yygotominor.yy151;
+ yygotominor.yy259 = new SqliteCreateTrigger::Event(*(yymsp[0].minor.yy173));
+ delete yymsp[0].minor.yy173;
+ objectForTokens = yygotominor.yy259;
}
break;
- case 382: /* foreach_clause ::= */
-{yygotominor.yy83 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::null);}
+ case 393: /* foreach_clause ::= */
+{yygotominor.yy456 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::null);}
break;
- case 383: /* foreach_clause ::= FOR EACH ROW */
-{yygotominor.yy83 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::FOR_EACH_ROW);}
+ case 394: /* foreach_clause ::= FOR EACH ROW */
+{yygotominor.yy456 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::FOR_EACH_ROW);}
break;
- case 386: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ case 397: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
{
- yymsp[-2].minor.yy110->append(yymsp[-1].minor.yy363);
- yygotominor.yy110 = yymsp[-2].minor.yy110;
+ yymsp[-2].minor.yy240->append(yymsp[-1].minor.yy41);
+ yygotominor.yy240 = yymsp[-2].minor.yy240;
DONT_INHERIT_TOKENS("trigger_cmd_list");
}
break;
- case 387: /* trigger_cmd_list ::= trigger_cmd SEMI */
+ case 398: /* trigger_cmd_list ::= trigger_cmd SEMI */
{
- yygotominor.yy110 = new ParserQueryList();
- yygotominor.yy110->append(yymsp[-1].minor.yy363);
+ yygotominor.yy240 = new ParserQueryList();
+ yygotominor.yy240->append(yymsp[-1].minor.yy41);
}
break;
- case 388: /* trigger_cmd_list ::= SEMI */
+ case 399: /* trigger_cmd_list ::= SEMI */
{
- yygotominor.yy110 = new ParserQueryList();
+ yygotominor.yy240 = new ParserQueryList();
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 393: /* raisetype ::= ROLLBACK|ABORT|FAIL */
+ case 404: /* raisetype ::= ROLLBACK|ABORT|FAIL */
{yygotominor.yy0 = yymsp[0].minor.yy0;}
break;
- case 394: /* cmd ::= DROP TRIGGER ifexists fullname */
+ case 405: /* cmd ::= DROP TRIGGER ifexists fullname */
{
- yygotominor.yy363 = new SqliteDropTrigger(*(yymsp[-1].minor.yy611), yymsp[0].minor.yy440->name1, yymsp[0].minor.yy440->name2);
- delete yymsp[-1].minor.yy611;
- delete yymsp[0].minor.yy440;
- objectForTokens = yygotominor.yy363;
+ yygotominor.yy41 = new SqliteDropTrigger(*(yymsp[-1].minor.yy225), yymsp[0].minor.yy396->name1, yymsp[0].minor.yy396->name2);
+ delete yymsp[-1].minor.yy225;
+ delete yymsp[0].minor.yy396;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 397: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ case 408: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
{
- yygotominor.yy363 = new SqliteAttach(*(yymsp[-4].minor.yy611), yymsp[-3].minor.yy512, yymsp[-1].minor.yy512, yymsp[0].minor.yy512);
- delete yymsp[-4].minor.yy611;
- objectForTokens = yygotominor.yy363;
+ yygotominor.yy41 = new SqliteAttach(*(yymsp[-4].minor.yy225), yymsp[-3].minor.yy186, yymsp[-1].minor.yy186, yymsp[0].minor.yy186);
+ delete yymsp[-4].minor.yy225;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 398: /* cmd ::= DETACH database_kw_opt expr */
+ case 409: /* cmd ::= DETACH database_kw_opt expr */
{
- yygotominor.yy363 = new SqliteDetach(*(yymsp[-1].minor.yy611), yymsp[0].minor.yy512);
- delete yymsp[-1].minor.yy611;
- objectForTokens = yygotominor.yy363;
+ yygotominor.yy41 = new SqliteDetach(*(yymsp[-1].minor.yy225), yymsp[0].minor.yy186);
+ delete yymsp[-1].minor.yy225;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 403: /* cmd ::= REINDEX */
-{yygotominor.yy363 = new SqliteReindex();}
+ case 414: /* cmd ::= REINDEX */
+{yygotominor.yy41 = new SqliteReindex();}
break;
- case 404: /* cmd ::= REINDEX nm dbnm */
- case 405: /* cmd ::= REINDEX ID_COLLATE */ yytestcase(yyruleno==405);
+ case 415: /* cmd ::= REINDEX nm dbnm */
+ case 416: /* cmd ::= REINDEX ID_COLLATE */ yytestcase(yyruleno==416);
{
- yygotominor.yy363 = new SqliteReindex(*(yymsp[-1].minor.yy319), *(yymsp[0].minor.yy319));
+ yygotominor.yy41 = new SqliteReindex(*(yymsp[-1].minor.yy319), *(yymsp[0].minor.yy319));
delete yymsp[-1].minor.yy319;
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 408: /* cmd ::= ANALYZE */
+ case 419: /* cmd ::= ANALYZE */
{
- yygotominor.yy363 = new SqliteAnalyze();
- objectForTokens = yygotominor.yy363;
+ yygotominor.yy41 = new SqliteAnalyze();
+ objectForTokens = yygotominor.yy41;
}
break;
- case 409: /* cmd ::= ANALYZE nm dbnm */
+ case 420: /* cmd ::= ANALYZE nm dbnm */
{
- yygotominor.yy363 = new SqliteAnalyze(*(yymsp[-1].minor.yy319), *(yymsp[0].minor.yy319));
+ yygotominor.yy41 = new SqliteAnalyze(*(yymsp[-1].minor.yy319), *(yymsp[0].minor.yy319));
delete yymsp[-1].minor.yy319;
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 412: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
+ case 423: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
{
- yygotominor.yy363 = new SqliteAlterTable(
- yymsp[-3].minor.yy440->name1,
- yymsp[-3].minor.yy440->name2,
+ yygotominor.yy41 = new SqliteAlterTable(
+ yymsp[-3].minor.yy396->name1,
+ yymsp[-3].minor.yy396->name2,
*(yymsp[0].minor.yy319)
);
delete yymsp[0].minor.yy319;
- delete yymsp[-3].minor.yy440;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[-3].minor.yy396;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 413: /* cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column */
+ case 424: /* cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column */
{
- yygotominor.yy363 = new SqliteAlterTable(
- yymsp[-3].minor.yy440->name1,
- yymsp[-3].minor.yy440->name2,
- *(yymsp[-1].minor.yy611),
- yymsp[0].minor.yy147
+ yygotominor.yy41 = new SqliteAlterTable(
+ yymsp[-3].minor.yy396->name1,
+ yymsp[-3].minor.yy396->name2,
+ *(yymsp[-1].minor.yy225),
+ yymsp[0].minor.yy3
);
- delete yymsp[-1].minor.yy611;
- delete yymsp[-3].minor.yy440;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[-1].minor.yy225;
+ delete yymsp[-3].minor.yy396;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 414: /* cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW */
-{ yy_destructor(yypParser,203,&yymsp[-3].minor);
+ case 425: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */
+{
+ yygotominor.yy41 = new SqliteAlterTable(
+ yymsp[-3].minor.yy396->name1,
+ yymsp[-3].minor.yy396->name2,
+ *(yymsp[-1].minor.yy225),
+ *(yymsp[0].minor.yy319)
+ );
+ delete yymsp[-1].minor.yy225;
+ delete yymsp[-3].minor.yy396;
+ delete yymsp[0].minor.yy319;
+ }
+ break;
+ case 426: /* cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW */
+{ yy_destructor(yypParser,207,&yymsp[-3].minor);
}
break;
- case 420: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ case 432: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm */
{
- yygotominor.yy363 = new SqliteCreateVirtualTable(
- *(yymsp[-4].minor.yy611),
+ yygotominor.yy41 = new SqliteCreateVirtualTable(
+ *(yymsp[-4].minor.yy225),
*(yymsp[-3].minor.yy319),
*(yymsp[-2].minor.yy319),
*(yymsp[0].minor.yy319)
);
- delete yymsp[-4].minor.yy611;
+ delete yymsp[-4].minor.yy225;
delete yymsp[-3].minor.yy319;
delete yymsp[-2].minor.yy319;
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy363;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 421: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP */
+ case 433: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP */
{
- yygotominor.yy363 = new SqliteCreateVirtualTable(
- *(yymsp[-7].minor.yy611),
+ yygotominor.yy41 = new SqliteCreateVirtualTable(
+ *(yymsp[-7].minor.yy225),
*(yymsp[-6].minor.yy319),
*(yymsp[-5].minor.yy319),
*(yymsp[-3].minor.yy319),
- *(yymsp[-1].minor.yy575)
+ *(yymsp[-1].minor.yy173)
);
delete yymsp[-6].minor.yy319;
delete yymsp[-5].minor.yy319;
delete yymsp[-3].minor.yy319;
- delete yymsp[-7].minor.yy611;
- delete yymsp[-1].minor.yy575;
- objectForTokens = yygotominor.yy363;
+ delete yymsp[-7].minor.yy225;
+ delete yymsp[-1].minor.yy173;
+ objectForTokens = yygotominor.yy41;
}
break;
- case 424: /* vtabarglist ::= vtabarg */
+ case 436: /* vtabarglist ::= vtabarg */
{
- yygotominor.yy575 = new QStringList();
- yygotominor.yy575->append((yymsp[0].minor.yy319)->mid(1)); // mid(1) to skip the first whitespace added in vtabarg
+ yygotominor.yy173 = new QStringList();
+ yygotominor.yy173->append((yymsp[0].minor.yy319)->mid(1)); // mid(1) to skip the first whitespace added in vtabarg
delete yymsp[0].minor.yy319;
}
break;
- case 425: /* vtabarglist ::= vtabarglist COMMA vtabarg */
+ case 437: /* vtabarglist ::= vtabarglist COMMA vtabarg */
{
- yymsp[-2].minor.yy575->append((yymsp[0].minor.yy319)->mid(1)); // mid(1) to skip the first whitespace added in vtabarg
- yygotominor.yy575 = yymsp[-2].minor.yy575;
+ yymsp[-2].minor.yy173->append((yymsp[0].minor.yy319)->mid(1)); // mid(1) to skip the first whitespace added in vtabarg
+ yygotominor.yy173 = yymsp[-2].minor.yy173;
delete yymsp[0].minor.yy319;
DONT_INHERIT_TOKENS("vtabarglist");
}
break;
- case 427: /* vtabarg ::= vtabarg vtabargtoken */
+ case 439: /* vtabarg ::= vtabarg vtabargtoken */
{
yymsp[-1].minor.yy319->append(" "+ *(yymsp[0].minor.yy319));
yygotominor.yy319 = yymsp[-1].minor.yy319;
delete yymsp[0].minor.yy319;
}
break;
- case 428: /* vtabargtoken ::= ANY */
+ case 440: /* vtabargtoken ::= ANY */
{
yygotominor.yy319 = new QString(yymsp[0].minor.yy0->value);
}
break;
- case 429: /* vtabargtoken ::= LP anylist RP */
+ case 441: /* vtabargtoken ::= LP anylist RP */
{
yygotominor.yy319 = new QString("(");
yygotominor.yy319->append(*(yymsp[-1].minor.yy319));
@@ -5391,7 +5525,7 @@ static void yy_reduce(
delete yymsp[-1].minor.yy319;
}
break;
- case 431: /* anylist ::= anylist LP anylist RP */
+ case 443: /* anylist ::= anylist LP anylist RP */
{
yygotominor.yy319 = yymsp[-3].minor.yy319;
yygotominor.yy319->append("(");
@@ -5401,258 +5535,268 @@ static void yy_reduce(
DONT_INHERIT_TOKENS("anylist");
}
break;
- case 432: /* anylist ::= anylist ANY */
+ case 444: /* anylist ::= anylist ANY */
{
yygotominor.yy319 = yymsp[-1].minor.yy319;
yygotominor.yy319->append(yymsp[0].minor.yy0->value);
DONT_INHERIT_TOKENS("anylist");
}
break;
- case 433: /* with ::= */
-{yygotominor.yy1 = nullptr;}
+ case 445: /* with ::= */
+{yygotominor.yy161 = nullptr;}
break;
- case 434: /* with ::= WITH wqlist */
+ case 446: /* with ::= WITH wqlist */
{
- yygotominor.yy1 = new SqliteWith();
- yygotominor.yy1->cteList = *(yymsp[0].minor.yy593);
- delete yymsp[0].minor.yy593;
- objectForTokens = yygotominor.yy1;
+ yygotominor.yy161 = new SqliteWith();
+ yygotominor.yy161->cteList = *(yymsp[0].minor.yy164);
+ delete yymsp[0].minor.yy164;
+ objectForTokens = yygotominor.yy161;
}
break;
- case 435: /* with ::= WITH RECURSIVE wqlist */
+ case 447: /* with ::= WITH RECURSIVE wqlist */
{
- yygotominor.yy1 = new SqliteWith();
- yygotominor.yy1->cteList = *(yymsp[0].minor.yy593);
- yygotominor.yy1->recursive = true;
- delete yymsp[0].minor.yy593;
- objectForTokens = yygotominor.yy1;
+ yygotominor.yy161 = new SqliteWith();
+ yygotominor.yy161->cteList = *(yymsp[0].minor.yy164);
+ yygotominor.yy161->recursive = true;
+ delete yymsp[0].minor.yy164;
+ objectForTokens = yygotominor.yy161;
}
break;
- case 436: /* wqlist ::= wqcte */
+ case 448: /* wqas ::= AS */
+{yygotominor.yy21 = new SqliteWith::CommonTableExpression::AsMode(SqliteWith::CommonTableExpression::ANY);}
+ break;
+ case 449: /* wqas ::= AS MATERIALIZED */
+{yygotominor.yy21 = new SqliteWith::CommonTableExpression::AsMode(SqliteWith::CommonTableExpression::MATERIALIZED);}
+ break;
+ case 450: /* wqas ::= AS NOT MATERIALIZED */
+{yygotominor.yy21 = new SqliteWith::CommonTableExpression::AsMode(SqliteWith::CommonTableExpression::NOT_MATERIALIZED);}
+ break;
+ case 451: /* wqlist ::= wqcte */
{
- yygotominor.yy593 = new ParserCteList();
- yygotominor.yy593->append(yymsp[0].minor.yy446);
+ yygotominor.yy164 = new ParserCteList();
+ yygotominor.yy164->append(yymsp[0].minor.yy146);
}
break;
- case 437: /* wqlist ::= wqlist COMMA wqcte */
+ case 452: /* wqlist ::= wqlist COMMA wqcte */
{
- yygotominor.yy593 = yymsp[-2].minor.yy593;
- yygotominor.yy593->append(yymsp[0].minor.yy446);
+ yygotominor.yy164 = yymsp[-2].minor.yy164;
+ yygotominor.yy164->append(yymsp[0].minor.yy146);
DONT_INHERIT_TOKENS("wqlist");
}
break;
- case 438: /* wqlist ::= ID_TAB_NEW */
+ case 453: /* wqlist ::= ID_TAB_NEW */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
}
break;
- case 439: /* wqcte ::= nm idxlist_opt AS LP select RP */
+ case 454: /* wqcte ::= nm idxlist_opt wqas LP select RP */
{
- yygotominor.yy446 = new SqliteWith::CommonTableExpression(*(yymsp[-5].minor.yy319), *(yymsp[-4].minor.yy223), yymsp[-1].minor.yy313);
+ yygotominor.yy146 = new SqliteWith::CommonTableExpression(*(yymsp[-5].minor.yy319), *(yymsp[-4].minor.yy627), yymsp[-1].minor.yy297, *(yymsp[-3].minor.yy21));
delete yymsp[-5].minor.yy319;
- delete yymsp[-4].minor.yy223;
- objectForTokens = yygotominor.yy446;
+ delete yymsp[-4].minor.yy627;
+ delete yymsp[-3].minor.yy21;
+ objectForTokens = yygotominor.yy146;
}
break;
- case 440: /* windowdefn_list ::= windowdefn */
+ case 455: /* windowdefn_list ::= windowdefn */
{
- yygotominor.yy299 = new ParserWindowDefList();
- yygotominor.yy299->append(yymsp[0].minor.yy266);
+ yygotominor.yy525 = new ParserWindowDefList();
+ yygotominor.yy525->append(yymsp[0].minor.yy562);
}
break;
- case 441: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */
+ case 456: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */
{
- yymsp[-2].minor.yy299->append(yymsp[0].minor.yy266);
- yygotominor.yy299 = yymsp[-2].minor.yy299;
+ yymsp[-2].minor.yy525->append(yymsp[0].minor.yy562);
+ yygotominor.yy525 = yymsp[-2].minor.yy525;
DONT_INHERIT_TOKENS("windowdefn_list");
}
break;
- case 442: /* windowdefn ::= nm AS LP window RP */
+ case 457: /* windowdefn ::= nm AS LP window RP */
{
- yygotominor.yy266 = new SqliteWindowDefinition(*(yymsp[-4].minor.yy319), yymsp[-1].minor.yy334);
+ yygotominor.yy562 = new SqliteWindowDefinition(*(yymsp[-4].minor.yy319), yymsp[-1].minor.yy162);
delete yymsp[-4].minor.yy319;
- objectForTokens = yygotominor.yy266;
+ objectForTokens = yygotominor.yy562;
}
break;
- case 443: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */
+ case 458: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */
{
- yygotominor.yy334 = new SqliteWindowDefinition::Window();
- yygotominor.yy334->initPartitionBy(QString(), *(yymsp[-2].minor.yy71), *(yymsp[-1].minor.yy403), yymsp[0].minor.yy41);
- delete yymsp[-2].minor.yy71;
- delete yymsp[-1].minor.yy403;
- objectForTokens = yygotominor.yy334;
+ yygotominor.yy162 = new SqliteWindowDefinition::Window();
+ yygotominor.yy162->initPartitionBy(QString(), *(yymsp[-2].minor.yy615), *(yymsp[-1].minor.yy226), yymsp[0].minor.yy149);
+ delete yymsp[-2].minor.yy615;
+ delete yymsp[-1].minor.yy226;
+ objectForTokens = yygotominor.yy162;
}
break;
- case 444: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
+ case 459: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
{
- yygotominor.yy334 = new SqliteWindowDefinition::Window();
- yygotominor.yy334->initPartitionBy(*(yymsp[-5].minor.yy319), *(yymsp[-2].minor.yy71), *(yymsp[-1].minor.yy403), yymsp[0].minor.yy41);
- delete yymsp[-2].minor.yy71;
+ yygotominor.yy162 = new SqliteWindowDefinition::Window();
+ yygotominor.yy162->initPartitionBy(*(yymsp[-5].minor.yy319), *(yymsp[-2].minor.yy615), *(yymsp[-1].minor.yy226), yymsp[0].minor.yy149);
+ delete yymsp[-2].minor.yy615;
delete yymsp[-5].minor.yy319;
- delete yymsp[-1].minor.yy403;
- objectForTokens = yygotominor.yy334;
+ delete yymsp[-1].minor.yy226;
+ objectForTokens = yygotominor.yy162;
}
break;
- case 445: /* window ::= ORDER BY sortlist frame_opt */
+ case 460: /* window ::= ORDER BY sortlist frame_opt */
{
- yygotominor.yy334 = new SqliteWindowDefinition::Window();
- yygotominor.yy334->initOrderBy(QString(), *(yymsp[-1].minor.yy403), yymsp[0].minor.yy41);
- delete yymsp[-1].minor.yy403;
- objectForTokens = yygotominor.yy334;
+ yygotominor.yy162 = new SqliteWindowDefinition::Window();
+ yygotominor.yy162->initOrderBy(QString(), *(yymsp[-1].minor.yy226), yymsp[0].minor.yy149);
+ delete yymsp[-1].minor.yy226;
+ objectForTokens = yygotominor.yy162;
}
break;
- case 446: /* window ::= nm ORDER BY sortlist frame_opt */
+ case 461: /* window ::= nm ORDER BY sortlist frame_opt */
{
- yygotominor.yy334 = new SqliteWindowDefinition::Window();
- yygotominor.yy334->initOrderBy(*(yymsp[-4].minor.yy319), *(yymsp[-1].minor.yy403), yymsp[0].minor.yy41);
- delete yymsp[-1].minor.yy403;
+ yygotominor.yy162 = new SqliteWindowDefinition::Window();
+ yygotominor.yy162->initOrderBy(*(yymsp[-4].minor.yy319), *(yymsp[-1].minor.yy226), yymsp[0].minor.yy149);
+ delete yymsp[-1].minor.yy226;
delete yymsp[-4].minor.yy319;
- objectForTokens = yygotominor.yy334;
+ objectForTokens = yygotominor.yy162;
}
break;
- case 447: /* window ::= frame_opt */
+ case 462: /* window ::= frame_opt */
{
- yygotominor.yy334 = new SqliteWindowDefinition::Window();
- yygotominor.yy334->init(QString(), yymsp[0].minor.yy41);
- objectForTokens = yygotominor.yy334;
+ yygotominor.yy162 = new SqliteWindowDefinition::Window();
+ yygotominor.yy162->init(QString(), yymsp[0].minor.yy149);
+ objectForTokens = yygotominor.yy162;
}
break;
- case 448: /* window ::= nm frame_opt */
+ case 463: /* window ::= nm frame_opt */
{
- yygotominor.yy334 = new SqliteWindowDefinition::Window();
- yygotominor.yy334->init(QString(), yymsp[0].minor.yy41);
+ yygotominor.yy162 = new SqliteWindowDefinition::Window();
+ yygotominor.yy162->init(QString(), yymsp[0].minor.yy149);
delete yymsp[-1].minor.yy319;
- objectForTokens = yygotominor.yy334;
+ objectForTokens = yygotominor.yy162;
}
break;
- case 449: /* frame_opt ::= */
-{yygotominor.yy41 = nullptr;}
+ case 464: /* frame_opt ::= */
+{yygotominor.yy149 = nullptr;}
break;
- case 450: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
+ case 465: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
{
- yygotominor.yy41 = new SqliteWindowDefinition::Window::Frame(*(yymsp[-2].minor.yy419), yymsp[-1].minor.yy442, nullptr, *(yymsp[0].minor.yy63));
- delete yymsp[-2].minor.yy419;
- delete yymsp[0].minor.yy63;
- objectForTokens = yygotominor.yy41;
+ yygotominor.yy149 = new SqliteWindowDefinition::Window::Frame(*(yymsp[-2].minor.yy143), yymsp[-1].minor.yy285, nullptr, *(yymsp[0].minor.yy237));
+ delete yymsp[-2].minor.yy143;
+ delete yymsp[0].minor.yy237;
+ objectForTokens = yygotominor.yy149;
}
break;
- case 451: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
+ case 466: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
{
- yygotominor.yy41 = new SqliteWindowDefinition::Window::Frame(*(yymsp[-5].minor.yy419), yymsp[-3].minor.yy442, yymsp[-1].minor.yy442, *(yymsp[0].minor.yy63));
- delete yymsp[-5].minor.yy419;
- delete yymsp[0].minor.yy63;
- objectForTokens = yygotominor.yy41;
+ yygotominor.yy149 = new SqliteWindowDefinition::Window::Frame(*(yymsp[-5].minor.yy143), yymsp[-3].minor.yy285, yymsp[-1].minor.yy285, *(yymsp[0].minor.yy237));
+ delete yymsp[-5].minor.yy143;
+ delete yymsp[0].minor.yy237;
+ objectForTokens = yygotominor.yy149;
}
break;
- case 452: /* range_or_rows ::= RANGE|ROWS|GROUPS */
+ case 467: /* range_or_rows ::= RANGE|ROWS|GROUPS */
{
- yygotominor.yy419 = new SqliteWindowDefinition::Window::Frame::RangeOrRows(
+ yygotominor.yy143 = new SqliteWindowDefinition::Window::Frame::RangeOrRows(
SqliteWindowDefinition::Window::Frame::toRangeOrRows(yymsp[0].minor.yy0->value)
);
}
break;
- case 453: /* frame_bound_s ::= frame_bound */
- case 455: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==455);
+ case 468: /* frame_bound_s ::= frame_bound */
+ case 470: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==470);
{
- yygotominor.yy442 = yymsp[0].minor.yy442;
- objectForTokens = yygotominor.yy442;
+ yygotominor.yy285 = yymsp[0].minor.yy285;
+ objectForTokens = yygotominor.yy285;
}
break;
- case 454: /* frame_bound_s ::= UNBOUNDED PRECEDING */
- case 456: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==456);
- case 458: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==458);
+ case 469: /* frame_bound_s ::= UNBOUNDED PRECEDING */
+ case 471: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==471);
+ case 473: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==473);
{
- yygotominor.yy442 = new SqliteWindowDefinition::Window::Frame::Bound(nullptr, yymsp[-1].minor.yy0->value + " " + yymsp[0].minor.yy0->value);
- objectForTokens = yygotominor.yy442;
+ yygotominor.yy285 = new SqliteWindowDefinition::Window::Frame::Bound(nullptr, yymsp[-1].minor.yy0->value + " " + yymsp[0].minor.yy0->value);
+ objectForTokens = yygotominor.yy285;
}
break;
- case 457: /* frame_bound ::= expr PRECEDING|FOLLOWING */
+ case 472: /* frame_bound ::= expr PRECEDING|FOLLOWING */
{
- yygotominor.yy442 = new SqliteWindowDefinition::Window::Frame::Bound(yymsp[-1].minor.yy512, yymsp[0].minor.yy0->value);
- objectForTokens = yygotominor.yy442;
+ yygotominor.yy285 = new SqliteWindowDefinition::Window::Frame::Bound(yymsp[-1].minor.yy186, yymsp[0].minor.yy0->value);
+ objectForTokens = yygotominor.yy285;
}
break;
- case 459: /* frame_exclude_opt ::= */
+ case 474: /* frame_exclude_opt ::= */
{
- yygotominor.yy63 = new SqliteWindowDefinition::Window::Frame::Exclude(
+ yygotominor.yy237 = new SqliteWindowDefinition::Window::Frame::Exclude(
SqliteWindowDefinition::Window::Frame::Exclude::null
);
}
break;
- case 460: /* frame_exclude_opt ::= EXCLUDE frame_exclude */
+ case 475: /* frame_exclude_opt ::= EXCLUDE frame_exclude */
{
- yygotominor.yy63 = yymsp[0].minor.yy63;
+ yygotominor.yy237 = yymsp[0].minor.yy237;
}
break;
- case 461: /* frame_exclude ::= NO OTHERS */
+ case 476: /* frame_exclude ::= NO OTHERS */
{
- yygotominor.yy63 = new SqliteWindowDefinition::Window::Frame::Exclude(
+ yygotominor.yy237 = new SqliteWindowDefinition::Window::Frame::Exclude(
SqliteWindowDefinition::Window::Frame::Exclude::NO_OTHERS
);
}
break;
- case 462: /* frame_exclude ::= CURRENT ROW */
+ case 477: /* frame_exclude ::= CURRENT ROW */
{
- yygotominor.yy63 = new SqliteWindowDefinition::Window::Frame::Exclude(
+ yygotominor.yy237 = new SqliteWindowDefinition::Window::Frame::Exclude(
SqliteWindowDefinition::Window::Frame::Exclude::CURRENT_ROW
);
}
break;
- case 463: /* frame_exclude ::= GROUP */
+ case 478: /* frame_exclude ::= GROUP */
{
- yygotominor.yy63 = new SqliteWindowDefinition::Window::Frame::Exclude(
+ yygotominor.yy237 = new SqliteWindowDefinition::Window::Frame::Exclude(
SqliteWindowDefinition::Window::Frame::Exclude::GROUP
);
}
break;
- case 464: /* frame_exclude ::= TIES */
+ case 479: /* frame_exclude ::= TIES */
{
- yygotominor.yy63 = new SqliteWindowDefinition::Window::Frame::Exclude(
+ yygotominor.yy237 = new SqliteWindowDefinition::Window::Frame::Exclude(
SqliteWindowDefinition::Window::Frame::Exclude::TIES
);
}
break;
- case 465: /* window_clause ::= WINDOW windowdefn_list */
+ case 480: /* window_clause ::= WINDOW windowdefn_list */
{
- yygotominor.yy299 = yymsp[0].minor.yy299;
+ yygotominor.yy525 = yymsp[0].minor.yy525;
}
break;
- case 466: /* filter_over ::= filter_clause over_clause */
+ case 481: /* filter_over ::= filter_clause over_clause */
{
- yygotominor.yy247 = new SqliteFilterOver(yymsp[-1].minor.yy397, yymsp[0].minor.yy248);
- objectForTokens = yygotominor.yy247;
+ yygotominor.yy181 = new SqliteFilterOver(yymsp[-1].minor.yy39, yymsp[0].minor.yy11);
+ objectForTokens = yygotominor.yy181;
}
break;
- case 467: /* filter_over ::= over_clause */
+ case 482: /* filter_over ::= over_clause */
{
- yygotominor.yy247 = new SqliteFilterOver(nullptr, yymsp[0].minor.yy248);
- objectForTokens = yygotominor.yy247;
+ yygotominor.yy181 = new SqliteFilterOver(nullptr, yymsp[0].minor.yy11);
+ objectForTokens = yygotominor.yy181;
}
break;
- case 468: /* filter_over ::= filter_clause */
+ case 483: /* filter_over ::= filter_clause */
{
- yygotominor.yy247 = new SqliteFilterOver(yymsp[0].minor.yy397, nullptr);
- objectForTokens = yygotominor.yy247;
+ yygotominor.yy181 = new SqliteFilterOver(yymsp[0].minor.yy39, nullptr);
+ objectForTokens = yygotominor.yy181;
}
break;
- case 469: /* over_clause ::= OVER LP window RP */
+ case 484: /* over_clause ::= OVER LP window RP */
{
- yygotominor.yy248 = new SqliteFilterOver::Over(yymsp[-1].minor.yy334);
- objectForTokens = yygotominor.yy248;
+ yygotominor.yy11 = new SqliteFilterOver::Over(yymsp[-1].minor.yy162);
+ objectForTokens = yygotominor.yy11;
}
break;
- case 470: /* over_clause ::= OVER nm */
+ case 485: /* over_clause ::= OVER nm */
{
- yygotominor.yy248 = new SqliteFilterOver::Over(*(yymsp[0].minor.yy319));
+ yygotominor.yy11 = new SqliteFilterOver::Over(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
- objectForTokens = yygotominor.yy248;
+ objectForTokens = yygotominor.yy11;
}
break;
- case 471: /* filter_clause ::= FILTER LP WHERE expr RP */
+ case 486: /* filter_clause ::= FILTER LP WHERE expr RP */
{
- yygotominor.yy397 = new SqliteFilterOver::Filter(yymsp[-1].minor.yy512);
- objectForTokens = yygotominor.yy397;
- }
+ yygotominor.yy39 = new SqliteFilterOver::Filter(yymsp[-1].minor.yy186);
+ objectForTokens = yygotominor.yy39;
+ }
break;
default:
/* (0) input ::= cmdlist */ yytestcase(yyruleno==0);
@@ -5746,7 +5890,7 @@ static void yy_reduce(
#endif
{
yy_shift(yypParser,yyact,yygoto,&yygotominor);
- if (parserContext->setupTokens)
+ if (parserContext->setupTokens && yypParser->yyidx >= 0)
{
QList<Token*>* tokensPtr = yypParser->yystack[yypParser->yyidx].tokens;
*tokensPtr = allTokensWithAllInherited + *tokensPtr;
@@ -5988,4 +6132,8 @@ void sqlite3_parse(
}
}while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
return;
-} \ No newline at end of file
+}
+
+int sqlite3ParserFallback(int iToken) {
+ return yyFallback[iToken];
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.h b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.h
index 200b09c..6dedaad 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.h
@@ -41,149 +41,153 @@
#define TK3_LAST 41
#define TK3_LIKE_KW 42
#define TK3_MATCH 43
-#define TK3_NO 44
-#define TK3_NULLS 45
-#define TK3_OTHERS 46
-#define TK3_PLAN 47
-#define TK3_QUERY 48
-#define TK3_KEY 49
-#define TK3_OF 50
-#define TK3_OFFSET 51
-#define TK3_PARTITION 52
-#define TK3_PRAGMA 53
-#define TK3_PRECEDING 54
-#define TK3_RAISE 55
-#define TK3_RANGE 56
-#define TK3_RECURSIVE 57
-#define TK3_RELEASE 58
-#define TK3_REPLACE 59
-#define TK3_RESTRICT 60
-#define TK3_ROW 61
-#define TK3_ROWS 62
-#define TK3_ROLLBACK 63
-#define TK3_SAVEPOINT 64
-#define TK3_TEMP 65
-#define TK3_TIES 66
-#define TK3_TRIGGER 67
-#define TK3_UNBOUNDED 68
-#define TK3_VACUUM 69
-#define TK3_VIEW 70
-#define TK3_VIRTUAL 71
-#define TK3_WITH 72
-#define TK3_WITHOUT 73
-#define TK3_REINDEX 74
-#define TK3_RENAME 75
-#define TK3_CTIME_KW 76
-#define TK3_IF 77
-#define TK3_ANY 78
-#define TK3_OR 79
-#define TK3_AND 80
-#define TK3_NOT 81
-#define TK3_IS 82
-#define TK3_BETWEEN 83
-#define TK3_IN 84
-#define TK3_ISNULL 85
-#define TK3_NOTNULL 86
-#define TK3_NE 87
-#define TK3_EQ 88
-#define TK3_GT 89
-#define TK3_LE 90
-#define TK3_LT 91
-#define TK3_GE 92
-#define TK3_ESCAPE 93
-#define TK3_BITAND 94
-#define TK3_BITOR 95
-#define TK3_LSHIFT 96
-#define TK3_RSHIFT 97
-#define TK3_PLUS 98
-#define TK3_MINUS 99
-#define TK3_STAR 100
-#define TK3_SLASH 101
-#define TK3_REM 102
-#define TK3_CONCAT 103
-#define TK3_COLLATE 104
-#define TK3_BITNOT 105
-#define TK3_SEMI 106
-#define TK3_TRANSACTION 107
-#define TK3_ID_TRANS 108
-#define TK3_COMMIT 109
-#define TK3_TO 110
-#define TK3_CREATE 111
-#define TK3_TABLE 112
-#define TK3_LP 113
-#define TK3_RP 114
-#define TK3_AS 115
-#define TK3_DOT 116
-#define TK3_ID_TAB_NEW 117
-#define TK3_ID_DB 118
-#define TK3_CTX_ROWID_KW 119
-#define TK3_EXISTS 120
-#define TK3_COMMA 121
-#define TK3_ID_COL_NEW 122
-#define TK3_STRING 123
-#define TK3_JOIN_KW 124
-#define TK3_ID_COL_TYPE 125
-#define TK3_RIGHT_ASSOC 126
-#define TK3_CONSTRAINT 127
-#define TK3_DEFAULT 128
-#define TK3_NULL 129
-#define TK3_PRIMARY 130
-#define TK3_UNIQUE 131
-#define TK3_CHECK 132
-#define TK3_REFERENCES 133
-#define TK3_ID_CONSTR 134
-#define TK3_ID_COLLATE 135
-#define TK3_ID_TAB 136
-#define TK3_INTEGER 137
-#define TK3_FLOAT 138
-#define TK3_BLOB 139
-#define TK3_AUTOINCR 140
-#define TK3_ON 141
-#define TK3_INSERT 142
-#define TK3_DELETE 143
-#define TK3_UPDATE 144
-#define TK3_ID_FK_MATCH 145
-#define TK3_SET 146
-#define TK3_DEFERRABLE 147
-#define TK3_FOREIGN 148
-#define TK3_DROP 149
-#define TK3_ID_VIEW_NEW 150
-#define TK3_ID_VIEW 151
-#define TK3_SELECT 152
-#define TK3_VALUES 153
-#define TK3_UNION 154
-#define TK3_ALL 155
-#define TK3_EXCEPT 156
-#define TK3_INTERSECT 157
-#define TK3_DISTINCT 158
-#define TK3_ID_ALIAS 159
-#define TK3_FROM 160
-#define TK3_USING 161
-#define TK3_JOIN 162
-#define TK3_ID_JOIN_OPTS 163
-#define TK3_ID_IDX 164
-#define TK3_ORDER 165
-#define TK3_GROUP 166
-#define TK3_HAVING 167
-#define TK3_LIMIT 168
-#define TK3_WHERE 169
-#define TK3_ID_COL 170
-#define TK3_INTO 171
-#define TK3_NOTHING 172
-#define TK3_ID_FN 173
-#define TK3_ID_ERR_MSG 174
-#define TK3_VARIABLE 175
-#define TK3_CASE 176
-#define TK3_WHEN 177
-#define TK3_THEN 178
-#define TK3_ELSE 179
-#define TK3_INDEX 180
-#define TK3_ID_IDX_NEW 181
-#define TK3_ID_PRAGMA 182
-#define TK3_ID_TRIG_NEW 183
-#define TK3_ID_TRIG 184
-#define TK3_ALTER 185
-#define TK3_ADD 186
-#define TK3_WINDOW 187
-#define TK3_OVER 188
-#define TK3_FILTER 189
+#define TK3_MATERIALIZED 44
+#define TK3_NO 45
+#define TK3_NULLS 46
+#define TK3_OTHERS 47
+#define TK3_PLAN 48
+#define TK3_QUERY 49
+#define TK3_KEY 50
+#define TK3_OF 51
+#define TK3_OFFSET 52
+#define TK3_PARTITION 53
+#define TK3_PRAGMA 54
+#define TK3_PRECEDING 55
+#define TK3_RAISE 56
+#define TK3_RANGE 57
+#define TK3_RECURSIVE 58
+#define TK3_RELEASE 59
+#define TK3_REPLACE 60
+#define TK3_RESTRICT 61
+#define TK3_ROW 62
+#define TK3_ROWS 63
+#define TK3_ROLLBACK 64
+#define TK3_SAVEPOINT 65
+#define TK3_TEMP 66
+#define TK3_TIES 67
+#define TK3_TRIGGER 68
+#define TK3_UNBOUNDED 69
+#define TK3_VACUUM 70
+#define TK3_VIEW 71
+#define TK3_VIRTUAL 72
+#define TK3_WITH 73
+#define TK3_WITHOUT 74
+#define TK3_REINDEX 75
+#define TK3_RENAME 76
+#define TK3_CTIME_KW 77
+#define TK3_IF 78
+#define TK3_FILTER 79
+#define TK3_ANY 80
+#define TK3_OR 81
+#define TK3_AND 82
+#define TK3_NOT 83
+#define TK3_IS 84
+#define TK3_BETWEEN 85
+#define TK3_IN 86
+#define TK3_ISNULL 87
+#define TK3_NOTNULL 88
+#define TK3_NE 89
+#define TK3_EQ 90
+#define TK3_GT 91
+#define TK3_LE 92
+#define TK3_LT 93
+#define TK3_GE 94
+#define TK3_ESCAPE 95
+#define TK3_BITAND 96
+#define TK3_BITOR 97
+#define TK3_LSHIFT 98
+#define TK3_RSHIFT 99
+#define TK3_PLUS 100
+#define TK3_MINUS 101
+#define TK3_STAR 102
+#define TK3_SLASH 103
+#define TK3_REM 104
+#define TK3_CONCAT 105
+#define TK3_PTR 106
+#define TK3_COLLATE 107
+#define TK3_BITNOT 108
+#define TK3_SEMI 109
+#define TK3_TRANSACTION 110
+#define TK3_ID_TRANS 111
+#define TK3_COMMIT 112
+#define TK3_TO 113
+#define TK3_CREATE 114
+#define TK3_TABLE 115
+#define TK3_LP 116
+#define TK3_RP 117
+#define TK3_AS 118
+#define TK3_DOT 119
+#define TK3_ID_TAB_NEW 120
+#define TK3_ID_DB 121
+#define TK3_COMMA 122
+#define TK3_CTX_ROWID_KW 123
+#define TK3_CTX_STRICT_KW 124
+#define TK3_EXISTS 125
+#define TK3_ID_COL_NEW 126
+#define TK3_STRING 127
+#define TK3_JOIN_KW 128
+#define TK3_ID_COL_TYPE 129
+#define TK3_RIGHT_ASSOC 130
+#define TK3_CONSTRAINT 131
+#define TK3_DEFAULT 132
+#define TK3_NULL 133
+#define TK3_PRIMARY 134
+#define TK3_UNIQUE 135
+#define TK3_CHECK 136
+#define TK3_REFERENCES 137
+#define TK3_ID_CONSTR 138
+#define TK3_ID_COLLATE 139
+#define TK3_ID_TAB 140
+#define TK3_INTEGER 141
+#define TK3_FLOAT 142
+#define TK3_BLOB 143
+#define TK3_AUTOINCR 144
+#define TK3_ON 145
+#define TK3_INSERT 146
+#define TK3_DELETE 147
+#define TK3_UPDATE 148
+#define TK3_ID_FK_MATCH 149
+#define TK3_SET 150
+#define TK3_DEFERRABLE 151
+#define TK3_FOREIGN 152
+#define TK3_DROP 153
+#define TK3_ID_VIEW_NEW 154
+#define TK3_ID_VIEW 155
+#define TK3_SELECT 156
+#define TK3_VALUES 157
+#define TK3_UNION 158
+#define TK3_ALL 159
+#define TK3_EXCEPT 160
+#define TK3_INTERSECT 161
+#define TK3_DISTINCT 162
+#define TK3_ID_ALIAS 163
+#define TK3_FROM 164
+#define TK3_USING 165
+#define TK3_JOIN 166
+#define TK3_ID_JOIN_OPTS 167
+#define TK3_ID_IDX 168
+#define TK3_ORDER 169
+#define TK3_GROUP 170
+#define TK3_HAVING 171
+#define TK3_LIMIT 172
+#define TK3_WHERE 173
+#define TK3_RETURNING 174
+#define TK3_ID_COL 175
+#define TK3_INTO 176
+#define TK3_NOTHING 177
+#define TK3_ID_FN 178
+#define TK3_ID_ERR_MSG 179
+#define TK3_VARIABLE 180
+#define TK3_CASE 181
+#define TK3_WHEN 182
+#define TK3_THEN 183
+#define TK3_ELSE 184
+#define TK3_INDEX 185
+#define TK3_ID_IDX_NEW 186
+#define TK3_ID_PRAGMA 187
+#define TK3_ID_TRIG_NEW 188
+#define TK3_ID_TRIG 189
+#define TK3_ALTER 190
+#define TK3_ADD 191
+#define TK3_WINDOW 192
+#define TK3_OVER 193
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
index 1510c49..4b1dda4 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
@@ -27,7 +27,6 @@
#include "parser/ast/sqliteattach.h"
#include "parser/ast/sqlitebegintrans.h"
#include "parser/ast/sqlitecommittrans.h"
-#include "parser/ast/sqlitecopy.h"
#include "parser/ast/sqlitecreateindex.h"
#include "parser/ast/sqlitecreatetable.h"
#include "parser/ast/sqlitecreatetrigger.h"
@@ -67,6 +66,13 @@
#define assert(X) Q_ASSERT(X)
#define UNUSED_PARAMETER(X) (void)(X)
#define DONT_INHERIT_TOKENS(X) noTokenInheritanceFields << X
+
+}
+
+%code {
+int sqlite3ParserFallback(int iToken) {
+ return yyFallback[iToken];
+}
}
// These are extra tokens used by the lexer but never seen by the
@@ -84,10 +90,10 @@
%fallback ID
ABORT ACTION AFTER ALWAYS ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW
CONFLICT CURRENT DATABASE DEFERRED DESC DETACH DO EACH END EXCLUDE EXCLUSIVE EXPLAIN FAIL FIRST FOLLOWING FOR
- GENERATED GROUPS IGNORE IMMEDIATE INDEXED INITIALLY INSTEAD LAST LIKE_KW MATCH NO NULLS OTHERS PLAN
+ GENERATED GROUPS IGNORE IMMEDIATE INDEXED INITIALLY INSTEAD LAST LIKE_KW MATCH MATERIALIZED NO NULLS OTHERS PLAN
QUERY KEY OF OFFSET PARTITION PRAGMA PRECEDING RAISE RANGE RECURSIVE RELEASE REPLACE RESTRICT ROW ROWS ROLLBACK
SAVEPOINT TEMP TIES TRIGGER UNBOUNDED VACUUM VIEW VIRTUAL WITH WITHOUT
- REINDEX RENAME CTIME_KW IF
+ REINDEX RENAME CTIME_KW IF FILTER
.
%wildcard ANY.
@@ -110,7 +116,7 @@
%left BITAND BITOR LSHIFT RSHIFT.
%left PLUS MINUS.
%left STAR SLASH REM.
-%left CONCAT.
+%left CONCAT PTR.
%left COLLATE.
%right BITNOT.
@@ -252,7 +258,7 @@ cmd(X) ::= CREATE temp(T) TABLE
ifnotexists(E) fullname(N)
LP columnlist(CL)
conslist_opt(CS) RP
- table_options(F). {
+ table_options(O). {
X = new SqliteCreateTable(
*(E),
*(T),
@@ -260,14 +266,14 @@ cmd(X) ::= CREATE temp(T) TABLE
N->name2,
*(CL),
*(CS),
- *(F)
+ *(O)
);
delete E;
delete T;
delete CL;
delete CS;
delete N;
- delete F;
+ delete O;
objectForTokens = X;
}
cmd(X) ::= CREATE temp(T) TABLE
@@ -290,16 +296,38 @@ cmd ::= CREATE temp TABLE ifnotexists
cmd ::= CREATE temp TABLE ifnotexists
ID_DB|ID_TAB_NEW. {}
-%type table_options {QString*}
+%type table_options {ParserCreateTableOptionList*}
%destructor table_options {parser_safe_delete($$);}
-table_options(X) ::= . {X = new QString();}
-table_options(X) ::= WITHOUT nm(N). {
+table_options(X) ::= . {X = new ParserCreateTableOptionList();}
+table_options(X) ::= table_option(O). {
+ X = new ParserCreateTableOptionList();
+ X->append(O);
+ }
+table_options(X) ::= table_options(L) COMMA
+ table_option(O). {
+ L->append(O);
+ X = L;
+ DONT_INHERIT_TOKENS("table_options");
+ }
+
+%type table_option {ParserStubCreateTableOption*}
+%destructor table_option {parser_safe_delete($$);}
+table_option(X) ::= WITHOUT nm(N). {
if (N->toLower() != "rowid")
parserContext->errorAtToken(QString("Invalid table option: %1").arg(*(N)));
- X = N;
+ X = new ParserStubCreateTableOption(ParserStubCreateTableOption::WITHOUT_ROWID);
+ delete N;
+ }
+table_option(X) ::= nm(N). {
+ if (N->toLower() != "strict")
+ parserContext->errorAtToken(QString("Invalid table option: %1").arg(*(N)));
+
+ X = new ParserStubCreateTableOption(ParserStubCreateTableOption::STRICT);
+ delete N;
}
-table_options ::= WITHOUT CTX_ROWID_KW. {}
+table_option ::= WITHOUT CTX_ROWID_KW. {}
+table_option ::= CTX_STRICT_KW. {}
%type ifnotexists {bool*}
%destructor ifnotexists {parser_safe_delete($$);}
@@ -568,7 +596,12 @@ ccons(X) ::= CHECK LP RP. {
term(X) ::= NULL. {X = new QVariant();}
term(X) ::= INTEGER(N). {X = parserContext->handleNumberToken(N->value);}
term(X) ::= FLOAT(N). {X = new QVariant(QVariant(N->value).toDouble());}
-term(X) ::= STRING|BLOB(S). {X = new QVariant(stripString(S->value));}
+term(X) ::= STRING|BLOB(S). {
+ if (S->value.length() >= 3 && S->value.startsWith("x'", Qt::CaseInsensitive))
+ X = new QVariant(blobFromLiteral(S->value));
+ else
+ X = new QVariant(stripString(S->value));
+ }
// Term Literal or Name. String falls under Term, but can be falled back to Name if necessary in the context.
// On the other hand - if name is ID, it cannot be falled back to Term, as ID is never a Literal value.
@@ -1277,7 +1310,8 @@ cmd(X) ::= delete_stmt(S). {
delete_stmt(X) ::= with(WI) DELETE FROM
fullname(N)
indexed_opt(I)
- where_opt(W). {
+ where_opt(W)
+ returning(R). {
if (I)
{
if (!I->indexedBy.isNull())
@@ -1287,7 +1321,8 @@ delete_stmt(X) ::= with(WI) DELETE FROM
N->name2,
I->indexedBy,
W,
- WI
+ WI,
+ *(R)
);
}
else
@@ -1297,7 +1332,8 @@ delete_stmt(X) ::= with(WI) DELETE FROM
N->name2,
I->notIndexedKw,
W,
- WI
+ WI,
+ *(R)
);
}
delete I;
@@ -1309,10 +1345,12 @@ delete_stmt(X) ::= with(WI) DELETE FROM
N->name2,
false,
W,
- WI
+ WI,
+ *(R)
);
}
delete N;
+ delete R;
// since it's used in trigger:
objectForTokens = X;
}
@@ -1349,6 +1387,11 @@ where_opt(X) ::= WHERE. {
X = new SqliteExpr();
}
+%type returning {ParserResultColumnList*}
+%destructor returning {parser_safe_delete($$);}
+returning(X) ::= . {X = new ParserResultColumnList();}
+returning(X) ::= RETURNING selcollist(L). {X = L;}
+
////////////////////////// The UPDATE command ////////////////////////////////
cmd(X) ::= update_stmt(S). {
@@ -1361,7 +1404,7 @@ cmd(X) ::= update_stmt(S). {
update_stmt(X) ::= with(WI) UPDATE orconf(C)
fullname(N) indexed_opt(I) SET
setlist(L) from(F)
- where_opt(W). {
+ where_opt(W) returning(R). {
X = new SqliteUpdate(
*(C),
N->name1,
@@ -1371,11 +1414,13 @@ update_stmt(X) ::= with(WI) UPDATE orconf(C)
*(L),
F,
W,
- WI
+ WI,
+ *(R)
);
delete C;
delete N;
delete L;
+ delete R;
if (I)
delete I;
// since it's used in trigger:
@@ -1481,7 +1526,7 @@ cmd(X) ::= insert_stmt(S). {
insert_stmt(X) ::= with(W) insert_cmd(C)
INTO fullname(N)
idlist_opt(I) select(S)
- upsert(U). {
+ upsert(U) returning(R). {
X = new SqliteInsert(
C->replace,
C->orConflict,
@@ -1490,29 +1535,33 @@ insert_stmt(X) ::= with(W) insert_cmd(C)
*(I),
S,
W,
- U
+ U,
+ *(R)
);
delete N;
delete C;
delete I;
+ delete R;
// since it's used in trigger:
objectForTokens = X;
}
insert_stmt(X) ::= with(W) insert_cmd(C)
INTO fullname(N)
idlist_opt(I) DEFAULT
- VALUES. {
+ VALUES returning(R). {
X = new SqliteInsert(
C->replace,
C->orConflict,
N->name1,
N->name2,
*(I),
- W
+ W,
+ *(R)
);
delete N;
delete C;
delete I;
+ delete R;
// since it's used in trigger:
objectForTokens = X;
}
@@ -1564,8 +1613,7 @@ upsert(X) ::= . {
upsert(X) ::= ON CONFLICT LP sortlist(C) RP
where_opt(CW)
DO UPDATE SET setlist(S)
- where_opt(SW).
- {
+ where_opt(SW). {
X = new SqliteUpsert(*(C), CW, *(S), SW);
delete C;
delete S;
@@ -1591,8 +1639,8 @@ exprx ::= expr not_opt IN ID_DB. [IN] {}
exprx ::= expr not_opt IN nm DOT
ID_TAB. [IN] {}
exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN. {}
-exprx ::= tnm DOT ID_TAB|ID_COL. {}
-exprx ::= tnm DOT nm DOT ID_COL. {}
+exprx ::= tnm DOT ID_TAB|ID_COL. {}
+exprx ::= tnm DOT nm DOT ID_COL. {}
exprx ::= expr COLLATE ID_COLLATE. {}
exprx ::= RAISE LP raisetype COMMA
ID_ERR_MSG RP. {}
@@ -1631,6 +1679,19 @@ exprx(X) ::= tnm(N1) DOT nm(N2). {
delete N2;
objectForTokens = X;
}
+exprx(X) ::= tnm(N1) DOT. {
+ X = new SqliteExpr();
+ objectForTokens = X;
+ if (N1->isName())
+ {
+ X->initId(N1->toName(), QString());
+ parserContext->minorErrorAfterLastToken("Syntax error <expr>");
+ }
+ else
+ parserContext->errorAtToken("Syntax error <expected name>", -3);
+
+ delete N1;
+ }
exprx(X) ::= tnm(N1) DOT nm(N2) DOT nm(N3). {
X = new SqliteExpr();
if (N1->isName())
@@ -1643,6 +1704,20 @@ exprx(X) ::= tnm(N1) DOT nm(N2) DOT nm(N3). {
delete N3;
objectForTokens = X;
}
+exprx(X) ::= tnm(N1) DOT nm(N2) DOT. {
+ X = new SqliteExpr();
+ objectForTokens = X;
+ if (N1->isName())
+ {
+ X->initId(N1->toName(), *(N2), QString());
+ parserContext->minorErrorAfterLastToken("Syntax error <expr>");
+ }
+ else
+ parserContext->errorAtToken("Syntax error <expected name>", -5);
+
+ delete N1;
+ delete N2;
+ }
exprx(X) ::= VARIABLE(V). {
X = new SqliteExpr();
X->initBindParam(V->value);
@@ -1663,14 +1738,14 @@ exprx(X) ::= CAST LP expr(E) AS typetoken(T)
exprx(X) ::= ID(I) LP distinct(D)
exprlist(L) RP. {
X = new SqliteExpr();
- X->initFunction(I->value, *(D), *(L));
+ X->initFunction(stripObjName(I->value), *(D), *(L));
delete D;
delete L;
objectForTokens = X;
}
exprx(X) ::= ID(I) LP STAR RP. {
X = new SqliteExpr();
- X->initFunction(I->value, true);
+ X->initFunction(stripObjName(I->value), true);
objectForTokens = X;
}
exprx(X) ::= expr(E1) AND(O) expr(E2). {
@@ -1752,6 +1827,18 @@ exprx(X) ::= expr(E1) IS not_opt(N)
delete N;
objectForTokens = X;
}
+exprx(X) ::= expr(E1) IS NOT DISTINCT FROM
+ expr(E2). {
+ X = new SqliteExpr();
+ X->initDistinct(E1, true, E2);
+ objectForTokens = X;
+ }
+exprx(X) ::= expr(E1) IS DISTINCT FROM
+ expr(E2). {
+ X = new SqliteExpr();
+ X->initDistinct(E1, false, E2);
+ objectForTokens = X;
+ }
exprx(X) ::= NOT(O) expr(E). {
X = new SqliteExpr();
X->initUnaryOp(E, O->value);
@@ -1781,6 +1868,11 @@ exprx(X) ::= PLUS(O) expr(E). [BITNOT] {
X->initUnaryOp(E, O->value);
objectForTokens = X;
}
+exprx(X) ::= expr(E1) PTR(O) expr(E2). {
+ X = new SqliteExpr();
+ X->initPtrOp(E1, O->value, E2);
+ objectForTokens = X;
+ }
exprx(X) ::= expr(E1) not_opt(N) BETWEEN
expr(E2) AND
expr(E3). [BETWEEN] {
@@ -1846,7 +1938,7 @@ exprx(X) ::= RAISE LP raisetype(R) COMMA
exprx(X) ::= ID(I) LP distinct(D)
exprlist(E) RP filter_over(F). {
X = new SqliteExpr();
- X->initWindowFunction(I->value, *(D), *(E), F);
+ X->initWindowFunction(stripObjName(I->value), *(D), *(E), F);
delete D;
delete E;
objectForTokens = X;
@@ -1854,7 +1946,7 @@ exprx(X) ::= ID(I) LP distinct(D)
exprx(X) ::= ID(I) LP STAR RP
filter_over(F). {
X = new SqliteExpr();
- X->initWindowFunction(I->value, F);
+ X->initWindowFunction(stripObjName(I->value), F);
objectForTokens = X;
}
@@ -2378,6 +2470,18 @@ cmd(X) ::= ALTER TABLE fullname(FN) ADD
delete FN;
objectForTokens = X;
}
+cmd(X) ::= ALTER TABLE fullname(FN) DROP
+ kwcolumn_opt(K) nm(N). {
+ X = new SqliteAlterTable(
+ FN->name1,
+ FN->name2,
+ *(K),
+ *(N)
+ );
+ delete K;
+ delete FN;
+ delete N;
+ }
cmd ::= ALTER TABLE fullname RENAME TO
ID_TAB_NEW. {}
@@ -2508,6 +2612,12 @@ with(X) ::= WITH RECURSIVE wqlist(W). {
objectForTokens = X;
}
+%type wqas {SqliteWith::CommonTableExpression::AsMode*}
+%destructor wqas {parser_safe_delete($$);}
+wqas(X) ::= AS. {X = new SqliteWith::CommonTableExpression::AsMode(SqliteWith::CommonTableExpression::ANY);}
+wqas(X) ::= AS MATERIALIZED. {X = new SqliteWith::CommonTableExpression::AsMode(SqliteWith::CommonTableExpression::MATERIALIZED);}
+wqas(X) ::= AS NOT MATERIALIZED. {X = new SqliteWith::CommonTableExpression::AsMode(SqliteWith::CommonTableExpression::NOT_MATERIALIZED);}
+
%type wqlist {ParserCteList*}
%destructor wqlist {parser_safe_delete($$);}
@@ -2527,11 +2637,12 @@ wqlist ::= ID_TAB_NEW. {
%type wqcte {SqliteWith::CommonTableExpression*}
%destructor wqcte {parser_safe_delete($$);}
-wqcte(X) ::= nm(N) idxlist_opt(IL) AS
+wqcte(X) ::= nm(N) idxlist_opt(IL) wqas(A)
LP select(S) RP. {
- X = new SqliteWith::CommonTableExpression(*(N), *(IL), S);
+ X = new SqliteWith::CommonTableExpression(*(N), *(IL), S, *(A));
delete N;
delete IL;
+ delete A;
objectForTokens = X;
}
@@ -2764,4 +2875,4 @@ filter_clause(X) ::= FILTER LP WHERE
expr(E) RP. {
X = new SqliteFilterOver::Filter(E);
objectForTokens = X;
- }
+ }
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp
index faf8c8e..abe2578 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/statementtokenbuilder.cpp
@@ -1,6 +1,7 @@
#include "statementtokenbuilder.h"
#include "parser/ast/sqlitestatement.h"
#include "common/utils_sql.h"
+#include "common/global.h"
#include <QVariant>
StatementTokenBuilder& StatementTokenBuilder::withKeyword(const QString& value)
@@ -23,7 +24,7 @@ StatementTokenBuilder&StatementTokenBuilder::withStringPossiblyOther(const QStri
if (value.contains("\""))
return withOther(wrapObjIfNeeded(value));
else
- return withOther(wrapObjName(value, NameWrapper::DOUBLE_QUOTE));
+ return withOther(wrapObjName(value, NameWrapper::DOUBLE_QUOTE), false);
}
StatementTokenBuilder& StatementTokenBuilder::withOtherList(const QList<QString>& value, const QString& separator)
@@ -91,7 +92,7 @@ StatementTokenBuilder& StatementTokenBuilder::withBlob(const QString& value)
StatementTokenBuilder& StatementTokenBuilder::withString(const QString& value)
{
- return with(Token::STRING, wrapStringIfNeeded(value));
+ return with(Token::STRING, wrapString(value));
}
StatementTokenBuilder& StatementTokenBuilder::withConflict(SqliteConflictAlgo onConflict)
@@ -145,6 +146,13 @@ StatementTokenBuilder& StatementTokenBuilder::withLiteralValue(const QVariant& v
return *this;
}
+ if (value.userType() == QVariant::ByteArray)
+ {
+ static_qstring(blobLiteral, "X'%1'");
+ withBlob(blobLiteral.arg(QString::fromLatin1(value.toByteArray().toHex())));
+ return *this;
+ }
+
bool ok;
if (value.userType() == QVariant::Double)
{
@@ -163,14 +171,7 @@ StatementTokenBuilder& StatementTokenBuilder::withLiteralValue(const QVariant& v
return *this;
}
- QString str = value.toString();
- if (str.startsWith("x'", Qt::CaseInsensitive) && str.endsWith("'"))
- {
- withBlob(str);
- return *this;
- }
-
- withString(str);
+ withString(value.toString());
return *this;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/token.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/token.cpp
index 41980b4..84f2023 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/token.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/token.cpp
@@ -58,6 +58,8 @@ const QString Token::typeToString(Token::Type type)
{
case Token::CTX_ROWID_KW:
return "CTX_ROWID_KW";
+ case Token::CTX_STRICT_KW:
+ return "CTX_STRICT_KW";
case Token::CTX_NEW_KW:
return "CTX_NEW_KW";
case Token::CTX_OLD_KW:
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/token.h b/SQLiteStudio3/coreSQLiteStudio/parser/token.h
index 1088d9e..d977963 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/token.h
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/token.h
@@ -101,7 +101,8 @@ struct API_EXPORT Token
CTX_ROWID_KW = 0x0034, /**< ROWID keywords is valid at this token position (see isRowIdKeyword()). */
CTX_NEW_KW = 0x0035, /**< The <tt>NEW</tt> keyword is valid at this token position. */
CTX_OLD_KW = 0x0036, /**< The <tt>OLD</tt> keyword is valid at this token position. */
- CTX_ERROR_MESSAGE = 0x0037 /**< Error message string is valid at this token position. */
+ CTX_ERROR_MESSAGE = 0x0037, /**< Error message string is valid at this token position. */
+ CTX_STRICT_KW = 0x0038, /**< STRICT keyword is valid at this token position. */
};
/**
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginsqlite3.cpp b/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginsqlite3.cpp
index 4a19489..854e7b4 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginsqlite3.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginsqlite3.cpp
@@ -10,6 +10,9 @@ Db* DbPluginSqlite3::getInstance(const QString& name, const QString& path, const
if (!db->openForProbing())
{
+ if (errorMessage)
+ *errorMessage = db->getErrorText();
+
delete db;
return nullptr;
}
@@ -17,9 +20,13 @@ Db* DbPluginSqlite3::getInstance(const QString& name, const QString& path, const
SqlQueryPtr results = db->exec("SELECT * FROM sqlite_master");
if (results->isError())
{
+ if (errorMessage)
+ *errorMessage = db->getErrorText();
+
delete db;
return nullptr;
}
+ results.clear();
db->closeQuiet();
return db;
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginsqlite3.h b/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginsqlite3.h
index 79b762a..417c93e 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginsqlite3.h
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginsqlite3.h
@@ -10,7 +10,7 @@ class DbPluginSqlite3 : public BuiltInPlugin, public DbPlugin
SQLITESTUDIO_PLUGIN_TITLE("SQLite 3")
SQLITESTUDIO_PLUGIN_DESC("SQLite 3 databases support.")
- SQLITESTUDIO_PLUGIN_VERSION(10000)
+ SQLITESTUDIO_PLUGIN_VERSION(10001)
SQLITESTUDIO_PLUGIN_AUTHOR("sqlitestudio.pl")
public:
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginstdfilebase.cpp b/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginstdfilebase.cpp
index b890c26..5887eac 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginstdfilebase.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/dbpluginstdfilebase.cpp
@@ -11,6 +11,9 @@ Db *DbPluginStdFileBase::getInstance(const QString &name, const QString &path, c
if (!db->openForProbing())
{
+ if (errorMessage)
+ *errorMessage = db->getErrorText();
+
delete db;
return nullptr;
}
@@ -18,6 +21,9 @@ Db *DbPluginStdFileBase::getInstance(const QString &name, const QString &path, c
SqlQueryPtr results = db->exec("SELECT * FROM sqlite_master");
if (results->isError())
{
+ if (errorMessage)
+ *errorMessage = db->getErrorText();
+
delete db;
return nullptr;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.cpp b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.cpp
index 149e92b..e1d9f98 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.cpp
@@ -22,7 +22,7 @@ bool PopulateRandomEngine::beforePopulating(Db* db, const QString& table)
{
UNUSED(db);
UNUSED(table);
- QRandomGenerator::system()->seed(QDateTime::currentDateTime().toTime_t());
+ randomGenerator = QRandomGenerator::securelySeeded();
range = cfg.PopulateRandom.MaxValue.get() - cfg.PopulateRandom.MinValue.get() + 1;
return (range > 0);
}
@@ -30,7 +30,7 @@ bool PopulateRandomEngine::beforePopulating(Db* db, const QString& table)
QVariant PopulateRandomEngine::nextValue(bool& nextValueError)
{
UNUSED(nextValueError);
- QString randValue = QString::number((QRandomGenerator::system()->generate() % range) + cfg.PopulateRandom.MinValue.get());
+ QString randValue = QString::number((randomGenerator.generate() % range) + cfg.PopulateRandom.MinValue.get());
return (cfg.PopulateRandom.Prefix.get() + randValue + cfg.PopulateRandom.Suffix.get());
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.h b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.h
index f4e9feb..29bb02b 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.h
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.h
@@ -4,6 +4,7 @@
#include "builtinplugin.h"
#include "populateplugin.h"
#include "config_builder.h"
+#include <QRandomGenerator>
CFG_CATEGORIES(PopulateRandomConfig,
CFG_CATEGORY(PopulateRandom,
@@ -43,5 +44,6 @@ class PopulateRandomEngine : public PopulateEngine
private:
CFG_LOCAL(PopulateRandomConfig, cfg)
int range;
+ QRandomGenerator randomGenerator;
};
#endif // POPULATERANDOM_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.cpp b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.cpp
index e2f8733..33ac1d6 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.cpp
@@ -23,7 +23,7 @@ bool PopulateRandomTextEngine::beforePopulating(Db* db, const QString& table)
{
UNUSED(db);
UNUSED(table);
- QRandomGenerator::system()->seed(QDateTime::currentDateTime().toTime_t());
+ randomGenerator = QRandomGenerator::securelySeeded();
range = cfg.PopulateRandomText.MaxLength.get() - cfg.PopulateRandomText.MinLength.get() + 1;
chars = "";
@@ -55,7 +55,7 @@ bool PopulateRandomTextEngine::beforePopulating(Db* db, const QString& table)
QVariant PopulateRandomTextEngine::nextValue(bool& nextValueError)
{
UNUSED(nextValueError);
- int lgt = (QRandomGenerator::system()->generate() % range) + cfg.PopulateRandomText.MinLength.get();
+ int lgt = (randomGenerator.generate() % range) + cfg.PopulateRandomText.MinLength.get();
return randStr(lgt, chars);
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.h b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.h
index 892b302..fdc5c43 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.h
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.h
@@ -4,6 +4,7 @@
#include "builtinplugin.h"
#include "populateplugin.h"
#include "config_builder.h"
+#include <QRandomGenerator>
CFG_CATEGORIES(PopulateRandomTextConfig,
CFG_CATEGORY(PopulateRandomText,
@@ -47,6 +48,7 @@ class PopulateRandomTextEngine : public PopulateEngine
CFG_LOCAL(PopulateRandomTextConfig, cfg)
int range;
QString chars;
+ QRandomGenerator randomGenerator;
};
#endif // POPULATERANDOMTEXT_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/populatescript.cpp b/SQLiteStudio3/coreSQLiteStudio/plugins/populatescript.cpp
index 79a8ac1..8c356f9 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/populatescript.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/populatescript.cpp
@@ -4,6 +4,27 @@
#include "services/pluginmanager.h"
#include "services/notifymanager.h"
+class PopulateFunctionInfoImpl : public ScriptingPlugin::FunctionInfo
+{
+ public:
+ PopulateFunctionInfoImpl(bool rowCount)
+ {
+ args = QStringList({"dbName", "tableName"});
+ if (rowCount)
+ args << "rowCount";
+ }
+
+ QString getName() const {return QString();}
+ QStringList getArguments() const {return args;}
+ bool getUndefinedArgs() const {return false;}
+
+ private:
+ QStringList args;
+};
+
+PopulateFunctionInfoImpl populateInitFunctionInfo(false);
+PopulateFunctionInfoImpl populateNextFunctionInfo(true);
+
PopulateScript::PopulateScript()
{
}
@@ -49,9 +70,9 @@ bool PopulateScriptEngine::beforePopulating(Db* db, const QString& table)
if (!initCode.trimmed().isEmpty())
{
if (dbAwarePlugin)
- dbAwarePlugin->evaluate(context, initCode, evalArgs, db);
+ dbAwarePlugin->evaluate(context, initCode, populateInitFunctionInfo, evalArgs, db);
else
- scriptingPlugin->evaluate(context, initCode, evalArgs);
+ scriptingPlugin->evaluate(context, initCode, populateInitFunctionInfo, evalArgs);
if (scriptingPlugin->hasError(context))
{
@@ -71,9 +92,9 @@ QVariant PopulateScriptEngine::nextValue(bool& nextValueError)
{
QVariant result;
if (dbAwarePlugin)
- result = dbAwarePlugin->evaluate(context, cfg.PopulateScript.Code.get(), evalArgs, db);
+ result = dbAwarePlugin->evaluate(context, cfg.PopulateScript.Code.get(), populateNextFunctionInfo, evalArgs, db);
else
- result = scriptingPlugin->evaluate(context, cfg.PopulateScript.Code.get(), evalArgs);
+ result = scriptingPlugin->evaluate(context, cfg.PopulateScript.Code.get(), populateNextFunctionInfo, evalArgs);
if (scriptingPlugin->hasError(context))
{
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingplugin.h b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingplugin.h
index d081073..80aa758 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingplugin.h
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingplugin.h
@@ -15,33 +15,45 @@ class ScriptingPlugin : virtual public Plugin
virtual ~Context() {}
};
+ class FunctionInfo
+ {
+ public:
+ virtual QString getName() const = 0;
+ virtual QStringList getArguments() const = 0;
+ virtual bool getUndefinedArgs() const = 0;
+ };
+
virtual QString getLanguage() const = 0;
virtual Context* createContext() = 0;
virtual void releaseContext(Context* context) = 0;
virtual void resetContext(Context* context) = 0;
virtual void setVariable(Context* context, const QString& name, const QVariant& value) = 0;
virtual QVariant getVariable(Context* context, const QString& name) = 0;
- virtual QVariant evaluate(Context* context, const QString& code, const QList<QVariant>& args = QList<QVariant>()) = 0;
+ virtual QVariant evaluate(Context* context, const QString& code, const FunctionInfo& funcInfo,
+ const QList<QVariant>& args = QList<QVariant>()) = 0;
virtual bool hasError(Context* context) const = 0;
virtual QString getErrorMessage(Context* context) const = 0;
- virtual QVariant evaluate(const QString& code, const QList<QVariant>& args = QList<QVariant>(), QString* errorMessage = nullptr) = 0;
+ virtual QVariant evaluate(const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args = QList<QVariant>(),
+ QString* errorMessage = nullptr) = 0;
virtual QString getIconPath() const = 0;
};
class DbAwareScriptingPlugin : public ScriptingPlugin
{
public:
- virtual QVariant evaluate(Context* context, const QString& code, const QList<QVariant>& args, Db* db, bool locking = false) = 0;
- virtual QVariant evaluate(const QString& code, const QList<QVariant>& args, Db* db, bool locking = false, QString* errorMessage = nullptr) = 0;
+ virtual QVariant evaluate(Context* context, const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args,
+ Db* db, bool locking = false) = 0;
+ virtual QVariant evaluate(const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db,
+ bool locking = false, QString* errorMessage = nullptr) = 0;
- QVariant evaluate(Context* context, const QString& code, const QList<QVariant>& args)
+ QVariant evaluate(Context* context, const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args)
{
- return evaluate(context, code, args, nullptr, true);
+ return evaluate(context, code, funcInfo, args, nullptr, true);
}
- QVariant evaluate(const QString& code, const QList<QVariant>& args, QString* errorMessage = nullptr)
+ QVariant evaluate(const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, QString* errorMessage = nullptr)
{
- return evaluate(code, args, nullptr, true, errorMessage);
+ return evaluate(code, funcInfo, args, nullptr, true, errorMessage);
}
};
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.cpp b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.cpp
index f88fa85..5305f24 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.cpp
@@ -1,42 +1,39 @@
#include "scriptingqt.h"
-#include "common/unused.h"
#include "common/global.h"
#include "scriptingqtdbproxy.h"
-#include <QScriptEngine>
+#include "services/notifymanager.h"
+#include <QJSEngine>
#include <QMutex>
#include <QMutexLocker>
#include <QDebug>
-static QScriptValue scriptingQtDebug(QScriptContext *context, QScriptEngine *engine)
+ScriptingQt::ScriptingQt()
{
- UNUSED(engine);
- QStringList args;
- for (int i = 0; i < context->argumentCount(); i++)
- args << context->argument(i).toString();
-
- qDebug() << "[ScriptingQt]" << args;
- return QScriptValue();
+ managedMainContextsMutex = new QMutex();
}
-ScriptingQt::ScriptingQt()
+ScriptingQt::~ScriptingQt()
{
- mainEngineMutex = new QMutex();
+ safe_delete(managedMainContextsMutex);
}
-ScriptingQt::~ScriptingQt()
+QJSValueList ScriptingQt::toValueList(QJSEngine* engine, const QList<QVariant>& values)
{
- safe_delete(mainEngineMutex);
+ QJSValueList result;
+ for (const QVariant& value : values)
+ result << engine->toScriptValue(value);
+
+ return result;
}
QString ScriptingQt::getLanguage() const
{
- return QStringLiteral("QtScript");
+ return QStringLiteral("JavaScript");
}
ScriptingPlugin::Context* ScriptingQt::createContext()
{
ContextQt* ctx = new ContextQt;
- ctx->engine->pushContext();
contexts << ctx;
return ctx;
}
@@ -56,60 +53,54 @@ void ScriptingQt::resetContext(ScriptingPlugin::Context* context)
ContextQt* ctx = getContext(context);
if (!ctx)
return;
-
- ctx->engine->popContext();
- ctx->engine->pushContext();
}
-QVariant ScriptingQt::evaluate(const QString& code, const QList<QVariant>& args, Db* db, bool locking, QString* errorMessage)
+QVariant ScriptingQt::evaluate(const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking, QString* errorMessage)
{
- QMutexLocker locker(mainEngineMutex);
-
- // Enter a new context
- QScriptContext* engineContext = mainContext->engine->pushContext();
-
// Call the function
- QVariant result = evaluate(mainContext, engineContext, code, args, db, locking);
+ ContextQt* context = getMainContext();
+ QVariant result = evaluate(context, code, funcInfo, args, db, locking);
// Handle errors
- if (!mainContext->error.isEmpty())
- *errorMessage = mainContext->error;
-
- // Leave the context to reset "this".
- mainContext->engine->popContext();
+ if (!context->error.isEmpty())
+ *errorMessage = context->error;
return result;
}
-QVariant ScriptingQt::evaluate(ScriptingPlugin::Context* context, const QString& code, const QList<QVariant>& args, Db* db, bool locking)
+QVariant ScriptingQt::evaluate(ScriptingPlugin::Context* context, const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking)
{
ContextQt* ctx = getContext(context);
if (!ctx)
return QVariant();
- return evaluate(ctx, ctx->engine->currentContext(), code, args, db, locking);
+ return evaluate(ctx, code, funcInfo, args, db, locking);
}
-QVariant ScriptingQt::evaluate(ContextQt* ctx, QScriptContext* engineContext, const QString& code, const QList<QVariant>& args, Db* db, bool locking)
+QVariant ScriptingQt::evaluate(ContextQt* ctx, const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking)
{
// Define function to call
- QScriptValue functionValue = getFunctionValue(ctx, code);
+ QJSValue functionValue = getFunctionValue(ctx, code, funcInfo);
// Db for this evaluation
ctx->dbProxy->setDb(db);
ctx->dbProxy->setUseDbLocking(locking);
// Call the function
- QScriptValue result;
+ QJSValue result;
if (args.size() > 0)
- result = functionValue.call(engineContext->activationObject(), ctx->engine->toScriptValue(args));
+ result = functionValue.call(toValueList(ctx->engine, args));
else
- result = functionValue.call(engineContext->activationObject());
+ result = functionValue.call();
// Handle errors
ctx->error.clear();
- if (ctx->engine->hasUncaughtException())
- ctx->error = ctx->engine->uncaughtException().toString();
+ if (result.isError())
+ {
+ ctx->error = QString("Uncaught exception at line %1: %2").arg(
+ result.property("lineNumber").toString(),
+ result.toString());
+ }
ctx->dbProxy->setDb(nullptr);
ctx->dbProxy->setUseDbLocking(false);
@@ -117,6 +108,20 @@ QVariant ScriptingQt::evaluate(ContextQt* ctx, QScriptContext* engineContext, co
return convertVariant(result.toVariant());
}
+ScriptingQt::ContextQt* ScriptingQt::getMainContext()
+{
+ if (mainContext.hasLocalData())
+ return mainContext.localData();
+
+ ContextQt* context = new ContextQt();
+ mainContext.setLocalData(context);
+
+ QMutexLocker locker(managedMainContextsMutex);
+ managedMainContexts << context;
+
+ return context;
+}
+
QVariant ScriptingQt::convertVariant(const QVariant& value, bool wrapStrings)
{
switch (value.type())
@@ -148,7 +153,7 @@ QVariant ScriptingQt::convertVariant(const QVariant& value, bool wrapStrings)
case QVariant::List:
{
QStringList list;
- for (const QVariant& var : value.toList())
+ for (QVariant& var : value.toList())
list << convertVariant(var, true).toString();
return "[" + list.join(", ") + "]";
@@ -176,7 +181,7 @@ void ScriptingQt::setVariable(ScriptingPlugin::Context* context, const QString&
if (!ctx)
return;
- ctx->engine->globalObject().setProperty(name, ctx->engine->newVariant(value));
+ ctx->engine->globalObject().setProperty(name, ctx->engine->toScriptValue(value));
}
QVariant ScriptingQt::getVariable(ScriptingPlugin::Context* context, const QString& name)
@@ -185,7 +190,7 @@ QVariant ScriptingQt::getVariable(ScriptingPlugin::Context* context, const QStri
if (!ctx)
return QVariant();
- QScriptValue value = ctx->engine->globalObject().property(name);
+ QJSValue value = ctx->engine->globalObject().property(name);
return convertVariant(value.toVariant());
}
@@ -214,20 +219,28 @@ QString ScriptingQt::getIconPath() const
bool ScriptingQt::init()
{
- QMutexLocker locker(mainEngineMutex);
- mainContext = new ContextQt;
return true;
}
void ScriptingQt::deinit()
{
- for (Context* ctx : contexts)
+ for (Context*& ctx : contexts)
delete ctx;
contexts.clear();
- QMutexLocker locker(mainEngineMutex);
- safe_delete(mainContext);
+ QMutexLocker locker(managedMainContextsMutex);
+ for (ContextQt*& ctx : managedMainContexts)
+ {
+#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
+ ctx->engine->setInterrupted(true);
+#else
+ // FIXME No way to cleanly interrupt QJSEngine before Qt 5.14
+#endif
+ delete ctx;
+ }
+
+ managedMainContexts.clear();
}
ScriptingQt::ContextQt* ScriptingQt::getContext(ScriptingPlugin::Context* context) const
@@ -239,31 +252,30 @@ ScriptingQt::ContextQt* ScriptingQt::getContext(ScriptingPlugin::Context* contex
return ctx;
}
-QScriptValue ScriptingQt::getFunctionValue(ContextQt* ctx, const QString& code)
+QJSValue ScriptingQt::getFunctionValue(ContextQt* ctx, const QString& code, const FunctionInfo& funcInfo)
{
- static const QString fnDef = QStringLiteral("(function () {%1\n})");
+ static const QString fnDef = QStringLiteral("(function (%1) {%2\n})");
- QScriptProgram* prog = nullptr;
- if (!ctx->scriptCache.contains(code))
- {
- prog = new QScriptProgram(fnDef.arg(code));
- ctx->scriptCache.insert(code, prog);
- }
- else
- {
- prog = ctx->scriptCache[code];
- }
- return ctx->engine->evaluate(*prog);
+ QString fullCode = fnDef.arg(funcInfo.getArguments().join(", "), code);
+ QJSValue* func = ctx->scriptCache[fullCode];
+ if (func)
+ return *func;
+
+ func = new QJSValue(ctx->engine->evaluate(fullCode));
+ ctx->scriptCache.insert(fullCode, func);
+ return *func;
}
ScriptingQt::ContextQt::ContextQt()
{
- engine = new QScriptEngine();
+ engine = new QJSEngine();
+ engine->installExtensions(QJSEngine::ConsoleExtension);
- dbProxy = new ScriptingQtDbProxy();
- dbProxyScriptValue = engine->newQObject(dbProxy, QScriptEngine::QtOwnership, QScriptEngine::ExcludeDeleteLater);
+ dbProxy = new ScriptingQtDbProxy(engine);
+ dbProxyScriptValue = engine->newQObject(dbProxy);
+ console = new ScriptingQtConsole(engine);
- engine->globalObject().setProperty("debug", engine->newFunction(scriptingQtDebug));
+ engine->globalObject().setProperty("console", engine->newQObject(console));
engine->globalObject().setProperty("db", dbProxyScriptValue);
scriptCache.setMaxCost(cacheSize);
@@ -271,6 +283,19 @@ ScriptingQt::ContextQt::ContextQt()
ScriptingQt::ContextQt::~ContextQt()
{
- safe_delete(engine);
+ safe_delete(console);
safe_delete(dbProxy);
+ safe_delete(engine);
+}
+
+ScriptingQtConsole::ScriptingQtConsole(QJSEngine* engine) :
+ QObject(), engine(engine)
+{
+}
+
+QJSValue ScriptingQtConsole::log(const QJSValue& value)
+{
+ static_qstring(tpl, "[JS] %1");
+ NOTIFY_MANAGER->info(tpl.arg(ScriptingQt::convertVariant(value.toVariant()).toString()));
+ return QJSValue();
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.h b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.h
index 125789a..a7e156c 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.h
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.h
@@ -6,33 +6,35 @@
#include <QHash>
#include <QVariant>
#include <QCache>
-#include <QScriptValue>
-#include <QScriptProgram>
+#include <QJSValue>
+#include <QThreadStorage>
-class QScriptEngine;
class QMutex;
-class QScriptContext;
class ScriptingQtDbProxy;
+class ScriptingQtConsole;
class ScriptingQt : public BuiltInPlugin, public DbAwareScriptingPlugin
{
Q_OBJECT
- SQLITESTUDIO_PLUGIN_TITLE("Qt scripting")
- SQLITESTUDIO_PLUGIN_DESC("Qt scripting support.")
- SQLITESTUDIO_PLUGIN_VERSION(10000)
+ SQLITESTUDIO_PLUGIN_TITLE("JavaScript scripting")
+ SQLITESTUDIO_PLUGIN_DESC("JavaScript scripting support.")
+ SQLITESTUDIO_PLUGIN_VERSION(10100)
SQLITESTUDIO_PLUGIN_AUTHOR("sqlitestudio.pl")
public:
ScriptingQt();
~ScriptingQt();
+ static QJSValueList toValueList(QJSEngine* engine, const QList<QVariant>& values);
+ static QVariant convertVariant(const QVariant& value, bool wrapStrings = false);
+
QString getLanguage() const;
Context* createContext();
void releaseContext(Context* context);
void resetContext(Context* context);
- QVariant evaluate(const QString& code, const QList<QVariant>& args, Db* db, bool locking = false, QString* errorMessage = nullptr);
- QVariant evaluate(Context* context, const QString& code, const QList<QVariant>& args, Db* db, bool locking = false);
+ QVariant evaluate(const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking = false, QString* errorMessage = nullptr);
+ QVariant evaluate(Context* context, const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking = false);
void setVariable(Context* context, const QString& name, const QVariant& value);
QVariant getVariable(Context* context, const QString& name);
bool hasError(Context* context) const;
@@ -50,23 +52,39 @@ class ScriptingQt : public BuiltInPlugin, public DbAwareScriptingPlugin
ContextQt();
~ContextQt();
- QScriptEngine* engine = nullptr;
- QCache<QString,QScriptProgram> scriptCache;
+ QJSEngine* engine = nullptr;
+ QCache<QString, QJSValue> scriptCache;
QString error;
ScriptingQtDbProxy* dbProxy = nullptr;
- QScriptValue dbProxyScriptValue;
+ ScriptingQtConsole* console = nullptr;
+ QJSValue dbProxyScriptValue;
};
ContextQt* getContext(ScriptingPlugin::Context* context) const;
- QScriptValue getFunctionValue(ContextQt* ctx, const QString& code);
- QVariant evaluate(ContextQt* ctx, QScriptContext* engineContext, const QString& code, const QList<QVariant>& args, Db* db, bool locking);
- QVariant convertVariant(const QVariant& value, bool wrapStrings = false);
+ QJSValue getFunctionValue(ContextQt* ctx, const QString& code, const FunctionInfo& funcInfo);
+ QVariant evaluate(ContextQt* ctx, const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking);
+ ContextQt* getMainContext();
static const constexpr int cacheSize = 5;
- ContextQt* mainContext = nullptr;
+ QThreadStorage<ContextQt*> mainContext;
QList<Context*> contexts;
- QMutex* mainEngineMutex = nullptr;
+ QList<ContextQt*> managedMainContexts;
+ QMutex* managedMainContextsMutex = nullptr;
+};
+
+class ScriptingQtConsole : public QObject
+{
+ Q_OBJECT
+
+ public:
+ ScriptingQtConsole(QJSEngine* engine);
+
+ private:
+ QJSEngine* engine = nullptr;
+
+ public slots:
+ QJSValue log(const QJSValue& value);
};
#endif // SCRIPTINGQT_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.png b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.png
index 220ea27..ce8e60a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.png
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqt.png
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqtdbproxy.cpp b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqtdbproxy.cpp
index ff3c7ee..cc9fa2d 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqtdbproxy.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqtdbproxy.cpp
@@ -1,11 +1,11 @@
+#include "scriptingqt.h"
#include "scriptingqtdbproxy.h"
#include "db/db.h"
#include "db/sqlquery.h"
-#include <QScriptContext>
-#include <QScriptEngine>
+#include <QJSEngine>
-ScriptingQtDbProxy::ScriptingQtDbProxy(QObject *parent) :
- QObject(parent)
+ScriptingQtDbProxy::ScriptingQtDbProxy(QJSEngine* engine, QObject *parent) :
+ QObject(parent), engine(engine)
{
}
Db* ScriptingQtDbProxy::getDb() const
@@ -40,12 +40,12 @@ QHash<QString, QVariant> ScriptingQtDbProxy::mapToHash(const QMap<QString, QVari
}
QVariant ScriptingQtDbProxy::evalInternal(const QString& sql, const QList<QVariant>& listArgs, const QMap<QString, QVariant>& mapArgs,
- bool singleCell, const QScriptValue* funcPtr)
+ bool singleCell, const QJSValue* funcPtr)
{
if (!db)
{
QString funcName = singleCell ? QStringLiteral("db.onecolumn()") : QStringLiteral("db.eval()");
- context()->throwError(tr("No database available in current context, while called QtScript's %1 command.").arg(funcName));
+ engine->throwError(tr("No database available in current context, while called JavaScript's %1 command.").arg(funcName));
return evalInternalErrorResult(singleCell);
}
@@ -62,7 +62,7 @@ QVariant ScriptingQtDbProxy::evalInternal(const QString& sql, const QList<QVaria
if (results->isError())
{
QString funcName = singleCell ? QStringLiteral("db.onecolumn()") : QStringLiteral("db.eval()");
- context()->throwError(tr("Error from %1: %2").arg(funcName, results->getErrorText()));
+ engine->throwError(tr("Error from %1: %2").arg(funcName, results->getErrorText()));
return evalInternalErrorResult(singleCell);
}
@@ -72,15 +72,15 @@ QVariant ScriptingQtDbProxy::evalInternal(const QString& sql, const QList<QVaria
}
else if (funcPtr)
{
- QScriptValue func(*funcPtr);
+ QJSValue func(*funcPtr);
SqlResultsRowPtr row;
- QScriptValue funcArgs;
- QScriptValue funcResult;
+ QJSValueList funcArgs;
+ QJSValue funcResult;
while (results->hasNext())
{
row = results->next();
- funcArgs = context()->engine()->toScriptValue(row->valueList());
- funcResult = func.call(context()->thisObject(), funcArgs);
+ funcArgs = ScriptingQt::toValueList(engine, row->valueList());
+ funcResult = func.call(funcArgs);
if (!funcResult.isUndefined())
break;
}
@@ -123,12 +123,12 @@ QVariant ScriptingQtDbProxy::eval(const QString& sql, const QMap<QString, QVaria
return evalInternal(sql, QList<QVariant>(), args, false);
}
-QVariant ScriptingQtDbProxy::eval(const QString& sql, const QList<QVariant>& args, const QScriptValue& func)
+QVariant ScriptingQtDbProxy::eval(const QString& sql, const QList<QVariant>& args, const QJSValue& func)
{
return evalInternal(sql, args, QMap<QString, QVariant>(), false, &func);
}
-QVariant ScriptingQtDbProxy::eval(const QString& sql, const QMap<QString, QVariant>& args, const QScriptValue& func)
+QVariant ScriptingQtDbProxy::eval(const QString& sql, const QMap<QString, QVariant>& args, const QJSValue& func)
{
return evalInternal(sql, QList<QVariant>(), args, false, &func);
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqtdbproxy.h b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqtdbproxy.h
index add9540..9a86f6b 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqtdbproxy.h
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingqtdbproxy.h
@@ -2,18 +2,18 @@
#define SCRIPTINGQTDBPROXY_H
#include <QObject>
-#include <QScriptable>
#include <QHash>
#include <QList>
#include <QVariant>
+#include <QJSValue>
class Db;
-class ScriptingQtDbProxy : public QObject, protected QScriptable
+class ScriptingQtDbProxy : public QObject
{
Q_OBJECT
public:
- explicit ScriptingQtDbProxy(QObject *parent = 0);
+ explicit ScriptingQtDbProxy(QJSEngine* engine, QObject *parent = 0);
Db* getDb() const;
void setDb(Db* value);
@@ -23,20 +23,21 @@ class ScriptingQtDbProxy : public QObject, protected QScriptable
private:
QVariant evalInternal(const QString& sql, const QList<QVariant>& listArgs, const QMap<QString, QVariant>& mapArgs, bool singleCell,
- const QScriptValue* funcPtr = nullptr);
+ const QJSValue* funcPtr = nullptr);
QVariant evalInternalErrorResult(bool singleCell);
static QHash<QString, QVariant> mapToHash(const QMap<QString, QVariant>& map);
Db* db = nullptr;
bool useDbLocking = false;
+ QJSEngine* engine = nullptr;
public slots:
QVariant eval(const QString& sql);
QVariant eval(const QString& sql, const QList<QVariant>& args);
QVariant eval(const QString& sql, const QMap<QString, QVariant>& args);
- QVariant eval(const QString& sql, const QList<QVariant>& args, const QScriptValue& func);
- QVariant eval(const QString& sql, const QMap<QString, QVariant>& args, const QScriptValue& func);
+ QVariant eval(const QString& sql, const QList<QVariant>& args, const QJSValue& func);
+ QVariant eval(const QString& sql, const QMap<QString, QVariant>& args, const QJSValue& func);
QVariant onecolumn(const QString& sql, const QList<QVariant>& args);
QVariant onecolumn(const QString& sql, const QMap<QString, QVariant>& args);
};
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp
index 93a6d91..7edd7e7 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.cpp
@@ -38,7 +38,7 @@ void ScriptingSql::resetContext(ScriptingPlugin::Context* context)
dynamic_cast<SqlContext*>(context)->errorText.clear();
}
-QVariant ScriptingSql::evaluate(ScriptingPlugin::Context* context, const QString& code, const QList<QVariant>& args, Db* db, bool locking)
+QVariant ScriptingSql::evaluate(ScriptingPlugin::Context* context, const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking)
{
SqlContext* ctx = dynamic_cast<SqlContext*>(context);
ctx->errorText.clear();
@@ -58,14 +58,15 @@ QVariant ScriptingSql::evaluate(ScriptingPlugin::Context* context, const QString
QString sql = code;
if (ctx->variables.size() > 0)
{
- QString value;
for (const QString& key : ctx->variables.keys())
{
- value = "'" + ctx->variables[key].toString() + "'";
+ QString value = "'" + ctx->variables[key].toString() + "'";
sql.replace(":" + key, value).replace("@" + key, value).replace("$" + key, value);
}
}
+ replaceNamedArgs(sql, funcInfo, args);
+
SqlQueryPtr result = theDb->exec(sql, args, execFlags);
if (result->isError())
{
@@ -76,7 +77,7 @@ QVariant ScriptingSql::evaluate(ScriptingPlugin::Context* context, const QString
return result->getSingleCell();
}
-QVariant ScriptingSql::evaluate(const QString& code, const QList<QVariant>& args, Db* db, bool locking, QString* errorMessage)
+QVariant ScriptingSql::evaluate(const QString& code, const FunctionInfo& funcInfo, const QList<QVariant>& args, Db* db, bool locking, QString* errorMessage)
{
Db* theDb = nullptr;
@@ -91,7 +92,10 @@ QVariant ScriptingSql::evaluate(const QString& code, const QList<QVariant>& args
if (!locking)
execFlags |= Db::Flag::NO_LOCK;
- SqlQueryPtr result = theDb->exec(code, args, execFlags);
+ QString sql = code;
+ replaceNamedArgs(sql, funcInfo, args);
+
+ SqlQueryPtr result = theDb->exec(sql, args, execFlags);
if (result->isError())
{
*errorMessage = result->getErrorText();
@@ -144,3 +148,18 @@ void ScriptingSql::deinit()
safe_delete(memDb);
}
+
+void ScriptingSql::replaceNamedArgs(QString& sql, const ScriptingPlugin::FunctionInfo& funcInfo, const QList<QVariant>& args)
+{
+ int i = 0;
+ for (const QString& key : funcInfo.getArguments())
+ {
+ if (i >= args.size())
+ break;
+
+ QString value = "'" + args[i++].toString() + "'";
+ sql.replace(":" + key, value)
+ .replace("@" + key, value)
+ .replace("$" + key, value);
+ }
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.h b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.h
index 7b8fd3b..8fa51db 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.h
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/scriptingsql.h
@@ -28,8 +28,10 @@ class ScriptingSql : public BuiltInPlugin, public DbAwareScriptingPlugin
Context* createContext();
void releaseContext(Context* context);
void resetContext(Context* context);
- QVariant evaluate(Context* context, const QString& code, const QList<QVariant>& args, Db* db, bool locking);
- QVariant evaluate(const QString& code, const QList<QVariant>& args, Db* db, bool locking, QString* errorMessage);
+ QVariant evaluate(Context* context, const QString& code, const FunctionInfo& funcInfo,
+ const QList<QVariant>& args, Db* db, bool locking);
+ QVariant evaluate(const QString& code, const FunctionInfo& funcInfo,
+ const QList<QVariant>& args, Db* db, bool locking, QString* errorMessage);
void setVariable(Context* context, const QString& name, const QVariant& value);
QVariant getVariable(Context* context, const QString& name);
bool hasError(Context* context) const;
@@ -39,6 +41,8 @@ class ScriptingSql : public BuiltInPlugin, public DbAwareScriptingPlugin
void deinit();
private:
+ void replaceNamedArgs(QString& sql, const FunctionInfo& funcInfo, const QList<QVariant>& args);
+
QList<Context*> contexts;
Db* memDb = nullptr;
};
diff --git a/SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp b/SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp
index 3f01350..af201ba 100644
--- a/SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/querygenerator.cpp
@@ -159,8 +159,7 @@ QString QueryGenerator::generateSelectFromSelect(Db* db, const QString& initialS
static_qstring(tpl, "SELECT %1 FROM (%2)%3");
// Resolve all columns of the select
- SelectResolver resolver(db, initialSelect, dbNameToAttach);
- QList<SelectResolver::Column> columns = resolver.resolveColumnsFromFirstCore();
+ QList<SelectResolver::Column> columns = SelectResolver::sqliteResolveColumns(db, initialSelect, dbNameToAttach);
// Generate result columns
QStringList resCols;
diff --git a/SQLiteStudio3/coreSQLiteStudio/querymodel.cpp b/SQLiteStudio3/coreSQLiteStudio/querymodel.cpp
index 8d20b70..5e57db6 100644
--- a/SQLiteStudio3/coreSQLiteStudio/querymodel.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/querymodel.cpp
@@ -1,6 +1,7 @@
#include "querymodel.h"
#include "db/db.h"
#include "common/unused.h"
+#include "db/sqlquery.h"
QueryModel::QueryModel(Db* db, QObject *parent) :
QAbstractTableModel(parent), db(db)
@@ -15,7 +16,7 @@ void QueryModel::refresh()
beginResetModel();
loadedRows.clear();
SqlQueryPtr results = db->exec(query);
- for (SqlResultsRowPtr row : results->getAll())
+ for (SqlResultsRowPtr& row : results->getAll())
loadedRows += row;
columns = results->columnCount();
diff --git a/SQLiteStudio3/coreSQLiteStudio/querymodel.h b/SQLiteStudio3/coreSQLiteStudio/querymodel.h
index 6c7e48a..9d4c1a2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/querymodel.h
+++ b/SQLiteStudio3/coreSQLiteStudio/querymodel.h
@@ -1,7 +1,6 @@
#ifndef SQLQUERYMODEL_H
#define SQLQUERYMODEL_H
-#include "db/sqlquery.h"
#include "db/sqlresultsrow.h"
#include <QList>
#include <QAbstractTableModel>
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.cpp b/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.cpp
index 3fbe83c..45dd2cd 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.cpp
@@ -4,19 +4,6 @@
*
* This file is part of rsa - the RSA implementation in C++.
*
- * rsa is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * rsa is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with rsa. If not, see <http://www.gnu.org/licenses/>.
- *
* BigInt.cpp
*
* Author: Nedim Srndic
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.h b/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.h
index 6d59c7a..d377247 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.h
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/BigInt.h
@@ -4,19 +4,6 @@
*
* This file is part of rsa - the RSA implementation in C++.
*
- * rsa is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * rsa is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with rsa. If not, see <http://www.gnu.org/licenses/>.
- *
* BigInt.h
*
* Author: Nedim Srndic
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/Key.cpp b/SQLiteStudio3/coreSQLiteStudio/rsa/Key.cpp
index adc4a1f..27238bc 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/Key.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/Key.cpp
@@ -4,19 +4,6 @@
*
* This file is part of rsa - the RSA implementation in C++.
*
- * rsa is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * rsa is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with rsa. If not, see <http://www.gnu.org/licenses/>.
- *
* Key.cpp
*
* Author: Nedim Srndic
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/Key.h b/SQLiteStudio3/coreSQLiteStudio/rsa/Key.h
index f1d2ee6..dfda7e0 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/Key.h
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/Key.h
@@ -4,19 +4,6 @@
*
* This file is part of rsa - the RSA implementation in C++.
*
- * rsa is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * rsa is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with rsa. If not, see <http://www.gnu.org/licenses/>.
- *
* Key.h
*
* Author: Nedim Srndic
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.cpp b/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.cpp
index 7780288..e705db2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.cpp
@@ -4,19 +4,6 @@
*
* This file is part of rsa - the RSA implementation in C++.
*
- * rsa is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * rsa is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with rsa. If not, see <http://www.gnu.org/licenses/>.
- *
* KeyPair.cpp
*
* Author: Nedim Srndic
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.h b/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.h
index 153195a..a93e485 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.h
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/KeyPair.h
@@ -4,19 +4,6 @@
*
* This file is part of rsa - the RSA implementation in C++.
*
- * rsa is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * rsa is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with rsa. If not, see <http://www.gnu.org/licenses/>.
- *
* KeyPair.h
*
* Author: Nedim Srndic
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.cpp b/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.cpp
index 7f38f55..f476a30 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.cpp
@@ -4,19 +4,6 @@
*
* This file is part of rsa - the RSA implementation in C++.
*
- * rsa is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * rsa is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with rsa. If not, see <http://www.gnu.org/licenses/>.
- *
* PrimeGenerator.cpp
*
* Author: Nedim Srndic
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.h b/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.h
index 64ee9f6..b8fda82 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.h
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/PrimeGenerator.h
@@ -4,19 +4,6 @@
*
* This file is part of rsa - the RSA implementation in C++.
*
- * rsa is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * rsa is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with rsa. If not, see <http://www.gnu.org/licenses/>.
- *
* PrimeGenerator.h
*
* A class used to generate large prime or random numbers.
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/RSA.cpp b/SQLiteStudio3/coreSQLiteStudio/rsa/RSA.cpp
index 0d8e921..5021e59 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/RSA.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/RSA.cpp
@@ -4,19 +4,6 @@
*
* This file is part of rsa - the RSA implementation in C++.
*
- * rsa is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * rsa is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with rsa. If not, see <http://www.gnu.org/licenses/>.
- *
* RSA.cpp
*
* Author: Nedim Srndic
diff --git a/SQLiteStudio3/coreSQLiteStudio/rsa/RSA.h b/SQLiteStudio3/coreSQLiteStudio/rsa/RSA.h
index 501261e..b6343ea 100644
--- a/SQLiteStudio3/coreSQLiteStudio/rsa/RSA.h
+++ b/SQLiteStudio3/coreSQLiteStudio/rsa/RSA.h
@@ -4,19 +4,6 @@
*
* This file is part of rsa - the RSA implementation in C++.
*
- * rsa is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * rsa is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with rsa. If not, see <http://www.gnu.org/licenses/>.
- *
* RSA.h
*
* Author: Nedim Srndic
diff --git a/SQLiteStudio3/coreSQLiteStudio/schemaresolver.cpp b/SQLiteStudio3/coreSQLiteStudio/schemaresolver.cpp
index 4d65461..129bb43 100644
--- a/SQLiteStudio3/coreSQLiteStudio/schemaresolver.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/schemaresolver.cpp
@@ -98,14 +98,15 @@ StrHash<QStringList> SchemaResolver::getGroupedTriggers(const QString &database)
StrHash<QStringList> SchemaResolver::getGroupedObjects(const QString &database, const QStringList &inputList, SqliteQueryType type)
{
QString strType = sqliteQueryTypeToString(type);
+ ObjectType objectType = objectTypeFromQueryType(type);
StrHash<QStringList> groupedObjects;
SqliteQueryPtr parsedQuery;
SqliteTableRelatedDdlPtr tableRelatedDdl;
- for (QString object : inputList)
+ for (const QString& object : inputList)
{
- parsedQuery = getParsedObject(database, object, ANY);
+ parsedQuery = getParsedObject(database, object, objectType);
if (!parsedQuery)
{
qWarning() << "Could not get parsed object for " << strType << ":" << object;
@@ -116,7 +117,8 @@ StrHash<QStringList> SchemaResolver::getGroupedObjects(const QString &database,
if (!tableRelatedDdl)
{
qWarning() << "Parsed object is not of expected type. Expected" << strType
- << ", but got" << sqliteQueryTypeToString(parsedQuery->queryType);
+ << ", but got" << sqliteQueryTypeToString(parsedQuery->queryType)
+ << "; Object db and name:" << database << object;
continue;
}
@@ -145,12 +147,12 @@ QSet<QString> SchemaResolver::getDatabases()
return db->getAllAttaches();
}
-QStringList SchemaResolver::getTableColumns(const QString& table)
+QStringList SchemaResolver::getTableColumns(const QString& table, bool onlyReal)
{
- return getTableColumns("main", table);
+ return getTableColumns("main", table, onlyReal);
}
-QStringList SchemaResolver::getTableColumns(const QString &database, const QString &table)
+QStringList SchemaResolver::getTableColumns(const QString &database, const QString &table, bool onlyReal)
{
QStringList columns; // result
@@ -178,7 +180,12 @@ QStringList SchemaResolver::getTableColumns(const QString &database, const QStri
// Now we have a regular table, let's extract columns.
for (SqliteCreateTable::Column* column : createTable->columns)
+ {
+ if (onlyReal && column->hasConstraint(SqliteCreateTable::Column::Constraint::GENERATED))
+ continue;
+
columns << column->name;
+ }
return columns;
}
@@ -272,12 +279,14 @@ QList<SelectResolver::Column> SchemaResolver::getViewColumnObjects(const QString
SqliteCreateTablePtr SchemaResolver::virtualTableAsRegularTable(const QString &database, const QString &table)
{
- QString strippedName = stripObjName(table);
+ // The "table" name here used to be stripped with stripObjName(), but actually [abc] is a proper table name,
+ // that should not be stripped. Any names passed to SchemaResolver cannot be wrapped.
+
QString dbName = getPrefixDb(database);
// Create temp table to see columns.
- QString newTable = db->getUniqueNewObjectName(strippedName);
- QString origTable = wrapObjIfNeeded(strippedName);
+ QString newTable = db->getUniqueNewObjectName(table);
+ QString origTable = wrapObjIfNeeded(table);
SqlQueryPtr tempTableRes = db->exec(QString("CREATE TEMP TABLE %1 AS SELECT * FROM %2.%3 LIMIT 0;").arg(newTable, dbName, origTable), dbFlags);
if (tempTableRes->isError())
qWarning() << "Could not create temp table to identify virtual table columns of virtual table " << origTable << ". Error details:" << tempTableRes->getErrorText();
@@ -303,6 +312,9 @@ QString SchemaResolver::getObjectDdl(const QString& name, ObjectType type)
QString SchemaResolver::getObjectDdl(const QString &database, const QString &name, ObjectType type)
{
+ // The "name" here used to be stripped with stripObjName(), but actually [abc] is a proper object name,
+ // that should not be stripped. Any names passed to SchemaResolver cannot be wrapped.
+
if (name.isNull())
return QString();
@@ -310,13 +322,13 @@ QString SchemaResolver::getObjectDdl(const QString &database, const QString &nam
QString dbName = getPrefixDb(database);
// In case of sqlite_master or sqlite_temp_master we have static definitions
- QString lowerName = stripObjName(name).toLower();
+ QString lowerName = name.toLower();
if (lowerName == "sqlite_master")
return getSqliteMasterDdl(false);
else if (lowerName == "sqlite_temp_master")
return getSqliteMasterDdl(true);
else if (lowerName.startsWith("sqlite_autoindex_"))
- return getSqliteAutoIndexDdl(dbName, stripObjName(name));
+ return getSqliteAutoIndexDdl(dbName, name);
// Standalone or temp table?
QString targetTable = "sqlite_master";
@@ -648,7 +660,7 @@ QString SchemaResolver::getSqliteAutoIndexDdl(const QString& database, const QSt
}
// Check the unique flag of the index
- static_qstring(idxUniqueQueryTpl, "SELECT unique FROM %1.pragma_index_list(%2) WHERE name = ?");
+ static_qstring(idxUniqueQueryTpl, "SELECT [unique] FROM %1.pragma_index_list(%2) WHERE name = ?");
SqlQueryPtr uniqRes = db->exec(idxUniqueQueryTpl.arg(dbName, wrapString(table)), {index}, dbFlags);
bool unique = uniqRes->getSingleCell().toInt() > 0;
@@ -846,6 +858,47 @@ QStringList SchemaResolver::getFkReferencingTables(const QString& table, const Q
return tables;
}
+SchemaResolver::ObjectType SchemaResolver::objectTypeFromQueryType(const SqliteQueryType& queryType)
+{
+ switch (queryType)
+ {
+ case SqliteQueryType::CreateIndex:
+ return INDEX;
+ case SqliteQueryType::CreateTrigger:
+ return TRIGGER;
+ case SqliteQueryType::CreateView:
+ return VIEW;
+ case SqliteQueryType::CreateTable:
+ case SqliteQueryType::CreateVirtualTable:
+ return TABLE;
+ case SqliteQueryType::Select:
+ case SqliteQueryType::Pragma:
+ case SqliteQueryType::UNDEFINED:
+ case SqliteQueryType::EMPTY:
+ case SqliteQueryType::AlterTable:
+ case SqliteQueryType::Analyze:
+ case SqliteQueryType::Attach:
+ case SqliteQueryType::BeginTrans:
+ case SqliteQueryType::CommitTrans:
+ case SqliteQueryType::Copy:
+ case SqliteQueryType::Delete:
+ case SqliteQueryType::Detach:
+ case SqliteQueryType::DropIndex:
+ case SqliteQueryType::DropTable:
+ case SqliteQueryType::DropTrigger:
+ case SqliteQueryType::DropView:
+ case SqliteQueryType::Insert:
+ case SqliteQueryType::Reindex:
+ case SqliteQueryType::Release:
+ case SqliteQueryType::Rollback:
+ case SqliteQueryType::Savepoint:
+ case SqliteQueryType::Update:
+ case SqliteQueryType::Vacuum:
+ return ANY;
+ }
+ return ANY;
+}
+
QStringList SchemaResolver::getIndexesForTable(const QString& database, const QString& table)
{
static_qstring(idxForTableTpl, "SELECT name FROM %1.pragma_index_list(%2)");
@@ -1150,7 +1203,7 @@ bool SchemaResolver::isWithoutRowIdTable(const QString& database, const QString&
if (!createTable)
return false;
- return !createTable->withOutRowId.isNull();
+ return createTable->withOutRowId;
}
bool SchemaResolver::isVirtualTable(const QString& database, const QString& table)
@@ -1195,7 +1248,7 @@ QStringList SchemaResolver::getWithoutRowIdTableColumns(const QString& database,
if (!createTable)
return columns;
- if (createTable->withOutRowId.isNull())
+ if (!createTable->withOutRowId)
return columns; // it's not WITHOUT ROWID table
return createTable->getPrimaryKeyColumns();
@@ -1252,6 +1305,31 @@ void SchemaResolver::setNoDbLocking(bool value)
dbFlags ^= Db::Flag::NO_LOCK;
}
+QString SchemaResolver::normalizeCaseObjectName(const QString& name)
+{
+ static_qstring(sql, "SELECT name FROM main.sqlite_master WHERE lower(name) = lower(?);");
+ return normalizeCaseObjectNameByQuery(sql, name);
+}
+
+QString SchemaResolver::normalizeCaseObjectName(const QString& database, const QString& name)
+{
+ static_qstring(sql, "SELECT name FROM %1.sqlite_master WHERE lower(name) = lower(?);");
+ QString query = sql.arg(wrapObjIfNeeded(database));
+ return normalizeCaseObjectNameByQuery(query, name);
+}
+
+QString SchemaResolver::normalizeCaseObjectNameByQuery(const QString& query, const QString& name)
+{
+ SqlQueryPtr results = db->exec(query, {name});
+ if (results->isError())
+ {
+ qCritical() << "Could not get object name normalized case. Object name:" << name << ", error:"
+ << results->getErrorText();
+ return name;
+ }
+
+ return results->getSingleCell().toString();
+}
SchemaResolver::ObjectCacheKey::ObjectCacheKey(Type type, Db* db, const QString& value1, const QString& value2, const QString& value3) :
type(type), db(db), value1(value1), value2(value2), value3(value3)
diff --git a/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h b/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h
index e7bf2c8..cfb5bd5 100644
--- a/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h
+++ b/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h
@@ -15,6 +15,7 @@
#include "db/db.h"
#include "common/strhash.h"
#include "common/expiringcache.h"
+#include "parser/ast/sqlitequerytype.h"
#include <QStringList>
class SqliteCreateTable;
@@ -110,6 +111,7 @@ class API_EXPORT SchemaResolver
/**
* @brief getTableColumns Get column names for a table.
* @param table Table to query.
+ * @param onlyReal If true, the method will skip columns that are not real (like GENERATED columns).
* @return List of column names of the table.
* This does something similar to getting list of columns with
* PRAGMA table_info(), but the pragma in Sqlite2 doesn't support
@@ -117,16 +119,17 @@ class API_EXPORT SchemaResolver
* to make this possible. It finds table's DDL and parses it,
* then extracts list of columns from parsing results.
*/
- QStringList getTableColumns(const QString& table);
+ QStringList getTableColumns(const QString& table, bool onlyReal = false);
/**
* @brief getTableColumns Get column names for a table.
* @param database Attached database name.
* @param table Table to query.
+ * @param onlyReal If true, the method will skip columns that are not real (like GENERATED columns).
* @return List of column names of the table.
* @overload
*/
- QStringList getTableColumns(const QString& database, const QString& table);
+ QStringList getTableColumns(const QString& database, const QString& table, bool onlyReal = false);
QList<DataType> getTableColumnDataTypes(const QString& table, int expectedNumberOfTypes = -1);
QList<DataType> getTableColumnDataTypes(const QString& database, const QString& table, int expectedNumberOfTypes = -1);
@@ -178,6 +181,7 @@ class API_EXPORT SchemaResolver
QString getSqliteAutoIndexDdl(const QString& database, const QString& index);
static QString getSqliteMasterDdl(bool temp = false);
static QStringList getFkReferencingTables(const QString& table, const QList<SqliteCreateTablePtr>& allParsedTables);
+ static ObjectType objectTypeFromQueryType(const SqliteQueryType& queryType);
QStringList getCollations();
@@ -187,6 +191,9 @@ class API_EXPORT SchemaResolver
bool getNoDbLocking() const;
void setNoDbLocking(bool value);
+ QString normalizeCaseObjectName(const QString& name);
+ QString normalizeCaseObjectName(const QString& database, const QString& name);
+
static QString objectTypeToString(ObjectType type);
static ObjectType stringToObjectType(const QString& type);
static void staticInit();
@@ -204,6 +211,7 @@ class API_EXPORT SchemaResolver
QString getObjectDdlWithDifficultName(const QString& dbName, const QString& lowerName, QString targetTable, ObjectType type);
QString getObjectDdlWithSimpleName(const QString& dbName, const QString& lowerName, QString targetTable, ObjectType type);
StrHash<QString> getIndexesWithTables(const QString& database = QString());
+ QString normalizeCaseObjectNameByQuery(const QString& query, const QString& name);
template <class T>
StrHash<QSharedPointer<T>> getAllParsedObjectsForType(const QString& database, const QString& type);
diff --git a/SQLiteStudio3/coreSQLiteStudio/selectresolver.cpp b/SQLiteStudio3/coreSQLiteStudio/selectresolver.cpp
index 3db029d..8a3efa8 100644
--- a/SQLiteStudio3/coreSQLiteStudio/selectresolver.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/selectresolver.cpp
@@ -1,9 +1,7 @@
#include "selectresolver.h"
#include "parser/token.h"
-#include "parser/lexer.h"
#include "parser/keywords.h"
#include "schemaresolver.h"
-#include "parser/ast/sqlitecreateview.h"
#include "common/global.h"
#include <QDebug>
#include <QHash>
@@ -55,8 +53,8 @@ QList<QList<SelectResolver::Column>> SelectResolver::resolve(SqliteSelect *selec
{
errors.clear();
extractCte(select);
- QList<QList<SelectResolver::Column> > results;
- for (SqliteSelect::Core* core : select->coreSelects)
+ QList<QList<SelectResolver::Column>> results;
+ for (SqliteSelect::Core*& core : select->coreSelects)
{
results << resolveCore(core);
currentCoreResults.clear();
@@ -77,17 +75,39 @@ QList<QList<SelectResolver::Column> > SelectResolver::resolveAvailableColumns(Sq
errors.clear();
extractCte(select);
QList<QList<SelectResolver::Column> > results;
- for (SqliteSelect::Core* core : select->coreSelects)
+ for (SqliteSelect::Core*& core : select->coreSelects)
results << resolveAvailableCoreColumns(core);
return results;
}
+QList<SelectResolver::Column> SelectResolver::resolveAvailableColumns(SqliteSelect::Core::JoinSource* joinSrc)
+{
+ errors.clear();
+ return resolveJoinSource(joinSrc);
+}
+
QSet<SelectResolver::Table> SelectResolver::resolveTables(SqliteSelect::Core *selectCore)
{
- QSet<Table> tables;
extractCte(selectCore);
- QList<Column> columns = resolveAvailableColumns(selectCore);
+ return resolveTablesFromCore(selectCore);
+}
+
+QList<QSet<SelectResolver::Table>> SelectResolver::resolveTables(SqliteSelect *select)
+{
+ extractCte(select);
+ QList<QSet<Table>> results;
+ for (SqliteSelect::Core*& core : select->coreSelects)
+ results << resolveTablesFromCore(core);
+
+ return results;
+}
+
+QSet<SelectResolver::Table> SelectResolver::resolveTables(SqliteSelect::Core::JoinSource* joinSrc)
+{
+ errors.clear();
+ QSet<Table> tables;
+ QList<Column> columns = resolveAvailableColumns(joinSrc);
for (const Column& col : columns)
{
if (col.type != Column::Type::COLUMN)
@@ -95,30 +115,21 @@ QSet<SelectResolver::Table> SelectResolver::resolveTables(SqliteSelect::Core *se
tables << col.getTable();
}
-
return tables;
}
-QList<QSet<SelectResolver::Table> > SelectResolver::resolveTables(SqliteSelect *select)
+QSet<SelectResolver::Table> SelectResolver::resolveTablesFromCore(SqliteSelect::Core *selectCore)
{
- QList<QSet<Table> > results;
- extractCte(select);
- QList<QList<Column> > columnLists = resolveAvailableColumns(select);
- for (const QList<Column>& columns : columnLists)
+ QSet<Table> tables;
+ QList<Column> columns = resolveAvailableColumns(selectCore);
+ for (const Column& col : columns)
{
- QSet<Table> tables;
- for (const Column& col : columns)
- {
- if (col.type != Column::Type::COLUMN)
- continue;
-
- tables << col.getTable();
- }
+ if (col.type != Column::Type::COLUMN)
+ continue;
- results << tables;
+ tables << col.getTable();
}
-
- return results;
+ return tables;
}
QList<SelectResolver::Column> SelectResolver::translateToColumns(SqliteSelect* select, const TokenList& columnTokens)
@@ -148,25 +159,21 @@ const QStringList& SelectResolver::getErrors() const
return errors;
}
+QList<SelectResolver::Column> SelectResolver::sqliteResolveColumns(const QString& query)
+{
+ return sqliteResolveColumns(db, query, dbNameToAttach);
+}
+
QList<SelectResolver::Column> SelectResolver::resolveCore(SqliteSelect::Core* selectCore)
{
if (selectCore->from)
currentCoreSourceColumns = resolveJoinSource(selectCore->from);
- for (SqliteSelect::Core::ResultColumn* resCol : selectCore->resultColumns)
+ for (SqliteSelect::Core::ResultColumn*& resCol : selectCore->resultColumns)
resolve(resCol);
- if (selectCore->distinctKw)
- markDistinctColumns();
-
- if (selectCore->groupBy.size() > 0)
- markGroupedColumns();
-
fixColumnNames();
-
- SqliteSelect* select = dynamic_cast<SqliteSelect*>(selectCore->parentStatement());
- if (select && select->coreSelects.size() > 1)
- markCompoundColumns();
+ markFlagsBySelect(selectCore, currentCoreResults);
return currentCoreResults;
}
@@ -177,15 +184,31 @@ QList<SelectResolver::Column> SelectResolver::resolveAvailableCoreColumns(Sqlite
if (selectCore->from)
columns = resolveJoinSource(selectCore->from);
+ markFlagsBySelect(selectCore, columns);
return columns;
}
+void SelectResolver::markFlagsBySelect(SqliteSelect::Core* core, QList<Column>& columns)
+{
+ if (core->distinctKw)
+ markDistinctColumns(&columns);
+
+ if (core->groupBy.size() > 0)
+ markGroupedColumns(&columns);
+
+ SqliteSelect* select = dynamic_cast<SqliteSelect*>(core->parentStatement());
+ if (select && select->coreSelects.size() > 1)
+ markCompoundColumns(&columns);
+}
+
SelectResolver::Column SelectResolver::translateTokenToColumn(SqliteSelect* select, TokenPtr token)
{
+ QString strippedColName = stripObjName(token->value);
+
// Default result
Column notTranslatedColumn;
notTranslatedColumn.type = Column::OTHER;
- notTranslatedColumn.column = token->value;
+ notTranslatedColumn.column = strippedColName;
// Find containing statement
SqliteStatement* parentStmt = select->findStatementWithToken(token);
@@ -214,9 +237,9 @@ SelectResolver::Column SelectResolver::translateTokenToColumn(SqliteSelect* sele
}
// Search through available columns
- for (const Column& availableColumn : resolveAvailableColumns(core))
+ for (Column& availableColumn : resolveAvailableColumns(core))
{
- if (availableColumn.type == Column::COLUMN && availableColumn.column.compare(token->value, Qt::CaseInsensitive) == 0)
+ if (availableColumn.type == Column::COLUMN && availableColumn.column.compare(strippedColName, Qt::CaseInsensitive) == 0)
return availableColumn;
}
@@ -227,19 +250,19 @@ SelectResolver::Column SelectResolver::translateTokenToColumn(SqliteSelect* sele
return notTranslatedColumn;
}
-void SelectResolver::markDistinctColumns()
+void SelectResolver::markDistinctColumns(QList<Column>* columnList)
{
- markCurrentColumnsWithFlag(FROM_DISTINCT_SELECT);
+ markCurrentColumnsWithFlag(FROM_DISTINCT_SELECT, columnList);
}
-void SelectResolver::markCompoundColumns()
+void SelectResolver::markCompoundColumns(QList<Column>* columnList)
{
- markCurrentColumnsWithFlag(FROM_COMPOUND_SELECT);
+ markCurrentColumnsWithFlag(FROM_COMPOUND_SELECT, columnList);
}
-void SelectResolver::markGroupedColumns()
+void SelectResolver::markGroupedColumns(QList<Column>* columnList)
{
- markCurrentColumnsWithFlag(FROM_GROUPED_SELECT);
+ markCurrentColumnsWithFlag(FROM_GROUPED_SELECT, columnList);
}
void SelectResolver::fixColumnNames()
@@ -296,7 +319,7 @@ void SelectResolver::resolve(SqliteSelect::Core::ResultColumn *resCol)
void SelectResolver::resolveStar(SqliteSelect::Core::ResultColumn *resCol)
{
bool foundAtLeastOne = false;
- for (SelectResolver::Column column : currentCoreSourceColumns)
+ for (SelectResolver::Column column : qAsConst(currentCoreSourceColumns))
{
if (!resCol->table.isNull())
{
@@ -338,7 +361,6 @@ void SelectResolver::resolveStar(SqliteSelect::Core::ResultColumn *resCol)
else
column.displayName = column.column;
- column.originalColumn = resCol;
currentCoreResults << column;
foundAtLeastOne = true;
}
@@ -355,7 +377,6 @@ void SelectResolver::resolveExpr(SqliteSelect::Core::ResultColumn *resCol)
// Not a simple column, but some expression
SelectResolver::Column column;
column.alias = resCol->alias;
- column.originalColumn = resCol;
column.column = getResColTokensWithoutAlias(resCol).detokenize().trimmed();
column.displayName = !resCol->alias.isNull() ? column.alias : column.column;
@@ -378,7 +399,6 @@ void SelectResolver::resolveDbAndTable(SqliteSelect::Core::ResultColumn *resCol)
Column col;
col.alias = resCol->alias;
col.column = expr->column;
- col.originalColumn = resCol;
col.type = Column::COLUMN;
// Display name
@@ -399,7 +419,7 @@ void SelectResolver::resolveDbAndTable(SqliteSelect::Core::ResultColumn *resCol)
matched = resolveExplicitColumn(expr->column);
- if (!matched.table.isNull())
+ if (!matched.table.isNull() || !matched.tableAlias.isNull())
{
col.database = matched.database;
col.originalDatabase = resolveDatabase(matched.database);
@@ -425,7 +445,7 @@ void SelectResolver::resolveDbAndTable(SqliteSelect::Core::ResultColumn *resCol)
SelectResolver::Column SelectResolver::resolveRowIdColumn(SqliteExpr *expr)
{
// Looking for first source that can provide ROWID.
- for (const Column& column : currentCoreSourceColumns)
+ for (Column& column : currentCoreSourceColumns)
{
if (column.table.isNull())
continue; // ROWID cannot be related to source with no table
@@ -438,7 +458,7 @@ SelectResolver::Column SelectResolver::resolveRowIdColumn(SqliteExpr *expr)
SelectResolver::Column SelectResolver::resolveExplicitColumn(const QString &columnName)
{
- for (const Column& column : currentCoreSourceColumns)
+ for (Column& column : currentCoreSourceColumns)
{
if (columnName.compare(column.column, Qt::CaseInsensitive) != 0 && columnName.compare(column.alias, Qt::CaseInsensitive) != 0)
continue;
@@ -450,7 +470,7 @@ SelectResolver::Column SelectResolver::resolveExplicitColumn(const QString &colu
SelectResolver::Column SelectResolver::resolveExplicitColumn(const QString &table, const QString &columnName)
{
- for (const Column& column : currentCoreSourceColumns)
+ for (Column& column : currentCoreSourceColumns)
{
if (columnName.compare(column.column, Qt::CaseInsensitive) != 0 && columnName.compare(column.alias, Qt::CaseInsensitive) != 0)
continue;
@@ -465,7 +485,7 @@ SelectResolver::Column SelectResolver::resolveExplicitColumn(const QString &tabl
SelectResolver::Column SelectResolver::resolveExplicitColumn(const QString &database, const QString &table, const QString &columnName)
{
- for (const Column& column : currentCoreSourceColumns)
+ for (Column& column : currentCoreSourceColumns)
{
if (columnName.compare(column.column, Qt::CaseInsensitive) != 0 && columnName.compare(column.alias, Qt::CaseInsensitive) != 0)
continue;
@@ -529,7 +549,7 @@ void SelectResolver::extractCte(SqliteSelect *select)
if (!select->with)
return;
- for (SqliteWith::CommonTableExpression* cte : select->with->cteList)
+ for (SqliteWith::CommonTableExpression*& cte : select->with->cteList)
cteList[cte->table] = cte;
}
@@ -545,7 +565,7 @@ QList<SelectResolver::Column> SelectResolver::resolveJoinSource(SqliteSelect::Co
{
QList<SelectResolver::Column> columnSources;
columnSources += resolveSingleSource(joinSrc->singleSource);
- for (SqliteSelect::Core::JoinSourceOther* otherSrc : joinSrc->otherSources)
+ for (SqliteSelect::Core::JoinSourceOther*& otherSrc : joinSrc->otherSources)
columnSources += resolveOtherSource(otherSrc);
return columnSources;
@@ -566,16 +586,16 @@ QList<SelectResolver::Column> SelectResolver::resolveSingleSource(SqliteSelect::
return resolveTableFunctionColumns(joinSrc);
if (isView(joinSrc->database, joinSrc->table))
- return resolveView(joinSrc->database, joinSrc->table, joinSrc->alias);
+ return resolveView(joinSrc);
- if (joinSrc->database.isNull() && cteList.contains(joinSrc->table))
+ if (joinSrc->database.isNull() && cteList.contains(joinSrc->table, Qt::CaseInsensitive))
return resolveCteColumns(joinSrc);
QList<Column> columnSources;
QStringList columns = getTableColumns(joinSrc->database, joinSrc->table, joinSrc->alias);
Column column;
column.type = Column::COLUMN;
- column.table = joinSrc->table;;
+ column.table = joinSrc->table;
column.database = joinSrc->database;
column.originalDatabase = resolveDatabase(joinSrc->database);
if (!joinSrc->alias.isNull())
@@ -592,40 +612,25 @@ QList<SelectResolver::Column> SelectResolver::resolveSingleSource(SqliteSelect::
QList<SelectResolver::Column> SelectResolver::resolveCteColumns(SqliteSelect::Core::SingleSource* joinSrc)
{
- SqliteWith::CommonTableExpression* cte = cteList[joinSrc->table];
-
- Column column;
- column.type = Column::COLUMN;
- column.flags |= FROM_CTE_SELECT;
- column.tableAlias = cte->table;
-
- QList<Column> columnSources;
-
static_qstring(cteSelectTpl, "WITH %1 SELECT * FROM %2");
+
+ SqliteWith::CommonTableExpression* cte = cteList.value(joinSrc->table, Qt::CaseInsensitive);
QString selectQuery = cte->detokenize();
- QString query = cteSelectTpl.arg(selectQuery, cte->table);
- QList<AliasedColumn> queryColumns = db->columnsForQuery(query);
- if (queryColumns.isEmpty())
- {
- qWarning() << "Could not detect query columns. Probably due to db error:" << db->getErrorText();
- return columnSources;
- }
+ QString theQuery = cteSelectTpl.arg(selectQuery, cte->table);
+ QList<Column> columnSources = sqliteResolveColumns(theQuery);
- for (const AliasedColumn& queryColumn : queryColumns)
+ for (Column& column : columnSources)
{
- if (!queryColumn.getDatabase().isNull())
- column.database = resolveDatabase(queryColumn.getDatabase());
- else
- column.database = queryColumn.getDatabase();
-
- column.table = queryColumn.getTable();
+ column.flags |= FROM_CTE_SELECT;
+ column.tableAlias = cte->table;
// From CTE perspective, however the column is received as "result column name" from SQLite API
// is what we report back to user of the CTE as available column. No matter if it's actual alias,
// or simply name of a column.
- column.column = queryColumn.getAlias();
- column.displayName = queryColumn.getAlias();
- columnSources << column;
+ column.column = column.displayName;
+
+ // Column aliases inside of CTE are disregarded, because they do not matter outside of CTE
+ column.alias = QString();
}
return columnSources;
@@ -680,16 +685,41 @@ QList<SelectResolver::Column> SelectResolver::resolveOtherSource(SqliteSelect::C
QList<SelectResolver::Column> SelectResolver::resolveSubSelect(SqliteSelect *select)
{
- QList<Column> columnSources;
Q_ASSERT(select->coreSelects.size() > 0);
bool compound = (select->coreSelects.size() > 1);
if (compound && !resolveMultiCore)
- return columnSources;
+ return QList<Column>();
+
+ // SQLite API used for fully correct & precise resolution of source table, column and displayName.
+ QString coreQuery = select->detokenize();
+ QList<Column> columnSources = sqliteResolveColumns(coreQuery);
+ // Internal, recursive SelectResolver used for fine tuning the tableAlias and oldTableAliases of columns.
SelectResolver internalResolver(db, query);
- columnSources += internalResolver.resolve(select->coreSelects[0]);
+ QList<Column> columnSourcesFromInternal = internalResolver.resolve(select->coreSelects[0]);
+
+ if (columnSourcesFromInternal.size() == columnSources.size())
+ {
+ // Copy tableAlias and oldTableAliases from internal resolver.
+ QMutableListIterator<Column> it(columnSources);
+ QMutableListIterator<Column> intIt(columnSourcesFromInternal);
+ while (it.hasNext() && intIt.hasNext())
+ {
+ Column& col = it.next();
+ Column& intCol = intIt.next();
+ col.tableAlias = intCol.tableAlias;
+ col.oldTableAliases = intCol.oldTableAliases;
+ col.flags = intCol.flags;
+ }
+ }
+ else
+ {
+ qCritical() << "Number of columns resolved by internal SchemaResolver is different than resolved by SQLite API:"
+ << columnSourcesFromInternal.size() << "!=" << columnSources.size()
+ << ", therefore table alias may be identified incorrectly (from resolver, but not by SQLite API)";
+ }
if (compound)
{
@@ -701,27 +731,51 @@ QList<SelectResolver::Column> SelectResolver::resolveSubSelect(SqliteSelect *sel
return columnSources;
}
-QList<SelectResolver::Column> SelectResolver::resolveView(const QString& database, const QString& name, const QString& alias)
+QList<SelectResolver::Column> SelectResolver::resolveView(SqliteSelect::Core::SingleSource *joinSrc)
{
- QList<Column> results;
- SqliteQueryPtr query = schemaResolver->getParsedObject(database, name, SchemaResolver::VIEW);
- if (!query)
- {
- qDebug() << "Could not get parsed CREATE VIEW in SelectResolver::resolveView().";
- return results;
- }
+ static_qstring(columnSqlTpl, "SELECT * FROM %1 LIMIT 0");
+ QList<Column> results = sqliteResolveColumns(columnSqlTpl.arg(joinSrc->detokenize()));
+ applySubSelectAlias(results, (!joinSrc->alias.isNull() ? joinSrc->alias : joinSrc->table));
+ for (Column& column : results)
+ column.flags |= FROM_VIEW;
- SqliteCreateViewPtr createView = query.dynamicCast<SqliteCreateView>();
- if (!createView)
+ return results;
+}
+
+QList<SelectResolver::Column> SelectResolver::sqliteResolveColumns(Db* db, const QString& query, const BiStrHash& dbNameToAttach)
+{
+ QList<Column> columnSources;
+ QList<AliasedColumn> queryColumns = db->columnsForQuery(query);
+ if (queryColumns.isEmpty())
+ qWarning() << "Could not detect query columns. Probably due to db error:" << db->getErrorText();
+
+ Column column;
+ for (const AliasedColumn& queryColumn : queryColumns)
{
- qDebug() << "Parsed object not a CREATE VIEW as expected, but instead it's:" << sqliteQueryTypeToString(query->queryType);
- return results;
- }
+ if (!queryColumn.getDatabase().isNull())
+ column.database = dbNameToAttach.valueByRight(queryColumn.getDatabase(), queryColumn.getDatabase(), Qt::CaseInsensitive);
+ else
+ column.database = QString();
- results = resolveSubSelect(createView->select);
- applySubSelectAlias(results, (!alias.isNull() ? alias : name));
+ column.displayName = queryColumn.getAlias();
+ if (queryColumn.getTable().isNull())
+ {
+ column.type = Column::OTHER;
+ column.table = QString();
+ column.column = wrapObjIfNeeded(queryColumn.getAlias());
+ column.alias = queryColumn.getAlias();
+ }
+ else
+ {
+ column.type = Column::COLUMN;
+ column.table = queryColumn.getTable();
+ column.column = queryColumn.getColumn();
+ column.alias = (queryColumn.getColumn() != queryColumn.getAlias()) ? queryColumn.getAlias() : QString();
+ }
+ columnSources << column;
+ }
- return results;
+ return columnSources;
}
bool SelectResolver::isView(const QString& database, const QString& name)
@@ -773,10 +827,7 @@ void SelectResolver::applySubSelectAlias(QList<SelectResolver::Column>& columns,
QString SelectResolver::resolveDatabase(const QString& database)
{
- if (dbNameToAttach.containsRight(database, Qt::CaseInsensitive))
- return dbNameToAttach.valueByRight(database, Qt::CaseInsensitive);
-
- return database;
+ return dbNameToAttach.valueByRight(database, database, Qt::CaseInsensitive);
}
bool SelectResolver::parseOriginalQuery()
@@ -802,16 +853,6 @@ bool SelectResolver::parseOriginalQuery()
return true;
}
-SelectResolver::Table::Table()
-{
-}
-
-SelectResolver::Table::Table(const SelectResolver::Table &other) :
- database(other.database), originalDatabase(other.originalDatabase), table(other.table),
- tableAlias(other.tableAlias), oldTableAliases(other.oldTableAliases), flags(other.flags)
-{
-}
-
int SelectResolver::Table::operator ==(const SelectResolver::Table &other)
{
return ::operator==(*this, other);
@@ -863,3 +904,24 @@ uint qHash(const SelectResolver::Column &column)
return qHash(column.database.toLower() + "." + column.table.toLower() + "." + column.column.toLower() + "/" +
column.tableAlias.toLower() + "/" + column.oldTableAliases.join(","));
}
+
+QDebug operator<<(QDebug debug, const SelectResolver::Column &c)
+{
+ QDebugStateSaver saver(debug);
+ debug.nospace() << "Column " << c.displayName << "("
+ << c.column << " = " << c.alias << ", "
+ << c.table << " = " << c.tableAlias << ", "
+ << c.database << " = " << c.originalDatabase
+ << ")";
+ return debug;
+}
+
+QDebug operator<<(QDebug debug, const SelectResolver::Table &c)
+{
+ QDebugStateSaver saver(debug);
+ debug.nospace() << "Table ("
+ << c.table << " = " << c.tableAlias << ", "
+ << c.database << " = " << c.originalDatabase
+ << ")";
+ return debug;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/selectresolver.h b/SQLiteStudio3/coreSQLiteStudio/selectresolver.h
index cb93d65..a77ffe1 100644
--- a/SQLiteStudio3/coreSQLiteStudio/selectresolver.h
+++ b/SQLiteStudio3/coreSQLiteStudio/selectresolver.h
@@ -1,9 +1,9 @@
#ifndef SELECTRESOLVER_H
#define SELECTRESOLVER_H
+#include "common/strhash.h"
#include "parser/ast/sqliteselect.h"
#include "common/bistrhash.h"
-#include "expectedtoken.h"
#include "parser/ast/sqlitewith.h"
#include <QString>
#include <QHash>
@@ -63,7 +63,8 @@ class API_EXPORT SelectResolver
FROM_ANONYMOUS_SELECT = 0x02,
FROM_DISTINCT_SELECT = 0x04,
FROM_GROUPED_SELECT = 0x08,
- FROM_CTE_SELECT = 0x10
+ FROM_CTE_SELECT = 0x10,
+ FROM_VIEW = 0x20
};
/**
@@ -71,9 +72,6 @@ class API_EXPORT SelectResolver
*/
struct API_EXPORT Table
{
- Table();
- Table(const Table& other);
-
/**
* @brief Database name.
*
@@ -112,7 +110,6 @@ class API_EXPORT SelectResolver
QString alias;
QString displayName;
bool aliasDefinedInSubQuery = false;
- SqliteSelect::Core::ResultColumn* originalColumn = nullptr;
int operator==(const Column& other);
Table getTable() const;
@@ -123,16 +120,18 @@ class API_EXPORT SelectResolver
~SelectResolver();
QList<Column> resolveColumnsFromFirstCore();
- QList<QList<Column> > resolveColumns();
+ QList<QList<Column>> resolveColumns();
QList<Column> resolve(SqliteSelect::Core* selectCore);
- QList<QList<Column> > resolve(SqliteSelect* select);
+ QList<QList<Column>> resolve(SqliteSelect* select);
QList<Column> resolveAvailableColumns(SqliteSelect::Core* selectCore);
- QList<QList<Column> > resolveAvailableColumns(SqliteSelect* select);
+ QList<QList<Column>> resolveAvailableColumns(SqliteSelect* select);
+ QList<Column> resolveAvailableColumns(SqliteSelect::Core::JoinSource* joinSrc);
QSet<Table> resolveTables(SqliteSelect::Core* selectCore);
- QList<QSet<Table> > resolveTables(SqliteSelect* select);
+ QList<QSet<Table>> resolveTables(SqliteSelect* select);
+ QSet<Table> resolveTables(SqliteSelect::Core::JoinSource* joinSrc);
/**
* @brief Translates tokens representing column name in the SELECT into full column objects.
@@ -180,6 +179,30 @@ class API_EXPORT SelectResolver
const QStringList& getErrors() const;
/**
+ * @brief This is a convenient overload of method that uses database object passed to the constructor.
+ * @param query SQL query to analyze.
+ * @return Column with limited metadata (database, table name - if applicable, column name - if applicable, and displayName)
+ *
+ * See static overloaded method for more details.
+ */
+ QList<Column> sqliteResolveColumns(const QString& query);
+
+ /**
+ * @brief Does quick analysis of result columns for the query, using SQLite built-in API.
+ * @param db Database to analyze the query against.
+ * @param query SQL query to analyze.
+ * @param dbNameToAttach A mapping of database name to its attach name, used to resolve db name if SQLite API returns it as attach name.
+ * @return Column with limited metadata (database, table name - if applicable, column name - if applicable, and displayName)
+ *
+ * Instead of doing full scale anaysis of the query, it leverages SQLite API for a query metadata,
+ * but it lacks information about source table aliases, subquery aliases,
+ * flags (compund query, aggregate query, cte query, etc).
+ * It's convenient, but must be complemented by sophisticated logic of the SchemaResolver to provide full info.
+ * Yet it's good enough if these extended information are not needed, as it can be much faster, than full analysis.
+ */
+ static QList<Column> sqliteResolveColumns(Db* db, const QString& query, const BiStrHash& dbNameToAttach = BiStrHash());
+
+ /**
* @brief resolveMultiCore
* If true (by default), the multi-core subselects will be resolved using
* first core from the list. If false, then the subselect will be ignored by resolver,
@@ -197,6 +220,8 @@ class API_EXPORT SelectResolver
private:
QList<Column> resolveCore(SqliteSelect::Core* selectCore);
QList<Column> resolveAvailableCoreColumns(SqliteSelect::Core* selectCore);
+ QSet<Table> resolveTablesFromCore(SqliteSelect::Core* selectCore);
+ void markFlagsBySelect(SqliteSelect::Core* core, QList<Column>& columns);
Column translateTokenToColumn(SqliteSelect* select, TokenPtr token);
void resolve(SqliteSelect::Core::ResultColumn* resCol);
void resolveStar(SqliteSelect::Core::ResultColumn* resCol);
@@ -214,16 +239,16 @@ class API_EXPORT SelectResolver
QList<Column> resolveSingleSourceSubSelect(SqliteSelect::Core::SingleSource* joinSrc);
QList<Column> resolveOtherSource(SqliteSelect::Core::JoinSourceOther *otherSrc);
QList<Column> resolveSubSelect(SqliteSelect* select);
- QList<Column> resolveView(const QString& database, const QString& name, const QString &alias);
+ QList<Column> resolveView(SqliteSelect::Core::SingleSource *joinSrc);
bool isView(const QString& database, const QString& name);
QStringList getTableColumns(const QString& database, const QString& table, const QString &alias);
void applySubSelectAlias(QList<Column>& columns, const QString& alias);
QString resolveDatabase(const QString& database);
bool parseOriginalQuery();
- void markDistinctColumns();
- void markCompoundColumns();
- void markGroupedColumns();
+ void markDistinctColumns(QList<Column>* columnList = nullptr);
+ void markCompoundColumns(QList<Column>* columnList = nullptr);
+ void markGroupedColumns(QList<Column>* columnList = nullptr);
void fixColumnNames();
void markCurrentColumnsWithFlag(Flag flag, QList<Column>* columnList = nullptr);
bool matchTable(const Column& sourceColumn, const QString& table);
@@ -234,7 +259,7 @@ class API_EXPORT SelectResolver
Db* db = nullptr;
QString query;
SqliteSelectPtr originalQueryParsed;
- QHash<QString, SqliteWith::CommonTableExpression*> cteList;
+ StrHash<SqliteWith::CommonTableExpression*> cteList;
/**
* @brief Database name to attach name map.
@@ -307,4 +332,7 @@ API_EXPORT uint qHash(const SelectResolver::Table& table);
API_EXPORT int operator==(const SelectResolver::Column& c1, const SelectResolver::Column& c2);
API_EXPORT uint qHash(const SelectResolver::Column& column);
+API_EXPORT QDebug operator<<(QDebug debug, const SelectResolver::Column &c);
+API_EXPORT QDebug operator<<(QDebug debug, const SelectResolver::Table &c);
+
#endif // SELECTRESOLVER_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/codesnippetmanager.cpp b/SQLiteStudio3/coreSQLiteStudio/services/codesnippetmanager.cpp
new file mode 100644
index 0000000..b50e791
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/services/codesnippetmanager.cpp
@@ -0,0 +1,119 @@
+#include "codesnippetmanager.h"
+#include "common/utils.h"
+#include "services/config.h"
+#include <QJsonArray>
+#include <QJsonDocument>
+#include <QJsonObject>
+
+CodeSnippetManager::CodeSnippetManager(Config* config) :
+ config(config)
+{
+ loadFromConfig();
+ if (!CFG_CORE.Internal.DefaultSnippetsCreated.get())
+ createDefaultSnippets();
+}
+
+void CodeSnippetManager::setSnippets(const QList<CodeSnippet*>& snippets)
+{
+ clearSnippets();
+ allSnippets = snippets;
+ refreshNames();
+ saveToConfig();
+}
+
+const QList<CodeSnippetManager::CodeSnippet*>& CodeSnippetManager::getSnippets() const
+{
+ return allSnippets;
+}
+
+const QStringList& CodeSnippetManager::getNames() const
+{
+ return names;
+}
+
+void CodeSnippetManager::saveToConfig()
+{
+ QVariantList list;
+ QHash<QString,QVariant> snHash;
+ for (CodeSnippet*& snip : allSnippets)
+ {
+ snHash["name"] = snip->name;
+ snHash["code"] = snip->code;
+ snHash["hoteky"] = snip->hotkey;
+ list << snHash;
+ }
+ CFG_CORE.Internal.CodeSnippets.set(list);
+}
+
+QString CodeSnippetManager::getCodeByName(const QString& name) const
+{
+ CodeSnippet* snippet = findFirst<CodeSnippet>(allSnippets, [name](CodeSnippet* snippet) -> bool
+ {
+ return snippet->name == name;
+ });
+ return snippet ? snippet->code : QString();
+}
+
+void CodeSnippetManager::loadFromConfig()
+{
+ clearSnippets();
+
+ QVariantList list = CFG_CORE.Internal.CodeSnippets.get();
+ QHash<QString,QVariant> snHash;
+ CodeSnippet* snip = nullptr;
+ for (const QVariant& var : list)
+ {
+ snHash = var.toHash();
+ snip = new CodeSnippet();
+ snip->name = snHash["name"].toString();
+ snip->code = snHash["code"].toString();
+ snip->hotkey = snHash["hoteky"].toString();
+ allSnippets << snip;
+ }
+ refreshNames();
+}
+
+void CodeSnippetManager::refreshNames()
+{
+ names = map<CodeSnippet*, QString>(allSnippets, [](CodeSnippet* snippet) -> QString
+ {
+ return snippet->name;
+ });
+}
+
+void CodeSnippetManager::clearSnippets()
+{
+ for (CodeSnippet*& snip : allSnippets)
+ delete snip;
+
+ allSnippets.clear();
+}
+
+void CodeSnippetManager::createDefaultSnippets()
+{
+ CodeSnippet* snip = new CodeSnippet();
+ snip->name = "Create Table";
+ snip->code = "CREATE TABLE tableName (\n"
+ " id INTEGER PRIMARY KEY AUTOINCREMENT,\n"
+ " value TEXT,\n"
+ " image BLOB\n"
+ ");";
+ snip->hotkey = "c";
+ allSnippets << snip;
+
+ snip = new CodeSnippet();
+ snip->name = "With Recursive";
+ snip->code = "WITH RECURSIVE\n"
+ " cnt(x) AS (\n"
+ " SELECT 1\n"
+ " UNION ALL\n"
+ " SELECT x+1 FROM cnt\n"
+ " LIMIT 1000000\n"
+ " )\n"
+ "SELECT x FROM cnt;";
+ snip->hotkey = "w";
+ allSnippets << snip;
+
+ saveToConfig();
+ CFG_CORE.Internal.DefaultSnippetsCreated.set(true);
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/codesnippetmanager.h b/SQLiteStudio3/coreSQLiteStudio/services/codesnippetmanager.h
new file mode 100644
index 0000000..ade14bd
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/services/codesnippetmanager.h
@@ -0,0 +1,42 @@
+#ifndef CODESNIPPETMANAGER_H
+#define CODESNIPPETMANAGER_H
+
+#include "coreSQLiteStudio_global.h"
+#include <QObject>
+
+class Config;
+
+class API_EXPORT CodeSnippetManager : public QObject
+{
+ Q_OBJECT
+
+ public:
+ struct API_EXPORT CodeSnippet
+ {
+ QString name;
+ QString code;
+ QString hotkey;
+ };
+
+ CodeSnippetManager(Config* config);
+
+ void setSnippets(const QList<CodeSnippet*>& snippets);
+ const QList<CodeSnippet*>& getSnippets() const;
+ const QStringList& getNames() const;
+ void saveToConfig();
+ QString getCodeByName(const QString& name) const;
+
+ private:
+ void loadFromConfig();
+ void refreshNames();
+ void clearSnippets();
+ void createDefaultSnippets();
+
+ Config* config = nullptr;
+ QList<CodeSnippet*> allSnippets;
+ QStringList names;
+};
+
+#define CODESNIPPETS SQLITESTUDIO->getCodeSnippetManager()
+
+#endif // CODESNIPPETMANAGER_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/collationmanager.h b/SQLiteStudio3/coreSQLiteStudio/services/collationmanager.h
index 5a05b0f..ef1f57a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/collationmanager.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/collationmanager.h
@@ -2,7 +2,6 @@
#define COLLATIONMANAGER_H
#include "coreSQLiteStudio_global.h"
-#include "common/global.h"
#include <QList>
#include <QSharedPointer>
#include <QObject>
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/config.cpp b/SQLiteStudio3/coreSQLiteStudio/services/config.cpp
index c03847a..8abd762 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/config.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/config.cpp
@@ -1,10 +1,14 @@
#include "services/config.h"
+#include <QDir>
+#include <QCoreApplication>
+#include <QSettings>
CFG_DEFINE(Core)
static const QString DB_FILE_NAME = QStringLiteral("settings3");
static QString MASTER_CONFIG_FILE = QString();
Config::AskUserForConfigDirFunc Config::askUserForConfigDirFunc;
+QSettings* globalSettingsInstance = nullptr;
Config::~Config()
{
@@ -24,3 +28,58 @@ void Config::setAskUserForConfigDirFunc(const AskUserForConfigDirFunc& value)
{
askUserForConfigDirFunc = value;
}
+
+QString Config::getPortableConfigPath()
+{
+ QStringList paths = QStringList({"./sqlitestudio-cfg", qApp->applicationDirPath() + "/sqlitestudio-cfg"});
+ QSet<QString> pathSet;
+ QDir dir;
+ for (const QString& path : paths)
+ {
+ dir = QDir(path);
+ pathSet << dir.absolutePath();
+ }
+
+ QString potentialPath;
+ QFileInfo file;
+ for (const QString& path : pathSet)
+ {
+ dir = QDir(path);
+ file = QFileInfo(dir.absolutePath());
+ if (!file.exists())
+ {
+ if (potentialPath.isNull())
+ potentialPath = dir.absolutePath();
+
+ continue;
+ }
+
+ if (!file.isDir() || !file.isReadable() || !file.isWritable())
+ continue;
+
+ for (QFileInfo& entryFile : dir.entryInfoList())
+ {
+ if (!entryFile.isReadable() || !entryFile.isWritable())
+ continue;
+ }
+
+ return dir.absolutePath();
+ }
+
+ return potentialPath;
+}
+
+QSettings* Config::getSettings()
+{
+ if (globalSettingsInstance == nullptr)
+ {
+ QString portableConfigPath = Config::getPortableConfigPath();
+ QFileInfo portableConfigInfo(portableConfigPath);
+ if (portableConfigInfo.exists() && portableConfigInfo.isDir() && portableConfigInfo.isReadable())
+ globalSettingsInstance = new QSettings(portableConfigPath + "/settings.ini", QSettings::IniFormat);
+ else
+ globalSettingsInstance = new QSettings();
+ }
+
+ return globalSettingsInstance;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/config.h b/SQLiteStudio3/coreSQLiteStudio/services/config.h
index 9d1e567..bd001c2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/config.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/config.h
@@ -3,8 +3,6 @@
#include "coreSQLiteStudio_global.h"
#include "config_builder.h"
-#include "services/functionmanager.h"
-#include "collationmanager.h"
#include "sqlitestudio.h"
#include "common/utils.h"
#include <QObject>
@@ -34,11 +32,16 @@ CFG_CATEGORIES(Core,
CFG_ENTRY(QVariantList, Functions, QVariantList())
CFG_ENTRY(QVariantList, Collations, QVariantList())
CFG_ENTRY(QVariantList, Extensions, QVariantList())
+ CFG_ENTRY(QVariantList, CodeSnippets, QVariantList())
CFG_ENTRY(QString, BugReportUser, QString())
CFG_ENTRY(QString, BugReportPassword, QString())
CFG_ENTRY(QString, BugReportRecentTitle, QString())
CFG_ENTRY(QString, BugReportRecentContents, QString())
CFG_ENTRY(bool, BugReportRecentError, false)
+ CFG_ENTRY(bool, DefaultSnippetsCreated, false)
+ )
+ CFG_CATEGORY(CodeAssistant,
+ CFG_ENTRY(bool, AutoTrigger, true)
)
)
@@ -46,6 +49,7 @@ CFG_CATEGORIES(Core,
class QAbstractItemModel;
class DdlHistoryModel;
+class QSettings;
class API_EXPORT Config : public QObject
{
@@ -113,9 +117,10 @@ class API_EXPORT Config : public QObject
static void setMasterConfigFile(const QString& path);
static QString getMasterConfigFile();
static void setAskUserForConfigDirFunc(const AskUserForConfigDirFunc& value);
+ static QString getPortableConfigPath();
+ static QSettings* getSettings();
virtual void init() = 0;
- virtual void cleanUp() = 0;
virtual const QString& getConfigDir() const = 0;
virtual QString getConfigFilePath() const = 0;
virtual bool isInMemory() const = 0;
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/functionmanager.h b/SQLiteStudio3/coreSQLiteStudio/services/functionmanager.h
index 5fb4908..4680b74 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/functionmanager.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/functionmanager.h
@@ -2,7 +2,6 @@
#define FUNCTIONMANAGER_H
#include "coreSQLiteStudio_global.h"
-#include "common/global.h"
#include <QVariant>
#include <QList>
#include <QSharedPointer>
@@ -37,6 +36,7 @@ class API_EXPORT FunctionManager : public QObject
QStringList arguments;
Type type = SCALAR;
bool undefinedArgs = true;
+ bool deterministic = false;
};
struct API_EXPORT ScriptFunction : public FunctionBase
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/collationmanagerimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/collationmanagerimpl.cpp
index 7d24e47..1cdc59f 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/collationmanagerimpl.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/collationmanagerimpl.cpp
@@ -6,6 +6,16 @@
#include "common/utils.h"
#include <QDebug>
+class CollationFunctionInfoImpl : public ScriptingPlugin::FunctionInfo
+{
+ public:
+ QString getName() const {return QString();}
+ QStringList getArguments() const {return {"first", "second"};}
+ bool getUndefinedArgs() const {return false;}
+};
+
+CollationFunctionInfoImpl collationFunctionInfo;
+
CollationManagerImpl::CollationManagerImpl()
{
init();
@@ -51,7 +61,7 @@ int CollationManagerImpl::evaluate(const QString& name, const QString& value1, c
}
QString err;
- QVariant result = plugin->evaluate(collationsByKey[name]->code, {value1, value2}, &err);
+ QVariant result = plugin->evaluate(collationsByKey[name]->code, collationFunctionInfo, {value1, value2}, &err);
if (!err.isNull())
{
@@ -109,7 +119,7 @@ void CollationManagerImpl::loadFromConfig()
collHash = var.toHash();
coll = CollationPtr::create();
coll->name = collHash["name"].toString();
- coll->lang = collHash["lang"].toString();
+ coll->lang = updateScriptingQtLang(collHash["lang"].toString());
coll->code = collHash["code"].toString();
coll->databases = collHash["databases"].toStringList();
coll->allDatabases = collHash["allDatabases"].toBool();
@@ -123,3 +133,11 @@ void CollationManagerImpl::refreshCollationsByKey()
for (CollationPtr collation : collations)
collationsByKey[collation->name] = collation;
}
+
+QString CollationManagerImpl::updateScriptingQtLang(const QString& lang) const
+{
+ if (lang == "QtScript")
+ return QStringLiteral("JavaScript");
+
+ return lang;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/collationmanagerimpl.h b/SQLiteStudio3/coreSQLiteStudio/services/impl/collationmanagerimpl.h
index f5a5937..27adffb 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/collationmanagerimpl.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/collationmanagerimpl.h
@@ -23,6 +23,7 @@ class API_EXPORT CollationManagerImpl : public CollationManager
void storeInConfig();
void loadFromConfig();
void refreshCollationsByKey();
+ QString updateScriptingQtLang(const QString& lang) const;
QList<CollationPtr> collations;
QHash<QString,CollationPtr> collationsByKey;
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp
index 570395a..a7f8d2b 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp
@@ -610,55 +610,12 @@ QString ConfigImpl::getConfigPath()
QString ConfigImpl::getLegacyConfigPath()
{
#ifdef Q_OS_WIN
- if (QSysInfo::windowsVersion() & QSysInfo::WV_NT_based)
- return SQLITESTUDIO->getEnv("APPDATA")+"/sqlitestudio";
- else
- return SQLITESTUDIO->getEnv("HOME")+"/sqlitestudio";
+ return SQLITESTUDIO->getEnv("APPDATA")+"/sqlitestudio";
#else
return SQLITESTUDIO->getEnv("HOME")+"/.config/sqlitestudio";
#endif
}
-QString ConfigImpl::getPortableConfigPath()
-{
- QStringList paths = QStringList({"./sqlitestudio-cfg", qApp->applicationDirPath() + "/sqlitestudio-cfg"});
- QSet<QString> pathSet;
- QDir dir;
- for (const QString& path : paths)
- {
- dir = QDir(path);
- pathSet << dir.absolutePath();
- }
-
- QString potentialPath;
- QFileInfo file;
- for (const QString& path : pathSet)
- {
- dir = QDir(path);
- file = QFileInfo(dir.absolutePath());
- if (!file.exists())
- {
- if (potentialPath.isNull())
- potentialPath = dir.absolutePath();
-
- continue;
- }
-
- if (!file.isDir() || !file.isReadable() || !file.isWritable())
- continue;
-
- for (const QFileInfo& entryFile : dir.entryInfoList())
- {
- if (!entryFile.isReadable() || !entryFile.isWritable())
- continue;
- }
-
- return dir.absolutePath();
- }
-
- return potentialPath;
-}
-
void ConfigImpl::initTables()
{
SqlQueryPtr results = db->exec("SELECT lower(name) AS name FROM sqlite_master WHERE type = 'table'");
@@ -729,29 +686,18 @@ void ConfigImpl::initTables()
void ConfigImpl::initDbFile()
{
- QList<QPair<QString,bool>> paths;
-
- // Do we have path selected by user? (because app was unable to find writable location before)
- QSettings sett;
- QString customPath = sett.value(CONFIG_DIR_SETTING).toString();
- if (!customPath.isEmpty())
- {
- paths << QPair<QString,bool>(customPath + "/" + DB_FILE_NAME, false);
- qDebug() << "Using custom configuration directory. The location is stored in" << sett.fileName();
- }
- else
- paths.append(getStdDbPaths());
+ QList<ConfigDirCandidate> paths = getStdDbPaths();
// A fallback to in-memory db
- paths << QPair<QString,bool>(memoryDbName, false);
+ paths << ConfigDirCandidate{memoryDbName, false, false};
// Go through all candidates and pick one
QDir dir;
- for (const QPair<QString,bool>& path : paths)
+ for (ConfigDirCandidate& path : paths)
{
- dir = QDir(path.first);
- if (path.first != memoryDbName)
- dir = QFileInfo(path.first).dir();
+ dir = QDir(path.path);
+ if (path.path != memoryDbName)
+ dir = QFileInfo(path.path).dir();
if (tryInitDbFile(path))
{
@@ -760,6 +706,19 @@ void ConfigImpl::initDbFile()
}
}
+ // If not one of std paths, look for the one from previously saved.
+ if (configDir == memoryDbName)
+ {
+ // Do we have path selected by user? (because app was unable to find writable location before)
+ QSettings* sett = getSettings();
+ QString path = sett->value(CONFIG_DIR_SETTING).toString();
+ if (!path.isEmpty())
+ {
+ paths << ConfigDirCandidate{path + "/" + DB_FILE_NAME, false, false};
+ qDebug() << "Using custom configuration directory. The location is stored in" << sett->fileName();
+ }
+ }
+
// Failed to use any of predefined directories. Let's ask the user.
while (configDir == memoryDbName)
{
@@ -768,12 +727,12 @@ void ConfigImpl::initDbFile()
break;
dir = QDir(path);
- if (tryInitDbFile(QPair<QString,bool>(path + "/" + DB_FILE_NAME, false)))
+ if (tryInitDbFile(ConfigDirCandidate{path + "/" + DB_FILE_NAME, false, false}))
{
configDir = dir.absolutePath();
- QSettings sett;
- sett.setValue(CONFIG_DIR_SETTING, configDir);
- qDebug() << "Using custom configuration directory. The location is stored in" << sett.fileName();
+ QSettings* sett = getSettings();
+ sett->setValue(CONFIG_DIR_SETTING, configDir);
+ qDebug() << "Using custom configuration directory. The location is stored in" << sett->fileName();
}
}
@@ -782,35 +741,35 @@ void ConfigImpl::initDbFile()
{
paths.removeLast();
QStringList pathStrings;
- for (const QPair<QString,bool>& path : paths)
- pathStrings << path.first;
+ for (ConfigDirCandidate& path : paths)
+ pathStrings << path.path;
notifyError(QObject::tr("Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart."
" Unable to create a file at following locations: %1.").arg(pathStrings.join(", ")));
}
- qDebug() << "Using configuration directory:" << configDir;
+ qDebug().noquote() << "Using configuration directory:" << toNativePath(configDir);
db->exec("PRAGMA foreign_keys = 1;");
}
-QList<QPair<QString,bool>> ConfigImpl::getStdDbPaths()
+QList<ConfigImpl::ConfigDirCandidate> ConfigImpl::getStdDbPaths()
{
- QList<QPair<QString,bool>> paths;
+ QList<ConfigDirCandidate> paths;
// Portable dir location has always precedense - comes first
QString portablePath = getPortableConfigPath();
if (!portablePath.isNull())
- paths << QPair<QString,bool>(portablePath+"/"+DB_FILE_NAME, false);
+ paths << ConfigDirCandidate{portablePath+"/"+DB_FILE_NAME, false, true};
// Determinate global config location
QString globalPath = getConfigPath();
- paths << QPair<QString,bool>(globalPath, true);
+ paths << ConfigDirCandidate{globalPath, true, false};
// If needed, migrate configuration from legacy location (pre-3.3) to new location (3.3 and later)
QString legacyGlobalPath = getLegacyConfigPath();
if (!legacyGlobalPath.isNull())
{
- paths << QPair<QString,bool>(legacyGlobalPath+"/"+DB_FILE_NAME, true);
+ paths << ConfigDirCandidate{legacyGlobalPath+"/"+DB_FILE_NAME, true, false};
if (!QFile::exists(globalPath))
tryToMigrateOldGlobalPath(legacyGlobalPath, globalPath);
}
@@ -818,17 +777,17 @@ QList<QPair<QString,bool>> ConfigImpl::getStdDbPaths()
return paths;
}
-bool ConfigImpl::tryInitDbFile(const QPair<QString, bool> &dbPath)
+bool ConfigImpl::tryInitDbFile(const ConfigDirCandidate& dbPath)
{
// Create global config directory if not existing
- if (dbPath.second && !dbPath.first.isNull())
+ if (dbPath.createIfNotExists && !dbPath.path.isNull())
{
- QDir dir(dbPath.first.mid(0, dbPath.first.length() - DB_FILE_NAME.length() - 1));
+ QDir dir(dbPath.path.mid(0, dbPath.path.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}});
+ db = new DbSqlite3("SQLiteStudio settings", dbPath.path, {{DB_PURE_INIT, true}});
if (!db->open())
{
safe_delete(db);
@@ -1185,7 +1144,7 @@ bool ConfigImpl::tryToMigrateOldGlobalPath(const QString& oldPath, const QString
if (!QFileInfo::exists(oldPath))
return false;
- qDebug() << "Attempting to migrate legacy config location" << oldPath << "to new location" << newPath;
+ qDebug().noquote() << "Attempting to migrate legacy config location" << toNativePath(oldPath) << "to new location" << toNativePath(newPath);
QDir dir = QFileInfo(newPath).dir();
if (!dir.exists())
QDir::root().mkpath(dir.absolutePath());
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h
index 710fbb3..9f0f36e 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h
@@ -8,6 +8,7 @@
class AsyncConfigHandler;
class SqlHistoryModel;
+class QSettings;
class API_EXPORT ConfigImpl : public Config
{
@@ -90,6 +91,13 @@ class API_EXPORT ConfigImpl : public Config
void rollback();
private:
+ struct ConfigDirCandidate
+ {
+ QString path;
+ bool createIfNotExists;
+ bool isPortable;
+ };
+
/**
* @brief Stores error from query in class member.
* @param query Query to get error from.
@@ -102,11 +110,10 @@ class API_EXPORT ConfigImpl : public Config
void storeGroup(const DbGroupPtr& group, qint64 parentId = -1);
void readGroupRecursively(DbGroupPtr group);
QString getConfigPath();
- QString getPortableConfigPath();
void initTables();
void initDbFile();
- QList<QPair<QString, bool> > getStdDbPaths();
- bool tryInitDbFile(const QPair<QString, bool>& dbPath);
+ QList<ConfigDirCandidate> getStdDbPaths();
+ bool tryInitDbFile(const ConfigDirCandidate& dbPath);
QVariant deserializeValue(const QVariant& value) const;
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 9086257..6258f71 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/dbmanagerimpl.cpp
@@ -24,7 +24,7 @@ DbManagerImpl::DbManagerImpl(QObject *parent) :
DbManagerImpl::~DbManagerImpl()
{
// qDebug() << "DbManagerImpl::~DbManagerImpl()";
- for (Db* db : dbList)
+ for (Db*& db : dbList)
{
disconnect(db, SIGNAL(disconnected()), this, SLOT(dbDisconnectedSlot()));
disconnect(db, SIGNAL(aboutToDisconnect(bool&)), this, SLOT(dbAboutToDisconnect(bool&)));
@@ -61,7 +61,7 @@ bool DbManagerImpl::addDb(const QString &name, const QString &path, const QHash<
Db* db = createDb(name, path, options, &errorMessage);
if (!db)
{
- notifyError(tr("Could not add database %1: %2").arg(path).arg(errorMessage));
+ notifyError(tr("Could not add database %1: %2").arg(path, errorMessage));
return false;
}
@@ -93,8 +93,6 @@ bool DbManagerImpl::updateDb(Db* db, const QString &name, const QString &path, c
nameToDb.remove(db->getName(), Qt::CaseInsensitive);
pathToDb.remove(db->getPath());
- bool pathDifferent = db->getPath() != normalizedPath;
-
QString oldName = db->getName();
db->setName(name);
db->setPath(normalizedPath);
@@ -114,7 +112,7 @@ bool DbManagerImpl::updateDb(Db* db, const QString &name, const QString &path, c
InvalidDb* invalidDb = dynamic_cast<InvalidDb*>(db);
bool wasReloaded = false;
Db* reloadedDb = db;
- if (pathDifferent && invalidDb)
+ if (invalidDb)
{
reloadedDb = tryToLoadDb(invalidDb, false);
if (reloadedDb) // we need to know that, so we can emit dbLoaded() signal later, out of the listLock
@@ -136,7 +134,7 @@ bool DbManagerImpl::updateDb(Db* db, const QString &name, const QString &path, c
if (result && reloadedDb)
emit dbUpdated(oldName, db);
else if (reloadedDb) // database reloaded correctly, but update failed
- notifyError(tr("Database %1 could not be updated, because of an error: %2").arg(oldName).arg(CFG->getLastErrorString()));
+ notifyError(tr("Database %1 could not be updated, because of an error: %2").arg(oldName, CFG->getLastErrorString()));
return result;
}
@@ -297,7 +295,7 @@ DbPlugin* DbManagerImpl::getPluginForDbFile(const QString& filePath)
QHash<QString,QVariant> options;
Db* probeDb = nullptr;
- for (DbPlugin* plugin : dbPlugins)
+ for (DbPlugin*& plugin : dbPlugins)
{
probeDb = plugin->getInstance("", filePath, options);
if (probeDb)
@@ -346,7 +344,7 @@ void DbManagerImpl::loadInitialDbList()
{
QUrl url;
InvalidDb* db = nullptr;
- for (const Config::CfgDbPtr& cfgDb : CFG->dbList())
+ for (Config::CfgDbPtr& cfgDb : CFG->dbList())
{
db = new InvalidDb(cfgDb->name, cfgDb->path, cfgDb->options);
@@ -372,7 +370,7 @@ void DbManagerImpl::scanForNewDatabasesInConfig()
QUrl url;
InvalidDb* db = nullptr;
- for (const Config::CfgDbPtr& cfgDb : cfgDbList)
+ for (Config::CfgDbPtr& cfgDb : cfgDbList)
{
if (getByName(cfgDb->name) || getByPath(cfgDb->path))
continue;
@@ -402,13 +400,13 @@ void DbManagerImpl::rescanInvalidDatabasesForPlugin(DbPlugin* dbPlugin)
QUrl url;
QString errorMessages;
- for (Db* invalidDb : getInvalidDatabases())
+ 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()))
+ if (url.isLocalFile() && !QFile::exists(invalidDb->getPath()) && invalidDb->getPath() != ":memory:")
continue;
errorMessages = QString();
@@ -424,7 +422,7 @@ void DbManagerImpl::rescanInvalidDatabasesForPlugin(DbPlugin* dbPlugin)
if (!dbPlugin->checkIfDbServedByPlugin(db))
{
- qDebug() << "Managed to load database" << db->getPath() << " (" << db->getName() << ")"
+ qDebug().noquote() << "Managed to load database" << toNativePath(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;
@@ -473,10 +471,6 @@ QList<Db*> DbManagerImpl::getInvalidDatabases() const
Db* DbManagerImpl::tryToLoadDb(InvalidDb* invalidDb, bool emitNotifySignal)
{
- QUrl url = QUrl::fromUserInput(invalidDb->getPath());
- if (url.isLocalFile() && !QFile::exists(invalidDb->getPath()))
- return nullptr;
-
Db* db = createDb(invalidDb->getName(), invalidDb->getPath(), invalidDb->getConnectionOptions());
if (!db)
return nullptr;
@@ -588,7 +582,7 @@ void DbManagerImpl::aboutToUnload(Plugin* plugin, PluginType* type)
DbPlugin* dbPlugin = dynamic_cast<DbPlugin*>(plugin);
dbPlugins.removeOne(dbPlugin);
QList<Db*> toRemove;
- for (Db* db : dbList)
+ for (Db*& db : dbList)
{
if (!dbPlugin->checkIfDbServedByPlugin(db))
continue;
@@ -596,7 +590,7 @@ void DbManagerImpl::aboutToUnload(Plugin* plugin, PluginType* type)
toRemove << db;
}
- for (Db* db : toRemove)
+ for (Db*& db : toRemove)
{
emit dbAboutToBeUnloaded(db, dbPlugin);
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.cpp
index 2fcc689..1b49f3b 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.cpp
@@ -18,6 +18,50 @@
#include <QUrl>
#include <plugins/importplugin.h>
+class FunctionInfoImpl : public ScriptingPlugin::FunctionInfo
+{
+ public:
+ FunctionInfoImpl(FunctionManager::FunctionBase* fn);
+ FunctionInfoImpl();
+
+ QString getName() const;
+ QStringList getArguments() const;
+ bool getUndefinedArgs() const;
+
+ private:
+ QString name;
+ QStringList arguments;
+ bool undefinedArgs = true;
+};
+
+FunctionInfoImpl::FunctionInfoImpl(FunctionManager::FunctionBase* fn)
+{
+ name = fn->name;
+ arguments = fn->arguments;
+ undefinedArgs = fn->undefinedArgs;
+}
+
+FunctionInfoImpl::FunctionInfoImpl()
+{
+}
+
+QString FunctionInfoImpl::getName() const
+{
+ return name;
+}
+
+QStringList FunctionInfoImpl::getArguments() const
+{
+ return arguments;
+}
+
+bool FunctionInfoImpl::getUndefinedArgs() const
+{
+ return undefinedArgs;
+}
+
+
+
FunctionManagerImpl::FunctionManagerImpl()
{
init();
@@ -120,14 +164,15 @@ QVariant FunctionManagerImpl::evaluateScriptScalar(ScriptFunction* func, const Q
return langUnsupportedError(name, argCount, func->lang);
}
DbAwareScriptingPlugin* dbAwarePlugin = dynamic_cast<DbAwareScriptingPlugin*>(plugin);
+ FunctionInfoImpl info(func);
QString error;
QVariant result;
if (dbAwarePlugin)
- result = dbAwarePlugin->evaluate(func->code, args, db, false, &error);
+ result = dbAwarePlugin->evaluate(func->code, info, args, db, false, &error);
else
- result = plugin->evaluate(func->code, args, &error);
+ result = plugin->evaluate(func->code, info, args, &error);
if (!error.isEmpty())
{
@@ -147,11 +192,12 @@ void FunctionManagerImpl::evaluateScriptAggregateInitial(ScriptFunction* func, D
ScriptingPlugin::Context* ctx = plugin->createContext();
aggregateStorage["context"] = QVariant::fromValue(ctx);
+ FunctionInfoImpl info(func);
if (dbAwarePlugin)
- dbAwarePlugin->evaluate(ctx, func->initCode, {}, db, false);
+ dbAwarePlugin->evaluate(ctx, func->initCode, info, {}, db, false);
else
- plugin->evaluate(ctx, func->initCode, {});
+ plugin->evaluate(ctx, func->initCode, info, {});
if (plugin->hasError(ctx))
{
@@ -170,12 +216,13 @@ void FunctionManagerImpl::evaluateScriptAggregateStep(ScriptFunction* func, cons
return;
DbAwareScriptingPlugin* dbAwarePlugin = dynamic_cast<DbAwareScriptingPlugin*>(plugin);
+ FunctionInfoImpl info(func);
ScriptingPlugin::Context* ctx = aggregateStorage["context"].value<ScriptingPlugin::Context*>();
if (dbAwarePlugin)
- dbAwarePlugin->evaluate(ctx, func->code, args, db, false);
+ dbAwarePlugin->evaluate(ctx, func->code, info, args, db, false);
else
- plugin->evaluate(ctx, func->code, args);
+ plugin->evaluate(ctx, func->code, info, args);
if (plugin->hasError(ctx))
{
@@ -203,11 +250,13 @@ QVariant FunctionManagerImpl::evaluateScriptAggregateFinal(ScriptFunction* func,
DbAwareScriptingPlugin* dbAwarePlugin = dynamic_cast<DbAwareScriptingPlugin*>(plugin);
+ FunctionInfoImpl info(func);
+
QVariant result;
if (dbAwarePlugin)
- result = dbAwarePlugin->evaluate(ctx, func->finalCode, {}, db, false);
+ result = dbAwarePlugin->evaluate(ctx, func->finalCode, info, {}, db, false);
else
- result = plugin->evaluate(ctx, func->finalCode, {});
+ result = plugin->evaluate(ctx, func->finalCode, info, {});
if (plugin->hasError(ctx))
{
@@ -320,7 +369,7 @@ void FunctionManagerImpl::loadFromConfig()
fnHash = var.toHash();
func = new ScriptFunction();
func->name = fnHash["name"].toString();
- func->lang = fnHash["lang"].toString();
+ func->lang = updateScriptingQtLang(fnHash["lang"].toString());
func->code = fnHash["code"].toString();
func->initCode = fnHash["initCode"].toString();
func->finalCode = fnHash["finalCode"].toString();
@@ -335,7 +384,7 @@ void FunctionManagerImpl::loadFromConfig()
void FunctionManagerImpl::clearFunctions()
{
- for (ScriptFunction* fn : functions)
+ for (ScriptFunction*& fn : functions)
delete fn;
functions.clear();
@@ -483,14 +532,15 @@ QVariant FunctionManagerImpl::nativeScript(const QList<QVariant>& args, Db* db,
return tr("Unsupported scripting language: %1").arg(args[0].toString());
}
DbAwareScriptingPlugin* dbAwarePlugin = dynamic_cast<DbAwareScriptingPlugin*>(plugin);
+ FunctionInfoImpl info;
QString error;
QVariant result;
if (dbAwarePlugin)
- result = dbAwarePlugin->evaluate(args[1].toString(), QList<QVariant>(), db, false, &error);
+ result = dbAwarePlugin->evaluate(args[1].toString(), info, QList<QVariant>(), db, false, &error);
else
- result = plugin->evaluate(args[1].toString(), QList<QVariant>(), &error);
+ result = plugin->evaluate(args[1].toString(), info, QList<QVariant>(), &error);
if (!error.isEmpty())
{
@@ -781,6 +831,14 @@ void FunctionManagerImpl::registerNativeFunction(const QString& name, const QStr
nativeFunctions << nf;
}
+QString FunctionManagerImpl::updateScriptingQtLang(const QString& lang) const
+{
+ if (lang == "QtScript")
+ return QStringLiteral("JavaScript");
+
+ return lang;
+}
+
int qHash(const FunctionManagerImpl::Key& key)
{
return qHash(key.name) ^ key.argCount ^ static_cast<int>(key.type);
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.h b/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.h
index 0e5e103..26f4ae2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/functionmanagerimpl.h
@@ -56,6 +56,7 @@ class API_EXPORT FunctionManagerImpl : public FunctionManager
QString cannotFindFunctionError(const QString& name, int argCount);
QString langUnsupportedError(const QString& name, int argCount, const QString& lang);
void registerNativeFunction(const QString& name, const QStringList& args, NativeFunction::ImplementationFunction funcPtr);
+ QString updateScriptingQtLang(const QString& lang) const;
static QStringList getArgMarkers(int argCount);
static QVariant nativeRegExp(const QList<QVariant>& args, Db* db, bool& ok);
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp
index 324f549..dc36980 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp
@@ -38,7 +38,7 @@ void PluginManagerImpl::init()
#endif
#ifdef Q_OS_MACX
- pluginDirs += QCoreApplication::applicationDirPath()+"/../PlugIns";
+ pluginDirs += QDir(QCoreApplication::applicationDirPath()+"/../PlugIns").absolutePath();
#endif
scanPlugins();
@@ -50,7 +50,7 @@ void PluginManagerImpl::deinit()
emit aboutToQuit();
// Plugin containers and their plugins
- for (PluginContainer* container : pluginContainer.values())
+ for (PluginContainer*& container : pluginContainer.values())
{
if (container->builtIn)
{
@@ -61,13 +61,13 @@ void PluginManagerImpl::deinit()
unload(container->name);
}
- for (PluginContainer* container : pluginContainer.values())
+ for (PluginContainer*& container : pluginContainer.values())
delete container;
pluginContainer.clear();
// Types
- for (PluginType* type : registeredPluginTypes)
+ for (PluginType*& type : registeredPluginTypes)
delete type;
registeredPluginTypes.clear();
@@ -109,14 +109,11 @@ PluginType* PluginManagerImpl::getPluginType(Plugin* plugin) const
void PluginManagerImpl::scanPlugins()
{
- QStringList nameFilters;
- nameFilters << "*.so" << "*.dll" << "*.dylib";
-
QPluginLoader* loader = nullptr;
- for (QString pluginDirPath : pluginDirs)
+ for (QString& pluginDirPath : pluginDirs)
{
QDir pluginDir(pluginDirPath);
- for (QString fileName : pluginDir.entryList(nameFilters, QDir::Files))
+ for (QString& fileName : pluginDir.entryList(sharedLibFileFilters(), QDir::Files))
{
fileName = pluginDir.absoluteFilePath(fileName);
loader = new QPluginLoader(fileName);
@@ -131,7 +128,7 @@ void PluginManagerImpl::scanPlugins()
}
QStringList names;
- for (PluginContainer* container : pluginContainer.values())
+ for (PluginContainer*& container : pluginContainer.values())
{
if (!container->builtIn)
names << container->name;
@@ -143,7 +140,7 @@ void PluginManagerImpl::scanPlugins()
void PluginManagerImpl::loadPlugins()
{
QStringList alreadyAttempted;
- for (const QString& pluginName : pluginContainer.keys())
+ for (QString& pluginName : pluginContainer.keys())
{
if (shouldAutoLoad(pluginName))
load(pluginName, alreadyAttempted);
@@ -158,7 +155,7 @@ bool PluginManagerImpl::initPlugin(QPluginLoader* loader, const QString& fileNam
QJsonObject pluginMetaData = loader->metaData();
QString pluginTypeName = pluginMetaData.value("MetaData").toObject().value("type").toString();
PluginType* pluginType = nullptr;
- for (PluginType* type : registeredPluginTypes)
+ for (PluginType*& type : registeredPluginTypes)
{
if (type->getName() == pluginTypeName)
{
@@ -453,12 +450,12 @@ void PluginManagerImpl::unload(const QString& pluginName)
return;
// Unloading depdendent plugins
- for (PluginContainer* otherContainer : pluginContainer.values())
+ for (PluginContainer*& otherContainer : pluginContainer.values())
{
if (otherContainer == container)
continue;
- for (const PluginDependency& dep : otherContainer->dependencies)
+ for (PluginDependency& dep : otherContainer->dependencies)
{
if (dep.name == pluginName)
{
@@ -472,9 +469,9 @@ void PluginManagerImpl::unload(const QString& pluginName)
removePluginFromCollections(container->plugin);
// Deinitializing and unloading plugin
+ unloadTranslation(container->name);
emit aboutToUnload(container->plugin, container->type);
container->plugin->deinit();
- unloadTranslation(container->name);
QPluginLoader* loader = container->loader;
if (!loader->isLoaded())
@@ -491,7 +488,7 @@ void PluginManagerImpl::unload(const QString& pluginName)
emit unloaded(container->name, container->type);
- qDebug() << pluginName << "unloaded:" << container->filePath;
+ qDebug().noquote() << pluginName << "unloaded:" << toNativePath(container->filePath);
}
bool PluginManagerImpl::load(const QString& pluginName)
@@ -596,7 +593,15 @@ void PluginManagerImpl::pluginLoaded(PluginManagerImpl::PluginContainer* contain
{
if (!container->builtIn)
{
- loadTranslation(container->name);
+ QString tsName = container->translationName.isEmpty() ?
+ (
+ container->name.endsWith("Plugin") ?
+ container->name.left(container->name.length() - 6) :
+ container->name
+ ) :
+ container->translationName;
+
+ loadTranslation(tsName);
container->plugin = dynamic_cast<Plugin*>(container->loader->instance());
container->loaded = true;
}
@@ -604,7 +609,7 @@ void PluginManagerImpl::pluginLoaded(PluginManagerImpl::PluginContainer* contain
emit loaded(container->plugin, container->type);
if (!container->builtIn)
- qDebug() << container->name << "loaded:" << container->filePath;
+ qDebug().noquote() << container->name << "loaded:" << toNativePath(container->filePath);
}
void PluginManagerImpl::addPluginToCollections(Plugin* plugin)
@@ -618,7 +623,7 @@ void PluginManagerImpl::removePluginFromCollections(Plugin* plugin)
{
ScriptingPlugin* scriptingPlugin = dynamic_cast<ScriptingPlugin*>(plugin);
if (scriptingPlugin && scriptingPlugins.contains(scriptingPlugin->getLanguage()))
- scriptingPlugins.remove(plugin->getName());
+ scriptingPlugins.remove(scriptingPlugin->getLanguage());
}
bool PluginManagerImpl::readMetaData(PluginManagerImpl::PluginContainer* container)
@@ -633,6 +638,7 @@ bool PluginManagerImpl::readMetaData(PluginManagerImpl::PluginContainer* contain
container->description = metaData["description"].toString();
container->title = metaData["title"].toString();
container->loadByDefault = metaData.contains("loadByDefault") ? metaData["loadByDefault"].toBool() : true;
+ container->translationName = metaData.contains("translationName") ? metaData["translationName"].toString() : QString();
}
else if (container->plugin)
{
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.h b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.h
index c9d56aa..7a8ba4f 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.h
@@ -156,6 +156,21 @@ class API_EXPORT PluginManagerImpl : public PluginManager
* @brief Names of plugins that this plugin conflicts with.
*/
QStringList conflicts;
+
+ /**
+ * @brief If not empty, contains Plugin's project name to be used for loading translation resource file.
+ *
+ * For typical SQLiteStudio plugin the auto-generated translation resource name is the same
+ * as the name of the plugin project. Typically, name of loaded plugin class is made of
+ * the name of the plugin project and the "Plugin" word suffix. Therefore SQLiteStudio
+ * by default just removes the "Plugin" suffix (if it has such) and attempts to load the translation
+ * named this way.
+ *
+ * If the main Plugin class does not follow this naming strategy (project name + Plugin suffix),
+ * then the translationName should be specified in plugin's metadata,
+ * giving actual name of translation resource (i.e. name of Plugin's source code project) to be loaded.
+ */
+ QString translationName;
};
/**
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/sqliteextensionmanagerimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/sqliteextensionmanagerimpl.cpp
index 63dbaf6..d5cc4f6 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/sqliteextensionmanagerimpl.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/sqliteextensionmanagerimpl.cpp
@@ -1,6 +1,8 @@
#include "sqliteextensionmanagerimpl.h"
-#include "services/notifymanager.h"
#include "services/dbmanager.h"
+#include <QCoreApplication>
+#include <QDir>
+#include <QDebug>
SqliteExtensionManagerImpl::SqliteExtensionManagerImpl()
{
@@ -30,21 +32,66 @@ QList<SqliteExtensionManager::ExtensionPtr> SqliteExtensionManagerImpl::getExten
return results;
}
+QStringList SqliteExtensionManagerImpl::getExtensionDirs() const
+{
+ return extensionDirs;
+}
+
void SqliteExtensionManagerImpl::init()
{
loadFromConfig();
+ scanExtensionDirs();
+}
+
+void SqliteExtensionManagerImpl::scanExtensionDirs()
+{
+ extensionDirs += qApp->applicationDirPath() + "/extensions";
+ extensionDirs += qApp->applicationDirPath() + "/ext";
+ extensionDirs += QDir(CFG->getConfigDir()).absoluteFilePath("ext");
+ extensionDirs += QDir(CFG->getConfigDir()).absoluteFilePath("extensions");
+#ifdef Q_OS_MACX
+ extensionDirs += QDir(QCoreApplication::applicationDirPath()+"/../extensions").absolutePath();
+#endif
+
+ QString envDirs = SQLITESTUDIO->getEnv("SQLITESTUDIO_SQLITE_EXTENSIONS");
+ if (!envDirs.isNull())
+ extensionDirs += envDirs.split(PATH_LIST_SEPARATOR);
+
+#ifdef SQLITE_EXTENSIONS_DIR
+ extensionDirs += STRINGIFY(SQLITE_EXTENSIONS_DIR);
+#endif
+
+ for (QString& extDirPath : extensionDirs)
+ {
+ QDir extDir(extDirPath);
+ for (QString& fileName : extDir.entryList(sharedLibFileFilters(), QDir::Files))
+ {
+ QString path = extDir.absoluteFilePath(fileName);
+ auto findIt = std::find_if(extensions.begin(), extensions.end(), [path](ExtensionPtr& ext) {return ext->filePath == path;});
+ if (findIt != extensions.end())
+ continue; // already on the list
+
+ ExtensionPtr ext = ExtensionPtr::create();
+ ext->filePath = path;
+ ext->initFunc = QString();
+ ext->databases = QStringList();
+ ext->allDatabases = false;
+ extensions << ext;
+ qDebug() << "SQLite extension:" << path;
+ }
+ }
}
void SqliteExtensionManagerImpl::storeInConfig()
{
QVariantList list;
QHash<QString,QVariant> extHash;
- for (ExtensionPtr ext : extensions)
+ for (ExtensionPtr& ext : extensions)
{
extHash["filePath"] = ext->filePath;
extHash["initFunc"] = ext->initFunc;
extHash["allDatabases"] = ext->allDatabases;
- extHash["databases"] =common(DBLIST->getDbNames(), ext->databases);
+ extHash["databases"] = common(DBLIST->getDbNames(), ext->databases);
list << extHash;
}
CFG_CORE.Internal.Extensions.set(list);
@@ -66,5 +113,6 @@ void SqliteExtensionManagerImpl::loadFromConfig()
ext->databases = extHash["databases"].toStringList();
ext->allDatabases = extHash["allDatabases"].toBool();
extensions << ext;
+ qDebug() << "SQLite extension from config:" << ext->filePath;
}
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/sqliteextensionmanagerimpl.h b/SQLiteStudio3/coreSQLiteStudio/services/impl/sqliteextensionmanagerimpl.h
index 6fd7f46..9414c0a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/sqliteextensionmanagerimpl.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/sqliteextensionmanagerimpl.h
@@ -11,13 +11,16 @@ class SqliteExtensionManagerImpl : public SqliteExtensionManager
void setExtensions(const QList<ExtensionPtr>& newExtensions);
QList<ExtensionPtr> getAllExtensions() const;
QList<ExtensionPtr> getExtensionForDatabase(const QString& dbName) const;
+ QStringList getExtensionDirs() const;
private:
void init();
+ void scanExtensionDirs();
void storeInConfig();
void loadFromConfig();
QList<ExtensionPtr> extensions;
+ QStringList extensionDirs;
};
#endif // SQLITEEXTENSIONMANAGERIMPL_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/notifymanager.cpp b/SQLiteStudio3/coreSQLiteStudio/services/notifymanager.cpp
index f8b7f25..977897f 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/notifymanager.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/notifymanager.cpp
@@ -36,7 +36,7 @@ void NotifyManager::deleted(Db* db, const QString& database, const QString& obje
emit objectDeleted(db, database, object);
}
-void NotifyManager::createded(Db* db, const QString& database, const QString& object)
+void NotifyManager::created(Db* db, const QString& database, const QString& object)
{
emit objectCreated(db, database, object);
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/notifymanager.h b/SQLiteStudio3/coreSQLiteStudio/services/notifymanager.h
index 5bb4571..517ecf4 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/notifymanager.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/notifymanager.h
@@ -36,7 +36,7 @@ class API_EXPORT NotifyManager : public QObject
void modified(Db* db, const QString& database, const QString& object);
void deleted(Db* db, const QString& database, const QString& object);
- void createded(Db* db, const QString& database, const QString& object);
+ void created(Db* db, const QString& database, const QString& object);
void renamed(Db* db, const QString& database, const QString& oldObject, const QString& newObject);
private:
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/sqliteextensionmanager.h b/SQLiteStudio3/coreSQLiteStudio/services/sqliteextensionmanager.h
index a135f3b..9d5cd1c 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/sqliteextensionmanager.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/sqliteextensionmanager.h
@@ -24,6 +24,7 @@ class API_EXPORT SqliteExtensionManager : public QObject
virtual void setExtensions(const QList<ExtensionPtr>& newExtensions) = 0;
virtual QList<ExtensionPtr> getAllExtensions() const = 0;
virtual QList<ExtensionPtr> getExtensionForDatabase(const QString& dbName) const = 0;
+ virtual QStringList getExtensionDirs() const = 0;
signals:
void extensionListChanged();
diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlfileexecutor.cpp b/SQLiteStudio3/coreSQLiteStudio/sqlfileexecutor.cpp
new file mode 100644
index 0000000..819d222
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/sqlfileexecutor.cpp
@@ -0,0 +1,223 @@
+#include "sqlfileexecutor.h"
+#include "db/db.h"
+#include "db/sqlquery.h"
+#include "services/notifymanager.h"
+
+#include <QtConcurrent/QtConcurrentRun>
+#include <QElapsedTimer>
+#include <QFile>
+
+SqlFileExecutor::SqlFileExecutor(QObject *parent)
+ : QObject{parent}
+{
+}
+
+void SqlFileExecutor::execSqlFromFile(Db* db, const QString& filePath, bool ignoreErrors, QString codec, bool async)
+{
+ if (!db && !db->isOpen())
+ {
+ emit execEnded();
+ return;
+ }
+
+ if (executionInProgress)
+ {
+ emit execEnded();
+ return;
+ }
+
+ fkWasEnabled = db->exec("PRAGMA foreign_keys")->getSingleCell().toBool();
+ if (fkWasEnabled)
+ {
+ SqlQueryPtr res = db->exec("PRAGMA foreign_keys = 0");
+ if (res->isError())
+ {
+ qDebug() << "Failed to temporarily disable foreign keys enforcement:" << db->getErrorText();
+ emit execEnded();
+ return;
+ }
+ }
+
+ // Exec file
+ executionInProgress = 1;
+ this->ignoreErrors = ignoreErrors;
+ this->codec = codec;
+ this->filePath = filePath;
+ this->db = db;
+ emit updateProgress(0);
+ if (!db->begin())
+ {
+ notifyError(tr("Could not execute SQL, because application has failed to start transaction: %1").arg(db->getErrorText()));
+ emit execEnded();
+ return;
+ }
+
+ if (async)
+ QtConcurrent::run(this, &SqlFileExecutor::execInThread);
+ else
+ execInThread();
+}
+
+bool SqlFileExecutor::isExecuting() const
+{
+ return executionInProgress;
+}
+
+void SqlFileExecutor::stopExecution()
+{
+ if (!executionInProgress)
+ {
+ emit execEnded();
+ return;
+ }
+
+ executionInProgress = 0;
+
+ if (db) // should always be there, but just in case
+ {
+ db->interrupt();
+ db->rollback();
+ db = nullptr;
+ notifyWarn(tr("Execution from file cancelled. Any queries executed so far have been rolled back."));
+ }
+ emit execEnded();
+}
+
+bool SqlFileExecutor::execQueryFromFile(Db* db, const QString& sql)
+{
+ return !db->exec(sql)->isError();
+}
+
+void SqlFileExecutor::execInThread()
+{
+ // Open file
+ QFile file(filePath);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
+ {
+ notifyError(tr("Could not open file '%1' for reading: %2").arg(filePath, file.errorString()));
+ executionInProgress = 0;
+ emit execEnded();
+ return;
+ }
+
+ QTextStream stream(&file);
+ stream.setCodec(codec.toLatin1().constData());
+
+ qint64 fileSize = file.size();
+ int attemptedExecutions = 0;
+ int executed = 0;
+ bool ok = true;
+
+ QElapsedTimer timer;
+ timer.start();
+ QList<QPair<QString, QString>> errors = executeFromStream(stream, executed, attemptedExecutions, ok, fileSize);
+ int millis = timer.elapsed();
+
+ if (fkWasEnabled)
+ {
+ SqlQueryPtr res = db->exec("PRAGMA foreign_keys = 1");
+ if (res->isError())
+ qDebug() << "Failed to restore foreign keys enforcement after execution SQL from file:" << res->getErrorText();
+ }
+
+ if (executionInProgress.loadAcquire())
+ {
+ handleExecutionResults(db, executed, attemptedExecutions, ok, ignoreErrors, millis);
+ if (!errors.isEmpty())
+ emit execErrors(errors, !ok && !ignoreErrors);
+ }
+
+ file.close();
+ emit execEnded();
+ executionInProgress = 0;
+}
+
+void SqlFileExecutor::handleExecutionResults(Db* db, int executed, int attemptedExecutions, bool ok, bool ignoreErrors, int millis)
+{
+ bool doCommit = ok ? true : ignoreErrors;
+ if (doCommit)
+ {
+ if (!db->commit())
+ {
+ notifyError(tr("Could not execute SQL, because application has failed to commit the transaction: %1").arg(db->getErrorText()));
+ db->rollback();
+ }
+ else if (!ok) // committed with errors
+ {
+ notifyInfo(tr("Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.")
+ .arg(QString::number(executed), QString::number(millis / 1000.0), QString::number(attemptedExecutions - executed)));
+ emit schemaNeedsRefreshing(db);
+ }
+ else
+ {
+ notifyInfo(tr("Finished executing %1 queries in %2 seconds.").arg(QString::number(executed), QString::number(millis / 1000.0)));
+ emit schemaNeedsRefreshing(db);
+ }
+ }
+ else
+ {
+ db->rollback();
+ notifyError(tr("Could not execute SQL due to error."));
+ }
+}
+
+QList<QPair<QString, QString>> SqlFileExecutor::executeFromStream(QTextStream& stream, int& executed, int& attemptedExecutions, bool& ok, qint64 fileSize)
+{
+ QList<QPair<QString, QString>> errors;
+ qint64 pos = 0;
+ QChar c;
+ QString sql;
+ sql.reserve(10000);
+ SqlQueryPtr results;
+ while (!stream.atEnd() && executionInProgress.loadAcquire())
+ {
+ while (!db->isComplete(sql) && !stream.atEnd())
+ {
+ stream >> c;
+ sql.append(c);
+ while (c != ';' && !stream.atEnd())
+ {
+ stream >> c;
+ sql.append(c);
+ }
+ }
+
+ if (shouldSkipQuery(sql))
+ {
+ sql.clear();
+ continue;
+ }
+
+ results = db->exec(sql);
+ attemptedExecutions++;
+ if (results->isError())
+ {
+ ok = false;
+ errors << QPair<QString, QString>(sql, results->getErrorText());
+ if (!ignoreErrors)
+ break;
+ }
+ else
+ executed++;
+
+ sql.clear();
+ if (attemptedExecutions % 100 == 0)
+ {
+ pos = stream.device()->pos();
+ emit updateProgress(static_cast<int>(100 * pos / fileSize));
+ }
+ }
+ return errors;
+}
+
+bool SqlFileExecutor::shouldSkipQuery(const QString& sql)
+{
+ if (sql.trimmed().isEmpty() || !db->isComplete(sql))
+ return true;
+
+ QString upper = sql.toUpper().trimmed().split("\n").last().trimmed();
+ return (upper.startsWith("BEGIN") ||
+ upper.startsWith("COMMIT") ||
+ upper.startsWith("ROLLBACK") ||
+ upper.startsWith("END"));
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlfileexecutor.h b/SQLiteStudio3/coreSQLiteStudio/sqlfileexecutor.h
new file mode 100644
index 0000000..fbca301
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/sqlfileexecutor.h
@@ -0,0 +1,43 @@
+#ifndef SQLFILEEXECUTOR_H
+#define SQLFILEEXECUTOR_H
+
+#include "coreSQLiteStudio_global.h"
+#include <QObject>
+#include <QTextStream>
+
+class Db;
+
+class API_EXPORT SqlFileExecutor : public QObject
+{
+ Q_OBJECT
+
+ public:
+ explicit SqlFileExecutor(QObject *parent = nullptr);
+ void execSqlFromFile(Db* db, const QString& filePath, bool ignoreErrors, QString codec, bool async = true);
+ bool isExecuting() const;
+
+ private:
+ bool execQueryFromFile(Db* db, const QString& sql);
+ void execInThread();
+ void handleExecutionResults(Db* db, int executed, int attemptedExecutions, bool ok, bool ignoreErrors, int millis);
+ QList<QPair<QString, QString>> executeFromStream(QTextStream& stream, int& executed, int& attemptedExecutions, bool& ok, qint64 fileSize);
+ bool shouldSkipQuery(const QString& sql);
+
+ QAtomicInt executionInProgress = 0;
+ Db* db = nullptr;
+ bool fkWasEnabled = true;
+ bool ignoreErrors = false;
+ QString codec;
+ QString filePath;
+
+ public slots:
+ void stopExecution();
+
+ signals:
+ void schemaNeedsRefreshing(Db* db);
+ void updateProgress(int value);
+ void execEnded();
+ void execErrors(const QList<QPair<QString, QString>>& errors, bool rolledBack);
+};
+
+#endif // SQLFILEEXECUTOR_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlhistorymodel.cpp b/SQLiteStudio3/coreSQLiteStudio/sqlhistorymodel.cpp
index 26e2d41..6d7addd 100644
--- a/SQLiteStudio3/coreSQLiteStudio/sqlhistorymodel.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/sqlhistorymodel.cpp
@@ -16,8 +16,6 @@ QVariant SqlHistoryModel::data(const QModelIndex& index, int role) const
if (role == Qt::TextAlignmentRole && (index.column() == 2 || index.column() == 3))
return (int)(Qt::AlignRight|Qt::AlignVCenter);
- QVariant d = QueryModel::data(index, role);
-
return QueryModel::data(index, role);
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
index c38f528..4e966fd 100644
--- a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
@@ -1,5 +1,6 @@
#include "sqlitestudio.h"
#include "plugins/plugin.h"
+#include "services/codesnippetmanager.h"
#include "services/pluginmanager.h"
#include "common/utils.h"
#include "common/utils_sql.h"
@@ -34,13 +35,14 @@
#include "services/extralicensemanager.h"
#include "services/sqliteextensionmanager.h"
#include "translations.h"
+#include "chillout/chillout.h"
#include <QProcessEnvironment>
#include <QThreadPool>
#include <QCoreApplication>
DEFINE_SINGLETON(SQLiteStudio)
-static const int sqlitestudioVersion = 30303;
+static const int sqlitestudioVersion = 30404;
SQLiteStudio::SQLiteStudio()
{
@@ -51,6 +53,25 @@ SQLiteStudio::SQLiteStudio()
SQLiteStudio::~SQLiteStudio()
{
}
+
+void SQLiteStudio::setupCrashHandler()
+{
+ auto &chillout = Debug::Chillout::getInstance();
+
+#ifdef _WIN32
+ chillout.init(qApp->applicationName().toStdWString(), qApp->applicationDirPath().toStdWString());
+#else
+ chillout.init(qApp->applicationName().toStdString(), qApp->applicationDirPath().toStdString());
+#endif
+
+ chillout.setBacktraceCallback([](const char * const) {});
+
+ chillout.setCrashCallback([this]() {
+ for (CrashHandler& hnd : crashHandlers)
+ hnd();
+ });
+}
+
QStringList SQLiteStudio::getInitialTranslationFiles() const
{
return initialTranslationFiles;
@@ -61,6 +82,11 @@ void SQLiteStudio::setInitialTranslationFiles(const QStringList& value)
initialTranslationFiles = value;
}
+void SQLiteStudio::installCrashHandler(SQLiteStudio::CrashHandler handler)
+{
+ crashHandlers << handler;
+}
+
QString SQLiteStudio::getCurrentLang() const
{
@@ -182,6 +208,16 @@ void SQLiteStudio::setExportManager(ExportManager* value)
exportManager = value;
}
+CodeSnippetManager* SQLiteStudio::getCodeSnippetManager() const
+{
+ return codeSnippetManager;
+}
+
+void SQLiteStudio::setCodeSnippetManager(CodeSnippetManager* newCodeSnippetManager)
+{
+ codeSnippetManager = newCodeSnippetManager;
+}
+
int SQLiteStudio::getVersion() const
{
return sqlitestudioVersion;
@@ -280,7 +316,7 @@ void SQLiteStudio::init(const QStringList& cmdListArguments, bool guiAvailable)
QThreadPool::globalInstance()->setMaxThreadCount(10);
- Q_INIT_RESOURCE(coreSQLiteStudio);
+ SQLS_INIT_RESOURCE(coreSQLiteStudio);
CfgLazyInitializer::init();
@@ -345,6 +381,7 @@ void SQLiteStudio::init(const QStringList& cmdListArguments, bool guiAvailable)
updateManager = new UpdateManager();
#endif
extraLicenseManager = new ExtraLicenseManager();
+ codeSnippetManager = new CodeSnippetManager(config);
extraLicenseManager->addLicense("SQLiteStudio license (GPL v3)", ":/docs/licenses/sqlitestudio_license.txt");
extraLicenseManager->addLicense("Fugue icons", ":/docs/licenses/fugue_icons.txt");
@@ -352,6 +389,9 @@ void SQLiteStudio::init(const QStringList& cmdListArguments, bool guiAvailable)
extraLicenseManager->addLicense("diff_match (Apache License v2.0)", ":/docs/licenses/diff_match.txt");
extraLicenseManager->addLicense("RSA library (GPL v3)", ":/docs/licenses/gpl.txt");
extraLicenseManager->addLicense("SingleApplication (The MIT License)", ":/docs/licenses/mit.txt");
+ extraLicenseManager->addLicense("ICU (ICU License)", ":/docs/licenses/icu.txt");
+
+ setupCrashHandler();
}
void SQLiteStudio::initPlugins()
@@ -365,31 +405,43 @@ void SQLiteStudio::initPlugins()
void SQLiteStudio::cleanUp()
{
+ if (finalCleanupDone)
+ return;
+
+ finalCleanupDone = true;
emit aboutToQuit();
- disconnect(pluginManager, SIGNAL(aboutToUnload(Plugin*,PluginType*)), this, SLOT(pluginToBeUnloaded(Plugin*,PluginType*)));
- disconnect(pluginManager, SIGNAL(unloaded(QString,PluginType*)), this, SLOT(pluginUnloaded(QString,PluginType*)));
- if (!immediateQuit)
- {
- if (pluginManager)
- 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(populateManager);
- safe_delete(importManager);
- safe_delete(exportManager);
- safe_delete(functionManager);
- safe_delete(extraLicenseManager);
- safe_delete(dbManager);
- safe_delete(config);
- safe_delete(codeFormatter);
- safe_delete(dbAttacherFactory);
- safe_delete(env);
- NotifyManager::destroy();
- }
- Q_CLEANUP_RESOURCE(coreSQLiteStudio);
+ // Deleting all singletons contained in this object, alongside with plugin deinitialization & unloading
+ // causes QTranslator to crash randomly during shutdown, due to some issue in Qt itself, because it tries to refresh
+ // some internal translators state after the translator is uninstalled, but at the same time many message resources
+ // are being unloaded together with plugins and it somehow causes the crash (randomly).
+ // At the same time if hardly find any reason to execute proper deinitialization of all singletons, when the application stops.
+ // The session (UI) is saved anyway independently in the UI code.
+ // Explicit deletion of singletons does not really have any benefits.
+ // Leaving this code here for some time, just to understand it later if needed, but eventually it will be deleted.
+// disconnect(pluginManager, SIGNAL(aboutToUnload(Plugin*,PluginType*)), this, SLOT(pluginToBeUnloaded(Plugin*,PluginType*)));
+// disconnect(pluginManager, SIGNAL(unloaded(QString,PluginType*)), this, SLOT(pluginUnloaded(QString,PluginType*)));
+// if (!immediateQuit)
+// {
+// if (pluginManager)
+// 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(populateManager);
+// safe_delete(importManager);
+// safe_delete(exportManager);
+// safe_delete(functionManager);
+// safe_delete(extraLicenseManager);
+// safe_delete(dbManager);
+// safe_delete(config);
+// safe_delete(codeFormatter);
+// safe_delete(dbAttacherFactory);
+// safe_delete(env);
+// NotifyManager::destroy();
+// }
+// SQLS_CLEANUP_RESOURCE(coreSQLiteStudio);
}
void SQLiteStudio::updateCodeFormatter()
diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h
index 0b07717..c284133 100644
--- a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h
+++ b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h
@@ -10,6 +10,7 @@
class DbManager;
class Config;
+class CollationManager;
class QProcessEnvironment;
class PluginManager;
class QThreadPool;
@@ -29,6 +30,8 @@ class UpdateManager;
#endif
class ExtraLicenseManager;
class SqliteExtensionManager;
+class Db;
+class CodeSnippetManager;
/** @file */
@@ -60,6 +63,8 @@ class API_EXPORT SQLiteStudio : public QObject
DECLARE_SINGLETON(SQLiteStudio)
public:
+ typedef std::function<void()> CrashHandler;
+
/**
* @brief Initializes SQLiteStudio object.
* @param cmdListArguments Command line arguments.
@@ -123,6 +128,9 @@ class API_EXPORT SQLiteStudio : public QObject
ExportManager* getExportManager() const;
void setExportManager(ExportManager* value);
+ CodeSnippetManager* getCodeSnippetManager() const;
+ void setCodeSnippetManager(CodeSnippetManager* newCodeSnippetManager);
+
int getVersion() const;
QString getVersionString() const;
@@ -159,6 +167,8 @@ class API_EXPORT SQLiteStudio : public QObject
QStringList getInitialTranslationFiles() const;
void setInitialTranslationFiles(const QStringList& value);
+ void installCrashHandler(CrashHandler handler);
+
private:
/**
* @brief Creates singleton instance.
@@ -175,6 +185,10 @@ class API_EXPORT SQLiteStudio : public QObject
*/
~SQLiteStudio();
+ void setupCrashHandler();
+
+ QList<CrashHandler> crashHandlers;
+
/**
* @brief Code formatter service.
*/
@@ -207,26 +221,28 @@ class API_EXPORT SQLiteStudio : public QObject
ExportManager* exportManager = nullptr;
ImportManager* importManager = nullptr;
PopulateManager* populateManager = nullptr;
+ CodeSnippetManager* codeSnippetManager = nullptr;
#ifdef PORTABLE_CONFIG
UpdateManager* updateManager = nullptr;
#endif
ExtraLicenseManager* extraLicenseManager = nullptr;
QString currentLang;
QStringList initialTranslationFiles;
+ bool finalCleanupDone = false;
private slots:
void pluginLoaded(Plugin* plugin,PluginType* pluginType);
void pluginToBeUnloaded(Plugin* plugin,PluginType* pluginType);
void pluginUnloaded(const QString& pluginName,PluginType* pluginType);
+ public slots:
/**
* @brief Cleans up all internal objects.
*
- * Deletes all internal objects. It's called from destructor.
+ * Deletes all internal objects. It's called from qApp signal or from UI window closing event.
*/
void cleanUp();
- public slots:
/**
* @brief Updates code formatter with available plugins.
*
diff --git a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp
index 59d978c..1a8abb6 100644
--- a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp
@@ -41,12 +41,14 @@ void TableModifier::alterTable(SqliteCreateTablePtr newCreateTable)
handleFkConstrains(newCreateTable.data(), createTable->table, newName);
QString tempTableName;
+ bool doCopyData = !getColumnsToCopyData(newCreateTable).isEmpty();
if (table.compare(newName, Qt::CaseInsensitive) == 0)
- tempTableName = renameToTemp();
+ tempTableName = renameToTemp(doCopyData);
newCreateTable->rebuildTokens();
sqls << newCreateTable->detokenize();
- copyDataTo(newCreateTable);
+ if (doCopyData)
+ copyDataTo(newCreateTable);
handleFks();
@@ -61,24 +63,24 @@ void TableModifier::alterTable(SqliteCreateTablePtr newCreateTable)
sqls << "PRAGMA foreign_keys = 1;";
}
-void TableModifier::renameTo(const QString& newName)
+void TableModifier::renameTo(const QString& newName, bool doCopyData)
{
if (!createTable)
return;
// Using ALTER TABLE RENAME TO is not a good solution here, because it automatically renames all occurrences in REFERENCES,
// which we don't want, because we rename a lot to temporary tables and drop them.
- sqls << QString("CREATE TABLE %1 AS SELECT * FROM %2;").arg(wrapObjIfNeeded(newName), wrapObjIfNeeded(table))
+ sqls << QString("CREATE TABLE %1 AS SELECT * FROM %2%3;").arg(wrapObjIfNeeded(newName), wrapObjIfNeeded(table), doCopyData ? "" : " LIMIT 0")
<< QString("DROP TABLE %1;").arg(wrapObjIfNeeded(table));
table = newName;
createTable->table = newName;
}
-QString TableModifier::renameToTemp()
+QString TableModifier::renameToTemp(bool doCopyData)
{
QString name = getTempTableName();
- renameTo(name);
+ renameTo(name, doCopyData);
return name;
}
@@ -189,16 +191,30 @@ bool TableModifier::handleFks(SqliteForeignKey* fk, const QString& oldName, cons
bool TableModifier::handleFkConstrains(SqliteCreateTable* stmt, const QString& oldName, const QString& theNewName)
{
bool modified = false;
- for (SqliteCreateTable::Constraint* fk : stmt->getForeignKeysByTable(oldName))
+ for (SqliteCreateTable::Constraint*& fk : stmt->getForeignKeysByTable(oldName))
{
if (handleFks(fk->foreignKey, oldName, theNewName))
+ {
modified = true;
+ if (fk->foreignKey->indexedColumns.isEmpty())
+ {
+ stmt->constraints.removeOne(fk);
+ delete fk;
+ }
+ }
}
- for (SqliteCreateTable::Column::Constraint* fk : stmt->getColumnForeignKeysByTable(oldName))
+ for (SqliteCreateTable::Column::Constraint*& fk : stmt->getColumnForeignKeysByTable(oldName))
{
if (handleFks(fk->foreignKey, oldName, theNewName))
+ {
modified = true;
+ if (fk->foreignKey->indexedColumns.isEmpty())
+ {
+ stmt->removeColumnConstraint(fk);
+ delete fk;
+ }
+ }
}
return modified;
}
@@ -302,7 +318,6 @@ bool TableModifier::handleColumnTokens(TokenList& columnsToUpdate)
bool TableModifier::handleUpdateColumns(SqliteUpdate* update)
{
bool modified = false;
- QString lowerName;
QVariant colName;
QString newName;
QStringList newNames;
@@ -401,20 +416,29 @@ QStringList TableModifier::getModifiedTables() const
return modifiedTables;
}
-void TableModifier::copyDataTo(SqliteCreateTablePtr newCreateTable)
+QList<SqliteCreateTable::Column*> TableModifier::getColumnsToCopyData(SqliteCreateTablePtr newCreateTable)
{
- QStringList existingColumns = createTable->getColumnNames();
-
- QStringList srcCols;
- QStringList dstCols;
- for (SqliteCreateTable::Column* column : newCreateTable->columns)
+ QList<SqliteCreateTable::Column*> resultColumns;
+ QStringList existingColumnsBefore = createTable->getColumnNames();
+ for (SqliteCreateTable::Column*& column : newCreateTable->columns)
{
if (column->hasConstraint(SqliteCreateTable::Column::Constraint::GENERATED))
continue;
- if (!existingColumns.contains(column->originalName))
+ if (!existingColumnsBefore.contains(column->originalName))
continue; // not copying columns that didn't exist before
+ resultColumns << column;
+ }
+ return resultColumns;
+}
+
+void TableModifier::copyDataTo(SqliteCreateTablePtr newCreateTable)
+{
+ QStringList srcCols;
+ QStringList dstCols;
+ for (SqliteCreateTable::Column*& column : getColumnsToCopyData(newCreateTable))
+ {
srcCols << wrapObjIfNeeded(column->originalName);
dstCols << wrapObjIfNeeded(column->name);
}
@@ -427,7 +451,7 @@ void TableModifier::handleIndexes()
SchemaResolver resolver(db);
resolver.setIgnoreSystemObjects(true);
QList<SqliteCreateIndexPtr> parsedIndexesForTable = resolver.getParsedIndexesForTable(originalTable);
- for (SqliteCreateIndexPtr index : parsedIndexesForTable)
+ for (SqliteCreateIndexPtr& index : parsedIndexesForTable)
handleIndex(index);
}
@@ -454,7 +478,7 @@ void TableModifier::handleTriggers()
SchemaResolver resolver(db);
resolver.setIgnoreSystemObjects(true);
QList<SqliteCreateTriggerPtr> parsedTriggersForTable = resolver.getParsedTriggersForTable(originalTable, true);
- for (SqliteCreateTriggerPtr trig : parsedTriggersForTable)
+ for (SqliteCreateTriggerPtr& trig : parsedTriggersForTable)
handleTrigger(trig);
}
@@ -527,7 +551,7 @@ void TableModifier::handleTriggerQueries(SqliteCreateTriggerPtr trigger)
{
SqliteQuery* newQuery = nullptr;
QList<SqliteQuery*> newQueries;
- for (SqliteQuery* query : trigger->queries)
+ for (SqliteQuery*& query : trigger->queries)
{
// The handleTriggerQuery() may delete the input query object. Don't refer to it later.
newQuery = handleTriggerQuery(query, trigger->trigger, trigger->table);
@@ -544,7 +568,7 @@ void TableModifier::handleViews()
SchemaResolver resolver(db);
resolver.setIgnoreSystemObjects(true);
QList<SqliteCreateViewPtr> parsedViewsForTable = resolver.getParsedViewsForTable(originalTable);
- for (SqliteCreateViewPtr view : parsedViewsForTable)
+ for (SqliteCreateViewPtr& view : parsedViewsForTable)
handleView(view);
}
@@ -608,12 +632,12 @@ SqliteSelect* TableModifier::handleSelect(SqliteSelect* select, const QString& t
QList<SqliteSelect::Core::SingleSource*> selSources = select->getAllTypedStatements<SqliteSelect::Core::SingleSource>();
TokenList tableTokens;
StrHash<SelectResolver::Table> resolvedTables;
- for (SqliteSelect::Core* core : select->coreSelects)
+ for (SqliteSelect::Core*& core : select->coreSelects)
{
resolvedTables = tablesAsNameHash(selectResolver.resolveTables(core));
tableTokens = core->getContextTableTokens(false);
- for (TokenPtr token : tableTokens)
+ for (TokenPtr& token : tableTokens)
{
if (token->value.compare(originalTable, Qt::CaseInsensitive) != 0)
continue;
@@ -868,7 +892,7 @@ bool TableModifier::handleExpr(SqliteExpr* expr)
if (!exprList.isEmpty())
{
bool res = true;
- for (SqliteExpr* e : exprList)
+ for (SqliteExpr*& e : exprList)
{
res &= handleExpr(e);
if (!res)
@@ -906,7 +930,7 @@ void TableModifier::simpleHandleIndexes()
SchemaResolver resolver(db);
resolver.setIgnoreSystemObjects(true);
QList<SqliteCreateIndexPtr> parsedIndexesForTable = resolver.getParsedIndexesForTable(originalTable);
- for (SqliteCreateIndexPtr index : parsedIndexesForTable)
+ for (SqliteCreateIndexPtr& index : parsedIndexesForTable)
sqls << index->detokenize();
}
@@ -920,7 +944,7 @@ void TableModifier::simpleHandleTriggers(const QString& view)
else
parsedTriggers = resolver.getParsedTriggersForTable(originalTable);
- for (SqliteCreateTriggerPtr trig : parsedTriggers)
+ for (SqliteCreateTriggerPtr& trig : parsedTriggers)
sqls << trig->detokenize();
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h
index 4c6af24..600a761 100644
--- a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h
+++ b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h
@@ -35,8 +35,8 @@ class API_EXPORT TableModifier
void parseDdl();
QString getTempTableName();
void copyDataTo(const QString& targetTable, const QStringList& srcCols, const QStringList& dstCols);
- void renameTo(const QString& newName);
- QString renameToTemp();
+ void renameTo(const QString& newName, bool doCopyData = true);
+ QString renameToTemp(bool doCopyData = true);
void copyDataTo(const QString& table);
void copyDataTo(SqliteCreateTablePtr newCreateTable);
@@ -84,7 +84,7 @@ class API_EXPORT TableModifier
bool handleUpdateColumns(SqliteUpdate* update);
QStringList handleUpdateColumns(const QStringList& colNames, bool& modified);
QString handleUpdateColumn(const QString& colName, bool& modified);
-
+ QList<SqliteCreateTable::Column*> getColumnsToCopyData(SqliteCreateTablePtr newCreateTable);
template <class T>
bool handleIndexedColumns(QList<T*>& columnsToUpdate)
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations.cpp b/SQLiteStudio3/coreSQLiteStudio/translations.cpp
index dc53395..72883b7 100644
--- a/SQLiteStudio3/coreSQLiteStudio/translations.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/translations.cpp
@@ -22,10 +22,10 @@ void loadTranslation(const QString& baseName)
QStringList filters = QStringList({baseName+"_"+lang+".qm"});
QDir dir;
- for (const QString& dirPath : SQLITESTUDIO_TRANSLATION_DIRS)
+ for (QString& dirPath : SQLITESTUDIO_TRANSLATION_DIRS)
{
dir.setPath(dirPath);
- for (const QString& f : dir.entryList(filters))
+ for (QString& f : dir.entryList(filters))
{
res = translator->load(f, dirPath);
if (res)
@@ -40,7 +40,10 @@ void loadTranslation(const QString& baseName)
}
if (!res)
+ {
+ delete translator;
return;
+ }
qApp->installTranslator(translator);
SQLITESTUDIO_TRANSLATIONS[baseName] = translator;
@@ -66,15 +69,15 @@ void loadTranslations(const QStringList& baseNames)
QStringList getAvailableTranslations()
{
+ static QRegularExpression re("[^\\_]+\\_(\\w+)\\.qm");
QSet<QString> locales;
- QRegularExpression re("[^\\_]+\\_(\\w+)\\.qm");
QRegularExpressionMatch match;
QDir dir;
QStringList filters = QStringList({"*_*.qm"});
- for (const QString& dirPath : SQLITESTUDIO_TRANSLATION_DIRS)
+ for (QString& dirPath : SQLITESTUDIO_TRANSLATION_DIRS)
{
dir.setPath(dirPath);
- for (const QString& f : dir.entryList(filters))
+ for (QString& f : dir.entryList(filters))
{
match = re.match(f);
if (!match.isValid())
@@ -85,6 +88,10 @@ QStringList getAvailableTranslations()
}
locales << "en";
+ // #4278 - the en_us translation as explicit qm file is unnecessary,
+ // but produced by CrowdIn. The "en" is default and used for American English.
+ locales.remove("en_us");
+
return locales.values();
}
@@ -114,5 +121,5 @@ void setDefaultLanguage(const QString& lang)
QString getConfigLanguageDefault()
{
- return CFG_CORE.General.Language.getDefultValue().toString();
+ return CFG_CORE.General.Language.getDefaultValue().toString();
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio.ts
new file mode 100644
index 0000000..ba114ea
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio.ts
@@ -0,0 +1,1099 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished"/>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_af_ZA.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_af_ZA.ts
new file mode 100644
index 0000000..2f9d9f2
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_af_ZA.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="af" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ar_SA.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ar_SA.ts
new file mode 100644
index 0000000..d61f7f8
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ar_SA.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ar" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ca_ES.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ca_ES.ts
new file mode 100644
index 0000000..71fc147
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ca_ES.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ca" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_cs_CZ.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_cs_CZ.ts
new file mode 100644
index 0000000..8625bc8
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_cs_CZ.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="cs" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_da_DK.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_da_DK.ts
new file mode 100644
index 0000000..ce31614
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_da_DK.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="da" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.qm
deleted file mode 100644
index 29cc169..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.qm
+++ /dev/null
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts
deleted file mode 100644
index 803f815..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de.ts
+++ /dev/null
@@ -1,1320 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="de_DE">
-<context>
- <name>AbstractDb</name>
- <message>
- <location filename="../db/abstractdb.cpp" line="343"/>
- <location filename="../db/abstractdb.cpp" line="360"/>
- <source>Cannot execute query on closed database.</source>
- <translation>Die Abfrage kann nicht auf einer ungeöffneten Datenbank ausgeführt werden.</translation>
- </message>
- <message>
- <location filename="../db/abstractdb.cpp" line="643"/>
- <source>Error attaching database %1: %2</source>
- <translation>Fehler beim Anhängen der Datenbank %1: %2</translation>
- </message>
-</context>
-<context>
- <name>BugReporter</name>
- <message>
- <source>Invalid login or password</source>
- <translation type="vanished">Ungültiger Nutzername oder Passwort</translation>
- </message>
-</context>
-<context>
- <name>ChainExecutor</name>
- <message>
- <location filename="../db/chainexecutor.cpp" line="37"/>
- <source>The database for executing queries was not defined.</source>
- <comment>chain executor</comment>
- <translation>Es wurde keine Datenbank zur Ausführung von Abfragen festgelegt.</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="44"/>
- <source>The database for executing queries was not open.</source>
- <comment>chain executor</comment>
- <translation>Die Datenbank ist zur Ausführung von Abfragen nicht geöffnet worden.</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="54"/>
- <source>Could not disable foreign keys in the database. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Fremdschlüssel konnten nicht deaktiviert werden für die Datenbank. Details: %1</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="62"/>
- <source>Could not start a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Es kann keine Datenbanktransaktion gestartet werden. Details: %1</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="89"/>
- <source>Interrupted</source>
- <comment>chain executor</comment>
- <translation>Abgebrochen</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="151"/>
- <source>Could not commit a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Die Datenbanktransaktion kann nicht &apos;committet&apos; werden. Details: %1</translation>
- </message>
-</context>
-<context>
- <name>CompletionHelper</name>
- <message>
- <location filename="../completionhelper.cpp" line="196"/>
- <source>New row reference</source>
- <translation>Neue Zeilenreferenz</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="203"/>
- <source>Old row reference</source>
- <translation>Alte Zeilenreferenz</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="208"/>
- <source>New table name</source>
- <translation>Neuer Tabellenname</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="211"/>
- <source>New index name</source>
- <translation>Neuer Indizename</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="214"/>
- <source>New view name</source>
- <translation>Neuer Viewname</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="217"/>
- <source>New trigger name</source>
- <translation>Neuer Triggername</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="220"/>
- <source>Table or column alias</source>
- <translation>Tabellen- oder Spaltenalias</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="223"/>
- <source>transaction name</source>
- <translation>Transaktionsname</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="226"/>
- <source>New column name</source>
- <translation>Neuer Spaltenname</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="229"/>
- <source>Column data type</source>
- <translation>Spaltendatentyp</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="232"/>
- <source>Constraint name</source>
- <translation>Abhängigkeitsname</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="245"/>
- <source>Error message</source>
- <translation>Fehlermeldung</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="289"/>
- <source>Collation name</source>
- <translatorcomment>Hier weiß ich nicht wie man das sprechend übersetzen kann.</translatorcomment>
- <translation>Kollationsname</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="304"/>
- <source>Any word</source>
- <translation>Beliebiges Wort</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="485"/>
- <source>Default database</source>
- <translation>Standarddatenbank</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="486"/>
- <source>Temporary objects database</source>
- <translation>Datenbank für temporäre Objekte</translation>
- </message>
-</context>
-<context>
- <name>ConfigImpl</name>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="863"/>
- <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="870"/>
- <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbManagerImpl</name>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
- <source>Could not add database %1: %2</source>
- <translation>Die Datenbank %1 kann nicht hinzugefügt werden: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="139"/>
- <source>Database %1 could not be updated, because of an error: %2</source>
- <translation>Die Datenbank %1 kann nicht aktualisiert werden. Grund: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
- <source>Database file doesn&apos;t exist.</source>
- <translation>Die Datenbankdatei existiert nicht.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="357"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="609"/>
- <source>No supporting plugin loaded.</source>
- <translation>Es wurde kein passendes plugin geladen.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="527"/>
- <source>Database could not be initialized.</source>
- <translation>Die Datenbank kann nicht initialisiert werden.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="537"/>
- <source>No suitable database driver plugin found.</source>
- <translation>Es wurde kein passender Datenbanktreiber (plugin) gefunden.</translation>
- </message>
-</context>
-<context>
- <name>DbObjectOrganizer</name>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <location filename="../dbobjectorganizer.cpp" line="412"/>
- <source>Error while creating table in target database: %1</source>
- <translation>Fehler beim Erstellen einer Tabelle in der Zieldatenbank %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <source>Could not parse table.</source>
- <translation>Die Tabelle konnte nicht verarbeitet werden.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="426"/>
- <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
- <translation>Datenbank %1 konnte nicht mit Datenbank %2 verbunden werden, daher werden die Daten der Tabelle %3 durch SQLiteStudio kopiert. Diese Methode kann bei großen Tabellen sehr lange dauern, bitte haben Sie Geduld.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="447"/>
- <source>Error while copying data for table %1: %2</source>
- <translation>Fehler beim Kopieren von Daten für Tabelle %1: %2</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="466"/>
- <location filename="../dbobjectorganizer.cpp" line="473"/>
- <location filename="../dbobjectorganizer.cpp" line="496"/>
- <source>Error while copying data to table %1: %2</source>
- <translation>Fehler beim Kopieren von Daten in die Tabelle %1: %2</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="535"/>
- <source>Error while dropping source view %1: %2
-Tables, indexes, triggers and views copied to database %3 will remain.</source>
- <translation>Fehler beim Entfernen des Quellviews %1: %2
-Tabellen, Indizes, Trigger und Views die in Datenbank %3 kopiert wurden, werden auf der Quelldatenbank verbleiben.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="542"/>
- <source>Error while creating view in target database: %1</source>
- <translation>Fehler beim Erstellen eines Views in der Zieldatenbank %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="547"/>
- <source>Error while creating index in target database: %1</source>
- <translation>Fehler beim Erstellen eines Indizes in der Zieldatenbank %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="552"/>
- <source>Error while creating trigger in target database: %1</source>
- <translation>Fehler beim Erstellen eines Triggers in der Zieldatenbank %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="773"/>
- <location filename="../dbobjectorganizer.cpp" line="780"/>
- <location filename="../dbobjectorganizer.cpp" line="789"/>
- <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
- <translation>Objekt &apos;%1&apos; konnte analysieren, um es zu verschieben oder kopieren zu können.</translation>
- </message>
-</context>
-<context>
- <name>DbVersionConverter</name>
- <message>
- <location filename="../dbversionconverter.cpp" line="932"/>
- <source>Target file exists, but could not be overwritten.</source>
- <translation>Die Zieldatei existiert zwar, konnte aber nicht überschrieben werden.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="951"/>
- <source>Could not find proper database plugin to create target database.</source>
- <translation>Es konnte kein geeignetes Datenbankplugin gefunden werden, um die Zieldatenbank zu erzeugen.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="1185"/>
- <source>Error while converting database: %1</source>
- <translation>Fehler beim Konvertieren der Datenbank: %1</translation>
- </message>
-</context>
-<context>
- <name>DdlHistoryModel</name>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="65"/>
- <source>Database name</source>
- <comment>ddl history header</comment>
- <translation>Datenbankname</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="67"/>
- <source>Database file</source>
- <comment>ddl history header</comment>
- <translation>Datenbankdatei</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="69"/>
- <source>Date of execution</source>
- <comment>ddl history header</comment>
- <translation>Datum der Ausführung</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="71"/>
- <source>Changes</source>
- <comment>ddl history header</comment>
- <translation>Änderungen</translation>
- </message>
-</context>
-<context>
- <name>ExportManager</name>
- <message>
- <location filename="../services/exportmanager.cpp" line="72"/>
- <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
- <translation>Das Exportplugin %1 unterstützt das Exportieren der Abfrageergebnisse nicht.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="98"/>
- <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
- <translation>Das Exportplugin %1 unterstützt das Exportieren von Tabellen nicht.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="122"/>
- <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
- <translation>Das Exportplugin %1 unterstützt das Exportieren von Datenbanken nicht.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="155"/>
- <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
- <translation>Das Exportformat %1 wird nicht unterstützt. Unterstützte Formate sind: %2.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="218"/>
- <source>Export to the clipboard was successful.</source>
- <translation>Der Export in die Zwischenablage war erfolgreich.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="222"/>
- <source>Export to the file &apos;%1&apos; was successful.</source>
- <translation>Der Export in die Datei %1 war erfolgreich.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="224"/>
- <source>Export was successful.</source>
- <translation>Der Export war erfolgreich.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="266"/>
- <source>Could not export to file %1. File cannot be open for writting.</source>
- <translation>Es kann nicht in die Datei %1 exportiert werden. Die Datei lässt sich nicht für Schreibzugriffe öffnen.</translation>
- </message>
-</context>
-<context>
- <name>ExportWorker</name>
- <message>
- <location filename="../exportworker.cpp" line="122"/>
- <source>Error while exporting query results: %1</source>
- <translation>Fehler beim Exportieren der Abfrageergebnisse: %1</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="202"/>
- <source>Error while counting data column width to export from query results: %1</source>
- <translation>Fehler beim Ermitteln der Spaltenbreite für den Export der Abfrageergebnisse: %1</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="346"/>
- <location filename="../exportworker.cpp" line="404"/>
- <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
- <translation>%1 konnte zum Exportieren nicht korrekt verarbeitet werden. Diese Daten werden nicht exportiert.</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="608"/>
- <source>Error while reading data to export from table %1: %2</source>
- <translation>Fehler beim Lesen der zu exportierenden Daten aus der Tabelle %1: %2</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="616"/>
- <source>Error while counting data to export from table %1: %2</source>
- <translation>Fehler beim Ermitteln der zu exportierenden Daten aus der Tabelle %1: %2</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="632"/>
- <source>Error while counting data column width to export from table %1: %2</source>
- <translation>Fehler beim Ermitteln der Spaltenbreite für den Export aus Tabelle %1: %2</translation>
- </message>
-</context>
-<context>
- <name>FunctionManagerImpl</name>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="234"/>
- <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
- <translation>Falsche Anzahl an Parametern für Funktion &apos;%1&apos;. Erwartet wurden %2, angegeben wurden jedoch %3.</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
- <source>No such function registered in SQLiteStudio: %1(%2)</source>
- <translation>Diese Funktion ist in SQLiteStudio nicht verfügbar: %1(%2)</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="353"/>
- <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
- <translatorcomment>Auch hier ist sicherlich eine Überarbeitung nötig, wenn der Kontext der Meldung bekannt ist.</translatorcomment>
- <translation>Die Funktion %1(%2) wurde für die Sprache %3 erstellt, jedoch ist das Plugin, welches diese Sprache unterstützt, derzeit nicht geladen.</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="371"/>
- <source>Invalid regular expression pattern: %1</source>
- <translation>Ungültiges Muster für die regulären Ausdrücke: %1</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="390"/>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="423"/>
- <source>Could not open file %1 for reading: %2</source>
- <translation>Datei %1 kann nicht für Lesezugriffe geöffnet werden: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="445"/>
- <source>Could not open file %1 for writting: %2</source>
- <translation>Datei %1 kann nicht für Schreibzugriffe geöffnet werden: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="465"/>
- <source>Error while writting to file %1: %2</source>
- <translation>Fehler beim Schreiben in Datei %1: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="483"/>
- <source>Unsupported scripting language: %1</source>
- <translation>Nicht unterstützte Skriptsprache: %1</translation>
- </message>
-</context>
-<context>
- <name>GenericExportPlugin</name>
- <message>
- <location filename="../plugins/genericexportplugin.cpp" line="20"/>
- <source>Could not initialize text codec for exporting. Using default codec: %1</source>
- <translation>Der &apos;Export Textcodec&apos; konnte nicht initialisiert werden. Es wird der Standardcodec genutzt: %1</translation>
- </message>
-</context>
-<context>
- <name>ImportManager</name>
- <message>
- <location filename="../services/importmanager.cpp" line="96"/>
- <source>Imported data to the table &apos;%1&apos; successfully.</source>
- <translation>Die Daten wurden erfolgreich in Tabelle %1 importiert.</translation>
- </message>
-</context>
-<context>
- <name>ImportWorker</name>
- <message>
- <location filename="../importworker.cpp" line="24"/>
- <source>No columns provided by the import plugin.</source>
- <translation>Dieses Importplugin stellt keine Spalten zur Verfügung.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="30"/>
- <source>Could not start transaction in order to import a data: %1</source>
- <translation>Es kann keine Transaktion zum Import der Daten gestartet werden: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="52"/>
- <source>Could not commit transaction for imported data: %1</source>
- <translation>Die Transaktion für die importierten Daten kann nicht &apos;committet&apos; werden: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="100"/>
- <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
- <translation>Die Tabelle %1 hat weniger Spalten als die zu importierenden Daten liefern. Überschüssige Spalten werden daher ignoriert.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="105"/>
- <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
- <translation>Die Tabelle %1 hat mehr Spalten als die zu importierenden Daten liefern. Einige Tabellenspalten werden deshalb leer bleiben.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="124"/>
- <source>Could not create table to import to: %1</source>
- <translation>Die Tabelle, in die importiert werden soll, kann nicht erstellt werden: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="177"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Error while importing data: %1</source>
- <translation>Fehler beim Import der Daten: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Interrupted.</source>
- <comment>import process status update</comment>
- <translation>Abgebrochen.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="172"/>
- <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
- <translation>Datenzeile %1 konnte nicht importiert werden. Die Zeile wurde ignoriert. Problembeschreibung: %2</translation>
- </message>
-</context>
-<context>
- <name>PluginManagerImpl</name>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="543"/>
- <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
- <translation>Plugin %1 konnte nicht geladen werden, weil ein Konflikt besteht mit Plugin %2.</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="554"/>
- <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
- <translation>Plugin %1 konnte nicht geladen werden, da dessen Abhängigkeiten nicht geladen worden sind: %2.</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="563"/>
- <source>Cannot load plugin %1. Error details: %2</source>
- <translation>Plugin %1 konnte nicht geladen. Problembeschreibung: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="579"/>
- <source>Cannot load plugin %1 (error while initializing plugin).</source>
- <translation>Plugin %1 konnte wegen eines Fehlers bei der Initialisierung nicht geladen werden.</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
- <source>min: %1</source>
- <comment>plugin dependency version</comment>
- <translation>Min: %1</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="732"/>
- <source>max: %1</source>
- <comment>plugin dependency version</comment>
- <translation>Max: %1</translation>
- </message>
-</context>
-<context>
- <name>PopulateConstant</name>
- <message>
- <location filename="../plugins/populateconstant.cpp" line="10"/>
- <source>Constant</source>
- <comment>populate constant plugin name</comment>
- <translatorcomment>Hier bin ich mir absolut nicht sicher was genau gemeint ist.</translatorcomment>
- <translation>konstanten</translation>
- </message>
-</context>
-<context>
- <name>PopulateConstantConfig</name>
- <message>
- <location filename="../plugins/populateconstant.ui" line="20"/>
- <source>Constant value:</source>
- <translation>Konstanter Wert:</translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionary</name>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="15"/>
- <source>Dictionary</source>
- <comment>dictionary populating plugin name</comment>
- <translation>Wörterbuch</translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionaryConfig</name>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="20"/>
- <source>Dictionary file</source>
- <translation>Wörterbuchdatei</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="29"/>
- <source>Pick dictionary file</source>
- <translation>Wähle Wörterbuchdatei aus</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="39"/>
- <source>Word separator</source>
- <translation>Wortseperator</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="45"/>
- <source>Whitespace</source>
- <translation>Leerzeichen</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="58"/>
- <source>Line break</source>
- <translation>Zeilenumbruch</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="74"/>
- <source>Method of using words</source>
- <translation>Methode der Wortverwendung</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="80"/>
- <source>Ordered</source>
- <translation>Sortiert</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="93"/>
- <source>Randomly</source>
- <translation>Zufällig</translation>
- </message>
-</context>
-<context>
- <name>PopulateManager</name>
- <message>
- <location filename="../services/populatemanager.cpp" line="89"/>
- <source>Table &apos;%1&apos; populated successfully.</source>
- <translation>Tabelle %1 wurde erfolgreich gefüllt.</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandom</name>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="12"/>
- <source>Random number</source>
- <translation>Zufällige Nummer</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomConfig</name>
- <message>
- <location filename="../plugins/populaterandom.ui" line="20"/>
- <source>Constant prefix</source>
- <translation>Konstanter Präfix</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="26"/>
- <source>No prefix</source>
- <translation>Kein Präfix</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="39"/>
- <source>Minimum value</source>
- <translation>Kleinster Wert</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="61"/>
- <source>Maximum value</source>
- <translation>Größter Wert</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="86"/>
- <source>Constant suffix</source>
- <translation>Konstanter Suffix</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="92"/>
- <source>No suffix</source>
- <translation>Kein Suffix</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomText</name>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="12"/>
- <source>Random text</source>
- <translation>Zufälliger Text</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomTextConfig</name>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="20"/>
- <source>Use characters from common sets:</source>
- <translation>Benutze Zeichen von den gebräuchlichsten Sets:</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="36"/>
- <source>Minimum length</source>
- <translation>Mindestlänge</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="64"/>
- <source>Letters from a to z.</source>
- <translation>Buchstaben von a bis z.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="67"/>
- <source>Alpha</source>
- <translation>Alphanumerisch</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="77"/>
- <source>Numbers from 0 to 9.</source>
- <translation>Ziffern von 0 bis 9.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="80"/>
- <source>Numeric</source>
- <translation>Numerisch</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="90"/>
- <source>A whitespace, a tab and a new line character.</source>
- <translation>Ein Leerzeichen, ein Tab und ein Zeilenumbruchzeichen.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="93"/>
- <source>Whitespace</source>
- <translation>Leerzeichen</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="103"/>
- <source>Includes all above and all others.</source>
- <translation>Alle obigen und auch andere.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="106"/>
- <source>Binary</source>
- <translation>Binär</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="119"/>
- <source>Use characters from my custom set:</source>
- <translation>Benutze Zeichen von meinem benutzerdefinierten Set:</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="132"/>
- <source>Maximum length</source>
- <translation>Maximallänge</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="160"/>
- <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
- <translatorcomment>Auch hier kann man besser übersetzen, wenn man den Kontext kennt.</translatorcomment>
- <translation>Wenn Sie einige Buchstaben mehrmals eingeben, dann ist es wahrscheinlicher, dass sie genutzt werden.</translation>
- </message>
-</context>
-<context>
- <name>PopulateScript</name>
- <message>
- <location filename="../plugins/populatescript.cpp" line="13"/>
- <source>Script</source>
- <translation>Skript</translation>
- </message>
-</context>
-<context>
- <name>PopulateScriptConfig</name>
- <message>
- <location filename="../plugins/populatescript.ui" line="26"/>
- <source>Initialization code (optional)</source>
- <translation>Initialisierungscode (optional)</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="45"/>
- <source>Per step code</source>
- <translation>Einzelschrittcode</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="70"/>
- <source>Language</source>
- <translation>Sprache</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="89"/>
- <source>Help</source>
- <translation>Hilfe</translation>
- </message>
-</context>
-<context>
- <name>PopulateSequence</name>
- <message>
- <location filename="../plugins/populatesequence.cpp" line="13"/>
- <source>Sequence</source>
- <translation>Sequenz</translation>
- </message>
-</context>
-<context>
- <name>PopulateSequenceConfig</name>
- <message>
- <location filename="../plugins/populatesequence.ui" line="33"/>
- <source>Start value:</source>
- <translation>Startwert:</translation>
- </message>
- <message>
- <location filename="../plugins/populatesequence.ui" line="56"/>
- <source>Step:</source>
- <translation>Schritt:</translation>
- </message>
-</context>
-<context>
- <name>PopulateWorker</name>
- <message>
- <location filename="../populateworker.cpp" line="23"/>
- <source>Could not start transaction in order to perform table populating. Error details: %1</source>
- <translation>Es kann keine Transaktion zum Füllen der Tabelle gestartet werden. Problembeschreibung: %1</translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="70"/>
- <source>Error while populating table: %1</source>
- <translation>Fehler beim Füllen der Tabelle: %1</translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="81"/>
- <source>Could not commit transaction after table populating. Error details: %1</source>
- <translation>Die Transaktion zum Füllen der Tabelle kann nicht &apos;committet&apos; werden. Problembeschreibung: %1</translation>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <location filename="../db/abstractdb2.h" line="222"/>
- <location filename="../db/abstractdb3.h" line="384"/>
- <source>Could not open database: %1</source>
- <translation>Die Datenbank %1 kann nicht geöffnet werden.</translation>
- </message>
- <message>
- <location filename="../db/abstractdb2.h" line="833"/>
- <location filename="../db/abstractdb3.h" line="1132"/>
- <source>Result set expired or no row available.</source>
- <translation>Das Abfrageergebniss ist ungültig oder es ist keine Datenzeile verfügbar.</translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="328"/>
- <location filename="../db/abstractdb3.h" line="332"/>
- <source>Could not load extension %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="405"/>
- <source>Could not close database: %1</source>
- <translation>Die Datenbank %1 kann nicht geschlossen werden.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="138"/>
- <location filename="../dbversionconverter.cpp" line="143"/>
- <location filename="../dbversionconverter.cpp" line="196"/>
- <location filename="../dbversionconverter.cpp" line="243"/>
- <location filename="../dbversionconverter.cpp" line="248"/>
- <location filename="../dbversionconverter.cpp" line="256"/>
- <location filename="../dbversionconverter.cpp" line="336"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
- <translation>SQLite %1 unterstützt keine &apos;%2&apos; Abfrage.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="202"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
- <translation>SQLite %1 unterstützt keine &apos;%2&apos; Abfrage, aber die normale Tabelle kann stattdessen erzeugt werden, wenn Sie fortfahren.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="429"/>
- <source>Could not parse statement: %1
-Error details: %2</source>
- <translation>Die Abfrage kann nicht verarbeitet werden: %1
-Problembeschreibung: %2</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="440"/>
- <location filename="../dbversionconverter.cpp" line="468"/>
- <location filename="../dbversionconverter.cpp" line="491"/>
- <location filename="../dbversionconverter.cpp" line="529"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
- <translation>SQLite %1 unterstützt keine &apos;%2&apos; Klausel. Die %3 Abfrage kann mit dieser Klausel nicht konvertiert werden.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="497"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
- <translation>SQLite %1 unterstützt keine &apos;%2&apos; Klausel in der %3 Abfrage.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="772"/>
- <source>SQLite %1 does not support current date or time clauses in expressions.</source>
- <translation>SQLite %1 unterstützt keine current date&apos; oder &apos;time&apos; Klauseln in Ausdrücken.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="775"/>
- <source>SQLite %1 does not support row value clauses in expressions.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="786"/>
- <location filename="../dbversionconverter.cpp" line="789"/>
- <location filename="../dbversionconverter.cpp" line="800"/>
- <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
- <translation>SQLite %1 unterstützt keine &apos;%2&apos; Klausel Ausdrücken.</translation>
- </message>
- <message>
- <location filename="../impl/dbattacherimpl.cpp" line="115"/>
- <source>Could not attach database %1: %2</source>
- <translatorcomment>Generell muss in den Übersetzungen das &apos;attached&apos; genauer analysiert werden.</translatorcomment>
- <translation>Die Datenbank %1 kann nicht angefügt werden: %2</translation>
- </message>
- <message>
- <location filename="../parser/parsercontext.cpp" line="108"/>
- <location filename="../parser/parsercontext.cpp" line="110"/>
- <source>Incomplete query.</source>
- <translation>Unvollständige Abfrage.</translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
- <location filename="../parser/sqlite3_parse.cpp" line="2212"/>
- <source>Parser stack overflow</source>
- <translation>Stacküberlauf bei Verarbeitung</translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="4465"/>
- <location filename="../parser/sqlite3_parse.cpp" line="5195"/>
- <source>Syntax error</source>
- <translation>Syntaxfehler</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="30"/>
- <source>Could not open dictionary file %1 for reading.</source>
- <translation>Die Wörterbuchdatei %1 kann für den Lesezugriff nicht geöffnet werden.</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="91"/>
- <source>Dictionary file must exist and be readable.</source>
- <translation>Die Wörterbuchdatei muss vorhanden sein und Leserechte besitzen.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="53"/>
- <source>Maximum value cannot be less than minimum value.</source>
- <translation>Der Maximalwert kann nicht kleiner sein als der Minimalwert.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="77"/>
- <source>Maximum length cannot be less than minimum length.</source>
- <translation>Die Maximallänge kann nicht kleiner sein als die Minimallänge.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="88"/>
- <source>Custom character set cannot be empty.</source>
- <translation>Ein benutzerdefiniertes Zeichenset darf nicht leer sein.</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="40"/>
- <source>Could not find plugin to support scripting language: %1</source>
- <translation>Das Plugin zur Unterstützung der folgenden Skriptsprache kann nicht gefunden werden: %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="58"/>
- <source>Error while executing populating initial code: %1</source>
- <translation>Fehler beim Ausführen des Initialisierungsprozesses: %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="80"/>
- <source>Error while executing populating code: %1</source>
- <translation>Fehler beim Ausführen des Auffüllprozesses: %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="112"/>
- <source>Select implementation language.</source>
- <translation>Wählen Sie die Implementationssprache.</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="113"/>
- <source>Implementation code cannot be empty.</source>
- <translation>Der Implementationscode darf nicht leer sein.</translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="359"/>
- <source>Could not resolve data source for column: %1</source>
- <translation>Die Datenquelle für Spalte %1 kann nicht aufgelöst werden.</translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="431"/>
- <source>Could not resolve table for column &apos;%1&apos;.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="768"/>
- <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
- <translatorcomment>Ich hoffe, dass ich &quot;to initialize&quot; hier richtig mit &quot;erstellt&quot; übersetzt habe.</translatorcomment>
- <translation>Die Konfigurationsdatei kann nicht erstellt werden. Alle Änderungen an der Konfiguration sowie die Abfragehistorie sind nach einem Programmneustart verloren. Es wurde versucht die Konfigurationsdatei in folgendem Verzeichnis zu erstellen: %1</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="305"/>
- <source>General purpose</source>
- <comment>plugin category name</comment>
- <translation>Allgemeine Verwendung</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="306"/>
- <source>Database support</source>
- <comment>plugin category name</comment>
- <translation>Datenbankunterstützung</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="307"/>
- <source>Code formatter</source>
- <comment>plugin category name</comment>
- <translation>Codeformatierer</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="308"/>
- <source>Scripting languages</source>
- <comment>plugin category name</comment>
- <translation>Skriptsprachen</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="309"/>
- <source>Exporting</source>
- <comment>plugin category name</comment>
- <translation>Exportieren</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="310"/>
- <source>Importing</source>
- <comment>plugin category name</comment>
- <translation>Importieren</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="311"/>
- <source>Table populating</source>
- <comment>plugin category name</comment>
- <translation>Tabellen füllen</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="115"/>
- <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
- <translation>Tabelle %1 referenziert Tabelle %2, jedoch wird die &apos;foreign key&apos;-Definition für die neue Tabellendefinition nicht aktualisiert, da es Probleme bei der DDL-Analyse von Tabelle %3 gibt.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="438"/>
- <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
- <translation>Alle Spalten, die von Index %1 indiziert wurden, sind verloren. Der Index wird nach der Tabellenmodifikation nicht neu erstellt.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="481"/>
- <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
- <translation>Es ist ein Problem bei der korrekten Verarbeitung des Triggers %1 aufgetreten. Er wird möglicherweise nicht vollständig aktualisert werden und sollte geprüft werden.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="528"/>
- <source>Cannot not update trigger %1 according to table %2 modification.</source>
- <translation>Die Aktualisierung des Triggers %1, resultierend aus der Änderung der Tabelle %2, kann nicht ausgeführt werden.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="708"/>
- <location filename="../tablemodifier.cpp" line="732"/>
- <location filename="../tablemodifier.cpp" line="751"/>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation>Es ist ein Problem beim Aktualisieren einer %1 Abfrage innerhalb eines %2 Triggers aufgetreten. Eine der %1 Unterabfragen, welche möglicherweise die Tabelle %3 referenziert, kann nicht geändert werden. Eine manuelle Anpassung des Triggers wird nötig sein.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="496"/>
- <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
- <translation>Alle Spalten, die durch den Trigger %1 abgedeckt wurden, sind verloren. Der Trigger wird nach der Änderung nicht wiederhergestellt.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="546"/>
- <source>Cannot not update view %1 according to table %2 modifications.
-The view will remain as it is.</source>
- <translation>Die Aktualisierung des Views %1, resultierend aus der Änderung der Tabelle %2, kann nicht ausgeführt werden. Der View wird daher nicht geändert.</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="25"/>
- <source>Could not parse DDL of the view to be created. Details: %1</source>
- <translation>DDL des zu erzeugenden Views kann nicht verarbeitet werden. Details: %1</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="34"/>
- <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
- <translation>Die zu verarbeitende Abfrage ist nicht CREATE VIEW, es ist: %1</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="82"/>
- <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
- <translation>SQLiteStudio konnte die vom View zurückgegebenen Spalten nicht auflösen, daher kann nicht ermittelt werden, welcher Trigger beim Wiederherstelllungsprozess einen Fehler verusracht haben könnte.</translation>
- </message>
- <message>
- <location filename="../common/utils.cpp" line="1022"/>
- <source>Could not open file &apos;%1&apos; for reading: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QueryExecutor</name>
- <message>
- <location filename="../db/queryexecutor.cpp" line="186"/>
- <source>Execution interrupted.</source>
- <translation>Ausführung abgebrochen.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="227"/>
- <source>Database is not open.</source>
- <translation>Die Datenbank ist nicht geöffnet.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="235"/>
- <source>Only one query can be executed simultaneously.</source>
- <translation>Es kann nur eine Abfrage gleichzeitig ausgeführt werden.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="339"/>
- <location filename="../db/queryexecutor.cpp" line="618"/>
- <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
- <translatorcomment>Hier muss ggf. noch das &apos;data paging&apos; korrekt übersetzt werden.</translatorcomment>
- <translation>Beim Ausführen der count(*) Abfrage ist ein Fehler aufgetreten, daher wird das data paging abgeschaltet. Problemdetails der Datenbank: %1</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="529"/>
- <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
- <translation>SQLiteStudio konnte keine Metadaten aus der Abfrage extrahieren. Die Ergebnismenge kann daher nicht editiert werden.</translation>
- </message>
-</context>
-<context>
- <name>ScriptingQtDbProxy</name>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
- <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
- <translation>Beim Aufruf des QtSkript Kommandos %1 ist im zugehörigen Kontext keine Datenbank verfügbar.</translation>
- </message>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
- <source>Error from %1: %2</source>
- <translation>Fehler von %1: %2</translation>
- </message>
-</context>
-<context>
- <name>SqlHistoryModel</name>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="34"/>
- <source>Database</source>
- <comment>sql history header</comment>
- <translation>Datenbank</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="36"/>
- <source>Execution date</source>
- <comment>sql history header</comment>
- <translation>Ausführungsdatum</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="38"/>
- <source>Time spent</source>
- <comment>sql history header</comment>
- <translation>Dauer</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="40"/>
- <source>Rows affected</source>
- <comment>sql history header</comment>
- <translation>Anzahl Zeilen</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="42"/>
- <source>SQL</source>
- <comment>sql history header</comment>
- <translation>SQL</translation>
- </message>
-</context>
-<context>
- <name>UpdateManager</name>
- <message>
- <source>An error occurred while checking for updates: %1.</source>
- <translation type="vanished">Beim Prüfen auf Updates trat folgender Fehler auf: %1.</translation>
- </message>
- <message>
- <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
- <translation type="vanished">Es konnte nicht auf neue Updates geprüft werden, da der Updateserver in einem ungültigen Nachrichtenformat antwortet. Diese Meldung kann gefahrlos ignoriert werden.</translation>
- </message>
- <message>
- <source>An error occurred while reading updates metadata: %1.</source>
- <translation type="vanished">Beim Lesen der Update-Metadaten ist ein Fehler aufgetreten: %1.</translation>
- </message>
- <message>
- <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
- <translation type="vanished">Das Update konnte nicht heruntergeladen werden, da der Updateserver in einem ungültigen Nachrichtenformat antwortet. Sie können es später noch einmal versuchen oder das Update und die Installation manuell ausführen. Weitere Infoamtionen hierzu finden Sie in der &lt;a href=&quot;%1&quot;&gt;Programmdokumentation&lt;/a&gt;.</translation>
- </message>
- <message>
- <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
- <translation type="vanished">Das temporäre Verzeichnis zum Herunterladen des Updates konnte nicht erstellt werden. Der Updatevorgang wird abgebrochen.</translation>
- </message>
- <message>
- <source>There was no updates to download. Updating aborted.</source>
- <translation type="vanished">Keine neuen Updates vorhanden. Der Updatevorgang wird beendet.</translation>
- </message>
- <message>
- <source>Downloading: %1</source>
- <translation type="vanished">Herunterladen von: %1</translation>
- </message>
- <message>
- <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
- <translation type="vanished">Der Dateiname der Update-URL %1 konnte nicht ermittelt werden. Der Updatevorgang wird abgebrochen.</translation>
- </message>
- <message>
- <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
- <translation type="vanished">Beim Schreiben in die Datei &apos;%1&apos; trat folgender Fehler auf: %2. Der Updatevorgang wird abgebrochen.</translation>
- </message>
- <message>
- <source>Installing updates.</source>
- <translation type="vanished">Update wird installiert.</translation>
- </message>
- <message>
- <source>Could not copy current application directory into %1 directory.</source>
- <translation type="vanished">Das aktuelle Programmverzeichnis konnte nicht in das Verzeichnis %1 kopiert werden.</translation>
- </message>
- <message>
- <source>Could not create directory %1.</source>
- <translation type="vanished">Das Verzeichnis %1 konnte nicht erstellt werden.</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2.
-Details: %3</source>
- <translation type="vanished">Das Verzeichnis %1 konnte nicht in %2 umbenannt werden.
-Details: %3</translation>
- </message>
- <message>
- <source>Cannot not rename directory %1 to %2.
-Details: %3</source>
- <translation type="vanished">Das Verzeichnis %1 kann nicht in %2 umbenannt werden.
-Details: %3</translation>
- </message>
- <message>
- <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
- <translation type="vanished">Das Verzeichnis %1 konnte nicht nach %2 verschoben werden. Ebenso schlug das Wiederherstellen des originalen Verzeichnissses fehlt, daher befindet sich das SQLiteStudio Verzeichnis nun hier: %3</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
- <translation type="vanished">Das Das Verzeichnis %1 konnte nicht nach %2 umbenannt werden.SQLiteStudio wird auf den Ursprungszustand zurückgesetzt.</translation>
- </message>
- <message>
- <source>Could not unpack component %1 into %2 directory.</source>
- <translation type="vanished">Die Komponente %1 konnte nicht in das Verzeichnis %2 extrahiert werden.</translation>
- </message>
- <message>
- <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
- <translation type="vanished">Die Rechteerweiterung zum Ausführen des Updates als &apos;root&apos; konnte nicht gefunden werden. Es wurde gesucht nach: %1</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as root: %1</source>
- <translation type="vanished">Die abschließenden Aktualisierungsschritte konnten nicht als &apos;root&apos; ausgeführt werden: %1</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as admin: %1</source>
- <translation type="vanished">Die abschließenden Aktualisierungsschritte konnten nicht als &apos;admin&apos; ausgeführt werden: %1</translation>
- </message>
- <message>
- <source>Cannot create temporary directory for updater.</source>
- <translation type="vanished">Das temporäre Verzeichnis für den Updater konnte nicht erstellt werden.</translation>
- </message>
- <message>
- <source>Cannot create updater script file.</source>
- <translation type="vanished">Die Skriptdatei für den Updater konnte nicht erstellt werden.</translation>
- </message>
- <message>
- <source>Updating canceled.</source>
- <translation type="vanished">Updatevorgang abgebrochen.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator.</source>
- <translation type="vanished">Die abschließenden Aktualisierungsschritte konnten nicht als &apos;administrator&apos; ausgeführt werden.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
- <translation type="vanished">Die abschließenden Aktualisierungsschritte konnten nicht als &apos;administrator&apos; ausgeführt werden. Die Updatevorbereitungen liefen auf Zeitüberschreitung.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
- <translation type="vanished">Die abschließenden Aktualisierungsschritte konnten nicht als &apos;administrator&apos; ausgeführt werden. Der Updatevorgang lief auf Zeitüberschreitung.</translation>
- </message>
- <message>
- <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
- <translation type="vanished">Das temporäre Verzeichnis %1 konnte nicht aufgeräumt werden. Sie können es später manuell löschen.</translation>
- </message>
- <message>
- <source>Could not run new version for continuing update.</source>
- <translation type="vanished">Die neue Version zum Fortführen des Updates kann nicht gestartet werden.</translation>
- </message>
- <message>
- <source>Package not in tar.gz format, cannot install: %1</source>
- <translation type="vanished">Das Paket liegt nicht im tar.gz Format vor. %1 kann nicht installiert werden.</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
- <translation type="vanished">Das Paket %1 kann nicht installiert werden, weil es nicht in das Verzeichnis %2 verschoben werden kann.</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
- <translation type="vanished">Das Paket %1 kann nicht installiert werden, weil es nicht extrahiert werden kann: %2</translation>
- </message>
- <message>
- <source>Package not in zip format, cannot install: %1</source>
- <translation type="vanished">Das Paket liegt nicht im zip Format vor. %1 kann nicht installiert werden.</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
- <translation type="vanished">Das Paket %1 kann nicht installiert werden, weil es nicht in das Verzeichnis %2: %3 extrahiert werden kann.</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
- <translation type="vanished">Das Paket %1 kann nicht installiert werden, weil es nicht in das Verzeichnis %2 entzippt werden kann.</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2.</source>
- <translation type="vanished">Das Verzeichnis %1 konnte nicht in %2 umbenannt werden.</translation>
- </message>
- <message>
- <source>Could not delete directory %1.</source>
- <translation type="vanished">Das Verzeichnis %1 konnte nicht gelöscht werden.</translation>
- </message>
- <message>
- <source>Error executing update command: %1
-Error message: %2</source>
- <translation type="vanished">Fehler beim Ausführen des Updatekommandos %1.
-Fehlerbeschreibung: %2</translation>
- </message>
- <message>
- <source>An error occurred while downloading updates: %1. Updating aborted.</source>
- <translation type="vanished">Beim Herunterladen des Updates %1 ist ein fehelr aufgetreten. Der Updatevorgang wurde abgebrochen.</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="48"/>
- <source>Updates installer executable is missing.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="49"/>
- <location filename="../services/updatemanager.cpp" line="68"/>
- <source>Unable to check for updates (%1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="66"/>
- <source>details are unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="81"/>
- <source>Unable to run updater application (%1). Please report this.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de_DE.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de_DE.ts
new file mode 100644
index 0000000..8bb0a2c
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_de_DE.ts
@@ -0,0 +1,1100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="de" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Die Abfrage kann nicht auf einer ungeöffneten Datenbank ausgeführt werden.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Fehler beim Anhängen der Datenbank %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>Es wurde keine Datenbank zur Ausführung von Abfragen festgelegt.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>Die Datenbank ist zur Ausführung von Abfragen nicht geöffnet worden.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Fremdschlüssel konnten nicht deaktiviert werden für die Datenbank. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Es kann keine Datenbanktransaktion gestartet werden. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Abgebrochen</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Die Datenbanktransaktion kann nicht &apos;committet&apos; werden. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation>Neue Zeilenreferenz</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation>Alte Zeilenreferenz</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>Neuer Tabellenname</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>Neuer Indizename</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>Neuer Viewname</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>Neuer Triggername</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>Tabellen- oder Spaltenalias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>Transaktionsname</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>Neuer Spaltenname</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation>Spaltendatentyp</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation>Abhängigkeitsname</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>Fehlermeldung</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation>Beliebiges Wort</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>Standarddatenbank</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation>Datenbank für temporäre Objekte</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>Die Datenbank %1 kann nicht hinzugefügt werden: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>Die Datenbank %1 kann nicht aktualisiert werden. Grund: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Die Datenbankdatei existiert nicht.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>Es wurde kein passendes plugin geladen.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation>Die Datenbank kann nicht initialisiert werden.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>Es wurde kein passender Datenbanktreiber (plugin) gefunden.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>Fehler beim Erstellen einer Tabelle in der Zieldatenbank %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation>Die Tabelle konnte nicht verarbeitet werden.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation>Datenbank %1 konnte nicht mit Datenbank %2 verbunden werden, daher werden die Daten der Tabelle %3 durch SQLiteStudio kopiert. Diese Methode kann bei großen Tabellen sehr lange dauern, bitte haben Sie Geduld.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation>Fehler beim Kopieren von Daten für Tabelle %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation>Fehler beim Kopieren von Daten in die Tabelle %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation>Fehler beim Entfernen des Quellviews %1: %2
+Tabellen, Indizes, Trigger und Views die in Datenbank %3 kopiert wurden, werden auf der Quelldatenbank verbleiben.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation>Fehler beim Erstellen eines Views in der Zieldatenbank %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation>Fehler beim Erstellen eines Indizes in der Zieldatenbank %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation>Fehler beim Erstellen eines Triggers in der Zieldatenbank %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation>Objekt &apos;%1&apos; konnte analysieren, um es zu verschieben oder kopieren zu können.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>Datenbankname</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>Datenbankdatei</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>Datum der Ausführung</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>Änderungen</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation>Das Exportplugin %1 unterstützt das Exportieren der Abfrageergebnisse nicht.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation>Das Exportplugin %1 unterstützt das Exportieren von Tabellen nicht.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation>Das Exportplugin %1 unterstützt das Exportieren von Datenbanken nicht.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation>Das Exportformat %1 wird nicht unterstützt. Unterstützte Formate sind: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>Der Export in die Zwischenablage war erfolgreich.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation>Der Export in die Datei %1 war erfolgreich.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>Der Export war erfolgreich.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation>Es kann nicht in die Datei %1 exportiert werden. Die Datei lässt sich nicht für Schreibzugriffe öffnen.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>Fehler beim Exportieren der Abfrageergebnisse: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation>Fehler beim Ermitteln der Spaltenbreite für den Export der Abfrageergebnisse: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation>%1 konnte zum Exportieren nicht korrekt verarbeitet werden. Diese Daten werden nicht exportiert.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation>Fehler beim Lesen der zu exportierenden Daten aus der Tabelle %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation>Fehler beim Ermitteln der zu exportierenden Daten aus der Tabelle %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation>Fehler beim Ermitteln der Spaltenbreite für den Export aus Tabelle %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation>Falsche Anzahl an Parametern für Funktion &apos;%1&apos;. Erwartet wurden %2, angegeben wurden jedoch %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation>Diese Funktion ist in SQLiteStudio nicht verfügbar: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation>Die Funktion %1(%2) wurde für die Sprache %3 erstellt, jedoch ist das Plugin, welches diese Sprache unterstützt, derzeit nicht geladen.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>Ungültiges Muster für die regulären Ausdrücke: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>Datei %1 kann nicht für Lesezugriffe geöffnet werden: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>Datei %1 kann nicht für Schreibzugriffe geöffnet werden: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>Fehler beim Schreiben in Datei %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation>Nicht unterstützte Skriptsprache: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation>Der &apos;Export Textcodec&apos; konnte nicht initialisiert werden. Es wird der Standardcodec genutzt: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation>Dieses Importplugin stellt keine Spalten zur Verfügung.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation>Es kann keine Transaktion zum Import der Daten gestartet werden: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation>Die Transaktion für die importierten Daten kann nicht &apos;committet&apos; werden: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation>Die Tabelle %1 hat weniger Spalten als die zu importierenden Daten liefern. Überschüssige Spalten werden daher ignoriert.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation>Die Tabelle %1 hat mehr Spalten als die zu importierenden Daten liefern. Einige Tabellenspalten werden deshalb leer bleiben.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation>Die Tabelle, in die importiert werden soll, kann nicht erstellt werden: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation>Fehler beim Import der Daten: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>Abgebrochen.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation>Datenzeile %1 konnte nicht importiert werden. Die Zeile wurde ignoriert. Problembeschreibung: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>Plugin %1 konnte nicht geladen werden, weil ein Konflikt besteht mit Plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation>Plugin %1 konnte nicht geladen werden, da dessen Abhängigkeiten nicht geladen worden sind: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation>Plugin %1 konnte nicht geladen. Problembeschreibung: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation>Plugin %1 konnte wegen eines Fehlers bei der Initialisierung nicht geladen werden.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>Min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>Max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>konstanten</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>Konstanter Wert:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>Wörterbuch</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>Wörterbuchdatei</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>Wähle Wörterbuchdatei aus</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>Wortseperator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>Leerzeichen</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>Zeilenumbruch</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>Methode der Wortverwendung</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>Sortiert</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>Zufällig</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>Tabelle %1 wurde erfolgreich gefüllt.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>Zufällige Nummer</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>Konstanter Präfix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>Kein Präfix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>Kleinster Wert</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>Größter Wert</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>Konstanter Suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>Kein Suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>Zufälliger Text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation>Benutze Zeichen von den gebräuchlichsten Sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>Mindestlänge</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation>Buchstaben von a bis z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>Alphanumerisch</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>Ziffern von 0 bis 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>Numerisch</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation>Ein Leerzeichen, ein Tab und ein Zeilenumbruchzeichen.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>Leerzeichen</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation>Alle obigen und auch andere.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>Binär</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>Benutze Zeichen von meinem benutzerdefinierten Set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>Maximallänge</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation>Wenn Sie einige Buchstaben mehrmals eingeben, dann ist es wahrscheinlicher, dass sie genutzt werden.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>Skript</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation>Initialisierungscode (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation>Einzelschrittcode</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>Sprache</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>Hilfe</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>Sequenz</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>Startwert:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>Schritt:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation>Es kann keine Transaktion zum Füllen der Tabelle gestartet werden. Problembeschreibung: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation>Fehler beim Füllen der Tabelle: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>Die Transaktion zum Füllen der Tabelle kann nicht &apos;committet&apos; werden. Problembeschreibung: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation>Die Datenbank %1 kann nicht geöffnet werden.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation>Das Abfrageergebniss ist ungültig oder es ist keine Datenzeile verfügbar.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation>Konnte die Erweiterung %1 nicht laden: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation>Die Datenbank %1 kann nicht geschlossen werden.</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation>Die Datenbank %1 kann nicht angefügt werden: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>Unvollständige Abfrage.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation>Stacküberlauf bei Verarbeitung</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>Syntaxfehler</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation>Die Wörterbuchdatei %1 kann für den Lesezugriff nicht geöffnet werden.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation>Die Wörterbuchdatei muss vorhanden sein und Leserechte besitzen.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation>Der Maximalwert kann nicht kleiner sein als der Minimalwert.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation>Die Maximallänge kann nicht kleiner sein als die Minimallänge.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation>Ein benutzerdefiniertes Zeichenset darf nicht leer sein.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation>Das Plugin zur Unterstützung der folgenden Skriptsprache kann nicht gefunden werden: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation>Fehler beim Ausführen des Initialisierungsprozesses: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation>Fehler beim Ausführen des Auffüllprozesses: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation>Wählen Sie die Implementationssprache.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation>Der Implementationscode darf nicht leer sein.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation>Die Datenquelle für Spalte %1 kann nicht aufgelöst werden.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>Allgemeine Verwendung</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>Datenbankunterstützung</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Codeformatierer</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Skriptsprachen</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>Exportieren</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>Importieren</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Tabellen füllen</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>Tabelle %1 referenziert Tabelle %2, jedoch wird die &apos;foreign key&apos;-Definition für die neue Tabellendefinition nicht aktualisiert, da es Probleme bei der DDL-Analyse von Tabelle %3 gibt.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>Alle Spalten, die von Index %1 indiziert wurden, sind verloren. Der Index wird nach der Tabellenmodifikation nicht neu erstellt.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation>Es ist ein Problem bei der korrekten Verarbeitung des Triggers %1 aufgetreten. Er wird möglicherweise nicht vollständig aktualisert werden und sollte geprüft werden.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>Alle Spalten, die durch den Trigger %1 abgedeckt wurden, sind verloren. Der Trigger wird nach der Änderung nicht wiederhergestellt.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>Die Aktualisierung des Triggers %1, resultierend aus der Änderung der Tabelle %2, kann nicht ausgeführt werden.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>Die Aktualisierung des Views %1, resultierend aus der Änderung der Tabelle %2, kann nicht ausgeführt werden. Der View wird daher nicht geändert.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation>Es ist ein Problem beim Aktualisieren einer %1 Abfrage innerhalb eines %2 Triggers aufgetreten. Eine der %1 Unterabfragen, welche möglicherweise die Tabelle %3 referenziert, kann nicht geändert werden. Eine manuelle Anpassung des Triggers wird nötig sein.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation>DDL des zu erzeugenden Views kann nicht verarbeitet werden. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation>Die zu verarbeitende Abfrage ist nicht CREATE VIEW, es ist: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation>SQLiteStudio konnte die vom View zurückgegebenen Spalten nicht auflösen, daher kann nicht ermittelt werden, welcher Trigger beim Wiederherstelllungsprozess einen Fehler verusracht haben könnte.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation>Ausführung abgebrochen.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation>Die Datenbank ist nicht geöffnet.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>Es kann nur eine Abfrage gleichzeitig ausgeführt werden.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>Beim Ausführen der count(*) Abfrage ist ein Fehler aufgetreten, daher wird das data paging abgeschaltet. Problemdetails der Datenbank: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation>SQLiteStudio konnte keine Metadaten aus der Abfrage extrahieren. Die Ergebnismenge kann daher nicht editiert werden.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>Fehler von %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>Datenbank</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Ausführungsdatum</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Dauer</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Anzahl Zeilen</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation>Konnte nicht auf Updates prüfen (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_el_GR.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_el_GR.ts
new file mode 100644
index 0000000..5795b18
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_el_GR.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="el" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_en_US.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_en_US.ts
new file mode 100644
index 0000000..fc66680
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_en_US.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="en" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.qm
deleted file mode 100644
index 9dad8df..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.qm
+++ /dev/null
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts
deleted file mode 100644
index f0c170b..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es.ts
+++ /dev/null
@@ -1,1146 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="es_ES">
-<context>
- <name>AbstractDb</name>
- <message>
- <location filename="../db/abstractdb.cpp" line="343"/>
- <location filename="../db/abstractdb.cpp" line="360"/>
- <source>Cannot execute query on closed database.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb.cpp" line="643"/>
- <source>Error attaching database %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ChainExecutor</name>
- <message>
- <location filename="../db/chainexecutor.cpp" line="37"/>
- <source>The database for executing queries was not defined.</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="44"/>
- <source>The database for executing queries was not open.</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="54"/>
- <source>Could not disable foreign keys in the database. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="62"/>
- <source>Could not start a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="89"/>
- <source>Interrupted</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="151"/>
- <source>Could not commit a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>CompletionHelper</name>
- <message>
- <location filename="../completionhelper.cpp" line="196"/>
- <source>New row reference</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="203"/>
- <source>Old row reference</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="208"/>
- <source>New table name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="211"/>
- <source>New index name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="214"/>
- <source>New view name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="217"/>
- <source>New trigger name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="220"/>
- <source>Table or column alias</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="223"/>
- <source>transaction name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="226"/>
- <source>New column name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="229"/>
- <source>Column data type</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="232"/>
- <source>Constraint name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="245"/>
- <source>Error message</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="289"/>
- <source>Collation name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="304"/>
- <source>Any word</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="485"/>
- <source>Default database</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="486"/>
- <source>Temporary objects database</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ConfigImpl</name>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="863"/>
- <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="870"/>
- <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbManagerImpl</name>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
- <source>Could not add database %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="139"/>
- <source>Database %1 could not be updated, because of an error: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
- <source>Database file doesn&apos;t exist.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="357"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="609"/>
- <source>No supporting plugin loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="527"/>
- <source>Database could not be initialized.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="537"/>
- <source>No suitable database driver plugin found.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbObjectOrganizer</name>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <location filename="../dbobjectorganizer.cpp" line="412"/>
- <source>Error while creating table in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <source>Could not parse table.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="426"/>
- <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="447"/>
- <source>Error while copying data for table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="466"/>
- <location filename="../dbobjectorganizer.cpp" line="473"/>
- <location filename="../dbobjectorganizer.cpp" line="496"/>
- <source>Error while copying data to table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="535"/>
- <source>Error while dropping source view %1: %2
-Tables, indexes, triggers and views copied to database %3 will remain.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="542"/>
- <source>Error while creating view in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="547"/>
- <source>Error while creating index in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="552"/>
- <source>Error while creating trigger in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="773"/>
- <location filename="../dbobjectorganizer.cpp" line="780"/>
- <location filename="../dbobjectorganizer.cpp" line="789"/>
- <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbVersionConverter</name>
- <message>
- <location filename="../dbversionconverter.cpp" line="932"/>
- <source>Target file exists, but could not be overwritten.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="951"/>
- <source>Could not find proper database plugin to create target database.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="1185"/>
- <source>Error while converting database: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DdlHistoryModel</name>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="65"/>
- <source>Database name</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="67"/>
- <source>Database file</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="69"/>
- <source>Date of execution</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="71"/>
- <source>Changes</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ExportManager</name>
- <message>
- <location filename="../services/exportmanager.cpp" line="72"/>
- <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="98"/>
- <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="122"/>
- <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="155"/>
- <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="218"/>
- <source>Export to the clipboard was successful.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="222"/>
- <source>Export to the file &apos;%1&apos; was successful.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="224"/>
- <source>Export was successful.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="266"/>
- <source>Could not export to file %1. File cannot be open for writting.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ExportWorker</name>
- <message>
- <location filename="../exportworker.cpp" line="122"/>
- <source>Error while exporting query results: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="202"/>
- <source>Error while counting data column width to export from query results: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="346"/>
- <location filename="../exportworker.cpp" line="404"/>
- <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="608"/>
- <source>Error while reading data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="616"/>
- <source>Error while counting data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="632"/>
- <source>Error while counting data column width to export from table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FunctionManagerImpl</name>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="234"/>
- <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
- <source>No such function registered in SQLiteStudio: %1(%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="353"/>
- <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="371"/>
- <source>Invalid regular expression pattern: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="390"/>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="423"/>
- <source>Could not open file %1 for reading: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="445"/>
- <source>Could not open file %1 for writting: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="465"/>
- <source>Error while writting to file %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="483"/>
- <source>Unsupported scripting language: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>GenericExportPlugin</name>
- <message>
- <location filename="../plugins/genericexportplugin.cpp" line="20"/>
- <source>Could not initialize text codec for exporting. Using default codec: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ImportManager</name>
- <message>
- <location filename="../services/importmanager.cpp" line="96"/>
- <source>Imported data to the table &apos;%1&apos; successfully.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ImportWorker</name>
- <message>
- <location filename="../importworker.cpp" line="24"/>
- <source>No columns provided by the import plugin.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="30"/>
- <source>Could not start transaction in order to import a data: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="52"/>
- <source>Could not commit transaction for imported data: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="100"/>
- <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="105"/>
- <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="124"/>
- <source>Could not create table to import to: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="177"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Error while importing data: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Interrupted.</source>
- <comment>import process status update</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="172"/>
- <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PluginManagerImpl</name>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="543"/>
- <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="554"/>
- <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="563"/>
- <source>Cannot load plugin %1. Error details: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="579"/>
- <source>Cannot load plugin %1 (error while initializing plugin).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
- <source>min: %1</source>
- <comment>plugin dependency version</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="732"/>
- <source>max: %1</source>
- <comment>plugin dependency version</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateConstant</name>
- <message>
- <location filename="../plugins/populateconstant.cpp" line="10"/>
- <source>Constant</source>
- <comment>populate constant plugin name</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateConstantConfig</name>
- <message>
- <location filename="../plugins/populateconstant.ui" line="20"/>
- <source>Constant value:</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionary</name>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="15"/>
- <source>Dictionary</source>
- <comment>dictionary populating plugin name</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionaryConfig</name>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="20"/>
- <source>Dictionary file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="29"/>
- <source>Pick dictionary file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="39"/>
- <source>Word separator</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="45"/>
- <source>Whitespace</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="58"/>
- <source>Line break</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="74"/>
- <source>Method of using words</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="80"/>
- <source>Ordered</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="93"/>
- <source>Randomly</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateManager</name>
- <message>
- <location filename="../services/populatemanager.cpp" line="89"/>
- <source>Table &apos;%1&apos; populated successfully.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateRandom</name>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="12"/>
- <source>Random number</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomConfig</name>
- <message>
- <location filename="../plugins/populaterandom.ui" line="20"/>
- <source>Constant prefix</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="26"/>
- <source>No prefix</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="39"/>
- <source>Minimum value</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="61"/>
- <source>Maximum value</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="86"/>
- <source>Constant suffix</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="92"/>
- <source>No suffix</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomText</name>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="12"/>
- <source>Random text</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomTextConfig</name>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="20"/>
- <source>Use characters from common sets:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="36"/>
- <source>Minimum length</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="64"/>
- <source>Letters from a to z.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="67"/>
- <source>Alpha</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="77"/>
- <source>Numbers from 0 to 9.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="80"/>
- <source>Numeric</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="90"/>
- <source>A whitespace, a tab and a new line character.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="93"/>
- <source>Whitespace</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="103"/>
- <source>Includes all above and all others.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="106"/>
- <source>Binary</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="119"/>
- <source>Use characters from my custom set:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="132"/>
- <source>Maximum length</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="160"/>
- <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateScript</name>
- <message>
- <location filename="../plugins/populatescript.cpp" line="13"/>
- <source>Script</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateScriptConfig</name>
- <message>
- <location filename="../plugins/populatescript.ui" line="26"/>
- <source>Initialization code (optional)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="45"/>
- <source>Per step code</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="70"/>
- <source>Language</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="89"/>
- <source>Help</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateSequence</name>
- <message>
- <location filename="../plugins/populatesequence.cpp" line="13"/>
- <source>Sequence</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateSequenceConfig</name>
- <message>
- <location filename="../plugins/populatesequence.ui" line="33"/>
- <source>Start value:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatesequence.ui" line="56"/>
- <source>Step:</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateWorker</name>
- <message>
- <location filename="../populateworker.cpp" line="23"/>
- <source>Could not start transaction in order to perform table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="70"/>
- <source>Error while populating table: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="81"/>
- <source>Could not commit transaction after table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <location filename="../db/abstractdb2.h" line="222"/>
- <location filename="../db/abstractdb3.h" line="384"/>
- <source>Could not open database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb2.h" line="833"/>
- <location filename="../db/abstractdb3.h" line="1132"/>
- <source>Result set expired or no row available.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="328"/>
- <location filename="../db/abstractdb3.h" line="332"/>
- <source>Could not load extension %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="405"/>
- <source>Could not close database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="138"/>
- <location filename="../dbversionconverter.cpp" line="143"/>
- <location filename="../dbversionconverter.cpp" line="196"/>
- <location filename="../dbversionconverter.cpp" line="243"/>
- <location filename="../dbversionconverter.cpp" line="248"/>
- <location filename="../dbversionconverter.cpp" line="256"/>
- <location filename="../dbversionconverter.cpp" line="336"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="202"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="429"/>
- <source>Could not parse statement: %1
-Error details: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="440"/>
- <location filename="../dbversionconverter.cpp" line="468"/>
- <location filename="../dbversionconverter.cpp" line="491"/>
- <location filename="../dbversionconverter.cpp" line="529"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="497"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="772"/>
- <source>SQLite %1 does not support current date or time clauses in expressions.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="775"/>
- <source>SQLite %1 does not support row value clauses in expressions.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="786"/>
- <location filename="../dbversionconverter.cpp" line="789"/>
- <location filename="../dbversionconverter.cpp" line="800"/>
- <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../impl/dbattacherimpl.cpp" line="115"/>
- <source>Could not attach database %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../parser/parsercontext.cpp" line="108"/>
- <location filename="../parser/parsercontext.cpp" line="110"/>
- <source>Incomplete query.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
- <location filename="../parser/sqlite3_parse.cpp" line="2212"/>
- <source>Parser stack overflow</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="4465"/>
- <location filename="../parser/sqlite3_parse.cpp" line="5195"/>
- <source>Syntax error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="30"/>
- <source>Could not open dictionary file %1 for reading.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="91"/>
- <source>Dictionary file must exist and be readable.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="53"/>
- <source>Maximum value cannot be less than minimum value.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="77"/>
- <source>Maximum length cannot be less than minimum length.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="88"/>
- <source>Custom character set cannot be empty.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="40"/>
- <source>Could not find plugin to support scripting language: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="58"/>
- <source>Error while executing populating initial code: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="80"/>
- <source>Error while executing populating code: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="112"/>
- <source>Select implementation language.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="113"/>
- <source>Implementation code cannot be empty.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="359"/>
- <source>Could not resolve data source for column: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="431"/>
- <source>Could not resolve table for column &apos;%1&apos;.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="768"/>
- <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="305"/>
- <source>General purpose</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="306"/>
- <source>Database support</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="307"/>
- <source>Code formatter</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="308"/>
- <source>Scripting languages</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="309"/>
- <source>Exporting</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="310"/>
- <source>Importing</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="311"/>
- <source>Table populating</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="115"/>
- <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="438"/>
- <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="481"/>
- <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="528"/>
- <source>Cannot not update trigger %1 according to table %2 modification.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="708"/>
- <location filename="../tablemodifier.cpp" line="732"/>
- <location filename="../tablemodifier.cpp" line="751"/>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="496"/>
- <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="546"/>
- <source>Cannot not update view %1 according to table %2 modifications.
-The view will remain as it is.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="25"/>
- <source>Could not parse DDL of the view to be created. Details: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="34"/>
- <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="82"/>
- <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../common/utils.cpp" line="1022"/>
- <source>Could not open file &apos;%1&apos; for reading: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QueryExecutor</name>
- <message>
- <location filename="../db/queryexecutor.cpp" line="186"/>
- <source>Execution interrupted.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="227"/>
- <source>Database is not open.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="235"/>
- <source>Only one query can be executed simultaneously.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="339"/>
- <location filename="../db/queryexecutor.cpp" line="618"/>
- <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="529"/>
- <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ScriptingQtDbProxy</name>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
- <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
- <source>Error from %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SqlHistoryModel</name>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="34"/>
- <source>Database</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="36"/>
- <source>Execution date</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="38"/>
- <source>Time spent</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="40"/>
- <source>Rows affected</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="42"/>
- <source>SQL</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>UpdateManager</name>
- <message>
- <location filename="../services/updatemanager.cpp" line="48"/>
- <source>Updates installer executable is missing.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="49"/>
- <location filename="../services/updatemanager.cpp" line="68"/>
- <source>Unable to check for updates (%1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="66"/>
- <source>details are unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="81"/>
- <source>Unable to run updater application (%1). Please report this.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es_ES.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es_ES.ts
new file mode 100644
index 0000000..588b8ea
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_es_ES.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="es-ES" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>No se puede ejecutar la consulta en una base de datos desconectada.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Error al adjuntar la base de datos %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>No se definió una base de datos sobre la cual ejecutar las consultas.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>La base de datos usada para ejecutar las consultas no estaba abierta.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>No se pudieron desactivar las claves foráneas en la base de datos. Detalles: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>No se pudo iniciar una transacción en la base de datos. Detalles: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Interrumpido</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>No se pudo confirmar una transacción a la base de datos. Detalles: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation>Referencia a nueva fila</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation>Referencia a antigua fila</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>Nuevo nombre de tabla</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>Nuevo nombre de índice</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>Nuevo nombre de vista</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>Nuevo nombre de disparador</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>Alias de tabla o columna</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>nombre de transacción</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>Nuevo nombre de columna</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fa_IR.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fa_IR.ts
new file mode 100644
index 0000000..47432f8
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fa_IR.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fa" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fi_FI.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fi_FI.ts
new file mode 100644
index 0000000..7908672
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fi_FI.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fi" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.qm
deleted file mode 100644
index 552d0cf..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.qm
+++ /dev/null
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts
deleted file mode 100644
index 15f6cf7..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr.ts
+++ /dev/null
@@ -1,1319 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="fr_FR">
-<context>
- <name>AbstractDb</name>
- <message>
- <location filename="../db/abstractdb.cpp" line="343"/>
- <location filename="../db/abstractdb.cpp" line="360"/>
- <source>Cannot execute query on closed database.</source>
- <translation>Impossible d’exécuter la requête sur une base de données fermée.</translation>
- </message>
- <message>
- <location filename="../db/abstractdb.cpp" line="643"/>
- <source>Error attaching database %1: %2</source>
- <translation>Erreur base de données attachée %1 : %2</translation>
- </message>
-</context>
-<context>
- <name>BugReporter</name>
- <message>
- <source>Invalid login or password</source>
- <translation type="vanished">Identifiant ou mot de passe incorrect</translation>
- </message>
-</context>
-<context>
- <name>ChainExecutor</name>
- <message>
- <location filename="../db/chainexecutor.cpp" line="37"/>
- <source>The database for executing queries was not defined.</source>
- <comment>chain executor</comment>
- <translation>La base de données pour exécuter des requêtes n’était pas définie.</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="44"/>
- <source>The database for executing queries was not open.</source>
- <comment>chain executor</comment>
- <translation>La base de données pour exécuter des requêtes n’est pas ouverte.</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="54"/>
- <source>Could not disable foreign keys in the database. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="62"/>
- <source>Could not start a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Impossible d’initialiser une transaction de la base de données : %1</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="89"/>
- <source>Interrupted</source>
- <comment>chain executor</comment>
- <translation>Interruption</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="151"/>
- <source>Could not commit a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Impossible d’enregistrer la transaction de la base de données : %1</translation>
- </message>
-</context>
-<context>
- <name>CompletionHelper</name>
- <message>
- <location filename="../completionhelper.cpp" line="196"/>
- <source>New row reference</source>
- <translation>Nouvelle référence de ligne</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="203"/>
- <source>Old row reference</source>
- <translation>Anncienne référence de ligne</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="208"/>
- <source>New table name</source>
- <translation>Nouveau nom de table</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="211"/>
- <source>New index name</source>
- <translation>Nouveau nom d’index</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="214"/>
- <source>New view name</source>
- <translation>Nouveau nom de vue</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="217"/>
- <source>New trigger name</source>
- <translation>Nouveau nom de déclencheur</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="220"/>
- <source>Table or column alias</source>
- <translation>Table ou alias colonne</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="223"/>
- <source>transaction name</source>
- <translation>Nom de transaction</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="226"/>
- <source>New column name</source>
- <translation>Nouveau nom de colonne</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="229"/>
- <source>Column data type</source>
- <translation>Type de données de la colonne</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="232"/>
- <source>Constraint name</source>
- <translation>Nom de la contrainte</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="245"/>
- <source>Error message</source>
- <translation>Message d’erreur</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="289"/>
- <source>Collation name</source>
- <translation>Nom de la collation</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="304"/>
- <source>Any word</source>
- <translation>N’importe quel mot</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="485"/>
- <source>Default database</source>
- <translation>Base de données par défaut</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="486"/>
- <source>Temporary objects database</source>
- <translation>Objets temporaires de base de données</translation>
- </message>
-</context>
-<context>
- <name>ConfigImpl</name>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="863"/>
- <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="870"/>
- <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbManagerImpl</name>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
- <source>Could not add database %1: %2</source>
- <translation>Impossible d’ajouter une base de données %1 : %2</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="139"/>
- <source>Database %1 could not be updated, because of an error: %2</source>
- <translation>La base de données %1 ne peut ëtre mise à jour à cause de l’erreur : %2</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
- <source>Database file doesn&apos;t exist.</source>
- <translation>Le fichier de la base de données n’existe pas.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="357"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="609"/>
- <source>No supporting plugin loaded.</source>
- <translation>Aucun plugin supporté chargé.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="527"/>
- <source>Database could not be initialized.</source>
- <translation>La base de données ne peut être initialisée.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="537"/>
- <source>No suitable database driver plugin found.</source>
- <translation>Aucun pilote de base de données approprié trouvé.</translation>
- </message>
-</context>
-<context>
- <name>DbObjectOrganizer</name>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <location filename="../dbobjectorganizer.cpp" line="412"/>
- <source>Error while creating table in target database: %1</source>
- <translation>Erreur lors de la creation de la table de la base de données : %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <source>Could not parse table.</source>
- <translation>Impossible d’analyser la table.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="426"/>
- <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
- <translation>La base de données %1 ne peut être attachée à la base de données %2, aussi les données de la table %3 seront copiées avec SQLiteStudio comme interpréteur. Cette méthode est lente pour des tables importantes, SVP soyer patient.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="447"/>
- <source>Error while copying data for table %1: %2</source>
- <translation>Erreur lors de la copie des données vers la table %1 : %2</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="466"/>
- <location filename="../dbobjectorganizer.cpp" line="473"/>
- <location filename="../dbobjectorganizer.cpp" line="496"/>
- <source>Error while copying data to table %1: %2</source>
- <translation>Erreur lors de la copie des données de la table %1 : %2</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="535"/>
- <source>Error while dropping source view %1: %2
-Tables, indexes, triggers and views copied to database %3 will remain.</source>
- <translation>Erreur à la création de la vue %1 : %2
-Tables, index, déclencheurs et vues copiés de la base de données %3 seront maintenus.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="542"/>
- <source>Error while creating view in target database: %1</source>
- <translation>Erreur lors de la création de la vue de la base de données : %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="547"/>
- <source>Error while creating index in target database: %1</source>
- <translation>Erreur lors de la création de l’index de la base de données : %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="552"/>
- <source>Error while creating trigger in target database: %1</source>
- <translation>Erreur lors de la création du déclencheur de la base de données : %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="773"/>
- <location filename="../dbobjectorganizer.cpp" line="780"/>
- <location filename="../dbobjectorganizer.cpp" line="789"/>
- <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbVersionConverter</name>
- <message>
- <location filename="../dbversionconverter.cpp" line="932"/>
- <source>Target file exists, but could not be overwritten.</source>
- <translation>Le fichier cible existe, mais ne peut être remplacé.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="951"/>
- <source>Could not find proper database plugin to create target database.</source>
- <translation>Impossible de trouver le plugin correct pour créer la base de données cible.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="1185"/>
- <source>Error while converting database: %1</source>
- <translation>Erreur lors de la conversion de la base de données : %1</translation>
- </message>
-</context>
-<context>
- <name>DdlHistoryModel</name>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="65"/>
- <source>Database name</source>
- <comment>ddl history header</comment>
- <translation>Nom de la base</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="67"/>
- <source>Database file</source>
- <comment>ddl history header</comment>
- <translation>Fichier de la base</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="69"/>
- <source>Date of execution</source>
- <comment>ddl history header</comment>
- <translation>Date d’exécution</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="71"/>
- <source>Changes</source>
- <comment>ddl history header</comment>
- <translation>Modifications</translation>
- </message>
-</context>
-<context>
- <name>ExportManager</name>
- <message>
- <location filename="../services/exportmanager.cpp" line="72"/>
- <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
- <translation>Plugin d’export %1 ne supporte pas l’exportation de la requête.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="98"/>
- <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
- <translation>Plugin d’export %1 ne supporte pas l’exportation de la table.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="122"/>
- <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
- <translation>Plugin d’export %1 ne supporte pas l’exportation de la base de données.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="155"/>
- <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
- <translation>Format d’export « %1 » n’est pas supporté. Les formats supportés sont : %2.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="218"/>
- <source>Export to the clipboard was successful.</source>
- <translation>Export vers le presse-papier avec succés.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="222"/>
- <source>Export to the file &apos;%1&apos; was successful.</source>
- <translation>Export vers le fichier « %1 » avec succès.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="224"/>
- <source>Export was successful.</source>
- <translation>Export avec succès.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="266"/>
- <source>Could not export to file %1. File cannot be open for writting.</source>
- <translation>Impossible d’exporter vers le fichier %1. Le fichier ne peut être ouvert en écriture.</translation>
- </message>
-</context>
-<context>
- <name>ExportWorker</name>
- <message>
- <location filename="../exportworker.cpp" line="122"/>
- <source>Error while exporting query results: %1</source>
- <translation>Erreur lors de l’exportation des résultats de la requête : %1</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="202"/>
- <source>Error while counting data column width to export from query results: %1</source>
- <translation>Erreur lors de la totalisation des données de colonne issu de la requête : %1</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="346"/>
- <location filename="../exportworker.cpp" line="404"/>
- <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
- <translation>Impossible d’analyser %1 afin de l’exporter. Celle-ci sera excluse de l’exportation.</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="608"/>
- <source>Error while reading data to export from table %1: %2</source>
- <translation>Erreur lors de la lecture des données à exporter de la table %1 : %2</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="616"/>
- <source>Error while counting data to export from table %1: %2</source>
- <translation>Erreur lors du comptage des données à exporter de la table %1 : %2</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="632"/>
- <source>Error while counting data column width to export from table %1: %2</source>
- <translation>Erreur lors de la totalisation des données à exporter de la table %1 : %2</translation>
- </message>
-</context>
-<context>
- <name>FunctionManagerImpl</name>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="234"/>
- <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
- <translation>Nombre de paramètres invalide de la fonction « %1 ». Attendu %2, obtenu %3.</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
- <source>No such function registered in SQLiteStudio: %1(%2)</source>
- <translation>Fonction inconnue avec SQLiteStudio : %1(%2)</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="353"/>
- <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
- <translation>La fonction %1(%2) est référencée avec le langage %3, mais le plugin supportant ce langage n’est actuellement pas chargé.</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="371"/>
- <source>Invalid regular expression pattern: %1</source>
- <translation>Expression invalide : %1</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="390"/>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="423"/>
- <source>Could not open file %1 for reading: %2</source>
- <translation>Impossible d’ouvrir en lecture le ficher %1 : %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="445"/>
- <source>Could not open file %1 for writting: %2</source>
- <translation>Impossible d’ouvrir en écriture le ficher %1 : %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="465"/>
- <source>Error while writting to file %1: %2</source>
- <translation>Erreur lors de l’écriture du fichier %1 : %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="483"/>
- <source>Unsupported scripting language: %1</source>
- <translation>Langage script non supporté : %1</translation>
- </message>
-</context>
-<context>
- <name>GenericExportPlugin</name>
- <message>
- <location filename="../plugins/genericexportplugin.cpp" line="20"/>
- <source>Could not initialize text codec for exporting. Using default codec: %1</source>
- <translation>Impossible d’initialiser le paramètre texte por l’export. Utulisation du paramètre par défaut : %1</translation>
- </message>
-</context>
-<context>
- <name>ImportManager</name>
- <message>
- <location filename="../services/importmanager.cpp" line="96"/>
- <source>Imported data to the table &apos;%1&apos; successfully.</source>
- <translation>Importation des données de la table « %1 » réussie.</translation>
- </message>
-</context>
-<context>
- <name>ImportWorker</name>
- <message>
- <location filename="../importworker.cpp" line="24"/>
- <source>No columns provided by the import plugin.</source>
- <translation>Aucune colonne fournie par le plugin d’importation.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="30"/>
- <source>Could not start transaction in order to import a data: %1</source>
- <translation>Impossible d’initialiser la transaction d’import de données : %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="52"/>
- <source>Could not commit transaction for imported data: %1</source>
- <translation>Impossible d’enregistrer la transaction d’import de données : %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="100"/>
- <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
- <translation>La table « %1 » a moins de colonnes que de données à importer. Les colonnes supplèmentaires seront ignorées.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="105"/>
- <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
- <translation>La table « %1 » a plus de colonnes que de colonnes de données à importer. Certaines colonnes de la table seront vides.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="124"/>
- <source>Could not create table to import to: %1</source>
- <translation>Impossible de créer la table d’import : %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="177"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Error while importing data: %1</source>
- <translation>Erreur lors de l’import des données : %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Interrupted.</source>
- <comment>import process status update</comment>
- <translation>Transaction interrompue.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="172"/>
- <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PluginManagerImpl</name>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="543"/>
- <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
- <translation>Chargement impossible du plugin %1 celui-ci est en conflit avec le plugin %2.</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="554"/>
- <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
- <translation>Chargement impossible du plugin %1, les dépendances n’ont pa été chargées : %2.</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="563"/>
- <source>Cannot load plugin %1. Error details: %2</source>
- <translation>Chargement impossible du plugin %1, Détails de l’erreur : %2</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="579"/>
- <source>Cannot load plugin %1 (error while initializing plugin).</source>
- <translation>Chargement impossible du plugin %1 (erreur à initialisation du plugin).</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
- <source>min: %1</source>
- <comment>plugin dependency version</comment>
- <translation>min : %1</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="732"/>
- <source>max: %1</source>
- <comment>plugin dependency version</comment>
- <translation>max : %1</translation>
- </message>
-</context>
-<context>
- <name>PopulateConstant</name>
- <message>
- <location filename="../plugins/populateconstant.cpp" line="10"/>
- <source>Constant</source>
- <comment>populate constant plugin name</comment>
- <translation>Constante</translation>
- </message>
-</context>
-<context>
- <name>PopulateConstantConfig</name>
- <message>
- <location filename="../plugins/populateconstant.ui" line="20"/>
- <source>Constant value:</source>
- <translation>Valeur constante :</translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionary</name>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="15"/>
- <source>Dictionary</source>
- <comment>dictionary populating plugin name</comment>
- <translation>Dictionnaire</translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionaryConfig</name>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="20"/>
- <source>Dictionary file</source>
- <translation>Fichier du dictionnaire</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="29"/>
- <source>Pick dictionary file</source>
- <translation>Extrait du dictionnaire</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="39"/>
- <source>Word separator</source>
- <translation>Mot séparateur</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="45"/>
- <source>Whitespace</source>
- <translation>Espace</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="58"/>
- <source>Line break</source>
- <translation>Fin de ligne</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="74"/>
- <source>Method of using words</source>
- <translation>Méthode d’utilisation des mots</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="80"/>
- <source>Ordered</source>
- <translation>Trié</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="93"/>
- <source>Randomly</source>
- <translation>Aléatoire</translation>
- </message>
-</context>
-<context>
- <name>PopulateManager</name>
- <message>
- <location filename="../services/populatemanager.cpp" line="89"/>
- <source>Table &apos;%1&apos; populated successfully.</source>
- <translation>Table « %1 » remplie avec succès.</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandom</name>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="12"/>
- <source>Random number</source>
- <translation>Nombre aléatoire</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomConfig</name>
- <message>
- <location filename="../plugins/populaterandom.ui" line="20"/>
- <source>Constant prefix</source>
- <translation>Préfixe constant</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="26"/>
- <source>No prefix</source>
- <translation>Aucun préfixe</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="39"/>
- <source>Minimum value</source>
- <translation>Valeur minimale</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="61"/>
- <source>Maximum value</source>
- <translation>Valeur maximale</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="86"/>
- <source>Constant suffix</source>
- <translation>Suffixe constant</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="92"/>
- <source>No suffix</source>
- <translation>Aucun suffixe</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomText</name>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="12"/>
- <source>Random text</source>
- <translation>Text aléatoire</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomTextConfig</name>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="20"/>
- <source>Use characters from common sets:</source>
- <translation>Utilisez des caractères de la table standard :</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="36"/>
- <source>Minimum length</source>
- <translation>Longueur minimun</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="64"/>
- <source>Letters from a to z.</source>
- <translation>Caractères de a à z.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="67"/>
- <source>Alpha</source>
- <translation>Caractère alpha</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="77"/>
- <source>Numbers from 0 to 9.</source>
- <translation>Carctères numériques de 0 à 9.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="80"/>
- <source>Numeric</source>
- <translation>Numérique</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="90"/>
- <source>A whitespace, a tab and a new line character.</source>
- <translation>Espace, tabulation et retour chariot.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="93"/>
- <source>Whitespace</source>
- <translation>Espace</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="103"/>
- <source>Includes all above and all others.</source>
- <translation>Inclus ci-dessus et tous les autres.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="106"/>
- <source>Binary</source>
- <translation>Binaire</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="119"/>
- <source>Use characters from my custom set:</source>
- <translation>Utilisez les catactères de ma table personalisée :</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="132"/>
- <source>Maximum length</source>
- <translation>Longueur maximum</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="160"/>
- <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
- <translation>Si vous saisissez plusieurs fois le même caractère, la sécurité est faible.</translation>
- </message>
-</context>
-<context>
- <name>PopulateScript</name>
- <message>
- <location filename="../plugins/populatescript.cpp" line="13"/>
- <source>Script</source>
- <translation>Script</translation>
- </message>
-</context>
-<context>
- <name>PopulateScriptConfig</name>
- <message>
- <location filename="../plugins/populatescript.ui" line="26"/>
- <source>Initialization code (optional)</source>
- <translation>Code d’initialisation (optionel)</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="45"/>
- <source>Per step code</source>
- <translation>Code par étape</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="70"/>
- <source>Language</source>
- <translation>Langage</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="89"/>
- <source>Help</source>
- <translation>Aide</translation>
- </message>
-</context>
-<context>
- <name>PopulateSequence</name>
- <message>
- <location filename="../plugins/populatesequence.cpp" line="13"/>
- <source>Sequence</source>
- <translation>Séquence</translation>
- </message>
-</context>
-<context>
- <name>PopulateSequenceConfig</name>
- <message>
- <location filename="../plugins/populatesequence.ui" line="33"/>
- <source>Start value:</source>
- <translation>Valeur de départ :</translation>
- </message>
- <message>
- <location filename="../plugins/populatesequence.ui" line="56"/>
- <source>Step:</source>
- <translation>Incrément :</translation>
- </message>
-</context>
-<context>
- <name>PopulateWorker</name>
- <message>
- <location filename="../populateworker.cpp" line="23"/>
- <source>Could not start transaction in order to perform table populating. Error details: %1</source>
- <translation>Impossible d’initialiser la transaction pour remplir la table.Détails de l’erreur %1</translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="70"/>
- <source>Error while populating table: %1</source>
- <translation>Erreur lors du remplissage de la table : %1</translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="81"/>
- <source>Could not commit transaction after table populating. Error details: %1</source>
- <translation>Impossible d’enregistrer la transaction après le remplissage de la table. Erreur %1</translation>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <location filename="../db/abstractdb2.h" line="222"/>
- <location filename="../db/abstractdb3.h" line="384"/>
- <source>Could not open database: %1</source>
- <translation>Impossible d’ouvrir la base de données : %1</translation>
- </message>
- <message>
- <location filename="../db/abstractdb2.h" line="833"/>
- <location filename="../db/abstractdb3.h" line="1132"/>
- <source>Result set expired or no row available.</source>
- <translation>Terminé ou aucune ligne valide.</translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="328"/>
- <location filename="../db/abstractdb3.h" line="332"/>
- <source>Could not load extension %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="405"/>
- <source>Could not close database: %1</source>
- <translation>Impossible de clore la base de bonnées : %1</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="138"/>
- <location filename="../dbversionconverter.cpp" line="143"/>
- <location filename="../dbversionconverter.cpp" line="196"/>
- <location filename="../dbversionconverter.cpp" line="243"/>
- <location filename="../dbversionconverter.cpp" line="248"/>
- <location filename="../dbversionconverter.cpp" line="256"/>
- <location filename="../dbversionconverter.cpp" line="336"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
- <translation>SQLite %1 ne supporte pas l’instruction « %2 ».</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="202"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
- <translation>SQLite %1 ne supporte pas l’instruction « %2 », mais la table normale peut être créée à la place si vous confirmez.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="429"/>
- <source>Could not parse statement: %1
-Error details: %2</source>
- <translation>Impossible d’analyser l’instruction : %1
-Détails erreur: %2</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="440"/>
- <location filename="../dbversionconverter.cpp" line="468"/>
- <location filename="../dbversionconverter.cpp" line="491"/>
- <location filename="../dbversionconverter.cpp" line="529"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
- <translation>SQLite %1 ne supporte pas la clause « %2 ». Impossible de convertir l’instruction « %3 » avec cette clause.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="497"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
- <translation>SQLite %1 ne supporte pas la clause « %2 » de l’instruction « %3 ».</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="772"/>
- <source>SQLite %1 does not support current date or time clauses in expressions.</source>
- <translation>SQLite %1 ne supporte pas la clause date ou l’heure actuelle dans l’expression.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="775"/>
- <source>SQLite %1 does not support row value clauses in expressions.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="786"/>
- <location filename="../dbversionconverter.cpp" line="789"/>
- <location filename="../dbversionconverter.cpp" line="800"/>
- <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
- <translation>SQLite %1 ne supporte pas la clause « %2 » dans l’expression.</translation>
- </message>
- <message>
- <location filename="../impl/dbattacherimpl.cpp" line="115"/>
- <source>Could not attach database %1: %2</source>
- <translation>Impossible d’attacher la base de données %1 : %2</translation>
- </message>
- <message>
- <location filename="../parser/parsercontext.cpp" line="108"/>
- <location filename="../parser/parsercontext.cpp" line="110"/>
- <source>Incomplete query.</source>
- <translation>Requête imcomplète.</translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
- <location filename="../parser/sqlite3_parse.cpp" line="2212"/>
- <source>Parser stack overflow</source>
- <translation>Analyse dépassement pile</translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="4465"/>
- <location filename="../parser/sqlite3_parse.cpp" line="5195"/>
- <source>Syntax error</source>
- <translation>Erreur de syntaxe</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="30"/>
- <source>Could not open dictionary file %1 for reading.</source>
- <translation>Impossible d’ouvrir en lecture le fichier dictionnaire %1.</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="91"/>
- <source>Dictionary file must exist and be readable.</source>
- <translation>Le fichier dictionnaire doit exister et être en lecture.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="53"/>
- <source>Maximum value cannot be less than minimum value.</source>
- <translation>La valeur maximum ne peut être inférieure à la valeur minimum.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="77"/>
- <source>Maximum length cannot be less than minimum length.</source>
- <translation>Longueur maximum ne peut être inférieure à la longueur minimum.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="88"/>
- <source>Custom character set cannot be empty.</source>
- <translation>La table des caractères personalisés ne peut être vide.</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="40"/>
- <source>Could not find plugin to support scripting language: %1</source>
- <translation>Impossible de trouver le plugin supportant le script : %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="58"/>
- <source>Error while executing populating initial code: %1</source>
- <translation>Erreur à l’initialisation du code de remplissage : %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="80"/>
- <source>Error while executing populating code: %1</source>
- <translation>Erreur à l’exécution du code de remplissage : %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="112"/>
- <source>Select implementation language.</source>
- <translation>Sélectionnez l’application langage.</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="113"/>
- <source>Implementation code cannot be empty.</source>
- <translation>L’application de code ne peut être vide.</translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="359"/>
- <source>Could not resolve data source for column: %1</source>
- <translation>Impossible de résoudre la source de données pour la colonnes : %1</translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="431"/>
- <source>Could not resolve table for column &apos;%1&apos;.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="768"/>
- <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
- <translation>Impossible d’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.</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="305"/>
- <source>General purpose</source>
- <comment>plugin category name</comment>
- <translation>Objectif général</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="306"/>
- <source>Database support</source>
- <comment>plugin category name</comment>
- <translation>Support base de données</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="307"/>
- <source>Code formatter</source>
- <comment>plugin category name</comment>
- <translation>Format code</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="308"/>
- <source>Scripting languages</source>
- <comment>plugin category name</comment>
- <translation>Langages script</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="309"/>
- <source>Exporting</source>
- <comment>plugin category name</comment>
- <translation>Export</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="310"/>
- <source>Importing</source>
- <comment>plugin category name</comment>
- <translation>Import</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="311"/>
- <source>Table populating</source>
- <comment>plugin category name</comment>
- <translation>Peuplement de la table</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="115"/>
- <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
- <translation>La table %1 référence la table %2, mais la clef étrangère ne pourra être mise à jour pour la nouvelle table à cause de problèmes lors de l’analyse DDL de la table %3.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="438"/>
- <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
- <translation>Toutes les colonnes indéxées par l’index %1 sont traitées. L’index ne sera pas recréé après la modification de la table.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="481"/>
- <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="528"/>
- <source>Cannot not update trigger %1 according to table %2 modification.</source>
- <translation>Impossible de mettre à jour le déclencheur %1 selon la modification de la table %2.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="708"/>
- <location filename="../tablemodifier.cpp" line="732"/>
- <location filename="../tablemodifier.cpp" line="751"/>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="496"/>
- <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
- <translation>Toutes les colonnes couvertes par le déclencheur %1 sont faites. Le déclencheur ne sera pas recréé après la modification de la table.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="546"/>
- <source>Cannot not update view %1 according to table %2 modifications.
-The view will remain as it is.</source>
- <translation>Impossible de mettre à jour les modifications de la vue %1 issue de la table %2
-La vue restera telque.</translation>
- </message>
- <message>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation type="obsolete">Il y a un problème à la mise à jour l’instruction %1 avec le déclencheur %2. Une partie de l’instruction SELECT référençant la table %3 ne ppermet pas sa modification. La mise à jour manuelle du déclencheur est nécessaire.</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="25"/>
- <source>Could not parse DDL of the view to be created. Details: %1</source>
- <translation>Impossible d’analyser le DDL de création de vue. Détails : %1</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="34"/>
- <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
- <translation>L’expression CREATE VIEW est fausse. C’est : %1</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="82"/>
- <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
- <translation>SQLiteStudio ne peut résoudre les colonnes résultant de la nouvelle vue, d’où le déclencheur en cause ne pourra être indiqué pendant le process.</translation>
- </message>
- <message>
- <location filename="../common/utils.cpp" line="1022"/>
- <source>Could not open file &apos;%1&apos; for reading: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QueryExecutor</name>
- <message>
- <location filename="../db/queryexecutor.cpp" line="186"/>
- <source>Execution interrupted.</source>
- <translation>Exécution interrompue.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="227"/>
- <source>Database is not open.</source>
- <translation>La base de données n’est ouverte.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="235"/>
- <source>Only one query can be executed simultaneously.</source>
- <translation>Une seule requête peut être exécutée à la fois.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="339"/>
- <location filename="../db/queryexecutor.cpp" line="618"/>
- <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
- <translation>Une erreur s’est produite à l’exécution de la requête count(*), la recherche des données est arrêtée. Erreur de la base de données : %1</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="529"/>
- <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
- <translation>SQLiteStudio ne peut extraire des métadonnées d’une requête. Les résultats ne peut être affichés.</translation>
- </message>
-</context>
-<context>
- <name>ScriptingQtDbProxy</name>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
- <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
- <translation>Aucune base de données validedans le context actuel, plutôtutiliser la commande QtScript %1.</translation>
- </message>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
- <source>Error from %1: %2</source>
- <translation>Erreur de %1 : %2</translation>
- </message>
-</context>
-<context>
- <name>SqlHistoryModel</name>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="34"/>
- <source>Database</source>
- <comment>sql history header</comment>
- <translation>Base de données</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="36"/>
- <source>Execution date</source>
- <comment>sql history header</comment>
- <translation>Date d’exécution</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="38"/>
- <source>Time spent</source>
- <comment>sql history header</comment>
- <translation>Temps passé</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="40"/>
- <source>Rows affected</source>
- <comment>sql history header</comment>
- <translation>Lignes affectées</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="42"/>
- <source>SQL</source>
- <comment>sql history header</comment>
- <translation>SQL</translation>
- </message>
-</context>
-<context>
- <name>UpdateManager</name>
- <message>
- <source>An error occurred while checking for updates: %1.</source>
- <translation type="vanished">Une erreur est apparue lors du contrôle pour la mise à jour : %1.
-</translation>
- </message>
- <message>
- <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
- <translation type="vanished">Impossible de vérifier la mise à jour, car le serveur a répondu avec un message invalide. Il est possible d’ignorer le warning.</translation>
- </message>
- <message>
- <source>An error occurred while reading updates metadata: %1.</source>
- <translation type="vanished">Erreur lors de la lecture de mise des méta données : %1.</translation>
- </message>
- <message>
- <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
- <translation type="vanished">Impossibles de télécharger les mises à jour, car le serveur répond avec un format de message invalide. Vous pover essayer plus tard ou télécharger et mettre à jour manuellement. Voir &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</translation>
- </message>
- <message>
- <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
- <translation type="vanished">Impossible de créer un répertoire temporaire pour télécharger la mise à jour. Mise à jour abandonnée.</translation>
- </message>
- <message>
- <source>There was no updates to download. Updating aborted.</source>
- <translation type="vanished">Il n’y a aucune mise à jour à télécharger. Mise à jour abandonnée.</translation>
- </message>
- <message>
- <source>Downloading: %1</source>
- <translation type="vanished">Téléchargement : %1</translation>
- </message>
- <message>
- <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
- <translation type="vanished">Impossible de déterminer le fichier de mise à jour URL : %1.Mise à jour abandonnée.</translation>
- </message>
- <message>
- <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
- <translation type="vanished">Erreur à l’ouverture du fichier « %1 » pour l’écriture : %2. Mise à jour abandonnée.</translation>
- </message>
- <message>
- <source>Installing updates.</source>
- <translation type="vanished">Installation des mises jour.</translation>
- </message>
- <message>
- <source>Could not copy current application directory into %1 directory.</source>
- <translation type="vanished">Impossible de copier le répertoire de l’application courante dans %1.</translation>
- </message>
- <message>
- <source>Could not create directory %1.</source>
- <translation type="vanished">Impossible de créer le répertoire : %1.</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2.
-Details: %3</source>
- <translation type="vanished">Impossible de renommer le répertoire %1 en %2. Détails : %3</translation>
- </message>
- <message>
- <source>Cannot not rename directory %1 to %2.
-Details: %3</source>
- <translation type="vanished">Impossible de renommer le répertoire %1 en %2.Détails : %3</translation>
- </message>
- <message>
- <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
- <translation type="vanished">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</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
- <translation type="vanished">Impossible de renommer le répertoire %1 en %2, retour vers la version originale SQLiteStudio.</translation>
- </message>
- <message>
- <source>Could not unpack component %1 into %2 directory.</source>
- <translation type="vanished">Impossible d’extraire le composant %1 dans le répertoire %2.</translation>
- </message>
- <message>
- <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
- <translation type="vanished">Impossible d’élever les autorisations pour lancer la mise à jour en tantque root. Bloqué : %1</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as root: %1</source>
- <translation type="vanished">Impossible de finaliser la mis à jour en tant que root : %1</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as admin: %1</source>
- <translation type="vanished">Impossible de finaliser la mis à jour en tant que admin : %1</translation>
- </message>
- <message>
- <source>Cannot create temporary directory for updater.</source>
- <translation type="vanished">Impossible de créer un répertoire temporaire pour la mise à jour.</translation>
- </message>
- <message>
- <source>Cannot create updater script file.</source>
- <translation type="vanished">impossible de créer le fichier du scripte de mise à jour.</translation>
- </message>
- <message>
- <source>Updating canceled.</source>
- <translation type="vanished">Mise à jour suspendue.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator.</source>
- <translation type="vanished">Impossible de finaliser la mis à jour en tant qu’administrateur.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
- <translation type="vanished">Impossible de finaliser la mis à jour en tant qu’administrateur. Délai d’attente de lancement dépassé.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
- <translation type="vanished">Impossible de finaliser la mis à jour en tant qu’administrateur. Délai d’attente d’opération dépassé.</translation>
- </message>
- <message>
- <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
- <translation type="vanished">Impossible de nettoyer le répertoire temporaire %1. Vous pouver le supprimer manuellement plutard.</translation>
- </message>
- <message>
- <source>Could not run new version for continuing update.</source>
- <translation type="vanished">Impossible de lancer la nouvelle version afin de continuer la mise à jour.</translation>
- </message>
- <message>
- <source>Package not in tar.gz format, cannot install: %1</source>
- <translation type="vanished">Installation impossible un paquet n’est pas au format tar.zg : %1</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
- <translation type="vanished">Le paquet %1 ne peut être installé, celui-ci ne pouvant déplacé dans le répertoire : %2</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
- <translation type="vanished">Le paquet %1 ne peut être installé, celui-ci ne pouvant décompressé : %2</translation>
- </message>
- <message>
- <source>Package not in zip format, cannot install: %1</source>
- <translation type="vanished">Installation impossible, un paquet est manquant : %1</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
- <translation type="vanished">Le paquet %1 ne peut être installé, celui-ci ne pouvant décompressé dans le répertoire %2 : %3</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
- <translation type="vanished">Le paquet %1 ne peut être installé, celui-ci ne pouvant décompressé dans le répertoire : %2</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2.</source>
- <translation type="vanished">Impossible de renommer le répertoire %1 en %2.</translation>
- </message>
- <message>
- <source>Could not delete directory %1.</source>
- <translation type="vanished">Impossible de supprimer le répertoire %1.</translation>
- </message>
- <message>
- <source>Error executing update command: %1
-Error message: %2</source>
- <translation type="vanished">Erreur d’exécution de la commande de mise à jour : %1
-Message d’erreur : %2</translation>
- </message>
- <message>
- <source>An error occurred while downloading updates: %1. Updating aborted.</source>
- <translation type="vanished">Erreur lors du téléchargement de la mise à jour : %1. Mise à jour abandonnée.</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="48"/>
- <source>Updates installer executable is missing.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="49"/>
- <location filename="../services/updatemanager.cpp" line="68"/>
- <source>Unable to check for updates (%1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="66"/>
- <source>details are unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="81"/>
- <source>Unable to run updater application (%1). Please report this.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr_FR.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr_FR.ts
new file mode 100644
index 0000000..da17636
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_fr_FR.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="fr" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Impossible d’exécuter la requête sur une base de données fermée.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Erreur base de données attachée %1 : %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation>Impossible de faire le point de vérification complet des journaux de transactions sur la base de données &apos;%1&apos;. Erreur retournée par le moteur SQLite : %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>La base de données pour exécuter des requêtes n’était pas définie.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>La base de données pour exécuter des requêtes n’est pas ouverte.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Impossible de désactiver les clés étrangères dans la base de données. Détails&#xa0;: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Impossible d’initialiser une transaction de la base de données : %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Interruption</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Impossible d’enregistrer la transaction de la base de données : %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation>Nouvelle référence de ligne</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation>Anncienne référence de ligne</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>Nouveau nom de tableau</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>Nouveau nom d’index</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>Nouveau nom de vue</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>Nouveau nom de déclencheur</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>Alias de tableau ou de colonne</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>Nom de transaction</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>Nouveau nom de colonne</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation>Type de données de la colonne</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation>Nom de la contrainte</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>Message d’erreur</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation>N’importe quel mot</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>Base de données par défaut</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation>Objets temporaires de base de données</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Impossible de démarrer la transaction de la base de données pour la suppression de l&apos;historique SQL, donc il n&apos;a pas été supprimé.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Impossible de valider la transaction de la base de données pour la suppression de l&apos;historique SQL, donc il n&apos;a pas été supprimé.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>Impossible d’ajouter une base de données %1 : %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>La base de données %1 ne peut ëtre mise à jour à cause de l’erreur : %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Le fichier de la base de données n&apos;existe pas.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>Aucun plugin supporté chargé.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation>La base de données ne peut être initialisée.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>Aucun pilote de base de données approprié trouvé.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>Erreur lors de la création du tableau dans la base de données cible : %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation>Impossible d&apos;analyser le tableau.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation>La base de données %1 n&apos;a pas pu être attachée à la base de données %2, donc les données de la table %3 seront copiées avec SQLiteStudio en tant que médiateur. Cette méthode peut être lente pour les grands tableaux, donc soyez patient s&apos;il vous plaît.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation>Erreur lors de la copie des données pour le tableau %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation>Erreur lors de la copie des données vers le tableau %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation>Erreur lors de la suppression de la vue source %1: %2
+Tableaux, indexes, déclencheurs et vues copiés dans la base de données %3 resteront.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation>Erreur lors de la création de la vue de la base de données : %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation>Erreur lors de la création de l’index de la base de données : %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation>Erreur lors de la création du déclencheur de la base de données : %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation>Impossible d&apos;analyser l&apos;objet &apos;%1&apos; pour le déplacer ou le copier.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>Nom de la base</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>Fichier de la base</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>Date d’exécution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>Modifications</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation>Plugin d’export %1 ne supporte pas l’exportation de la requête.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation>Exporter le plugin %1 ne prend pas en charge l&apos;exportation des tableaux.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation>Plugin d’export %1 ne supporte pas l’exportation de la base de données.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation>Format d’export « %1 » n’est pas supporté. Les formats supportés sont : %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>Export vers le presse-papier avec succés.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation>Export vers le fichier « %1 » avec succès.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>Export avec succès.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation>Impossible d’exporter vers le fichier %1. Le fichier ne peut être ouvert en écriture.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>Erreur lors de l’exportation des résultats de la requête : %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation>Erreur lors de la totalisation des données de colonne issu de la requête : %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation>Impossible d’analyser %1 afin de l’exporter. Celle-ci sera excluse de l’exportation.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation>Erreur lors de la lecture des données à exporter depuis le tableau %1 : %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation>Erreur lors du comptage des données à exporter à partir du tableau %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation>Erreur lors du comptage de la largeur de la colonne de données à exporter à partir du tableau %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation>Nombre de paramètres invalide de la fonction « %1 ». Attendu %2, obtenu %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation>Fonction inconnue avec SQLiteStudio : %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation>La fonction %1(%2) est référencée avec le langage %3, mais le plugin supportant ce langage n’est actuellement pas chargé.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>Expression invalide : %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>Impossible d’ouvrir en lecture le ficher %1 : %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>Impossible d’ouvrir en écriture le ficher %1 : %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>Erreur lors de l’écriture du fichier %1 : %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation>Langage script non supporté : %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation>Impossible d’initialiser le paramètre texte por l’export. Utulisation du paramètre par défaut : %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation>Données importées dans le tableau &apos;%1&apos; avec succès. Nombre de lignes importées : %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation>Aucune colonne fournie par le plugin d’importation.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation>Impossible d’initialiser la transaction d’import de données : %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation>Impossible d’enregistrer la transaction d’import de données : %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation>Le tableau &apos;%1&apos; a moins de colonnes qu&apos;il y en a dans les données à importer. Les colonnes de données excessives seront ignorées.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation>Le tableau &apos;%1&apos; a plus de colonnes qu&apos;il y en a dans les données à importer. Certaines colonnes de la table seront laissées vides.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation>Impossible de créer un tableau où importer : %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation>Erreur lors de l’import des données : %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>Transaction interrompue.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation>Impossible d&apos;importer les données de la ligne numéro %1. La ligne a été ignorée. Détails du problème : %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>Chargement impossible du plugin %1 celui-ci est en conflit avec le plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation>Chargement impossible du plugin %1, les dépendances n’ont pa été chargées : %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation>Chargement impossible du plugin %1, Détails de l’erreur : %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation>Chargement impossible du plugin %1 (erreur à initialisation du plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>min : %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>max : %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>Constante</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>Valeur constante :</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>Dictionnaire</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>Fichier du dictionnaire</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>Extrait du dictionnaire</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>Mot séparateur</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>Espace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>Fin de ligne</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>Méthode d’utilisation des mots</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>Trié</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>Aléatoire</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>Table « %1 » remplie avec succès.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>Nombre aléatoire</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>Préfixe constant</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>Aucun préfixe</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>Valeur minimale</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>Valeur maximale</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>Suffixe constant</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>Aucun suffixe</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>Text aléatoire</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation>Utilisez des caractères de la table standard :</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>Longueur minimun</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation>Caractères de a à z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>Caractère alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>Carctères numériques de 0 à 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>Numérique</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation>Espace, tabulation et retour chariot.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>Espace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation>Inclus ci-dessus et tous les autres.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>Binaire</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>Utilisez les catactères de ma table personalisée :</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>Longueur maximum</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation>Si vous saisissez plusieurs fois le même caractère, la sécurité est faible.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation>Code d’initialisation (optionel)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation>Code par étape</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>Langage</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>Aide</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>Séquence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>Valeur de départ :</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>Incrément :</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation>Impossible d’initialiser la transaction pour remplir la table.Détails de l’erreur %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation>Erreur lors du remplissage de la table : %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>Impossible d’enregistrer la transaction après le remplissage de la table. Erreur %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Impossible d&apos;ouvrir le fichier &apos;%1&apos; pour la lecture&#xa0;: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation>Impossible d’ouvrir la base de données : %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation>Terminé ou aucune ligne valide.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation>Impossible de charger l&apos;extension %1 : %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation>Impossible d’exécuter le point de contrôle WAL : %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation>Impossible de clore la base de bonnées : %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation>Impossible d’attacher la base de données %1 : %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>Requête imcomplète.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation>Analyse dépassement pile</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>Erreur de syntaxe</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation>Impossible d’ouvrir en lecture le fichier dictionnaire %1.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation>Le fichier dictionnaire doit exister et être en lecture.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation>La valeur maximum ne peut être inférieure à la valeur minimum.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation>Longueur maximum ne peut être inférieure à la longueur minimum.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation>La table des caractères personalisés ne peut être vide.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation>Impossible de trouver le plugin supportant le script : %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation>Erreur à l’initialisation du code de remplissage : %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation>Erreur à l’exécution du code de remplissage : %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation>Sélectionnez l’application langage.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation>L’application de code ne peut être vide.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation>Impossible de résoudre la source de données pour la colonnes : %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation>Impossible de résoudre le tableau pour la colonne &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>Objectif général</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>Support base de données</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Format code</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Langages script</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>Export</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>Import</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Peuplement de la table</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>Le tableau %1 fait référence au tableau %2, mais la définition de la clé étrangère ne sera pas mise à jour pour une nouvelle définition d&apos;un tableau en raison de problèmes lors de l&apos;analyse de DDL du tableau %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>Toutes les colonnes indexées par l&apos;index %1 ont disparu. L&apos;index ne sera pas recréé après modification du tableau.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation>Il y a un problème avec le déclencheur de traitement %1. Il ne sera peut-être pas complètement mis à jour plus tard et nécessitera votre attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>Toutes les colonnes couvertes par le déclencheur %1 ont disparu. Le déclencheur ne sera pas recréé après la modification du tableau.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>Impossible de mettre à jour le déclencheur %1 selon la modification du tableau %2.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>Impossible de mettre à jour la vue %1 selon les modifications de la table %2.
+La vue restera telle quelle.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation>Impossible d’analyser le DDL de création de vue. Détails : %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation>L’expression CREATE VIEW est fausse. C’est : %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation>SQLiteStudio ne peut résoudre les colonnes résultant de la nouvelle vue, d’où le déclencheur en cause ne pourra être indiqué pendant le process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation>Exécution interrompue.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation>La base de données n’est ouverte.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>Une seule requête peut être exécutée à la fois.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>Une erreur s’est produite à l’exécution de la requête count(*), la recherche des données est arrêtée. Erreur de la base de données : %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation>SQLiteStudio ne peut extraire des métadonnées d’une requête. Les résultats ne peut être affichés.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation>Aucune base de données n&apos;est disponible dans le contexte actuel, durant l&apos;utilisation de la commande JavaScript %1.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>Erreur de %1 : %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation>Impossible d&apos;exécuter SQL, car l&apos;application n&apos;a pas pu démarrer la transaction : %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation>Exécution depuis le fichier annulé. Toutes les requêtes exécutées jusqu&apos;à présent ont été restaurées.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Impossible d&apos;ouvrir le fichier &apos;%1&apos; pour la lecture&#xa0;: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation>Impossible d&apos;exécuter SQL, car l&apos;application n&apos;a pas pu valider la transaction : %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation>Fin de l&apos;exécution de %1 requêtes en %2 secondes. %3 n&apos;ont pas été exécutées en raison d&apos;erreurs.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation>Fin de l&apos;exécution de %1 requêtes en %2 secondes.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation>Impossible d&apos;exécuter SQL en raison d&apos;une erreur.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>Base de données</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Date d’exécution</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Temps passé</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Lignes affectées</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation>Impossible de vérifier les mises à jour (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_he_IL.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_he_IL.ts
new file mode 100644
index 0000000..5538f60
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_he_IL.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="he" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>לא ניתן לאתחל תנועת מסד נתונים. פרטים:%1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>פסיקה</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>לא ניתן היה לקבע תנועת מסד נתונים. פרטים:%1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>שם טבלה חדשה</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>שם מפתח חדש</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>שם מצג חדש</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>שם מזנק חדש</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>כינוי טבלה או עמודות</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>שם תנועה</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>שם עמודה חדשה</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation>סוג עמודת מידע</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation>שם אילוץ</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>הודעת שגיאה</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation>מילה כלשהי</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>מסד נתונים ברירת מחדל</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation>מסד נתוני עצמים זמניים</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>לא ניתן לאתחל תנועת מסד נתונים למחיקת היסטוריית SQL, לכן היא לא נמחקה.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>לא ניתן היה לקבע תנועת מסד נתונים למחיקת היסטוריית SQL, לכן היא לא נמחקה.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>לא ניתן להוסיף מסד נתונים%1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation>לא ניתן היה לאתחל את מסד הנתונים.‏.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation>לא ניתן לפרוס טבלה.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>שם מסד הנתונים</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>קובץ מסד נתונים</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>תאריך ביצוע</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>שינויים</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>הייצוא צלח.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>שגיאה בעת יצוא תוצאות שאילתה: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>תבנית ביטוי־רגיל לא תקינה: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>לא ניתן לפתוח קובץ%1 לקריאה: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>לא ניתן לפתוח קובץ%1 לכתיבה: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>שגיאה בעת כתיבה לקובץ %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation>לא ניתן לקבע תנועת לנתונים המיובאים: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation>שגיאה בעת ייבוא נתונים: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>פסיקה.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>מזערי: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>מירבי: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>קבוע</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>ערך קבוע:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>מילון</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>קובץ מילון</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>בחירת קובץ מילון</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>מפריד מילים</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>מרווח לבן</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>מעבר שורה</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>שיטת שימוש במילים</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>ממוין</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>אקראי</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>מספר אקרעי</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>תחילית קבועה</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>אין תחלית</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>ערך מזערי</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>ערך מרבי</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>סופית קבועה</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>ללא סופית</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>מלל אקראי</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>אורך מזערי</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>אלפא</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>ספרתי בין 0 ל 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>ספרתי</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>מרווח לבן</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>בינארי</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>שימוש בתווים מהסדרה המותאמת שלי:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>אורך מירבי</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>תסריט</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>שפה</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>עזרה</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>רצף</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>הערך ההתחלתי:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>שלב:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>לא ניתן לקבע תנועות לאחר אכלוס טבלה. פרטי שגיאה: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>שאילתה חלקית.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>שגיאת תחביר</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation>בחירת שפת יישום.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>מטרה כללית</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>תמיכת מסד נתונים</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>מתבנת קוד</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>שפת תסריט</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>מייצא</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>מייבא</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>אכלוס טבלה</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation>הביצוע הופסק.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation>מספד הנתונים אינו פתוח.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>שגיאה מ %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>מסד נתונים</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>תאריך ביצוע</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>חותם זמן</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>שורות הושפעו</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_hu_HU.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_hu_HU.ts
new file mode 100644
index 0000000..09d8517
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_hu_HU.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="hu" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it.qm
deleted file mode 100644
index 9dad8df..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it.qm
+++ /dev/null
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it.ts
deleted file mode 100644
index 461461f..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it.ts
+++ /dev/null
@@ -1,1146 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="it_IT">
-<context>
- <name>AbstractDb</name>
- <message>
- <location filename="../db/abstractdb.cpp" line="343"/>
- <location filename="../db/abstractdb.cpp" line="360"/>
- <source>Cannot execute query on closed database.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb.cpp" line="643"/>
- <source>Error attaching database %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ChainExecutor</name>
- <message>
- <location filename="../db/chainexecutor.cpp" line="37"/>
- <source>The database for executing queries was not defined.</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="44"/>
- <source>The database for executing queries was not open.</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="54"/>
- <source>Could not disable foreign keys in the database. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="62"/>
- <source>Could not start a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="89"/>
- <source>Interrupted</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="151"/>
- <source>Could not commit a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>CompletionHelper</name>
- <message>
- <location filename="../completionhelper.cpp" line="196"/>
- <source>New row reference</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="203"/>
- <source>Old row reference</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="208"/>
- <source>New table name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="211"/>
- <source>New index name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="214"/>
- <source>New view name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="217"/>
- <source>New trigger name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="220"/>
- <source>Table or column alias</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="223"/>
- <source>transaction name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="226"/>
- <source>New column name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="229"/>
- <source>Column data type</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="232"/>
- <source>Constraint name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="245"/>
- <source>Error message</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="289"/>
- <source>Collation name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="304"/>
- <source>Any word</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="485"/>
- <source>Default database</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="486"/>
- <source>Temporary objects database</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ConfigImpl</name>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="863"/>
- <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="870"/>
- <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbManagerImpl</name>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
- <source>Could not add database %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="139"/>
- <source>Database %1 could not be updated, because of an error: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
- <source>Database file doesn&apos;t exist.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="357"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="609"/>
- <source>No supporting plugin loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="527"/>
- <source>Database could not be initialized.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="537"/>
- <source>No suitable database driver plugin found.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbObjectOrganizer</name>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <location filename="../dbobjectorganizer.cpp" line="412"/>
- <source>Error while creating table in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <source>Could not parse table.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="426"/>
- <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="447"/>
- <source>Error while copying data for table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="466"/>
- <location filename="../dbobjectorganizer.cpp" line="473"/>
- <location filename="../dbobjectorganizer.cpp" line="496"/>
- <source>Error while copying data to table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="535"/>
- <source>Error while dropping source view %1: %2
-Tables, indexes, triggers and views copied to database %3 will remain.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="542"/>
- <source>Error while creating view in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="547"/>
- <source>Error while creating index in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="552"/>
- <source>Error while creating trigger in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="773"/>
- <location filename="../dbobjectorganizer.cpp" line="780"/>
- <location filename="../dbobjectorganizer.cpp" line="789"/>
- <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbVersionConverter</name>
- <message>
- <location filename="../dbversionconverter.cpp" line="932"/>
- <source>Target file exists, but could not be overwritten.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="951"/>
- <source>Could not find proper database plugin to create target database.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="1185"/>
- <source>Error while converting database: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DdlHistoryModel</name>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="65"/>
- <source>Database name</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="67"/>
- <source>Database file</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="69"/>
- <source>Date of execution</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="71"/>
- <source>Changes</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ExportManager</name>
- <message>
- <location filename="../services/exportmanager.cpp" line="72"/>
- <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="98"/>
- <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="122"/>
- <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="155"/>
- <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="218"/>
- <source>Export to the clipboard was successful.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="222"/>
- <source>Export to the file &apos;%1&apos; was successful.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="224"/>
- <source>Export was successful.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="266"/>
- <source>Could not export to file %1. File cannot be open for writting.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ExportWorker</name>
- <message>
- <location filename="../exportworker.cpp" line="122"/>
- <source>Error while exporting query results: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="202"/>
- <source>Error while counting data column width to export from query results: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="346"/>
- <location filename="../exportworker.cpp" line="404"/>
- <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="608"/>
- <source>Error while reading data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="616"/>
- <source>Error while counting data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="632"/>
- <source>Error while counting data column width to export from table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FunctionManagerImpl</name>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="234"/>
- <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
- <source>No such function registered in SQLiteStudio: %1(%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="353"/>
- <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="371"/>
- <source>Invalid regular expression pattern: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="390"/>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="423"/>
- <source>Could not open file %1 for reading: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="445"/>
- <source>Could not open file %1 for writting: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="465"/>
- <source>Error while writting to file %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="483"/>
- <source>Unsupported scripting language: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>GenericExportPlugin</name>
- <message>
- <location filename="../plugins/genericexportplugin.cpp" line="20"/>
- <source>Could not initialize text codec for exporting. Using default codec: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ImportManager</name>
- <message>
- <location filename="../services/importmanager.cpp" line="96"/>
- <source>Imported data to the table &apos;%1&apos; successfully.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ImportWorker</name>
- <message>
- <location filename="../importworker.cpp" line="24"/>
- <source>No columns provided by the import plugin.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="30"/>
- <source>Could not start transaction in order to import a data: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="52"/>
- <source>Could not commit transaction for imported data: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="100"/>
- <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="105"/>
- <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="124"/>
- <source>Could not create table to import to: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="177"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Error while importing data: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Interrupted.</source>
- <comment>import process status update</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="172"/>
- <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PluginManagerImpl</name>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="543"/>
- <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="554"/>
- <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="563"/>
- <source>Cannot load plugin %1. Error details: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="579"/>
- <source>Cannot load plugin %1 (error while initializing plugin).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
- <source>min: %1</source>
- <comment>plugin dependency version</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="732"/>
- <source>max: %1</source>
- <comment>plugin dependency version</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateConstant</name>
- <message>
- <location filename="../plugins/populateconstant.cpp" line="10"/>
- <source>Constant</source>
- <comment>populate constant plugin name</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateConstantConfig</name>
- <message>
- <location filename="../plugins/populateconstant.ui" line="20"/>
- <source>Constant value:</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionary</name>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="15"/>
- <source>Dictionary</source>
- <comment>dictionary populating plugin name</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionaryConfig</name>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="20"/>
- <source>Dictionary file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="29"/>
- <source>Pick dictionary file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="39"/>
- <source>Word separator</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="45"/>
- <source>Whitespace</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="58"/>
- <source>Line break</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="74"/>
- <source>Method of using words</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="80"/>
- <source>Ordered</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="93"/>
- <source>Randomly</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateManager</name>
- <message>
- <location filename="../services/populatemanager.cpp" line="89"/>
- <source>Table &apos;%1&apos; populated successfully.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateRandom</name>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="12"/>
- <source>Random number</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomConfig</name>
- <message>
- <location filename="../plugins/populaterandom.ui" line="20"/>
- <source>Constant prefix</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="26"/>
- <source>No prefix</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="39"/>
- <source>Minimum value</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="61"/>
- <source>Maximum value</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="86"/>
- <source>Constant suffix</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="92"/>
- <source>No suffix</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomText</name>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="12"/>
- <source>Random text</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomTextConfig</name>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="20"/>
- <source>Use characters from common sets:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="36"/>
- <source>Minimum length</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="64"/>
- <source>Letters from a to z.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="67"/>
- <source>Alpha</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="77"/>
- <source>Numbers from 0 to 9.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="80"/>
- <source>Numeric</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="90"/>
- <source>A whitespace, a tab and a new line character.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="93"/>
- <source>Whitespace</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="103"/>
- <source>Includes all above and all others.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="106"/>
- <source>Binary</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="119"/>
- <source>Use characters from my custom set:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="132"/>
- <source>Maximum length</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="160"/>
- <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateScript</name>
- <message>
- <location filename="../plugins/populatescript.cpp" line="13"/>
- <source>Script</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateScriptConfig</name>
- <message>
- <location filename="../plugins/populatescript.ui" line="26"/>
- <source>Initialization code (optional)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="45"/>
- <source>Per step code</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="70"/>
- <source>Language</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="89"/>
- <source>Help</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateSequence</name>
- <message>
- <location filename="../plugins/populatesequence.cpp" line="13"/>
- <source>Sequence</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateSequenceConfig</name>
- <message>
- <location filename="../plugins/populatesequence.ui" line="33"/>
- <source>Start value:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatesequence.ui" line="56"/>
- <source>Step:</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateWorker</name>
- <message>
- <location filename="../populateworker.cpp" line="23"/>
- <source>Could not start transaction in order to perform table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="70"/>
- <source>Error while populating table: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="81"/>
- <source>Could not commit transaction after table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <location filename="../db/abstractdb2.h" line="222"/>
- <location filename="../db/abstractdb3.h" line="384"/>
- <source>Could not open database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb2.h" line="833"/>
- <location filename="../db/abstractdb3.h" line="1132"/>
- <source>Result set expired or no row available.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="328"/>
- <location filename="../db/abstractdb3.h" line="332"/>
- <source>Could not load extension %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="405"/>
- <source>Could not close database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="138"/>
- <location filename="../dbversionconverter.cpp" line="143"/>
- <location filename="../dbversionconverter.cpp" line="196"/>
- <location filename="../dbversionconverter.cpp" line="243"/>
- <location filename="../dbversionconverter.cpp" line="248"/>
- <location filename="../dbversionconverter.cpp" line="256"/>
- <location filename="../dbversionconverter.cpp" line="336"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="202"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="429"/>
- <source>Could not parse statement: %1
-Error details: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="440"/>
- <location filename="../dbversionconverter.cpp" line="468"/>
- <location filename="../dbversionconverter.cpp" line="491"/>
- <location filename="../dbversionconverter.cpp" line="529"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="497"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="772"/>
- <source>SQLite %1 does not support current date or time clauses in expressions.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="775"/>
- <source>SQLite %1 does not support row value clauses in expressions.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="786"/>
- <location filename="../dbversionconverter.cpp" line="789"/>
- <location filename="../dbversionconverter.cpp" line="800"/>
- <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../impl/dbattacherimpl.cpp" line="115"/>
- <source>Could not attach database %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../parser/parsercontext.cpp" line="108"/>
- <location filename="../parser/parsercontext.cpp" line="110"/>
- <source>Incomplete query.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
- <location filename="../parser/sqlite3_parse.cpp" line="2212"/>
- <source>Parser stack overflow</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="4465"/>
- <location filename="../parser/sqlite3_parse.cpp" line="5195"/>
- <source>Syntax error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="30"/>
- <source>Could not open dictionary file %1 for reading.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="91"/>
- <source>Dictionary file must exist and be readable.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="53"/>
- <source>Maximum value cannot be less than minimum value.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="77"/>
- <source>Maximum length cannot be less than minimum length.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="88"/>
- <source>Custom character set cannot be empty.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="40"/>
- <source>Could not find plugin to support scripting language: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="58"/>
- <source>Error while executing populating initial code: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="80"/>
- <source>Error while executing populating code: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="112"/>
- <source>Select implementation language.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="113"/>
- <source>Implementation code cannot be empty.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="359"/>
- <source>Could not resolve data source for column: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="431"/>
- <source>Could not resolve table for column &apos;%1&apos;.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="768"/>
- <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="305"/>
- <source>General purpose</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="306"/>
- <source>Database support</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="307"/>
- <source>Code formatter</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="308"/>
- <source>Scripting languages</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="309"/>
- <source>Exporting</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="310"/>
- <source>Importing</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="311"/>
- <source>Table populating</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="115"/>
- <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="438"/>
- <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="481"/>
- <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="496"/>
- <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="528"/>
- <source>Cannot not update trigger %1 according to table %2 modification.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="546"/>
- <source>Cannot not update view %1 according to table %2 modifications.
-The view will remain as it is.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="708"/>
- <location filename="../tablemodifier.cpp" line="732"/>
- <location filename="../tablemodifier.cpp" line="751"/>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="25"/>
- <source>Could not parse DDL of the view to be created. Details: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="34"/>
- <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="82"/>
- <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../common/utils.cpp" line="1022"/>
- <source>Could not open file &apos;%1&apos; for reading: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QueryExecutor</name>
- <message>
- <location filename="../db/queryexecutor.cpp" line="186"/>
- <source>Execution interrupted.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="227"/>
- <source>Database is not open.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="235"/>
- <source>Only one query can be executed simultaneously.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="339"/>
- <location filename="../db/queryexecutor.cpp" line="618"/>
- <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="529"/>
- <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ScriptingQtDbProxy</name>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
- <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
- <source>Error from %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SqlHistoryModel</name>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="34"/>
- <source>Database</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="36"/>
- <source>Execution date</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="38"/>
- <source>Time spent</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="40"/>
- <source>Rows affected</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="42"/>
- <source>SQL</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>UpdateManager</name>
- <message>
- <location filename="../services/updatemanager.cpp" line="48"/>
- <source>Updates installer executable is missing.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="49"/>
- <location filename="../services/updatemanager.cpp" line="68"/>
- <source>Unable to check for updates (%1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="66"/>
- <source>details are unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="81"/>
- <source>Unable to run updater application (%1). Please report this.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it_IT.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it_IT.ts
new file mode 100644
index 0000000..975635e
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_it_IT.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="it" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Impossibile eseguire la query su un database chiuso.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Errore nell&apos;allegare il database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation>Impossibile creare il checkpoint WAL completo sul database &apos;%1&apos;. Errore restituito dal motore SQLite: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>Il database per l&apos;esecuzione delle query non è stato definito.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>Il database per l&apos;esecuzione delle query non è stato aperto.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Impossibile disabilitare le chiavi esterne nel database. Dettagli: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Impossibile avviare una transazione nel database. Dettagli: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Interrotto</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Impossibile effettuare il commit di una transazione nel database. Dettagli: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation>Nuovo riferimento riga</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation>Vecchio riferimento riga</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>Nuovo nome della tabella</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>Nuovo nome indice</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>Nuovo nome vista</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>Nuovo nome del trigger</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>Alias tabella o colonna</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>nome della transazione</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>Nuovo nome colonna</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation>Tipo di dati colonna</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation>Nome del constraint</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>Messaggio di errore</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation>Qualsiasi parola</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>Database predefinito</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation>Database oggetti temporanei</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Impossibile avviare la transazione del database per eliminare la cronologia SQL, quindi non è stata eliminata.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Impossibile avviare la transazione del database per eliminare la cronologia SQL, quindi non è stata eliminata.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>Impossibile aggiungere il database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>Il database %1 non può essere aggiornato, a causa di un errore: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Il file del database non esiste.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>Nessun plugin di supporto caricato.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation>Impossibile inizializzare il database.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>Non è stato trovato alcun plugin per il driver del database.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>Errore durante la creazione della tabella nel database di destinazione: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation>Impossibile analizzare la tabella.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation>Il database %1 non può essere allegato al database %2, così i dati della tabella %3 verranno copiati con SQLiteStudio come mediatore. Questo metodo può essere lento per le tabelle enormi, quindi sii paziente.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation>Errore durante la copia dei dati per la tabella %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation>Errore durante la copia dei dati nella tabella %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation>Errore durante il rilascio della vista sorgente %1: %2
+Le tabelle, gli indici, i trigger e le viste copiate nel database %3 rimarranno.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation>Errore durante la creazione della vista nel database di destinazione: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation>Errore durante la creazione dell&apos;indice nel database di destinazione: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation>Errore durante la creazione del trigger nel database di destinazione: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation>Impossibile analizzare l&apos;oggetto &apos;%1&apos; per spostarlo o copiarlo.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>Nome database</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>File database</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>Data di esecuzione</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>Modifiche</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation>Il plugin di esportazione %1 non supporta l&apos;esplorazione dei risultati delle interrogazioni.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation>Il plugin di esportazione %1 non supporta l&apos;esportazione di tabelle.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation>Il plugin di esportazione %1 non supporta l&apos;esportazione di databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation>Il formato di esportazione &apos;%1&apos; non è supportato. I formati supportati sono: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>Esportazione negli appunti riuscita.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation>Esportazione nel file &apos;%1&apos; riuscita.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>Esportazione riuscita.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation>Impossibile esportare nel file %1. Il file non può essere aperto in scrittura.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>Errore durante l&apos;esportazione dei risultati della query: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation>Errore durante il conteggio della larghezza della colonna dei dati da esportare dalla tabella %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation>Impossibile analizzare %1 per esportarlo. Sarà escluso dall&apos;output di esportazione.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation>Errore durante la lettura dei dati da esportare dalla tabella %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation>Errore durante il conteggio dei dati da esportare dalla tabella %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation>Errore durante il conteggio della larghezza della colonna dei dati da esportare dalla tabella %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation>Numero di argomenti non valido per la funzione &apos;%1&apos;. Atteso %2, ma ottenuto %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation>Funzione inesistente non registrata in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation>La funzione %1(%2) è stata registrata con la lingua %3, ma il plugin che supporta tale lingua non è attualmente caricato.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>Modello di espressione regolare non valido: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>Apertura del file %1 in lettura fallita: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>Apertura del file %1 in scrittura fallita: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>Errore durante la scrittura sul file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation>Linguaggio di scripting non supportato: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation>Impossibile inizializzare il codec di testo per l&apos;esportazione. Utilizzando il codec predefinito: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation>Dati importati nella tabella &apos;%1&apos; con successo. Numero di righe importate: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation>Nessuna colonna fornita dal plugin di importazione.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation>Impossibile avviare la transazione per importare i dati: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation>Impossibile effettuare il commit della transazione per i dati importati: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation>La tabella &apos;%1&apos; ha meno colonne di quelle che ci sono colonne nei dati da importare. Le colonne di dati eccessive verranno ignorate.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation>La tabella &apos;%1&apos; ha più colonne di quelle che ci sono nei dati da importare. Alcune colonne nella tabella saranno lasciate vuote.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation>Impossibile creare la tabella da importare in: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation>Errore durante l&apos;importazione dei dati: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>Interrotto.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation>Impossibile importare riga numero %1. La riga è stata ignorata. Dettagli problema: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>Impossibile caricare il plugin %1 perché và in conflitto con il plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation>Impossibile caricare il plugin %1, perché non è stata caricata la sua dipendenza: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation>Impossibile caricare il plugin %1. Dettagli errore: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation>Impossibile caricare il plugin %1 (errore durante l&apos;inizializzazione del plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>Costante</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>Valore costante:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>Dizionario</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>File dizionario</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>Scegli il file di dizionario</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>Separatore parole</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>Spazio bianco</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>Interruzione di linea</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>Metodo di utilizzo delle parole</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>Ordinato</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>Casuale</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>Tabella &apos;%1&apos; popolata con successo.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>Numeri casuali</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>Prefisso costante</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>Nessun prefisso</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>Valore minimo</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>Valore massimo</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>Suffisso costante</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>Nessun suffisso</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>Testo casuale</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation>Usa i caratteri dai set comuni:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>Lunghezza minima</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation>Lettere da a a z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>Numeri da 0 a 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>Numerico</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation>Uno spazio bianco, un tab ed un carattere di ritorno a capo.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>Spazio bianco</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation>Include tutto sopra e tutti gli altri.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>Binario</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>Usa i caratteri del mio set personalizzato:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>Lunghezza massima</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation>Se si digita un carattere più volte, esso ha più probabilità di essere utilizzato.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation>Codice di inizializzazione (facoltativo)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation>Per passo di codice</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>Lingua</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>Aiuto</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>Sequenza</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>Valore iniziale:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>Passo:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation>Impossibile avviare la transazione per eseguire il popolamento della tabella. Dettagli di errore: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation>Errore durante il popolamento della tabella: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>Impossibile effettuare il commit della transazione dopo il popolamento della tabella. Dettagli errore: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Impossibile aprire il file &apos;%1&apos; in lettura: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation>Impossibile aprire il database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation>Risultato impostato scaduto o nessuna riga disponibile.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation>Impossibile caricare l&apos;estensione %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation>Impossibile eseguire il punto di controllo WAL: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation>Impossibile chiudere il database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation>Impossibile allegare il database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>Query incompleta.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation>Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>Errore di sintassi</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation>Impossibile aprire il file dizionario %1 in lettura.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation>Il file del dizionario deve esistere ed essere leggibile.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation>Il valore massimo non può essere inferiore al valore minimo.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation>La lunghezza massima non può essere minore della lunghezza minima.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation>Il set di caratteri personalizzati non può essere vuoto.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation>Impossibile trovare il plugin per supportare la lingua dello script: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation>Errore durante il popolamento del codice iniziale: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation>Errore durante il popolamento del codice: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation>Seleziona lingua di implementazione.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation>Il codice di implementazione non può essere vuoto.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation>Impossibile risolvere la sorgente dati per la colonna: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation>Impossibile risolvere la tabella per la colonna &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation>Impossibile inizializzare il file di configurazione. Qualsiasi modifica di configurazione e cronologia delle interrogazioni verrà persa dopo il riavvio dell&apos;applicazione. Impossibile creare un file nelle seguenti posizioni: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>Scopo generale</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>Supporto database</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Formattatore codice</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Linguaggi di scripting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>Sto esportando ...</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>Sto importando ...</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Popolamento tabella</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>La tabella %1 fa riferimento alla tabella %2, ma la definizione della chiave esterna non sarà aggiornata per la nuova definizione della tabella a causa di problemi durante l&apos;analisi DDL della tabella %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>Tutte le colonne indicizzate dall&apos;indice %1 non esistono più. L&apos;indice non verrà ricreato dopo la modifica della tabella.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation>C&apos;è un problema con il corretto processo trigger %1. Potrebbe non essere completamente aggiornato in seguito e avrà bisogno della vostra attenzione.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>Tutte le colonne indicizzate dall&apos;indice %1 non esistono più. L&apos;indice non verrà ricreato dopo la modifica della tabella.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>Impossibile aggiornare il trigger %1 in accordo alla modifica della tabella %2.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>Impossibile aggiornare la vista %1 in base alle modifiche della tabella %2.
+La vista rimarrà così com&apos;è.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation>C&apos;è un problema con l&apos;aggiornamento di un&apos;istruzione %1 entro %2 trigger. Una delle %1 sotto-istruzioni che potrebbero riferirsi alla tabella %3 non può essere modificata correttamente. Può essere necessario un aggiornamento manuale del trigger.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation>Impossibile analizzare il DDL della vista da creare. Dettagli: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation>La query analizzata non è una CREATE VIEW. Vedi: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation>SQLiteStudio non è riuscito a risolvere le colonne restituite dalla nuova vista, quindi non potrà essere in grado di riportare quali trigger potrebbero fallire durante il processo di ricreazione.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation>Esecuzione interrotta.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation>Il database non è aperto.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>Solo una query può essere eseguita contemporaneamente.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>Si è verificato un errore durante l&apos;esecuzione della query count(*), quindi la pagina dei dati sarà disabilitata. Dettagli di errore dal database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation>SQLiteStudio non è stato in grado di estrarre i metadati dalla query. I risultati non sono modificabili.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation>Nessun database disponibile nel contesto attuale, mentre si richiamava il comando JavaScript %1.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>Errore da %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation>Impossibile eseguire SQL perché l&apos;applicazione non è riuscita ad avviare la transazione: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation>Esecuzione dal file annullata. Tutte le query eseguite finora sono state ripristinate.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Impossibile aprire il file &apos;%1&apos; in lettura: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation>Impossibile eseguire SQL perché l&apos;applicazione non è riuscita a effettuare il commit della transazione: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation>Completata l&apos;esecuzione di %1 query in %2 secondi. %3 non è stata eseguita a causa di errori.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation>Terminata l&apos;esecuzione di %1 query in %2 secondi.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation>Impossibile eseguire SQL a causa di errore.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Data di esecuzione</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Tempo trascorso</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Righe interessate</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation>Impossibile controllare gli aggiornamenti: (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ja_JP.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ja_JP.ts
new file mode 100644
index 0000000..79c7923
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ja_JP.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ja" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_kaa.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_kaa.ts
new file mode 100644
index 0000000..f3ecb43
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_kaa.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="kaa" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>Qádem:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ko_KR.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ko_KR.ts
new file mode 100644
index 0000000..ee8f7d5
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ko_KR.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ko" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>연결되지 않은 데이터베이스에서 쿼리를 실행할 수 없습니다</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>데이터베이스 등록 중 오류 %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>오류 메시지</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>기본 데이터베이스</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>데이터베이스 이름</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>데이터베이스 파일</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_nl_NL.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_nl_NL.ts
new file mode 100644
index 0000000..2034b82
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_nl_NL.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="nl" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_no_NO.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_no_NO.ts
new file mode 100644
index 0000000..e2d7736
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_no_NO.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="no" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qm
deleted file mode 100644
index d8a2202..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qm
+++ /dev/null
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts
deleted file mode 100644
index 6a1e7aa..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts
+++ /dev/null
@@ -1,1337 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="pl_PL">
-<context>
- <name>AbstractDb</name>
- <message>
- <location filename="../db/abstractdb.cpp" line="343"/>
- <location filename="../db/abstractdb.cpp" line="360"/>
- <source>Cannot execute query on closed database.</source>
- <translation>Nie można wykonać zapytania na zamkniętej bazie danych.</translation>
- </message>
- <message>
- <location filename="../db/abstractdb.cpp" line="643"/>
- <source>Error attaching database %1: %2</source>
- <translation>Błąd podczas dołączania bazy danych %1: %2</translation>
- </message>
-</context>
-<context>
- <name>BugReporter</name>
- <message>
- <source>Invalid login or password</source>
- <translation type="vanished">Niepoprawny login lub hasło</translation>
- </message>
-</context>
-<context>
- <name>ChainExecutor</name>
- <message>
- <location filename="../db/chainexecutor.cpp" line="37"/>
- <source>The database for executing queries was not defined.</source>
- <comment>chain executor</comment>
- <translation>Nie zdefiniowano bazy danych do wykonywania zapytań.</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="44"/>
- <source>The database for executing queries was not open.</source>
- <comment>chain executor</comment>
- <translation>Baza danych do wykonywania zapytań nie jest otwarta.</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="54"/>
- <source>Could not disable foreign keys in the database. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Nie udało się wyłączyć kluczy obcych w bazie. Szczegóły: %1</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="62"/>
- <source>Could not start a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Nie udało się rozpocząć transakcji bazy danych. Szczegóły: %1</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="89"/>
- <source>Interrupted</source>
- <comment>chain executor</comment>
- <translation>Przerwane</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="151"/>
- <source>Could not commit a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Nie udało się zatwierdzić transakcji bazy danych. Szczegóły: %1</translation>
- </message>
-</context>
-<context>
- <name>CompletionHelper</name>
- <message>
- <location filename="../completionhelper.cpp" line="196"/>
- <source>New row reference</source>
- <translation>Odnośnik do nowego wiersza</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="203"/>
- <source>Old row reference</source>
- <translation>Odnośnik do starego wiersza</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="208"/>
- <source>New table name</source>
- <translation>Nazwa nowej tabeli</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="211"/>
- <source>New index name</source>
- <translation>Nazwa nowego indeksu</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="214"/>
- <source>New view name</source>
- <translation>Nazwa nowego widoku</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="217"/>
- <source>New trigger name</source>
- <translation>Nazwa nowego wyzwalacza</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="220"/>
- <source>Table or column alias</source>
- <translation>Alias tabeli lub kolumny</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="223"/>
- <source>transaction name</source>
- <translation>Nazwa transakcji</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="226"/>
- <source>New column name</source>
- <translation>Nazwa nowej kolumny</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="229"/>
- <source>Column data type</source>
- <translation>Typ danych kolumny</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="232"/>
- <source>Constraint name</source>
- <translation>Nazwa ograniczenia</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="245"/>
- <source>Error message</source>
- <translation>Treść błędu</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="289"/>
- <source>Collation name</source>
- <translation>Nazwa zestawienia</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="304"/>
- <source>Any word</source>
- <translation>Dowolne słowo</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="485"/>
- <source>Default database</source>
- <translation>Domyślna baza danych</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="486"/>
- <source>Temporary objects database</source>
- <translation>Baza danych obiektów tymczasowych</translation>
- </message>
-</context>
-<context>
- <name>ConfigImpl</name>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="863"/>
- <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation>Nie można rozpocząć transakcji dla usuwania historii SQL, więc nie można usunąć historii.</translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="870"/>
- <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation>Nie można zatwierdzić transakcji dla usuwania historii SQL, więc nie można usunąć historii.</translation>
- </message>
-</context>
-<context>
- <name>DbManagerImpl</name>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
- <source>Could not add database %1: %2</source>
- <translation>Nie udało się dodać bazę danych %1: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="139"/>
- <source>Database %1 could not be updated, because of an error: %2</source>
- <translation>Nie udało się zaktualizować baza danych %1 z powodu błędu: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
- <source>Database file doesn&apos;t exist.</source>
- <translation>Plik bazy danych nie istnieje.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="357"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="609"/>
- <source>No supporting plugin loaded.</source>
- <translation>Nie załadowano obsługującej wtyczki.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="527"/>
- <source>Database could not be initialized.</source>
- <translation>Nie udało się zainicjalizować bazy danych.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="537"/>
- <source>No suitable database driver plugin found.</source>
- <translation>Nie znaleziono odpowiedniej wtyczki sterownika.</translation>
- </message>
-</context>
-<context>
- <name>DbObjectOrganizer</name>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <location filename="../dbobjectorganizer.cpp" line="412"/>
- <source>Error while creating table in target database: %1</source>
- <translation>Błąd podczas tworzenia tabeli w docelowej bazie danych: %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <source>Could not parse table.</source>
- <translation>Nie udało się przeanalizować tabeli.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="426"/>
- <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
- <translation>Nie udało się dołączyć bazy danych %1 do bazy danych %2, więc dane tabeli %3 będą skopiowane przez SQLiteStudio jako pośrednika. Ta metoda może być powolna dla dużych tabel, więc proszę o cierpliwość.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="447"/>
- <source>Error while copying data for table %1: %2</source>
- <translation>Błąd podczas copiowania danych tabeli %1: %2</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="466"/>
- <location filename="../dbobjectorganizer.cpp" line="473"/>
- <location filename="../dbobjectorganizer.cpp" line="496"/>
- <source>Error while copying data to table %1: %2</source>
- <translation>Błąd podczas kopiowania danych do tabeli %1: %2</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="535"/>
- <source>Error while dropping source view %1: %2
-Tables, indexes, triggers and views copied to database %3 will remain.</source>
- <translation>Błąd podczas upuszczania widoku źródłowego %1: %2
-Tabele, indeksy, wyzwalacze i widoki skopiowane do bazy danych %3 pozostaną na miejscu.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="542"/>
- <source>Error while creating view in target database: %1</source>
- <translation>Błąd podczas tworzenia widoku w docelowej bazie danych: %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="547"/>
- <source>Error while creating index in target database: %1</source>
- <translation>Błąd podczas tworzenia indeksu w docelowej bazie danych: %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="552"/>
- <source>Error while creating trigger in target database: %1</source>
- <translation>Błąd podczas tworzenia wyzwalacza w docelowej bazie danych: %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="773"/>
- <location filename="../dbobjectorganizer.cpp" line="780"/>
- <location filename="../dbobjectorganizer.cpp" line="789"/>
- <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
- <translation>Nie można zanalizować obiektu &apos;%1&apos; w celu przeniesienia lub skopiowania go.</translation>
- </message>
-</context>
-<context>
- <name>DbVersionConverter</name>
- <message>
- <location filename="../dbversionconverter.cpp" line="932"/>
- <source>Target file exists, but could not be overwritten.</source>
- <translation>Plik docelowy istnieje, ale nie może być nadpisany.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="951"/>
- <source>Could not find proper database plugin to create target database.</source>
- <translation>Nie znaleziono odpowiedniej wtyczki bazy danych, aby utworzyć docelową bazę danych.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="1185"/>
- <source>Error while converting database: %1</source>
- <translation>Błąd podczas konwersji bazy danych: %1</translation>
- </message>
-</context>
-<context>
- <name>DdlHistoryModel</name>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="65"/>
- <source>Database name</source>
- <comment>ddl history header</comment>
- <translation>Nazwa bazy danych</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="67"/>
- <source>Database file</source>
- <comment>ddl history header</comment>
- <translation>Plik bazy danych</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="69"/>
- <source>Date of execution</source>
- <comment>ddl history header</comment>
- <translation>Data wykonania</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="71"/>
- <source>Changes</source>
- <comment>ddl history header</comment>
- <translation>Zmiany</translation>
- </message>
-</context>
-<context>
- <name>ExportManager</name>
- <message>
- <location filename="../services/exportmanager.cpp" line="72"/>
- <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
- <translation>Wtyczka eksportu %1 nie obsługuje exportowania wyników zapytania.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="98"/>
- <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
- <translation>Wtyczka exportu %1 nie obsługuje eksportowania tabel.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="122"/>
- <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
- <translation>Wtyczka exportu %1 nie obsługuje eksportowania baz danych.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="155"/>
- <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
- <translation>Format eksportu %1 nie jest obsługiwany. Obsługiwane formaty to: %2</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="218"/>
- <source>Export to the clipboard was successful.</source>
- <translation>Eksport do schowka przebiegł pomyślnie.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="222"/>
- <source>Export to the file &apos;%1&apos; was successful.</source>
- <translation>Eksport do pliku &apos;%1&apos; przebiegł pomyślnie.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="224"/>
- <source>Export was successful.</source>
- <translation>Export przebiegł pomyślnie.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="266"/>
- <source>Could not export to file %1. File cannot be open for writting.</source>
- <translation>Eksport do pliku %1 nie powiódł się. Plik nie może być otwarty do zapisu.</translation>
- </message>
- <message>
- <source>Export to was successful.</source>
- <translation type="obsolete">Eksport do przebiegł pomyślnie.</translation>
- </message>
-</context>
-<context>
- <name>ExportWorker</name>
- <message>
- <location filename="../exportworker.cpp" line="122"/>
- <source>Error while exporting query results: %1</source>
- <translation>Błąd podczas eksportowania wyników zapytania: %1</translation>
- </message>
- <message>
- <source>Error while counting data column width to export from query results: %2</source>
- <translation type="obsolete">Błąd podczas liczenia szerokości kolumn danych do eksportu wyników zapytania: %2</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="202"/>
- <source>Error while counting data column width to export from query results: %1</source>
- <translation>Błąd podczas liczenia szerokości kolumn danych do eksportu wyników zapytania: %1</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="346"/>
- <location filename="../exportworker.cpp" line="404"/>
- <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
- <translation>Nie udało się przeanalizować %1 w celu wyeksportowania. Element ten zostanie pominięty w wynikach eksportu.</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="608"/>
- <source>Error while reading data to export from table %1: %2</source>
- <translation>Błąd podczas odczytu danych do eksportu z tabeli %1: %2</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="616"/>
- <source>Error while counting data to export from table %1: %2</source>
- <translation>Błąd podczas liczenia danych do eksportu z tabeli %1: %2</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="632"/>
- <source>Error while counting data column width to export from table %1: %2</source>
- <translation>Błąd podczas obliczania szerokości kolumn danych do eksportu z tabeli %1: %2</translation>
- </message>
-</context>
-<context>
- <name>FunctionManagerImpl</name>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="234"/>
- <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
- <translation>Niepoprawna liczba argumentów do funkcji &apos;%1&apos;. Oczekiwano %2, a jest %3.</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
- <source>No such function registered in SQLiteStudio: %1(%2)</source>
- <translation>Nie znaleziono funkcji zarejestrowanej w SQLiteStudio: %1 (%2)</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="353"/>
- <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
- <translation>Funkcja %1 (%2) została zarejestrowana dla języka %3, ale wtyczka obsługująca ten język nie jest aktualnie załadowana.</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="371"/>
- <source>Invalid regular expression pattern: %1</source>
- <translation>Niepoprawne wyrażenie regularne: %1</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="390"/>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="423"/>
- <source>Could not open file %1 for reading: %2</source>
- <translation>Nie udało się otworzyć pliku %1 do odczytu: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="445"/>
- <source>Could not open file %1 for writting: %2</source>
- <translation>Nie udało się otworzyć pliku %2 do zapisu: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="465"/>
- <source>Error while writting to file %1: %2</source>
- <translation>Błąd podczas zapisu do pliku %1: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="483"/>
- <source>Unsupported scripting language: %1</source>
- <translation>Nieobsługiwany język skryptowy: %1</translation>
- </message>
-</context>
-<context>
- <name>GenericExportPlugin</name>
- <message>
- <location filename="../plugins/genericexportplugin.cpp" line="20"/>
- <source>Could not initialize text codec for exporting. Using default codec: %1</source>
- <translation>Nie udało się zainicjalizować kodeka do exportu. Użyty będzie domyślny kodek: %1</translation>
- </message>
-</context>
-<context>
- <name>ImportManager</name>
- <message>
- <location filename="../services/importmanager.cpp" line="96"/>
- <source>Imported data to the table &apos;%1&apos; successfully.</source>
- <translation>Pomyślnie zaimportowano dane do tabeli &apos;%1&apos;.</translation>
- </message>
-</context>
-<context>
- <name>ImportWorker</name>
- <message>
- <location filename="../importworker.cpp" line="24"/>
- <source>No columns provided by the import plugin.</source>
- <translation>Wtyczka importu nie dostarczyła żadnych kolumn.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="30"/>
- <source>Could not start transaction in order to import a data: %1</source>
- <translation>Nie udało się wystartować transakcji w celu zaimportowania danych: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="52"/>
- <source>Could not commit transaction for imported data: %1</source>
- <translation>Nie udało się zatwierdzić transakcji w celu zaimportowania danych: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="100"/>
- <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
- <translation>Tabela &apos;%1&apos; ma mniej kolumn, niż jest kolumn w danych do importu. Nadmiarowe kolumny zostaną zignorowane.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="105"/>
- <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
- <translation>Tabela &apos;%1&apos; ma więcej kolumn, niż jest kolumn w danych do importu. Część kolumn w tabeli będzie pozostawiona pusta.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="124"/>
- <source>Could not create table to import to: %1</source>
- <translation>Nie udało się stworzyć tabeli do zaimportowania: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="177"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Error while importing data: %1</source>
- <translation>Błąd podczas importowania danych: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Interrupted.</source>
- <comment>import process status update</comment>
- <translation>Przerwano.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="172"/>
- <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
- <translation>Nie udało się zaimportować wiersza danych numer %1. Wiersz ten został zignorowany. Szczegóły problemu: %2</translation>
- </message>
-</context>
-<context>
- <name>PluginManagerImpl</name>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="543"/>
- <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
- <translation>Nie udało się załadować wtyczki %1, ponieważ jest ona w konflikcie z wtyczką %2.</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="554"/>
- <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
- <translation>Nie udało się załadować wtyczki %1, ponieważ jej zależność nie została załadowana: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="563"/>
- <source>Cannot load plugin %1. Error details: %2</source>
- <translation>Nie udało się załadować wtyczki %1. Szczegóły błędu: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="579"/>
- <source>Cannot load plugin %1 (error while initializing plugin).</source>
- <translation>Nie udało się załadować wtyczki %1 (błąd podczas inicjalizacji wtyczki).</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
- <source>min: %1</source>
- <comment>plugin dependency version</comment>
- <translation>min: %1</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="732"/>
- <source>max: %1</source>
- <comment>plugin dependency version</comment>
- <translation>maks: %1</translation>
- </message>
-</context>
-<context>
- <name>PopulateConstant</name>
- <message>
- <location filename="../plugins/populateconstant.cpp" line="10"/>
- <source>Constant</source>
- <comment>populate constant plugin name</comment>
- <translation>Stała</translation>
- </message>
-</context>
-<context>
- <name>PopulateConstantConfig</name>
- <message>
- <location filename="../plugins/populateconstant.ui" line="20"/>
- <source>Constant value:</source>
- <translation>Stała wartość:</translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionary</name>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="15"/>
- <source>Dictionary</source>
- <comment>dictionary populating plugin name</comment>
- <translation>Słownik</translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionaryConfig</name>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="20"/>
- <source>Dictionary file</source>
- <translation>Plik słownika</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="29"/>
- <source>Pick dictionary file</source>
- <translation>Wybierz plik słownika</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="39"/>
- <source>Word separator</source>
- <translation>Separator słowa</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="45"/>
- <source>Whitespace</source>
- <translation>Biały znak</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="58"/>
- <source>Line break</source>
- <translation>Nowa linia</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="74"/>
- <source>Method of using words</source>
- <translation>Metoda używania słów</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="80"/>
- <source>Ordered</source>
- <translation>Uporządkowana</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="93"/>
- <source>Randomly</source>
- <translation>Losowa</translation>
- </message>
-</context>
-<context>
- <name>PopulateManager</name>
- <message>
- <location filename="../services/populatemanager.cpp" line="89"/>
- <source>Table &apos;%1&apos; populated successfully.</source>
- <translation>Zaludnianie tabeli &apos;%1&apos; przebiegło pomyślnie.</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandom</name>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="12"/>
- <source>Random number</source>
- <translation>Losowa liczba</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomConfig</name>
- <message>
- <location filename="../plugins/populaterandom.ui" line="20"/>
- <source>Constant prefix</source>
- <translation>Stały przedrostek</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="26"/>
- <source>No prefix</source>
- <translation>Bez predrostka</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="39"/>
- <source>Minimum value</source>
- <translation>Wartość minimalna</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="61"/>
- <source>Maximum value</source>
- <translation>Wartość maksymalna</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="86"/>
- <source>Constant suffix</source>
- <translation>Stały przyrostek</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="92"/>
- <source>No suffix</source>
- <translation>Brak przyrostka</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomText</name>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="12"/>
- <source>Random text</source>
- <translation>Losowy tekst</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomTextConfig</name>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="20"/>
- <source>Use characters from common sets:</source>
- <translation>Użyj znaków z zestawów:</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="36"/>
- <source>Minimum length</source>
- <translation>Długość minimalna</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="64"/>
- <source>Letters from a to z.</source>
- <translation>Litery od a do z.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="67"/>
- <source>Alpha</source>
- <translation>Litery</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="77"/>
- <source>Numbers from 0 to 9.</source>
- <translation>Liczby od 0 do 9.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="80"/>
- <source>Numeric</source>
- <translation>Liczby</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="90"/>
- <source>A whitespace, a tab and a new line character.</source>
- <translation>Znak biały, znak tabulacji, znak nowej linii.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="93"/>
- <source>Whitespace</source>
- <translation>Znak biały</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="103"/>
- <source>Includes all above and all others.</source>
- <translation>Zawiera wszystkie powyższe, oraz wszystkie pozostałe.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="106"/>
- <source>Binary</source>
- <translation>Binarne</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="119"/>
- <source>Use characters from my custom set:</source>
- <translation>Użyj znaków z mojego zestawu:</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="132"/>
- <source>Maximum length</source>
- <translation>Długość maksymalna</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="160"/>
- <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
- <translation>Jeśli wpiszesz dany znak kilka razy, będzie on miał większą szansę na wylosowanie.</translation>
- </message>
-</context>
-<context>
- <name>PopulateScript</name>
- <message>
- <location filename="../plugins/populatescript.cpp" line="13"/>
- <source>Script</source>
- <translation>Skrypt</translation>
- </message>
-</context>
-<context>
- <name>PopulateScriptConfig</name>
- <message>
- <location filename="../plugins/populatescript.ui" line="26"/>
- <source>Initialization code (optional)</source>
- <translation>Kod inicjalizujący (opcjonalny)</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="45"/>
- <source>Per step code</source>
- <translation>Kod dla każdego kroku</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="70"/>
- <source>Language</source>
- <translation>Język</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="89"/>
- <source>Help</source>
- <translation>Pomoc</translation>
- </message>
-</context>
-<context>
- <name>PopulateSequence</name>
- <message>
- <location filename="../plugins/populatesequence.cpp" line="13"/>
- <source>Sequence</source>
- <translation>Sekwencja</translation>
- </message>
-</context>
-<context>
- <name>PopulateSequenceConfig</name>
- <message>
- <location filename="../plugins/populatesequence.ui" line="33"/>
- <source>Start value:</source>
- <translation>Wartość początkowa:</translation>
- </message>
- <message>
- <location filename="../plugins/populatesequence.ui" line="56"/>
- <source>Step:</source>
- <translation>Krok:</translation>
- </message>
-</context>
-<context>
- <name>PopulateWorker</name>
- <message>
- <location filename="../populateworker.cpp" line="23"/>
- <source>Could not start transaction in order to perform table populating. Error details: %1</source>
- <translation>Nie udało się rozpocząć transakcji w celu zaludnienia tabeli. Szczegóły błędu: %1</translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="70"/>
- <source>Error while populating table: %1</source>
- <translation>Błąd podczas zaludniania tabeli: %2</translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="81"/>
- <source>Could not commit transaction after table populating. Error details: %1</source>
- <translation>Nie udało się zatwierdzić transakcji po zaludnieniu tabeli. Szczegóły błędy: %1</translation>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <location filename="../dbversionconverter.cpp" line="138"/>
- <location filename="../dbversionconverter.cpp" line="143"/>
- <location filename="../dbversionconverter.cpp" line="196"/>
- <location filename="../dbversionconverter.cpp" line="243"/>
- <location filename="../dbversionconverter.cpp" line="248"/>
- <location filename="../dbversionconverter.cpp" line="256"/>
- <location filename="../dbversionconverter.cpp" line="336"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
- <translation>SQLite %1 nie obsługuje zapytania &apos;%2&apos;.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="202"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
- <translation>SQLite %1 nie obsługuje zapytania &apos;%2&apos;, ale stworzona zostanie zwykła tabela, jeśli będziesz kontynuować.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="429"/>
- <source>Could not parse statement: %1
-Error details: %2</source>
- <translation>Nie udało się przeanalizować zapytania: %1
-Szczegóły błędu: %2</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="440"/>
- <location filename="../dbversionconverter.cpp" line="468"/>
- <location filename="../dbversionconverter.cpp" line="491"/>
- <location filename="../dbversionconverter.cpp" line="529"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
- <translation>SQLite %1 nie obsługuje klauzuli &apos;%2&apos;. Nie można przekonwertować zapytania &apos;%3&apos; z tą klauzulą.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="497"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
- <translation>SQLite %1 nie obsługuje klauzuli &apos;%2&apos; w zapytaniu &apos;%3&apos;.</translation>
- </message>
- <message>
- <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%1&apos; statement with that clause.</source>
- <translation type="obsolete">SQLite %1 nie obsługuje klauzuli &apos;%2&apos;. Nie można przekonwertować zapytania &apos;%3&apos; z tą klauzulą. {1 ?} {2&apos;?} {1&apos;?}</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="772"/>
- <source>SQLite %1 does not support current date or time clauses in expressions.</source>
- <translation>SQLite %1 nie obsługuje aktualnej daty lub klauzul czasowu w wyrażeniach.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="775"/>
- <source>SQLite %1 does not support row value clauses in expressions.</source>
- <translation>SQLite %1 nie obsługuje klauzuli wartości wierszowej w wyrażeniach.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="786"/>
- <location filename="../dbversionconverter.cpp" line="789"/>
- <location filename="../dbversionconverter.cpp" line="800"/>
- <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
- <translation>SQLite %1 nie obsługuje klauzuli &apos;%2&apos; w wyrażeniach.</translation>
- </message>
- <message>
- <location filename="../impl/dbattacherimpl.cpp" line="115"/>
- <source>Could not attach database %1: %2</source>
- <translation>Nie udało się dołączyć bazy danych %1: %2</translation>
- </message>
- <message>
- <location filename="../parser/parsercontext.cpp" line="108"/>
- <location filename="../parser/parsercontext.cpp" line="110"/>
- <source>Incomplete query.</source>
- <translation>Niekompletne zapytanie.</translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
- <location filename="../parser/sqlite3_parse.cpp" line="2212"/>
- <source>Parser stack overflow</source>
- <translation>Przeciążenie stosu analizatora.</translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="4465"/>
- <location filename="../parser/sqlite3_parse.cpp" line="5195"/>
- <source>Syntax error</source>
- <translation>Błąd składni</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="30"/>
- <source>Could not open dictionary file %1 for reading.</source>
- <translation>Nie udało się otworzyć pliku słownika %1 do odczytu.</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="91"/>
- <source>Dictionary file must exist and be readable.</source>
- <translation>Plik słownika musi istnieć i musisz mieć prawa do jego odczytu.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="53"/>
- <source>Maximum value cannot be less than minimum value.</source>
- <translation>Wartość maksymalna nie może być mniejsza niż wartość minimalna.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="77"/>
- <source>Maximum length cannot be less than minimum length.</source>
- <translation>Długość maksymalna nie może być mniejsza niż długość minimalna.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="88"/>
- <source>Custom character set cannot be empty.</source>
- <translation>Zestaw własnych znaków nie może być pusty.</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="40"/>
- <source>Could not find plugin to support scripting language: %1</source>
- <translation>Nie udało się znaleźć wtyczki obsługującej język skryptowy: %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="58"/>
- <source>Error while executing populating initial code: %1</source>
- <translation>Błąd podczas wykonywania kodu inicjalizującego zaludnianie: %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="80"/>
- <source>Error while executing populating code: %1</source>
- <translation>Błąd podczas wykonywania kodu zaludniania: %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="112"/>
- <source>Select implementation language.</source>
- <translation>Wybierz język implementacji.</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="113"/>
- <source>Implementation code cannot be empty.</source>
- <translation>Kod implementacji nie może być pusty.</translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="359"/>
- <source>Could not resolve data source for column: %1</source>
- <translation>Nie znaleziono źródła danych dla kolumny: %1</translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="431"/>
- <source>Could not resolve table for column &apos;%1&apos;.</source>
- <translation>Nie można ustalić tabeli lub kolumny &apos;%1&apos;.</translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="768"/>
- <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
- <translation>Nie udało się zainicjalizować pliku konfiguracyjnego. Jakiekolwiek zmiany w konfiguracji i historia zapytań będą utracone po zrestartowaniu aplikacji. Próbowano zainicjalizować plik konfiguracyjny w następujących lokalizacjach: %1.</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="305"/>
- <source>General purpose</source>
- <comment>plugin category name</comment>
- <translation>Ogólne</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="306"/>
- <source>Database support</source>
- <comment>plugin category name</comment>
- <translation>Wsparcie baz danych</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="307"/>
- <source>Code formatter</source>
- <comment>plugin category name</comment>
- <translation>Formatowanie kodu</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="308"/>
- <source>Scripting languages</source>
- <comment>plugin category name</comment>
- <translation>Języki skryptowe</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="309"/>
- <source>Exporting</source>
- <comment>plugin category name</comment>
- <translation>Eksportowanie</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="310"/>
- <source>Importing</source>
- <comment>plugin category name</comment>
- <translation>Importowanie</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="311"/>
- <source>Table populating</source>
- <comment>plugin category name</comment>
- <translation>Zaludnianie tabel</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="115"/>
- <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
- <translation>Tabela %1 odwołuje się do tabeli %2, ale definicja klucza obcego nie zostanie zaktualizowane dla definicji nowej tabeli w związku z problemami przy analizowaniu DDL tabeli %3.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="438"/>
- <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
- <translation>Wszystkie kolumny indeksowane przez indeks %1 już nie istnieją. Indeks ten nie będzie odtworzony po modyfikacji tabeli.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="481"/>
- <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
- <translation>Wystąpił problem z poprawnym przetworzeniem wyzwalacza %1. Może on zostać zaktualizowany tylko częściowo i będzie wymagał twojej uwagi.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="528"/>
- <source>Cannot not update trigger %1 according to table %2 modification.</source>
- <translation>Nie można zaktualizować wyzwalacza %1 zgodnie z modyfikacjami tabeli %2.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="708"/>
- <location filename="../tablemodifier.cpp" line="732"/>
- <location filename="../tablemodifier.cpp" line="751"/>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation>Jest problem ze zaktualizowaniem zapytania %1 w wyzwalaczu %2. Jedeno z podzapytań %1, które może odwoływać się do tabeli %3 nie może być poprawnie zmodyfikowane. Ręczna aktualizacja tego wyzwalacza może być niezbędna.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="496"/>
- <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
- <translation>Wszystkie kolumny obsługiwane przez wyzwalacz %1 już nie istnieją. Wyzwalacz ten nie będzie odtworzony po modyfikacji tabeli.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="546"/>
- <source>Cannot not update view %1 according to table %2 modifications.
-The view will remain as it is.</source>
- <translation>Nie można zaktualizować widoku %1 w związku z modyfikacjami tabeli %2.
-Widok pozostanie nienaruszony.</translation>
- </message>
- <message>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation type="obsolete">Jest problem ze zaktualizowaniem zapytania %1 w wyzwalaczu %2. Jedeno z podzapytań SELECT, które może odwoływać się do tabeli %3 nie może być poprawnie zmodyfikowane. Ręczna aktualizacja tego wyzwalacza może być niezbędna.</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="25"/>
- <source>Could not parse DDL of the view to be created. Details: %1</source>
- <translation>Nie udało się przeanalizować DDL widoku do stworzenia. Szczegóły: %1</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="34"/>
- <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
- <translation>Przeanalizowane zapytanie to nie CREATE VIEW, ale: %1</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="82"/>
- <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
- <translation>SQLiteStudio nie było w stanie określić kolumn zwracanych przez nowy widok, w związku z czym nie może określić które wyzwalacze mogą się nie powieść podczas procesu odtwarzania.</translation>
- </message>
- <message>
- <location filename="../db/abstractdb2.h" line="222"/>
- <location filename="../db/abstractdb3.h" line="384"/>
- <source>Could not open database: %1</source>
- <translation>Nie udało się otworzyć bazy danych: %1</translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="328"/>
- <location filename="../db/abstractdb3.h" line="332"/>
- <source>Could not load extension %1: %2</source>
- <translation>Nie udało się załadować rozszerzenia %1: %2</translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="405"/>
- <source>Could not close database: %1</source>
- <translation>Nie udało się zamknąć bazy danych: %1</translation>
- </message>
- <message>
- <location filename="../db/abstractdb2.h" line="833"/>
- <location filename="../db/abstractdb3.h" line="1132"/>
- <source>Result set expired or no row available.</source>
- <translation>Wyniki zapytania są nieaktualne, lub nie ma dostępnych wierszy.</translation>
- </message>
- <message>
- <location filename="../common/utils.cpp" line="1022"/>
- <source>Could not open file &apos;%1&apos; for reading: %2</source>
- <translation>Nie można otworzyż pliku &apos;%1&apos; do odczytu: %2</translation>
- </message>
-</context>
-<context>
- <name>Query</name>
- <message>
- <source>Result set expired or no row available.</source>
- <translation type="obsolete">Wyniki zapytania są nieaktualne, lub nie ma dostępnych wierszy.</translation>
- </message>
-</context>
-<context>
- <name>QueryExecutor</name>
- <message>
- <location filename="../db/queryexecutor.cpp" line="186"/>
- <source>Execution interrupted.</source>
- <translation>Wykonywanie przerwane.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="227"/>
- <source>Database is not open.</source>
- <translation>Baza danych nie jest otwarta.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="235"/>
- <source>Only one query can be executed simultaneously.</source>
- <translation>Tylko jedno zapytanie może być wykonywane w danym momencie.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="339"/>
- <location filename="../db/queryexecutor.cpp" line="618"/>
- <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
- <translation>Wystąpił błąd podczas wykonywania zapytania count(*), przez co stronicowanie danych będzie wyłączone. Szczegóły błędy z bazy danych: %1</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="529"/>
- <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
- <translation>SQLiteStudio nie mogło uzyskać metadanych z zapytania. Nie będzie można edytować wyników zapytania.</translation>
- </message>
-</context>
-<context>
- <name>ScriptingQtDbProxy</name>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
- <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
- <translation>Brak dostępnej bazy danych w bieżącym kontekście, podczas wywoływania komendy QtScript: %1.</translation>
- </message>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
- <source>Error from %1: %2</source>
- <translation>Błąd z %1: %2</translation>
- </message>
-</context>
-<context>
- <name>SqlHistoryModel</name>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="34"/>
- <source>Database</source>
- <comment>sql history header</comment>
- <translation>Baza danych</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="36"/>
- <source>Execution date</source>
- <comment>sql history header</comment>
- <translation>Data wykonania</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="38"/>
- <source>Time spent</source>
- <comment>sql history header</comment>
- <translation>Czas trwania</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="40"/>
- <source>Rows affected</source>
- <comment>sql history header</comment>
- <translation>Liczba wierszy</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="42"/>
- <source>SQL</source>
- <comment>sql history header</comment>
- <translation>SQL</translation>
- </message>
-</context>
-<context>
- <name>UpdateManager</name>
- <message>
- <source>An error occurred while checking for updates: %1.</source>
- <translation type="vanished">Wystąpił błąd podczas sprawdzania aktualizacji: %1</translation>
- </message>
- <message>
- <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
- <translation type="vanished">Nie udało się sprawdzić aktualizacji, ponieważ serwer odpowiedział wiadomością w niepoprawnym formacie. Możesz spokojnie zignorować tą informację.</translation>
- </message>
- <message>
- <source>An error occurred while reading updates metadata: %1.</source>
- <translation type="vanished">Wystąpił błąd podczas odczytu metadanych aktualizacji: %1</translation>
- </message>
- <message>
- <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
- <translation type="vanished">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: &lt;a href=&quot;%1&quot;&gt;Podręcznik użytkownika&lt;/a&gt;.</translation>
- </message>
- <message>
- <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
- <translation type="vanished">Nie udało się stworzyć katalogu tymczasowego w celu pobrania aktualizacji. Aktualizacja została przerwana.</translation>
- </message>
- <message>
- <source>There was no updates to download. Updating aborted.</source>
- <translation type="vanished">Nie znaleziono aktualizacji do pobrania. Aktualizacja przerwana.</translation>
- </message>
- <message>
- <source>Downloading: %1</source>
- <translation type="vanished">Pobieranie: %1</translation>
- </message>
- <message>
- <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
- <translation type="vanished">Nie udało się określić nazwy pliku z URL aktualizacji: %1. Aktualizacja przerwana.</translation>
- </message>
- <message>
- <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
- <translation type="vanished">Nie udało się otworzyć pliku &apos;%1&apos; do zapisu: %2. Aktualizacja przerwana.</translation>
- </message>
- <message>
- <source>Installing updates.</source>
- <translation type="vanished">Instalowanie aktualizacji.</translation>
- </message>
- <message>
- <source>Could not copy current application directory into %1 directory.</source>
- <translation type="vanished">Nie udało się skopiować bieżącego katalogu aplikacji do katalogu %1.</translation>
- </message>
- <message>
- <source>Could not create directory %1.</source>
- <translation type="vanished">Nie udało się stworzyć katalogu %1.</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2.
-Details: %3</source>
- <translation type="vanished">Nie udało się zmienić nazwy katalogu %1 na %2.
-Szczegóły: %3</translation>
- </message>
- <message>
- <source>Cannot not rename directory %1 to %2.
-Details: %3</source>
- <translation type="vanished">Nie można zmienić nazwy katalogu %1 na %2.
-Szczegóły: %3</translation>
- </message>
- <message>
- <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
- <translation type="vanished">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</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
- <translation type="vanished">Nie udało się zmienić nazwy katalogu %1 na %2. Przywrócono originalną wersję SQLiteStudio.</translation>
- </message>
- <message>
- <source>Could not unpack component %1 into %2 directory.</source>
- <translation type="vanished">Nie udało się rozpakować komponentu %1 do katalogu %2.</translation>
- </message>
- <message>
- <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
- <translation type="vanished">Nie udało się znaleźć narzędzia do podnoszenia uprawnień aplikacji, aby uruchomić aktualizację jako administrator. Szukano następujących: %1</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as root: %1</source>
- <translation type="vanished">Nie udało się wykonać ostatnich kroków jako administrator: %1</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as admin: %1</source>
- <translation type="vanished">Nie udało się wykonać ostatnich kroków jako administrator: %1</translation>
- </message>
- <message>
- <source>Cannot create temporary directory for updater.</source>
- <translation type="vanished">Nie można stworzyć tymczasowego katalogu dla aktualizacji.</translation>
- </message>
- <message>
- <source>Cannot create updater script file.</source>
- <translation type="vanished">Nie można utworzyć skryptu aktualizacji.</translation>
- </message>
- <message>
- <source>Updating canceled.</source>
- <translation type="vanished">Aktualizacja wycofana.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator.</source>
- <translation type="vanished">Nie udało się wykonać ostatich kroków aktualizacji jako administrator.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
- <translation type="vanished">Nie udało się wykonać ostatich kroków aktualizacji jako administrator. Przekroczono limit czasu oczekiwania.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
- <translation type="vanished">Nie udało się wykonać ostatich kroków aktualizacji jako administrator. Przekroczono limit czasu oczekiwania.</translation>
- </message>
- <message>
- <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
- <translation type="vanished">Nie udało się wyczyścić katalogu tymczasowego %1. Możesz go usunąć ręcznie w dowolnym momencie.</translation>
- </message>
- <message>
- <source>Could not run new version for continuing update.</source>
- <translation type="vanished">Nie udało się uruchomić nowej wersji w celu kontynuowania aktualizacji.</translation>
- </message>
- <message>
- <source>Package not in tar.gz format, cannot install: %1</source>
- <translation type="vanished">Paczka nie jest w formacie tar.gz, nie można zainstalować: %1</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
- <translation type="vanished">Paczka %1 nie może być zainstalowana, ponieważ nie można przenieść jej do katalogu: %2</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
- <translation type="vanished">Paczka %1 nie może być zainstalowana, ponieważ nie można jej rozpakować: %2</translation>
- </message>
- <message>
- <source>Package not in zip format, cannot install: %1</source>
- <translation type="vanished">Paczka nie jest w formacie zip, nie można zainstalować: %1</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
- <translation type="vanished">Paczka %1 nie może być zainstalowana, ponieważ nie można jej rozpakować do katalogu %2: %3</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
- <translation type="vanished">Paczka %1 nie może być zainstalowana, ponieważ nie można jej rozpakować do katalogu %2</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2.</source>
- <translation type="vanished">Nie udało się zmienić nazwy katalogu %1 na %2.</translation>
- </message>
- <message>
- <source>Could not delete directory %1.</source>
- <translation type="vanished">Nie udało się skasować katalogu %1.</translation>
- </message>
- <message>
- <source>Error executing update command: %1
-Error message: %2</source>
- <translation type="vanished">Błąd podczas wykonywania polecenia aktualizacji: %1
-Treść błędu: %2</translation>
- </message>
- <message>
- <source>An error occurred while downloading updates: %1. Updating aborted.</source>
- <translation type="vanished">Wystąpił błąd podczas pobierania aktualizacji: %1. Aktualizacja przerwana.</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="48"/>
- <source>Updates installer executable is missing.</source>
- <translation>Nie można znaleźć pliku wykonywalnego instalatora aktualizacji.</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="49"/>
- <location filename="../services/updatemanager.cpp" line="68"/>
- <source>Unable to check for updates (%1)</source>
- <translation>Nie można sprawdzić dostępnych aktualizacji (%1)</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="66"/>
- <source>details are unknown</source>
- <translation>szczegóły nieznane</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="81"/>
- <source>Unable to run updater application (%1). Please report this.</source>
- <translation>Nie można uruchomić aplikacji aktualizującej (%1). Proszę to zgłosić.</translation>
- </message>
-</context>
-</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl_PL.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl_PL.ts
new file mode 100644
index 0000000..3d30cbc
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl_PL.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="pl" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Nie można wykonać zapytania na zamkniętej bazie danych.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Błąd podczas dołączania bazy danych %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation>Nie udało się utworzyć pełnego punktu kontrolnego WAL w bazie danych &apos;%1&apos;. Błąd zwrócony z silnika SQLite: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>Nie zdefiniowano bazy danych do wykonywania zapytań.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>Baza danych do wykonywania zapytań nie jest otwarta.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Nie udało się wyłączyć kluczy obcych w bazie. Szczegóły: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Nie udało się rozpocząć transakcji bazy danych. Szczegóły: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Przerwane</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Nie udało się zatwierdzić transakcji bazy danych. Szczegóły: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation>Odnośnik do nowego wiersza</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation>Odnośnik do starego wiersza</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>Nazwa nowej tabeli</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>Nazwa nowego indeksu</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>Nazwa nowego widoku</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>Nazwa nowego wyzwalacza</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>Alias tabeli lub kolumny</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>Nazwa transakcji</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>Nazwa nowej kolumny</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation>Typ danych kolumny</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation>Nazwa ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>Treść błędu</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation>Dowolne słowo</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>Domyślna baza danych</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation>Baza danych obiektów tymczasowych</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Nie można rozpocząć transakcji dla usuwania historii SQL, więc nie można usunąć historii.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Nie można zatwierdzić transakcji dla usuwania historii SQL, więc nie można usunąć historii.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>Nie udało się dodać bazę danych %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>Nie udało się zaktualizować baza danych %1 z powodu błędu: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Plik bazy danych nie istnieje.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>Nie załadowano obsługującej wtyczki.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation>Nie udało się zainicjalizować bazy danych.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>Nie znaleziono odpowiedniej wtyczki sterownika.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>Błąd podczas tworzenia tabeli w docelowej bazie danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation>Nie udało się przeanalizować tabeli.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation>Nie udało się dołączyć bazy danych %1 do bazy danych %2, więc dane tabeli %3 będą skopiowane przez SQLiteStudio jako pośrednika. Ta metoda może być powolna dla dużych tabel, więc proszę o cierpliwość.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation>Błąd podczas copiowania danych tabeli %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation>Błąd podczas kopiowania danych do tabeli %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation>Błąd podczas upuszczania widoku źródłowego %1: %2
+Tabele, indeksy, wyzwalacze i widoki skopiowane do bazy danych %3 pozostaną na miejscu.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation>Błąd podczas tworzenia widoku w docelowej bazie danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation>Błąd podczas tworzenia indeksu w docelowej bazie danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation>Błąd podczas tworzenia wyzwalacza w docelowej bazie danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation>Nie można zanalizować obiektu &apos;%1&apos; w celu przeniesienia lub skopiowania go.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>Nazwa bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>Plik bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>Data wykonania</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>Zmiany</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation>Wtyczka eksportu %1 nie obsługuje exportowania wyników zapytania.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation>Wtyczka exportu %1 nie obsługuje eksportowania tabel.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation>Wtyczka exportu %1 nie obsługuje eksportowania baz danych.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation>Format eksportu %1 nie jest obsługiwany. Obsługiwane formaty to: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>Eksport do schowka przebiegł pomyślnie.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation>Eksport do pliku &apos;%1&apos; przebiegł pomyślnie.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>Export przebiegł pomyślnie.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation>Eksport do pliku %1 nie powiódł się. Plik nie może być otwarty do zapisu.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>Błąd podczas eksportowania wyników zapytania: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation>Błąd podczas liczenia szerokości kolumn danych do eksportu wyników zapytania: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation>Nie udało się przeanalizować %1 w celu wyeksportowania. Element ten zostanie pominięty w wynikach eksportu.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation>Błąd podczas odczytu danych do eksportu z tabeli %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation>Błąd podczas liczenia danych do eksportu z tabeli %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation>Błąd podczas obliczania szerokości kolumn danych do eksportu z tabeli %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation>Niepoprawna liczba argumentów do funkcji &apos;%1&apos;. Oczekiwano %2, a jest %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation>Nie znaleziono funkcji zarejestrowanej w SQLiteStudio: %1 (%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation>Funkcja %1 (%2) została zarejestrowana dla języka %3, ale wtyczka obsługująca ten język nie jest aktualnie załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>Niepoprawne wyrażenie regularne: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>Nie udało się otworzyć pliku %1 do odczytu: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>Nie udało się otworzyć pliku %2 do zapisu: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>Błąd podczas zapisu do pliku %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation>Nieobsługiwany język skryptowy: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation>Nie udało się zainicjalizować kodeka do exportu. Użyty będzie domyślny kodek: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation>Pomyślnie zaimportowano dane do tabeli &apos;%1&apos;. Liczba zaimportowanych wierszy: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation>Wtyczka importu nie dostarczyła żadnych kolumn.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation>Nie udało się wystartować transakcji w celu zaimportowania danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation>Nie udało się zatwierdzić transakcji w celu zaimportowania danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation>Tabela &apos;%1&apos; ma mniej kolumn, niż jest kolumn w danych do importu. Nadmiarowe kolumny zostaną zignorowane.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation>Tabela &apos;%1&apos; ma więcej kolumn, niż jest kolumn w danych do importu. Część kolumn w tabeli będzie pozostawiona pusta.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation>Nie udało się stworzyć tabeli do zaimportowania: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation>Błąd podczas importowania danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>Przerwano.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation>Nie udało się zaimportować wiersza danych numer %1. Wiersz ten został zignorowany. Szczegóły problemu: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>Nie udało się załadować wtyczki %1, ponieważ jest ona w konflikcie z wtyczką %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation>Nie udało się załadować wtyczki %1, ponieważ jej zależność nie została załadowana: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation>Nie udało się załadować wtyczki %1. Szczegóły błędu: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation>Nie udało się załadować wtyczki %1 (błąd podczas inicjalizacji wtyczki).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>maks: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>Stała</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>Stała wartość:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>Słownik</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>Plik słownika</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>Wybierz plik słownika</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>Separator słowa</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>Biały znak</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>Nowa linia</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>Metoda używania słów</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>Uporządkowana</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>Losowa</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>Zaludnianie tabeli &apos;%1&apos; przebiegło pomyślnie.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>Losowa liczba</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>Stały przedrostek</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>Bez predrostka</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>Wartość minimalna</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>Wartość maksymalna</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>Stały przyrostek</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>Brak przyrostka</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>Losowy tekst</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation>Użyj znaków z zestawów:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>Długość minimalna</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation>Litery od a do z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>Litery</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>Liczby od 0 do 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>Liczby</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation>Znak biały, znak tabulacji, znak nowej linii.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>Znak biały</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation>Zawiera wszystkie powyższe, oraz wszystkie pozostałe.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>Binarne</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>Użyj znaków z mojego zestawu:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>Długość maksymalna</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation>Jeśli wpiszesz dany znak kilka razy, będzie on miał większą szansę na wylosowanie.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>Skrypt</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation>Kod inicjalizujący (opcjonalny)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation>Kod dla każdego kroku</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>Język</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>Pomoc</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>Sekwencja</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>Wartość początkowa:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>Krok:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation>Nie udało się rozpocząć transakcji w celu zaludnienia tabeli. Szczegóły błędu: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation>Błąd podczas zaludniania tabeli: %2</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>Nie udało się zatwierdzić transakcji po zaludnieniu tabeli. Szczegóły błędy: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Nie można otworzyż pliku &apos;%1&apos; do odczytu: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation>Nie udało się otworzyć bazy danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation>Wyniki zapytania są nieaktualne, lub nie ma dostępnych wierszy.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation>Nie udało się załadować rozszerzenia %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation>Nie można uruchomić punktu kontrolnego WAL: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation>Nie udało się zamknąć bazy danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation>Nie udało się dołączyć bazy danych %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>Niekompletne zapytanie.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation>Przeciążenie stosu analizatora.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>Błąd składni</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation>Nie udało się otworzyć pliku słownika %1 do odczytu.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation>Plik słownika musi istnieć i musisz mieć prawa do jego odczytu.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation>Wartość maksymalna nie może być mniejsza niż wartość minimalna.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation>Długość maksymalna nie może być mniejsza niż długość minimalna.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation>Zestaw własnych znaków nie może być pusty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation>Nie udało się znaleźć wtyczki obsługującej język skryptowy: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation>Błąd podczas wykonywania kodu inicjalizującego zaludnianie: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation>Błąd podczas wykonywania kodu zaludniania: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation>Wybierz język implementacji.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation>Kod implementacji nie może być pusty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation>Nie znaleziono źródła danych dla kolumny: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation>Nie można ustalić tabeli lub kolumny &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation>Nie udało się zainicjalizować pliku konfiguracyjnego. Wszelkie zmiany w konfiguracji i historia zapytań zostaną utracone po restarcie aplikacji. Nie udało się utworzyć pliku w lokalizacji: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>Ogólne</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>Wsparcie baz danych</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Formatowanie kodu</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Języki skryptowe</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>Eksportowanie</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>Importowanie</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Zaludnianie tabel</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>Tabela %1 odwołuje się do tabeli %2, ale definicja klucza obcego nie zostanie zaktualizowane dla definicji nowej tabeli w związku z problemami przy analizowaniu DDL tabeli %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>Wszystkie kolumny indeksowane przez indeks %1 już nie istnieją. Indeks ten nie będzie odtworzony po modyfikacji tabeli.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation>Wystąpił problem z poprawnym przetworzeniem wyzwalacza %1. Może on zostać zaktualizowany tylko częściowo i będzie wymagał twojej uwagi.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>Wszystkie kolumny obsługiwane przez wyzwalacz %1 już nie istnieją. Wyzwalacz ten nie będzie odtworzony po modyfikacji tabeli.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>Nie można zaktualizować wyzwalacza %1 zgodnie z modyfikacjami tabeli %2.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>Nie można zaktualizować widoku %1 w związku z modyfikacjami tabeli %2.
+Widok pozostanie nienaruszony.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation>Jest problem ze zaktualizowaniem zapytania %1 w wyzwalaczu %2. Jedeno z podzapytań %1, które może odwoływać się do tabeli %3 nie może być poprawnie zmodyfikowane. Ręczna aktualizacja tego wyzwalacza może być niezbędna.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation>Nie udało się przeanalizować DDL widoku do stworzenia. Szczegóły: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation>Przeanalizowane zapytanie to nie CREATE VIEW, ale: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation>SQLiteStudio nie było w stanie określić kolumn zwracanych przez nowy widok, w związku z czym nie może określić które wyzwalacze mogą się nie powieść podczas procesu odtwarzania.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation>Wykonywanie przerwane.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation>Baza danych nie jest otwarta.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>Tylko jedno zapytanie może być wykonywane w danym momencie.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>Wystąpił błąd podczas wykonywania zapytania count(*), przez co stronicowanie danych będzie wyłączone. Szczegóły błędy z bazy danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation>SQLiteStudio nie mogło uzyskać metadanych z zapytania. Nie będzie można edytować wyników zapytania.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation>Brak dostępnej bazy danych w bieżącym kontekście, podczas wywoływania komendy JavaScript: %1.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>Błąd z %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation>Nie można wykonać SQLa, ponieważ aplikacja nie mogła rozpocząć transakcji: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation>Wykonywanie z pliku przerwane. Jakiekolwiek wykonane zapytania zostały wycofane.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Nie można otworzyż pliku &apos;%1&apos; do odczytu: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation>Nie można wykonać SQLa, ponieważ aplikacja nie mogła zatwierdzić transakcji: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation>Zakończono wykonywanie %1 zapytań w %2 sekund(y). %3 nie został wykonany z powodu błędów.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation>Zakończono wykonywanie %1 zapytań w %2 sekund(y).</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation>Nie można wykonać SQL z powodu błędu.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Data wykonania</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Czas trwania</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Liczba wierszy</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation>Nie można sprawdzić aktualizacji (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.qm
deleted file mode 100644
index 95d8136..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.qm
+++ /dev/null
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts
index 8f3404e..78c2853 100644
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_BR.ts
@@ -1,1153 +1,1101 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.1" language="pt_BR">
-<context>
+<TS version="2.1" language="pt-BR" sourcelanguage="en">
+ <context>
<name>AbstractDb</name>
<message>
- <location filename="../db/abstractdb.cpp" line="343"/>
- <location filename="../db/abstractdb.cpp" line="360"/>
- <source>Cannot execute query on closed database.</source>
- <translation type="unfinished">Não é possível executar query em banco de dados fechado.</translation>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Não é possível executar a consulta com o banco de dados fechado.</translation>
</message>
<message>
- <location filename="../db/abstractdb.cpp" line="643"/>
- <source>Error attaching database %1: %2</source>
- <translation type="unfinished"> </translation>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Erro ao anexar banco de dados %1: %2</translation>
</message>
-</context>
-<context>
- <name>BugReporter</name>
<message>
- <source>Invalid login or password</source>
- <translation type="vanished">login ou senha inválido</translation>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation>Falha ao fazer checkpoint WAL cheio no banco de dados &apos;%1&apos;. Erro retornado do mecanismo SQLite: %2</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ChainExecutor</name>
<message>
- <location filename="../db/chainexecutor.cpp" line="37"/>
- <source>The database for executing queries was not defined.</source>
- <comment>chain executor</comment>
- <translation>Não foi especificado banco de dados para execução das consultas. </translation>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>Não foi especificado banco de dados para execução das consultas. </translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="44"/>
- <source>The database for executing queries was not open.</source>
- <comment>chain executor</comment>
- <translation>O banco de dados para execução das consultas não foi aberto.</translation>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>O banco de dados para execução das consultas não foi aberto.</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="54"/>
- <source>Could not disable foreign keys in the database. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Não foi possível desativar as chaves estrangeiras do banco de dados. Detalhes: %1</translation>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Não foi possível desativar as chaves estrangeiras do banco de dados. Detalhes: %1</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="62"/>
- <source>Could not start a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Não foi possível iniciar a transação do banco de dados. Detalhes: %1</translation>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Não foi possível iniciar a transação do banco de dados. Detalhes: %1</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="89"/>
- <source>Interrupted</source>
- <comment>chain executor</comment>
- <translation>Interrompido</translation>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Interrompido</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="151"/>
- <source>Could not commit a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Não foi possível efetuar commit no banco de dados. Detalhes: %1</translation>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Não foi possível efetuar commit no banco de dados. Detalhes: %1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>CompletionHelper</name>
<message>
- <location filename="../completionhelper.cpp" line="196"/>
- <source>New row reference</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation>Nova referência de linha</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="203"/>
- <source>Old row reference</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation>Referência de linha antiga</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="208"/>
- <source>New table name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>Nome da nova tabela</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="211"/>
- <source>New index name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>Nome do novo índice</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="214"/>
- <source>New view name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>Nome da nova visualização</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="217"/>
- <source>New trigger name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>Nome da nova trigger</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="220"/>
- <source>Table or column alias</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>Apelido da tabela ou coluna</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="223"/>
- <source>transaction name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>nome da transação</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="226"/>
- <source>New column name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>Nome da nova coluna</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="229"/>
- <source>Column data type</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation>Tipo de dados de coluna</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="232"/>
- <source>Constraint name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation>Nome da constraint</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="245"/>
- <source>Error message</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>Mensagem de Erro</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="289"/>
- <source>Collation name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation>Qualquer palavra</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="304"/>
- <source>Any word</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>Banco de dados padrão</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="485"/>
- <source>Default database</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation>Banco de dados de objetos temporários</translation>
</message>
- <message>
- <location filename="../completionhelper.cpp" line="486"/>
- <source>Temporary objects database</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
+ </context>
+ <context>
<name>ConfigImpl</name>
<message>
- <location filename="../services/impl/configimpl.cpp" line="863"/>
- <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Não foi possível iniciar a transação do banco de dados para excluir o histórico do SQL. Portanto, ela não será excluída.</translation>
</message>
<message>
- <location filename="../services/impl/configimpl.cpp" line="870"/>
- <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Não foi possível submeter a transação do banco de dados para excluir o histórico do SQL. Portanto, não será excluída.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>DbManagerImpl</name>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
- <source>Could not add database %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>Não foi possível adicionar o banco de dados %1: %2</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="139"/>
- <source>Database %1 could not be updated, because of an error: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>Banco de dados %1 não pode ser atualizado, devido a um erro: %2</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
- <source>Database file doesn&apos;t exist.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Arquivo de banco de dados não existe.</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="357"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="609"/>
- <source>No supporting plugin loaded.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>Nenhum plugin de suporte carregado.</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="527"/>
- <source>Database could not be initialized.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation>Banco de dados não pode ser inicializado.</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="537"/>
- <source>No suitable database driver plugin found.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>Nenhum plugin de driver de base de dados adequado encontrado.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>DbObjectOrganizer</name>
<message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <location filename="../dbobjectorganizer.cpp" line="412"/>
- <source>Error while creating table in target database: %1</source>
- <translation>Erro ao criar tabela no banco de dados: %1</translation>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>Erro ao criar tabela no banco de dados: %1</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <source>Could not parse table.</source>
- <translation>Não foi possível analisar a tabela.</translation>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation>Não foi possível analisar a tabela.</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="426"/>
- <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
- <translation>Banco de dados %1 não pôde ser ligado ao banco de dados %2, de modo que os dados da tabela %3 vão ser copiados com o SQLiteStudio como um mediador. Este metodo pode ser lento para grande tabelas, por favor seja paciente. </translation>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation>Banco de dados %1 não pôde ser ligado ao banco de dados %2, de modo que os dados da tabela %3 vão ser copiados com o SQLiteStudio como um mediador. Este método pode ser lento para grande tabelas, por favor seja paciente. </translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="447"/>
- <source>Error while copying data for table %1: %2</source>
- <translation>Erro ao copiar data para tabela %1:%2</translation>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation>Erro ao copiar dados da tabela %1:%2</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="466"/>
- <location filename="../dbobjectorganizer.cpp" line="473"/>
- <location filename="../dbobjectorganizer.cpp" line="496"/>
- <source>Error while copying data to table %1: %2</source>
- <translation>Erro ao copiar data para tabela %1:%2</translation>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation>Erro ao copiar dados para a tabela %1:%2</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="535"/>
- <source>Error while dropping source view %1: %2
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
Tables, indexes, triggers and views copied to database %3 will remain.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="542"/>
- <source>Error while creating view in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="547"/>
- <source>Error while creating index in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="552"/>
- <source>Error while creating trigger in target database: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Erro ao soltar a visão da fonte %1: %2
+Tabelas, índices, trigger e visualizações copiadas para o banco de dados %3 permanecerão.</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="773"/>
- <location filename="../dbobjectorganizer.cpp" line="780"/>
- <location filename="../dbobjectorganizer.cpp" line="789"/>
- <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation>Erro ao criar a visualização no banco de dados destino: %1</translation>
</message>
-</context>
-<context>
- <name>DbVersionConverter</name>
<message>
- <location filename="../dbversionconverter.cpp" line="932"/>
- <source>Target file exists, but could not be overwritten.</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation>Erro ao criar o índice no banco de dados destino: %1</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="951"/>
- <source>Could not find proper database plugin to create target database.</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation>Erro ao criar gatilho no banco de dados de destino: %1</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="1185"/>
- <source>Error while converting database: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation>Não foi possível analisar o objeto &apos;%1&apos; para mover ou copiar.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>DdlHistoryModel</name>
<message>
- <location filename="../ddlhistorymodel.cpp" line="65"/>
- <source>Database name</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>Nome do banco de dados</translation>
</message>
<message>
- <location filename="../ddlhistorymodel.cpp" line="67"/>
- <source>Database file</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>Arquivo de banco de dados</translation>
</message>
<message>
- <location filename="../ddlhistorymodel.cpp" line="69"/>
- <source>Date of execution</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>Data de execução</translation>
</message>
<message>
- <location filename="../ddlhistorymodel.cpp" line="71"/>
- <source>Changes</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>Alterações</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ExportManager</name>
<message>
- <location filename="../services/exportmanager.cpp" line="72"/>
- <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation>Plugin de exportação %1 não suporta resultados de consulta suprimindo.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="98"/>
- <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation>O plugin %1 de exportação não suporta&apos;tabelas de exportação.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="122"/>
- <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation>Plugin de exportação %1 não suporta resultados de consulta suprimindo.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="155"/>
- <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation>Formato de exportação &apos;%1&apos; não é suportado. Formatos suportados são: %2.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="218"/>
- <source>Export to the clipboard was successful.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>Exportação para área de transferência com sucesso.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="222"/>
- <source>Export to the file &apos;%1&apos; was successful.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation>Exportação para o arquivo &apos;%1&apos; foi bem sucedida.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="224"/>
- <source>Export was successful.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>Exportação bem-sucedida.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="266"/>
- <source>Could not export to file %1. File cannot be open for writting.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation>Não foi possível exportar para o arquivo %1. O arquivo não pode ser aberto para escrita.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ExportWorker</name>
<message>
- <location filename="../exportworker.cpp" line="122"/>
- <source>Error while exporting query results: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>Erro ao exportar os resultados da consulta: %1</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="202"/>
- <source>Error while counting data column width to export from query results: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation>Erro ao contar a largura da coluna de dados para exportar dos resultados da consulta: %1</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="346"/>
- <location filename="../exportworker.cpp" line="404"/>
- <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation>Não foi possível analisar %1 para exportá-lo. Ele será excluído da saída de exportação.</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="608"/>
- <source>Error while reading data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation>Erro ao ler os dados para exportar da tabela %1: %2</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="616"/>
- <source>Error while counting data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation>Erro ao contar os dados a serem exportados da tabela %1: %2</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="632"/>
- <source>Error while counting data column width to export from table %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation>Erro ao contar a largura da coluna de dados para exportar da tabela %1: %2</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>FunctionManagerImpl</name>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="234"/>
- <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation>Número inválido de argumentos para a função &apos;%1&apos;. Esperado %2, mas tem %3.</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
- <source>No such function registered in SQLiteStudio: %1(%2)</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation>Nenhuma função registrada no SQLiteStudio: %1(%2)</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="353"/>
- <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation>A função %1(%2) foi registrada no idioma %3, mas o plugin que suporta essa linguagem não está atualmente carregado.</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="371"/>
- <source>Invalid regular expression pattern: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>Expressão regular inválida: %1</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="390"/>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="423"/>
- <source>Could not open file %1 for reading: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>Não foi possível abrir o arquivo %1 para leitura: %2</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="445"/>
- <source>Could not open file %1 for writting: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>Não foi possível abrir o arquivo %1 para escrita: %2</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="465"/>
- <source>Error while writting to file %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>Erro ao gravar o arquivo %1: %2</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="483"/>
- <source>Unsupported scripting language: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation>Idioma do script não suportado: %1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>GenericExportPlugin</name>
<message>
- <location filename="../plugins/genericexportplugin.cpp" line="20"/>
- <source>Could not initialize text codec for exporting. Using default codec: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation>Não foi possível inicializar o codec de texto para exportação. Usando o codec padrão: %1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ImportManager</name>
<message>
- <location filename="../services/importmanager.cpp" line="96"/>
- <source>Imported data to the table &apos;%1&apos; successfully.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation>Dados importados para a tabela &apos;%1&apos; com sucesso. Número de linhas importadas: %2</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ImportWorker</name>
<message>
- <location filename="../importworker.cpp" line="24"/>
- <source>No columns provided by the import plugin.</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation>Nenhuma coluna fornecida pelo plugin de importação.</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="30"/>
- <source>Could not start transaction in order to import a data: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation>Não foi possível iniciar a transação para importar os dados: %1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="52"/>
- <source>Could not commit transaction for imported data: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation>Não foi possível submeter a transação para dados importados: %1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="100"/>
- <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation>Tabela &apos;%1&apos; tem menos colunas que há nos dados a serem importados. Colunas de dados excessivas serão ignoradas.</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="105"/>
- <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation>Tabela &apos;%1&apos; tem mais colunas que há colunas nos dados a serem importados. Algumas colunas na tabela serão deixadas vazias.</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="124"/>
- <source>Could not create table to import to: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation>Não foi possível criar a tabela para importar para: %1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="177"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Error while importing data: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation>Erro ao importar dados: %1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Interrupted.</source>
- <comment>import process status update</comment>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>Interrompido.</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="172"/>
- <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation>Não foi possível importar a linha de dados número %1. A linha foi ignorada. Detalhes do problema: %2</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PluginManagerImpl</name>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="543"/>
- <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>Não foi possível carregar o plugin %1, porque está em conflito com o plugin %2.</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="554"/>
- <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation>Não foi possível carregar o plugin %1, porque sua dependência não foi carregada: %2.</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="563"/>
- <source>Cannot load plugin %1. Error details: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation>Não foi possível carregar o plugin %1. Detalhes do erro: %2</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="579"/>
- <source>Cannot load plugin %1 (error while initializing plugin).</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation>Não é possível carregar o plugin %1 (erro durante a inicialização do plugin).</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
- <source>min: %1</source>
- <comment>plugin dependency version</comment>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>min: %1</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="732"/>
- <source>max: %1</source>
- <comment>plugin dependency version</comment>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>max: %1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateConstant</name>
<message>
- <location filename="../plugins/populateconstant.cpp" line="10"/>
- <source>Constant</source>
- <comment>populate constant plugin name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>Constante</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateConstantConfig</name>
<message>
- <location filename="../plugins/populateconstant.ui" line="20"/>
- <source>Constant value:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>Valor constante:</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateDictionary</name>
<message>
- <location filename="../plugins/populatedictionary.cpp" line="15"/>
- <source>Dictionary</source>
- <comment>dictionary populating plugin name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>Dicionário</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateDictionaryConfig</name>
<message>
- <location filename="../plugins/populatedictionary.ui" line="20"/>
- <source>Dictionary file</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>Arquivo de dicionário</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="29"/>
- <source>Pick dictionary file</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>Escolher arquivo do dicionário</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="39"/>
- <source>Word separator</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>Separador de palavras</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="45"/>
- <source>Whitespace</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>Espaço em branco</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="58"/>
- <source>Line break</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>Quebra de linha</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="74"/>
- <source>Method of using words</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>Método de uso palavras</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="80"/>
- <source>Ordered</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>Ordenado</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="93"/>
- <source>Randomly</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>Aleatoriamente</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateManager</name>
<message>
- <location filename="../services/populatemanager.cpp" line="89"/>
- <source>Table &apos;%1&apos; populated successfully.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>Tabela &apos;%1&apos; preenchida com sucesso.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandom</name>
<message>
- <location filename="../plugins/populaterandom.cpp" line="12"/>
- <source>Random number</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>Número aleatório</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandomConfig</name>
<message>
- <location filename="../plugins/populaterandom.ui" line="20"/>
- <source>Constant prefix</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>Prefixo da constante</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="26"/>
- <source>No prefix</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>Nenhum prefixo</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="39"/>
- <source>Minimum value</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>Valor mínimo</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="61"/>
- <source>Maximum value</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>Valor máximo</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="86"/>
- <source>Constant suffix</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>Sufixo da constante</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="92"/>
- <source>No suffix</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>Nenhum sufixo</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandomText</name>
<message>
- <location filename="../plugins/populaterandomtext.cpp" line="12"/>
- <source>Random text</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>Texto aleatório</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandomTextConfig</name>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="20"/>
- <source>Use characters from common sets:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation>Usar caracteres de conjuntos comuns:</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="36"/>
- <source>Minimum length</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>Comprimento mínimo</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="64"/>
- <source>Letters from a to z.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation>Letras de a a z.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="67"/>
- <source>Alpha</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>Alfa</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="77"/>
- <source>Numbers from 0 to 9.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>Números de 0 a 9.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="80"/>
- <source>Numeric</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>Numérico</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="90"/>
- <source>A whitespace, a tab and a new line character.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation>Um espaço em branco, uma aba e um novo caractere de linha.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="93"/>
- <source>Whitespace</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>Espaço em branco</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="103"/>
- <source>Includes all above and all others.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation>Inclui todos acima e todos os outros.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="106"/>
- <source>Binary</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>Binário</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="119"/>
- <source>Use characters from my custom set:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>Usar caracteres do meu grupo personalizado:</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="132"/>
- <source>Maximum length</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>Comprimento máximo</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="160"/>
- <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation>Se você digitar um caractere várias vezes, é mais provável que seja usado.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateScript</name>
<message>
- <location filename="../plugins/populatescript.cpp" line="13"/>
- <source>Script</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>Script</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateScriptConfig</name>
<message>
- <location filename="../plugins/populatescript.ui" line="26"/>
- <source>Initialization code (optional)</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation>Código de inicialização (opcional)</translation>
</message>
<message>
- <location filename="../plugins/populatescript.ui" line="45"/>
- <source>Per step code</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation>Código detalhado</translation>
</message>
<message>
- <location filename="../plugins/populatescript.ui" line="70"/>
- <source>Language</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>Idioma</translation>
</message>
<message>
- <location filename="../plugins/populatescript.ui" line="89"/>
- <source>Help</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>Ajuda</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateSequence</name>
<message>
- <location filename="../plugins/populatesequence.cpp" line="13"/>
- <source>Sequence</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>Sequência</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateSequenceConfig</name>
<message>
- <location filename="../plugins/populatesequence.ui" line="33"/>
- <source>Start value:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>Valor inicial:</translation>
</message>
<message>
- <location filename="../plugins/populatesequence.ui" line="56"/>
- <source>Step:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>Etapas:</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateWorker</name>
<message>
- <location filename="../populateworker.cpp" line="23"/>
- <source>Could not start transaction in order to perform table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation>Não foi possível iniciar a transação para realizar o preenchimento da tabela. Detalhes do erro: %1</translation>
</message>
<message>
- <location filename="../populateworker.cpp" line="70"/>
- <source>Error while populating table: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation>Erro ao preencher a tabela: %1</translation>
</message>
<message>
- <location filename="../populateworker.cpp" line="81"/>
- <source>Could not commit transaction after table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>Não foi possível submeter a transação após o preenchimento da tabela. Detalhes de erro: %1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>QObject</name>
<message>
- <location filename="../db/abstractdb2.h" line="222"/>
- <location filename="../db/abstractdb3.h" line="384"/>
- <source>Could not open database: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Não foi possível abrir o arquivo &apos;%1&apos; para leitura: %2</translation>
</message>
<message>
- <location filename="../db/abstractdb2.h" line="833"/>
- <location filename="../db/abstractdb3.h" line="1132"/>
- <source>Result set expired or no row available.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation>Não foi possível abrir o banco de dados: %1</translation>
</message>
<message>
- <location filename="../db/abstractdb3.h" line="328"/>
- <location filename="../db/abstractdb3.h" line="332"/>
- <source>Could not load extension %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation>Conjunto de resultados expirado ou nenhuma linha disponível.</translation>
</message>
<message>
- <location filename="../db/abstractdb3.h" line="405"/>
- <source>Could not close database: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation>Não foi possível carregar a extensão %1: %2</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="138"/>
- <location filename="../dbversionconverter.cpp" line="143"/>
- <location filename="../dbversionconverter.cpp" line="196"/>
- <location filename="../dbversionconverter.cpp" line="243"/>
- <location filename="../dbversionconverter.cpp" line="248"/>
- <location filename="../dbversionconverter.cpp" line="256"/>
- <location filename="../dbversionconverter.cpp" line="336"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation>Não foi possível executar o ponto de verificação do WAL: %1</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="202"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation>Não foi possível fechar o banco de dados: %1</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="429"/>
- <source>Could not parse statement: %1
-Error details: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation>Não foi possível anexar o banco de dados %1: %2</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="440"/>
- <location filename="../dbversionconverter.cpp" line="468"/>
- <location filename="../dbversionconverter.cpp" line="491"/>
- <location filename="../dbversionconverter.cpp" line="529"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
- <translation type="unfinished"></translation>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>Consulta incompleta.</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="497"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
- <translation type="unfinished"></translation>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation>Parser stack overflow (estourado)</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="772"/>
- <source>SQLite %1 does not support current date or time clauses in expressions.</source>
- <translation type="unfinished"></translation>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>Erro de sintaxe</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="775"/>
- <source>SQLite %1 does not support row value clauses in expressions.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation>Não foi possível abrir o arquivo de dicionário %1 para leitura.</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="786"/>
- <location filename="../dbversionconverter.cpp" line="789"/>
- <location filename="../dbversionconverter.cpp" line="800"/>
- <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation>Arquivo de dicionário deve existir e estar legível.</translation>
</message>
<message>
- <location filename="../impl/dbattacherimpl.cpp" line="115"/>
- <source>Could not attach database %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation>O valor máximo não pode ser menor que o valor mínimo.</translation>
</message>
<message>
- <location filename="../parser/parsercontext.cpp" line="108"/>
- <location filename="../parser/parsercontext.cpp" line="110"/>
- <source>Incomplete query.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation>O comprimento máximo não pode ser inferior ao comprimento mínimo.</translation>
</message>
<message>
- <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
- <location filename="../parser/sqlite3_parse.cpp" line="2212"/>
- <source>Parser stack overflow</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation>O conjunto de caracteres personalizado não pode estar vazio.</translation>
</message>
<message>
- <location filename="../parser/sqlite2_parse.cpp" line="4465"/>
- <location filename="../parser/sqlite3_parse.cpp" line="5195"/>
- <source>Syntax error</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation>Não foi possível encontrar o plugin para suportar o idioma do script: %1</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.cpp" line="30"/>
- <source>Could not open dictionary file %1 for reading.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation>Erro ao executar o preenchimento do código inicial: %1</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.cpp" line="91"/>
- <source>Dictionary file must exist and be readable.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation>Erro ao executar o código de execução: %1</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.cpp" line="53"/>
- <source>Maximum value cannot be less than minimum value.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation>Selecionar idioma de implementação.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.cpp" line="77"/>
- <source>Maximum length cannot be less than minimum length.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation>Código de implementação não pode ser vazio.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.cpp" line="88"/>
- <source>Custom character set cannot be empty.</source>
- <translation type="unfinished"></translation>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation>Não foi possível resolver a fonte de dados para a coluna: %1</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="40"/>
- <source>Could not find plugin to support scripting language: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation>Não foi possível resolver a tabela para a coluna &apos;%1&apos;.</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="58"/>
- <source>Error while executing populating initial code: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation>Não foi possível inicializar o arquivo de configuração. Quaisquer alterações de configuração e histórico de consultas serão perdidos após a reinicialização do aplicativo. Não foi possível criar um arquivo nos seguintes locais: %1.</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="80"/>
- <source>Error while executing populating code: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>Objetivo geral</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="112"/>
- <source>Select implementation language.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>Suporte do banco de dados</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="113"/>
- <source>Implementation code cannot be empty.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Formatador de código</translation>
</message>
<message>
- <location filename="../selectresolver.cpp" line="359"/>
- <source>Could not resolve data source for column: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Linguagens dos scripts</translation>
</message>
<message>
- <location filename="../selectresolver.cpp" line="431"/>
- <source>Could not resolve table for column &apos;%1&apos;.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>Exportando</translation>
</message>
<message>
- <location filename="../services/impl/configimpl.cpp" line="768"/>
- <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>Importando</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="305"/>
- <source>General purpose</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Preencher a tabela</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="306"/>
- <source>Database support</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>Tabela %1 é tabela de referência %2, mas a definição de chave estrangeira não será atualizada para uma nova definição de tabela devido a problemas ao analisar DDL da tabela %3.</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="307"/>
- <source>Code formatter</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>Todas as colunas indexadas pelo índice %1 desapareceram. O índice não será recriado após a modificação da tabela.</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="308"/>
- <source>Scripting languages</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation>Há um problema com a trigger %1. Ela pode não ser totalmente atualizada e precisará de sua atenção.</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="309"/>
- <source>Exporting</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>Todas as colunas cobertas pela trigger %1 desapareceram. A trigger não será recriada após a modificação da tabela.</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="310"/>
- <source>Importing</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>Não é possível atualizar trigger %1 de acordo com modificação da tabela %2.</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="311"/>
- <source>Table populating</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>Não é possível atualizar a exibição %1 de acordo com as modificações da tabela %2 .
+A visualização permanecerá como é.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="115"/>
- <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation>Ocorreu um problema ao atualizar uma instrução %1 dentro do gatilho %2 . Uma das %1 substâncias que poderiam referir-se à tabela %3 não pode ser devidamente modificada. A atualização manual da trigger pode ser necessária.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="438"/>
- <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation>Não foi possível analisar DDL da view a ser criada. Detalhes: %1</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="481"/>
- <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
- <translation type="unfinished"></translation>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation>A consulta analisada não é CREATE VIEW. É: %1</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="528"/>
- <source>Cannot not update trigger %1 according to table %2 modification.</source>
- <translation type="unfinished"></translation>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation>O SQLiteStudio não conseguiu resolver colunas retornadas pela nova visualização Portanto, ele não é capaz de dizer quais trigger podem falhar durante o processo de recriação.</translation>
</message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
<message>
- <location filename="../tablemodifier.cpp" line="708"/>
- <location filename="../tablemodifier.cpp" line="732"/>
- <location filename="../tablemodifier.cpp" line="751"/>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation>Execução interrompida.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="496"/>
- <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation>Banco de dados não está aberto.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="546"/>
- <source>Cannot not update view %1 according to table %2 modifications.
-The view will remain as it is.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>Apenas uma consulta pode ser executada simultaneamente.</translation>
</message>
<message>
- <location filename="../viewmodifier.cpp" line="25"/>
- <source>Could not parse DDL of the view to be created. Details: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>Ocorreu um erro ao executar a função count(*), desta forma a paginação de dados será desabilitada. Detalhes de erro do banco de dados: %1</translation>
</message>
<message>
- <location filename="../viewmodifier.cpp" line="34"/>
- <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation>SQLiteStudio não pôde extrair os metadados da consulta. Os resultados obtidos não serão editáveis.</translation>
</message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
<message>
- <location filename="../viewmodifier.cpp" line="82"/>
- <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation>Nenhum banco de dados disponível, enquanto rodando JavaScript %1.</translation>
</message>
<message>
- <location filename="../common/utils.cpp" line="1022"/>
- <source>Could not open file &apos;%1&apos; for reading: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>Erro de %1: %2</translation>
</message>
-</context>
-<context>
- <name>QueryExecutor</name>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
<message>
- <location filename="../db/queryexecutor.cpp" line="186"/>
- <source>Execution interrupted.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation>Não foi possível executar SQL, porque a aplicação falhou ao iniciar a transação: %1</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="227"/>
- <source>Database is not open.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation>Execução do arquivo cancelada. Quaisquer consultas executadas até agora foram desfeitas.</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="235"/>
- <source>Only one query can be executed simultaneously.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Não foi possível abrir o arquivo &apos;%1&apos; para leitura: %2</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="339"/>
- <location filename="../db/queryexecutor.cpp" line="618"/>
- <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation>Não foi possível executar SQL, porque o aplicativo falhou ao confirmar a transação: %1</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="529"/>
- <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation>Concluiu a execução de consultas %1 em %2 segundos. %3 não executado devido a erros.</translation>
</message>
-</context>
-<context>
- <name>ScriptingQtDbProxy</name>
<message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
- <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation>Terminou a consulta %1 em %2 segundos.</translation>
</message>
<message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
- <source>Error from %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation>Não foi possível executar SQL devido a um erro.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>SqlHistoryModel</name>
<message>
- <location filename="../sqlhistorymodel.cpp" line="34"/>
- <source>Database</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>Banco de dados</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="36"/>
- <source>Execution date</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Data de execução</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="38"/>
- <source>Time spent</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Tempo gasto</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="40"/>
- <source>Rows affected</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Linhas afetadas</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="42"/>
- <source>SQL</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>UpdateManager</name>
<message>
- <location filename="../services/updatemanager.cpp" line="48"/>
- <source>Updates installer executable is missing.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="49"/>
- <location filename="../services/updatemanager.cpp" line="68"/>
- <source>Unable to check for updates (%1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="66"/>
- <source>details are unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="81"/>
- <source>Unable to run updater application (%1). Please report this.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation>Não foi possível verificar se há atualizações (%1).</translation>
</message>
-</context>
+ </context>
</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_PT.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_PT.ts
new file mode 100644
index 0000000..bdc50f6
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pt_PT.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="pt-PT" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ro_RO.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ro_RO.qm
deleted file mode 100644
index 2856eb9..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ro_RO.qm
+++ /dev/null
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ro_RO.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ro_RO.ts
index 744cb0c..5a793f5 100644
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ro_RO.ts
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ro_RO.ts
@@ -1,1146 +1,1101 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.1" language="ro_RO">
-<context>
+<TS version="2.1" language="ro" sourcelanguage="en">
+ <context>
<name>AbstractDb</name>
<message>
- <location filename="../db/abstractdb.cpp" line="343"/>
- <location filename="../db/abstractdb.cpp" line="360"/>
- <source>Cannot execute query on closed database.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
</message>
<message>
- <location filename="../db/abstractdb.cpp" line="643"/>
- <source>Error attaching database %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
</message>
-</context>
-<context>
- <name>ChainExecutor</name>
<message>
- <location filename="../db/chainexecutor.cpp" line="37"/>
- <source>The database for executing queries was not defined.</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
</message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
<message>
- <location filename="../db/chainexecutor.cpp" line="44"/>
- <source>The database for executing queries was not open.</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="54"/>
- <source>Could not disable foreign keys in the database. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="62"/>
- <source>Could not start a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="89"/>
- <source>Interrupted</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="151"/>
- <source>Could not commit a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
</message>
-</context>
-<context>
- <name>CompletionHelper</name>
<message>
- <location filename="../completionhelper.cpp" line="196"/>
- <source>New row reference</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
</message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
<message>
- <location filename="../completionhelper.cpp" line="203"/>
- <source>Old row reference</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="208"/>
- <source>New table name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="211"/>
- <source>New index name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="214"/>
- <source>New view name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="217"/>
- <source>New trigger name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="220"/>
- <source>Table or column alias</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="223"/>
- <source>transaction name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="226"/>
- <source>New column name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="229"/>
- <source>Column data type</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="232"/>
- <source>Constraint name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="245"/>
- <source>Error message</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="289"/>
- <source>Collation name</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="304"/>
- <source>Any word</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="485"/>
- <source>Default database</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="486"/>
- <source>Temporary objects database</source>
- <translation type="unfinished"></translation>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ConfigImpl</name>
<message>
- <location filename="../services/impl/configimpl.cpp" line="863"/>
- <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
</message>
<message>
- <location filename="../services/impl/configimpl.cpp" line="870"/>
- <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>DbManagerImpl</name>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
- <source>Could not add database %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="139"/>
- <source>Database %1 could not be updated, because of an error: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
- <source>Database file doesn&apos;t exist.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="357"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="609"/>
- <source>No supporting plugin loaded.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="527"/>
- <source>Database could not be initialized.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="537"/>
- <source>No suitable database driver plugin found.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>DbObjectOrganizer</name>
<message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <location filename="../dbobjectorganizer.cpp" line="412"/>
- <source>Error while creating table in target database: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <source>Could not parse table.</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="426"/>
- <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="447"/>
- <source>Error while copying data for table %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="466"/>
- <location filename="../dbobjectorganizer.cpp" line="473"/>
- <location filename="../dbobjectorganizer.cpp" line="496"/>
- <source>Error while copying data to table %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="535"/>
- <source>Error while dropping source view %1: %2
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
Tables, indexes, triggers and views copied to database %3 will remain.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="542"/>
- <source>Error while creating view in target database: %1</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="547"/>
- <source>Error while creating index in target database: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="552"/>
- <source>Error while creating trigger in target database: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="773"/>
- <location filename="../dbobjectorganizer.cpp" line="780"/>
- <location filename="../dbobjectorganizer.cpp" line="789"/>
- <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
</message>
-</context>
-<context>
- <name>DbVersionConverter</name>
<message>
- <location filename="../dbversionconverter.cpp" line="932"/>
- <source>Target file exists, but could not be overwritten.</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
</message>
- <message>
- <location filename="../dbversionconverter.cpp" line="951"/>
- <source>Could not find proper database plugin to create target database.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="1185"/>
- <source>Error while converting database: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
+ </context>
+ <context>
<name>DdlHistoryModel</name>
<message>
- <location filename="../ddlhistorymodel.cpp" line="65"/>
- <source>Database name</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
</message>
<message>
- <location filename="../ddlhistorymodel.cpp" line="67"/>
- <source>Database file</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
</message>
<message>
- <location filename="../ddlhistorymodel.cpp" line="69"/>
- <source>Date of execution</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
</message>
<message>
- <location filename="../ddlhistorymodel.cpp" line="71"/>
- <source>Changes</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ExportManager</name>
<message>
- <location filename="../services/exportmanager.cpp" line="72"/>
- <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="98"/>
- <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="122"/>
- <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="155"/>
- <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="218"/>
- <source>Export to the clipboard was successful.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="222"/>
- <source>Export to the file &apos;%1&apos; was successful.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="224"/>
- <source>Export was successful.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="266"/>
- <source>Could not export to file %1. File cannot be open for writting.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ExportWorker</name>
<message>
- <location filename="../exportworker.cpp" line="122"/>
- <source>Error while exporting query results: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="202"/>
- <source>Error while counting data column width to export from query results: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="346"/>
- <location filename="../exportworker.cpp" line="404"/>
- <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="608"/>
- <source>Error while reading data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="616"/>
- <source>Error while counting data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="632"/>
- <source>Error while counting data column width to export from table %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>FunctionManagerImpl</name>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="234"/>
- <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
- <source>No such function registered in SQLiteStudio: %1(%2)</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="353"/>
- <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="371"/>
- <source>Invalid regular expression pattern: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="390"/>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="423"/>
- <source>Could not open file %1 for reading: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="445"/>
- <source>Could not open file %1 for writting: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="465"/>
- <source>Error while writting to file %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="483"/>
- <source>Unsupported scripting language: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>GenericExportPlugin</name>
<message>
- <location filename="../plugins/genericexportplugin.cpp" line="20"/>
- <source>Could not initialize text codec for exporting. Using default codec: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ImportManager</name>
<message>
- <location filename="../services/importmanager.cpp" line="96"/>
- <source>Imported data to the table &apos;%1&apos; successfully.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ImportWorker</name>
<message>
- <location filename="../importworker.cpp" line="24"/>
- <source>No columns provided by the import plugin.</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="30"/>
- <source>Could not start transaction in order to import a data: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="52"/>
- <source>Could not commit transaction for imported data: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="100"/>
- <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="105"/>
- <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="124"/>
- <source>Could not create table to import to: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="177"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Error while importing data: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Interrupted.</source>
- <comment>import process status update</comment>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="172"/>
- <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PluginManagerImpl</name>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="543"/>
- <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="554"/>
- <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="563"/>
- <source>Cannot load plugin %1. Error details: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="579"/>
- <source>Cannot load plugin %1 (error while initializing plugin).</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
- <source>min: %1</source>
- <comment>plugin dependency version</comment>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="732"/>
- <source>max: %1</source>
- <comment>plugin dependency version</comment>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateConstant</name>
<message>
- <location filename="../plugins/populateconstant.cpp" line="10"/>
- <source>Constant</source>
- <comment>populate constant plugin name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateConstantConfig</name>
<message>
- <location filename="../plugins/populateconstant.ui" line="20"/>
- <source>Constant value:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateDictionary</name>
<message>
- <location filename="../plugins/populatedictionary.cpp" line="15"/>
- <source>Dictionary</source>
- <comment>dictionary populating plugin name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateDictionaryConfig</name>
<message>
- <location filename="../plugins/populatedictionary.ui" line="20"/>
- <source>Dictionary file</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="29"/>
- <source>Pick dictionary file</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="39"/>
- <source>Word separator</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="45"/>
- <source>Whitespace</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="58"/>
- <source>Line break</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="74"/>
- <source>Method of using words</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="80"/>
- <source>Ordered</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="93"/>
- <source>Randomly</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateManager</name>
<message>
- <location filename="../services/populatemanager.cpp" line="89"/>
- <source>Table &apos;%1&apos; populated successfully.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandom</name>
<message>
- <location filename="../plugins/populaterandom.cpp" line="12"/>
- <source>Random number</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandomConfig</name>
<message>
- <location filename="../plugins/populaterandom.ui" line="20"/>
- <source>Constant prefix</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="26"/>
- <source>No prefix</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="39"/>
- <source>Minimum value</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="61"/>
- <source>Maximum value</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="86"/>
- <source>Constant suffix</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="92"/>
- <source>No suffix</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandomText</name>
<message>
- <location filename="../plugins/populaterandomtext.cpp" line="12"/>
- <source>Random text</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandomTextConfig</name>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="20"/>
- <source>Use characters from common sets:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="36"/>
- <source>Minimum length</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="64"/>
- <source>Letters from a to z.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="67"/>
- <source>Alpha</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="77"/>
- <source>Numbers from 0 to 9.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="80"/>
- <source>Numeric</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="90"/>
- <source>A whitespace, a tab and a new line character.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="93"/>
- <source>Whitespace</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="103"/>
- <source>Includes all above and all others.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="106"/>
- <source>Binary</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="119"/>
- <source>Use characters from my custom set:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="132"/>
- <source>Maximum length</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="160"/>
- <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateScript</name>
<message>
- <location filename="../plugins/populatescript.cpp" line="13"/>
- <source>Script</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateScriptConfig</name>
<message>
- <location filename="../plugins/populatescript.ui" line="26"/>
- <source>Initialization code (optional)</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
</message>
<message>
- <location filename="../plugins/populatescript.ui" line="45"/>
- <source>Per step code</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
</message>
<message>
- <location filename="../plugins/populatescript.ui" line="70"/>
- <source>Language</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
</message>
<message>
- <location filename="../plugins/populatescript.ui" line="89"/>
- <source>Help</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateSequence</name>
<message>
- <location filename="../plugins/populatesequence.cpp" line="13"/>
- <source>Sequence</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateSequenceConfig</name>
<message>
- <location filename="../plugins/populatesequence.ui" line="33"/>
- <source>Start value:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
</message>
<message>
- <location filename="../plugins/populatesequence.ui" line="56"/>
- <source>Step:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateWorker</name>
<message>
- <location filename="../populateworker.cpp" line="23"/>
- <source>Could not start transaction in order to perform table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
</message>
<message>
- <location filename="../populateworker.cpp" line="70"/>
- <source>Error while populating table: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
</message>
<message>
- <location filename="../populateworker.cpp" line="81"/>
- <source>Could not commit transaction after table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>QObject</name>
<message>
- <location filename="../db/abstractdb2.h" line="222"/>
- <location filename="../db/abstractdb3.h" line="384"/>
- <source>Could not open database: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
</message>
<message>
- <location filename="../db/abstractdb2.h" line="833"/>
- <location filename="../db/abstractdb3.h" line="1132"/>
- <source>Result set expired or no row available.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
</message>
<message>
- <location filename="../db/abstractdb3.h" line="328"/>
- <location filename="../db/abstractdb3.h" line="332"/>
- <source>Could not load extension %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
</message>
<message>
- <location filename="../db/abstractdb3.h" line="405"/>
- <source>Could not close database: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="138"/>
- <location filename="../dbversionconverter.cpp" line="143"/>
- <location filename="../dbversionconverter.cpp" line="196"/>
- <location filename="../dbversionconverter.cpp" line="243"/>
- <location filename="../dbversionconverter.cpp" line="248"/>
- <location filename="../dbversionconverter.cpp" line="256"/>
- <location filename="../dbversionconverter.cpp" line="336"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="202"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="429"/>
- <source>Could not parse statement: %1
-Error details: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="440"/>
- <location filename="../dbversionconverter.cpp" line="468"/>
- <location filename="../dbversionconverter.cpp" line="491"/>
- <location filename="../dbversionconverter.cpp" line="529"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
- <translation type="unfinished"></translation>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="497"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
- <translation type="unfinished"></translation>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="772"/>
- <source>SQLite %1 does not support current date or time clauses in expressions.</source>
- <translation type="unfinished"></translation>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="775"/>
- <source>SQLite %1 does not support row value clauses in expressions.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="786"/>
- <location filename="../dbversionconverter.cpp" line="789"/>
- <location filename="../dbversionconverter.cpp" line="800"/>
- <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
</message>
<message>
- <location filename="../impl/dbattacherimpl.cpp" line="115"/>
- <source>Could not attach database %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
</message>
<message>
- <location filename="../parser/parsercontext.cpp" line="108"/>
- <location filename="../parser/parsercontext.cpp" line="110"/>
- <source>Incomplete query.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
</message>
<message>
- <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
- <location filename="../parser/sqlite3_parse.cpp" line="2212"/>
- <source>Parser stack overflow</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
</message>
<message>
- <location filename="../parser/sqlite2_parse.cpp" line="4465"/>
- <location filename="../parser/sqlite3_parse.cpp" line="5195"/>
- <source>Syntax error</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.cpp" line="30"/>
- <source>Could not open dictionary file %1 for reading.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.cpp" line="91"/>
- <source>Dictionary file must exist and be readable.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.cpp" line="53"/>
- <source>Maximum value cannot be less than minimum value.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.cpp" line="77"/>
- <source>Maximum length cannot be less than minimum length.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.cpp" line="88"/>
- <source>Custom character set cannot be empty.</source>
- <translation type="unfinished"></translation>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="40"/>
- <source>Could not find plugin to support scripting language: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="58"/>
- <source>Error while executing populating initial code: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="80"/>
- <source>Error while executing populating code: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="112"/>
- <source>Select implementation language.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="113"/>
- <source>Implementation code cannot be empty.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
</message>
<message>
- <location filename="../selectresolver.cpp" line="359"/>
- <source>Could not resolve data source for column: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
</message>
<message>
- <location filename="../selectresolver.cpp" line="431"/>
- <source>Could not resolve table for column &apos;%1&apos;.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
</message>
<message>
- <location filename="../services/impl/configimpl.cpp" line="768"/>
- <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="305"/>
- <source>General purpose</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="306"/>
- <source>Database support</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="307"/>
- <source>Code formatter</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="308"/>
- <source>Scripting languages</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="309"/>
- <source>Exporting</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="310"/>
- <source>Importing</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="311"/>
- <source>Table populating</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="115"/>
- <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="438"/>
- <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="481"/>
- <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
- <translation type="unfinished"></translation>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="496"/>
- <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
</message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
<message>
- <location filename="../tablemodifier.cpp" line="528"/>
- <source>Cannot not update trigger %1 according to table %2 modification.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="546"/>
- <source>Cannot not update view %1 according to table %2 modifications.
-The view will remain as it is.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="708"/>
- <location filename="../tablemodifier.cpp" line="732"/>
- <location filename="../tablemodifier.cpp" line="751"/>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
</message>
<message>
- <location filename="../viewmodifier.cpp" line="25"/>
- <source>Could not parse DDL of the view to be created. Details: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
</message>
<message>
- <location filename="../viewmodifier.cpp" line="34"/>
- <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
</message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
<message>
- <location filename="../viewmodifier.cpp" line="82"/>
- <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
</message>
<message>
- <location filename="../common/utils.cpp" line="1022"/>
- <source>Could not open file &apos;%1&apos; for reading: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
</message>
-</context>
-<context>
- <name>QueryExecutor</name>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
<message>
- <location filename="../db/queryexecutor.cpp" line="186"/>
- <source>Execution interrupted.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="227"/>
- <source>Database is not open.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="235"/>
- <source>Only one query can be executed simultaneously.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="339"/>
- <location filename="../db/queryexecutor.cpp" line="618"/>
- <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="529"/>
- <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
</message>
-</context>
-<context>
- <name>ScriptingQtDbProxy</name>
<message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
- <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
</message>
<message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
- <source>Error from %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>SqlHistoryModel</name>
<message>
- <location filename="../sqlhistorymodel.cpp" line="34"/>
- <source>Database</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="36"/>
- <source>Execution date</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="38"/>
- <source>Time spent</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="40"/>
- <source>Rows affected</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="42"/>
- <source>SQL</source>
- <comment>sql history header</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>UpdateManager</name>
<message>
- <location filename="../services/updatemanager.cpp" line="48"/>
- <source>Updates installer executable is missing.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="49"/>
- <location filename="../services/updatemanager.cpp" line="68"/>
- <source>Unable to check for updates (%1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="66"/>
- <source>details are unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="81"/>
- <source>Unable to run updater application (%1). Please report this.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
</message>
-</context>
+ </context>
</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.qm
deleted file mode 100644
index 55d59ab..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.qm
+++ /dev/null
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts
deleted file mode 100644
index 956c7f0..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru.ts
+++ /dev/null
@@ -1,1318 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="ru_RU">
-<context>
- <name>AbstractDb</name>
- <message>
- <location filename="../db/abstractdb.cpp" line="343"/>
- <location filename="../db/abstractdb.cpp" line="360"/>
- <source>Cannot execute query on closed database.</source>
- <translation>Невозможно выполнить запрос при закрытой базе данных.</translation>
- </message>
- <message>
- <location filename="../db/abstractdb.cpp" line="643"/>
- <source>Error attaching database %1: %2</source>
- <translation>Ошибка во время присоединения базы данных %1: %2</translation>
- </message>
-</context>
-<context>
- <name>BugReporter</name>
- <message>
- <source>Invalid login or password</source>
- <translation>Неправильный логин или пароль</translation>
- </message>
-</context>
-<context>
- <name>ChainExecutor</name>
- <message>
- <location filename="../db/chainexecutor.cpp" line="37"/>
- <source>The database for executing queries was not defined.</source>
- <comment>chain executor</comment>
- <translation>Не указана база данных для выполнения запросов.</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="44"/>
- <source>The database for executing queries was not open.</source>
- <comment>chain executor</comment>
- <translation>Не открыта база данных для выполнения запросов.</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="54"/>
- <source>Could not disable foreign keys in the database. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Невозможно отключить внешние ключи в базе данных. Подробности: %1</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="62"/>
- <source>Could not start a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Невозможно начать транзакцию. Подробности: %1</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="89"/>
- <source>Interrupted</source>
- <comment>chain executor</comment>
- <translation>Прервано</translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="151"/>
- <source>Could not commit a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>Невозможно завершить транзакцию. Подробности: %1</translation>
- </message>
-</context>
-<context>
- <name>CompletionHelper</name>
- <message>
- <location filename="../completionhelper.cpp" line="196"/>
- <source>New row reference</source>
- <translation>Новая ссылка на строку</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="203"/>
- <source>Old row reference</source>
- <translation>Старая ссылка на строку</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="208"/>
- <source>New table name</source>
- <translation>Новое имя таблицы</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="211"/>
- <source>New index name</source>
- <translation>Новое имя индекса</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="214"/>
- <source>New view name</source>
- <translation></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="217"/>
- <source>New trigger name</source>
- <translation>Новое имя триггера</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="220"/>
- <source>Table or column alias</source>
- <translation>Псевдоним таблицы или столбца</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="223"/>
- <source>transaction name</source>
- <translation>имя транзакции</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="226"/>
- <source>New column name</source>
- <translation>Новое имя столбца</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="229"/>
- <source>Column data type</source>
- <translation>Тип данных столбца</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="232"/>
- <source>Constraint name</source>
- <translation>Имя ограничения</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="245"/>
- <source>Error message</source>
- <translation>Сообщение об ошибке</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="289"/>
- <source>Collation name</source>
- <translation>Имя сравнения</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="304"/>
- <source>Any word</source>
- <translation>Любое слово</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="485"/>
- <source>Default database</source>
- <translation>База данных по умолчанию</translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="486"/>
- <source>Temporary objects database</source>
- <translation>База данных временных объектов</translation>
- </message>
-</context>
-<context>
- <name>ConfigImpl</name>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="863"/>
- <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation>Невозможно начать транзакцию для удаления истории SQL, поэтому она не удалена.</translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="870"/>
- <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation>Невозможно завершить транзакцию для удаления истории SQL, поэтому она не удалена.</translation>
- </message>
-</context>
-<context>
- <name>DbManagerImpl</name>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
- <source>Could not add database %1: %2</source>
- <translation>Не удалось добавить базу данных %1: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="139"/>
- <source>Database %1 could not be updated, because of an error: %2</source>
- <translation>Невозможно обновить базу данных %1 из-за ошибки: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
- <source>Database file doesn&apos;t exist.</source>
- <translation>Файл базы данных не существует.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="357"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="609"/>
- <source>No supporting plugin loaded.</source>
- <translatorcomment>Unclear error string. Checking the source didn&apos;t help.</translatorcomment>
- <translation>Модуль поддержки не загружен.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="527"/>
- <source>Database could not be initialized.</source>
- <translation>Невозможно инициализировать базу данных.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="537"/>
- <source>No suitable database driver plugin found.</source>
- <translation>Не найден подходящий драйвер базы данных.</translation>
- </message>
-</context>
-<context>
- <name>DbObjectOrganizer</name>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <location filename="../dbobjectorganizer.cpp" line="412"/>
- <source>Error while creating table in target database: %1</source>
- <translation>Ошибка при создании таблицы в целевой базе данных: %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <source>Could not parse table.</source>
- <translation>Невозможно проанализировать структуру таблицы.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="426"/>
- <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
- <translation>Невозможно присоединить базу данных %1 к базе данных %2, поэтому данные таблицы %3 будут скопированы при посредничестве SQLiteStudio. Этот метод может быть медленным для больших таблиц, так что наберитесь терпения.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="447"/>
- <source>Error while copying data for table %1: %2</source>
- <translation>Ошибка при копировании данных из таблицы %1: %2</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="466"/>
- <location filename="../dbobjectorganizer.cpp" line="473"/>
- <location filename="../dbobjectorganizer.cpp" line="496"/>
- <source>Error while copying data to table %1: %2</source>
- <translation>Ошибка при копировании данных в таблицу %1: %2</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="535"/>
- <source>Error while dropping source view %1: %2
-Tables, indexes, triggers and views copied to database %3 will remain.</source>
- <translation>Ошибка при удалении исходного представления %1: %2
-Таблицы, индексы, триггеры и представления, скопированные в базу данных %3, сохранятся.</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="542"/>
- <source>Error while creating view in target database: %1</source>
- <translation>Ошибка при создании представления в целевой базе данных: %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="547"/>
- <source>Error while creating index in target database: %1</source>
- <translation>Ошибка при создании индекса в целевой базе данных: %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="552"/>
- <source>Error while creating trigger in target database: %1</source>
- <translation>Ошибка при создании триггера в целевой базе данных: %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="773"/>
- <location filename="../dbobjectorganizer.cpp" line="780"/>
- <location filename="../dbobjectorganizer.cpp" line="789"/>
- <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
- <translation>Невозможно проанализировать объект &apos;%1&apos; для его перемещения либо копирования.</translation>
- </message>
-</context>
-<context>
- <name>DbVersionConverter</name>
- <message>
- <location filename="../dbversionconverter.cpp" line="932"/>
- <source>Target file exists, but could not be overwritten.</source>
- <translation>Целевой файл существует, но не может быть перезаписан.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="951"/>
- <source>Could not find proper database plugin to create target database.</source>
- <translation>Невозможно найти подходящий модуль для создания целевой базы данных.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="1185"/>
- <source>Error while converting database: %1</source>
- <translation>Ошибка при конвертации базы данных: %1</translation>
- </message>
-</context>
-<context>
- <name>DdlHistoryModel</name>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="65"/>
- <source>Database name</source>
- <comment>ddl history header</comment>
- <translation>Имя базы данных</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="67"/>
- <source>Database file</source>
- <comment>ddl history header</comment>
- <translation>Файл базы данных</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="69"/>
- <source>Date of execution</source>
- <comment>ddl history header</comment>
- <translation>Дата выполнения</translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="71"/>
- <source>Changes</source>
- <comment>ddl history header</comment>
- <translation>Изменения</translation>
- </message>
-</context>
-<context>
- <name>ExportManager</name>
- <message>
- <location filename="../services/exportmanager.cpp" line="72"/>
- <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
- <translation>Модуль экспорта %1 не поддерживает экспорт результатов запроса.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="98"/>
- <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
- <translation>Модуль экспорта %1 не поддерживает экспорт таблиц.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="122"/>
- <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
- <translation>Модуль экспорта %1 не поддерживает экспорт баз данных.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="155"/>
- <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
- <translation>Формат экспорта %1 не поддерживается. Поддерживаемые форматы: %2</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="218"/>
- <source>Export to the clipboard was successful.</source>
- <translation>Экспорт в буфер обмена успешно выполнен.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="222"/>
- <source>Export to the file &apos;%1&apos; was successful.</source>
- <translation>Экспорт в файл %1 успешно выполнен.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="224"/>
- <source>Export was successful.</source>
- <translation>Экспорт успешно выполнен.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="266"/>
- <source>Could not export to file %1. File cannot be open for writting.</source>
- <translation>Невозможно выполнить экспорт в файл %1. Не удалось открыть файл для записи.</translation>
- </message>
-</context>
-<context>
- <name>ExportWorker</name>
- <message>
- <location filename="../exportworker.cpp" line="122"/>
- <source>Error while exporting query results: %1</source>
- <translation>Ошибка при экспорте результатов запроса: %1</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="202"/>
- <source>Error while counting data column width to export from query results: %1</source>
- <translation>Ошибка при подсчёте ширины столбца данных для экспорта результатов запроса: %1</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="346"/>
- <location filename="../exportworker.cpp" line="404"/>
- <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
- <translation>Невозможно проанализировать структуру %1. Данный объект будет исключён при выполнении экспорта.</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="608"/>
- <source>Error while reading data to export from table %1: %2</source>
- <translation>Ошибка при считывании данных для экспорта из таблицы %1: %2</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="616"/>
- <source>Error while counting data to export from table %1: %2</source>
- <translation>Ошибка при подсчёте количества данных для экспорта из таблицы %1: %2</translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="632"/>
- <source>Error while counting data column width to export from table %1: %2</source>
- <translation>Ошибка при подсчёте ширины столбца данных для экспорта из таблицы %1: %2</translation>
- </message>
-</context>
-<context>
- <name>FunctionManagerImpl</name>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="234"/>
- <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
- <translation>Неверное количество аргументов для функции &apos;%1&apos;. Ожидаемое количество: %2, передано: %3.</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
- <source>No such function registered in SQLiteStudio: %1(%2)</source>
- <translation>Функция не зарегистрирована в SQLiteStudio: %1(%2)</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="353"/>
- <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
- <translation>Функция %1(%2) зарегистрирована для языка %3, однако модуль поддержки этого языка на данный момент не загружен.</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="371"/>
- <source>Invalid regular expression pattern: %1</source>
- <translation>Неверный шаблон регулярного выражения: %1</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="390"/>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="423"/>
- <source>Could not open file %1 for reading: %2</source>
- <translation>Невозможно открыть файл %1 для чтения: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="445"/>
- <source>Could not open file %1 for writting: %2</source>
- <translation>Невозможно открыть файл %1 для записи: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="465"/>
- <source>Error while writting to file %1: %2</source>
- <translation>Ошибка при записи в файл %1: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="483"/>
- <source>Unsupported scripting language: %1</source>
- <translation>Неподдерживаемый скриптовый язык: %1</translation>
- </message>
-</context>
-<context>
- <name>GenericExportPlugin</name>
- <message>
- <location filename="../plugins/genericexportplugin.cpp" line="20"/>
- <source>Could not initialize text codec for exporting. Using default codec: %1</source>
- <translation>Невозможно инициализировать текстовый кодек для экспорта. Используется кодек по умолчанию: %1</translation>
- </message>
-</context>
-<context>
- <name>ImportManager</name>
- <message>
- <location filename="../services/importmanager.cpp" line="96"/>
- <source>Imported data to the table &apos;%1&apos; successfully.</source>
- <translation>Импорт данных в таблицу &apos;%1&apos; выполнен успешно.</translation>
- </message>
-</context>
-<context>
- <name>ImportWorker</name>
- <message>
- <location filename="../importworker.cpp" line="24"/>
- <source>No columns provided by the import plugin.</source>
- <translation>Модуль импорта не обнаружил ни одного столбца.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="30"/>
- <source>Could not start transaction in order to import a data: %1</source>
- <translation>Невозможно начать транзакцию для импорта данных: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="52"/>
- <source>Could not commit transaction for imported data: %1</source>
- <translation>Невозможно завершить транзакцию для импортированных данных: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="100"/>
- <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
- <translation>В таблице &apos;%1&apos; столбцов меньше, чем в импортируемых данных. Лишние столбцы будут проигнорированы.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="105"/>
- <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
- <translation>В таблице &apos;%1&apos; столбцов больше, чем в импортируемых данных. Недостающие столбцы будут оставлены пустыми.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="124"/>
- <source>Could not create table to import to: %1</source>
- <translation>Невозможно создать таблицу для импорта: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="177"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Error while importing data: %1</source>
- <translation>Ошибка при импорте данных: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Interrupted.</source>
- <comment>import process status update</comment>
- <translation>Прервано.</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="172"/>
- <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
- <translation>Невозможно импортировать строку данных № %1. Строка пропущена. Подробности проблемы: %2</translation>
- </message>
-</context>
-<context>
- <name>PluginManagerImpl</name>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="543"/>
- <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
- <translation>Невозможно загрузить модуль %1, так как он конфликтует с модулем %2.</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="554"/>
- <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
- <translation>Невозможно загрузить модуль %1, так как не загружен необходимый ему модуль: %2.</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="563"/>
- <source>Cannot load plugin %1. Error details: %2</source>
- <translation>Невозможно загрузить модуль %1. Подробности ошибки: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="579"/>
- <source>Cannot load plugin %1 (error while initializing plugin).</source>
- <translation>Невозможно загрузить модуль %1 (ошибка при инициализации модуля).</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
- <source>min: %1</source>
- <comment>plugin dependency version</comment>
- <translation>минимальная: %1</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="732"/>
- <source>max: %1</source>
- <comment>plugin dependency version</comment>
- <translation>максимальная: %1</translation>
- </message>
-</context>
-<context>
- <name>PopulateConstant</name>
- <message>
- <location filename="../plugins/populateconstant.cpp" line="10"/>
- <source>Constant</source>
- <comment>populate constant plugin name</comment>
- <translation>Константа</translation>
- </message>
-</context>
-<context>
- <name>PopulateConstantConfig</name>
- <message>
- <location filename="../plugins/populateconstant.ui" line="20"/>
- <source>Constant value:</source>
- <translation>Значение константы:</translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionary</name>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="15"/>
- <source>Dictionary</source>
- <comment>dictionary populating plugin name</comment>
- <translation>Словарь</translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionaryConfig</name>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="20"/>
- <source>Dictionary file</source>
- <translation>Файл словаря</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="29"/>
- <source>Pick dictionary file</source>
- <translation>Выберите файл словаря</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="39"/>
- <source>Word separator</source>
- <translation>Разделитель слов</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="45"/>
- <source>Whitespace</source>
- <translation>Пробел</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="58"/>
- <source>Line break</source>
- <translation>Перенос строки</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="74"/>
- <source>Method of using words</source>
- <translation>Способ использования слов</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="80"/>
- <source>Ordered</source>
- <translation>По порядку</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="93"/>
- <source>Randomly</source>
- <translation>Случайным образом</translation>
- </message>
-</context>
-<context>
- <name>PopulateManager</name>
- <message>
- <location filename="../services/populatemanager.cpp" line="89"/>
- <source>Table &apos;%1&apos; populated successfully.</source>
- <translation>Таблица &apos;%1&apos; успешно заполнена.</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandom</name>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="12"/>
- <source>Random number</source>
- <translation>Случайное число</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomConfig</name>
- <message>
- <location filename="../plugins/populaterandom.ui" line="20"/>
- <source>Constant prefix</source>
- <translation>Префикс константы</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="26"/>
- <source>No prefix</source>
- <translation>Без префикса</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="39"/>
- <source>Minimum value</source>
- <translation>Минимальное значение</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="61"/>
- <source>Maximum value</source>
- <translation>Максимальное значение</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="86"/>
- <source>Constant suffix</source>
- <translation>Суффикс константы</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="92"/>
- <source>No suffix</source>
- <translation>Без суффикса</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomText</name>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="12"/>
- <source>Random text</source>
- <translation>Случайный текст</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomTextConfig</name>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="20"/>
- <source>Use characters from common sets:</source>
- <translation>Использовать символы из стандартных наборов:</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="36"/>
- <source>Minimum length</source>
- <translation>Минимальная длина</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="64"/>
- <source>Letters from a to z.</source>
- <translation>Буквы от a до z.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="67"/>
- <source>Alpha</source>
- <translation>Буквенный</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="77"/>
- <source>Numbers from 0 to 9.</source>
- <translation>Цифры от 0 до 9.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="80"/>
- <source>Numeric</source>
- <translation>Цифровой</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="90"/>
- <source>A whitespace, a tab and a new line character.</source>
- <translation>Пробел, табуляция и символ переноса строки.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="93"/>
- <source>Whitespace</source>
- <translation>Непечатаемые символы</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="103"/>
- <source>Includes all above and all others.</source>
- <translation>Включает все вышеперечисленные и все остальные.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="106"/>
- <source>Binary</source>
- <translation>Бинарный</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="119"/>
- <source>Use characters from my custom set:</source>
- <translation>Использовать символы из моего набора:</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="132"/>
- <source>Maximum length</source>
- <translation>Максимальная длина</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="160"/>
- <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
- <translation>При указании одного символа несколько раз, вероятность его использования увеличивается.</translation>
- </message>
-</context>
-<context>
- <name>PopulateScript</name>
- <message>
- <location filename="../plugins/populatescript.cpp" line="13"/>
- <source>Script</source>
- <translation>Скрипт</translation>
- </message>
-</context>
-<context>
- <name>PopulateScriptConfig</name>
- <message>
- <location filename="../plugins/populatescript.ui" line="26"/>
- <source>Initialization code (optional)</source>
- <translation>Инициализирующий код (необязательно)</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="45"/>
- <source>Per step code</source>
- <translation>Код для каждого шага</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="70"/>
- <source>Language</source>
- <translation>Язык</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="89"/>
- <source>Help</source>
- <translation>Помощь</translation>
- </message>
-</context>
-<context>
- <name>PopulateSequence</name>
- <message>
- <location filename="../plugins/populatesequence.cpp" line="13"/>
- <source>Sequence</source>
- <translation>Последовательность</translation>
- </message>
-</context>
-<context>
- <name>PopulateSequenceConfig</name>
- <message>
- <location filename="../plugins/populatesequence.ui" line="33"/>
- <source>Start value:</source>
- <translation>Начальное значение:</translation>
- </message>
- <message>
- <location filename="../plugins/populatesequence.ui" line="56"/>
- <source>Step:</source>
- <translation>Шаг:</translation>
- </message>
-</context>
-<context>
- <name>PopulateWorker</name>
- <message>
- <location filename="../populateworker.cpp" line="23"/>
- <source>Could not start transaction in order to perform table populating. Error details: %1</source>
- <translation>Невозможно начать транзакцию для заполнения таблицы. Подробности ошибки: %1</translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="70"/>
- <source>Error while populating table: %1</source>
- <translation>Ошибка при заполнении таблицы: %1</translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="81"/>
- <source>Could not commit transaction after table populating. Error details: %1</source>
- <translation>Невозможно завершить транзакцию после заполнения таблицы. Подробности ошибки: %1</translation>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <location filename="../db/abstractdb2.h" line="222"/>
- <location filename="../db/abstractdb3.h" line="384"/>
- <source>Could not open database: %1</source>
- <translation>Невозможно открыть базу данных: %1</translation>
- </message>
- <message>
- <location filename="../db/abstractdb2.h" line="833"/>
- <location filename="../db/abstractdb3.h" line="1132"/>
- <source>Result set expired or no row available.</source>
- <translation>Результирующая выборка устарела или ни одна строка не доступна.</translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="328"/>
- <location filename="../db/abstractdb3.h" line="332"/>
- <source>Could not load extension %1: %2</source>
- <translation>Невозможно загрузить расширение %1: %2</translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="405"/>
- <source>Could not close database: %1</source>
- <translation>Невозможно закрыть базу данных: %1</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="138"/>
- <location filename="../dbversionconverter.cpp" line="143"/>
- <location filename="../dbversionconverter.cpp" line="196"/>
- <location filename="../dbversionconverter.cpp" line="243"/>
- <location filename="../dbversionconverter.cpp" line="248"/>
- <location filename="../dbversionconverter.cpp" line="256"/>
- <location filename="../dbversionconverter.cpp" line="336"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
- <translation>SQLite %1 не поддерживает конструкцию &apos;%2&apos;.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="202"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
- <translation>SQLite %1 не поддерживает конструкцию &apos;%2&apos;, однако можно создать обычную таблицу, если вы продолжите.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="429"/>
- <source>Could not parse statement: %1
-Error details: %2</source>
- <translation>Невозможно проанализировать структуру конструкции: %1 Подробности ошибки: %2</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="440"/>
- <location filename="../dbversionconverter.cpp" line="468"/>
- <location filename="../dbversionconverter.cpp" line="491"/>
- <location filename="../dbversionconverter.cpp" line="529"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
- <translation>SQLite %1 не поддерживает оператор &apos;%2&apos;. Невозможно сконвертировать конструкцию &apos;%3&apos; с этим оператором.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="497"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
- <translation>SQLite %1 не поддерживает оператор &apos;%2&apos; в конструкции &apos;%3&apos;.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="772"/>
- <source>SQLite %1 does not support current date or time clauses in expressions.</source>
- <translation>SQLite %1 не поддерживает операторы текущей даты и текущего времени в выражениях.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="775"/>
- <source>SQLite %1 does not support row value clauses in expressions.</source>
- <translation>SQLite %1 не поддерживает операции со значениями строк в выражениях.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="786"/>
- <location filename="../dbversionconverter.cpp" line="789"/>
- <location filename="../dbversionconverter.cpp" line="800"/>
- <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
- <translation>SQLite %1 не поддерживает оператор &apos;%2&apos; в выражениях.</translation>
- </message>
- <message>
- <location filename="../impl/dbattacherimpl.cpp" line="115"/>
- <source>Could not attach database %1: %2</source>
- <translation>Не удалось присоединить базу данных %1: %2</translation>
- </message>
- <message>
- <location filename="../parser/parsercontext.cpp" line="108"/>
- <location filename="../parser/parsercontext.cpp" line="110"/>
- <source>Incomplete query.</source>
- <translation>Незавершённый запрос.</translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
- <location filename="../parser/sqlite3_parse.cpp" line="2212"/>
- <source>Parser stack overflow</source>
- <translation>Переполнение стека анализатора</translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="4465"/>
- <location filename="../parser/sqlite3_parse.cpp" line="5195"/>
- <source>Syntax error</source>
- <translation>Синтаксическая ошибка</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="30"/>
- <source>Could not open dictionary file %1 for reading.</source>
- <translation>Невозможно открыть файл словаря %1 для чтения.</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="91"/>
- <source>Dictionary file must exist and be readable.</source>
- <translation>Файл словаря должен существовать и быть доступным для чтения.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="53"/>
- <source>Maximum value cannot be less than minimum value.</source>
- <translation>Максимальное значение не может быть меньше минимального.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="77"/>
- <source>Maximum length cannot be less than minimum length.</source>
- <translation>Максимальная длина не может быть меньше минимальной.</translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="88"/>
- <source>Custom character set cannot be empty.</source>
- <translation>Произвольный набор символов не может быть пустым.</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="40"/>
- <source>Could not find plugin to support scripting language: %1</source>
- <translation>Невозможно найти модуль поддержки скриптового языка: %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="58"/>
- <source>Error while executing populating initial code: %1</source>
- <translation>Ошибка при выполнении инициализирующего кода заполнения: %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="80"/>
- <source>Error while executing populating code: %1</source>
- <translation>Ошибка при выполнении кода заполнения: %1</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="112"/>
- <source>Select implementation language.</source>
- <translation>Выберите язык реализации.</translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="113"/>
- <source>Implementation code cannot be empty.</source>
- <translation>Заполняющий код не может быть пустым.</translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="359"/>
- <source>Could not resolve data source for column: %1</source>
- <translation>Невозможно определить источник данных для столбца: %1</translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="431"/>
- <source>Could not resolve table for column &apos;%1&apos;.</source>
- <translation>Невозможно определить таблицу для столбца &apos;%1&apos;.</translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="768"/>
- <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
- <translation>Невозможно инициализировать файл конфигурации. Любые изменения конфигурации и история запросов будут утеряны после перезапуска приложения. Попытки инициализации файла предпринимались в следующих местах: %1.</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="305"/>
- <source>General purpose</source>
- <comment>plugin category name</comment>
- <translation>Общего назначения</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="306"/>
- <source>Database support</source>
- <comment>plugin category name</comment>
- <translation>Поддержка баз данных</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="307"/>
- <source>Code formatter</source>
- <comment>plugin category name</comment>
- <translation>Форматирование кода</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="308"/>
- <source>Scripting languages</source>
- <comment>plugin category name</comment>
- <translation>Скриптовые языки</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="309"/>
- <source>Exporting</source>
- <comment>plugin category name</comment>
- <translation>Экспорт</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="310"/>
- <source>Importing</source>
- <comment>plugin category name</comment>
- <translation>Импорт</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="311"/>
- <source>Table populating</source>
- <comment>plugin category name</comment>
- <translation>Заполнение таблиц</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="115"/>
- <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
- <translation>Таблица %1 ссылается на таблицу %2, но описание внешнего ключа не будет обновлено для описания новой таблицы из-за проблем с анализом DDL таблицы %3.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="438"/>
- <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
- <translation>Все столбцы, проиндексированные индексом %1, удалены. Индекс не будет воссоздан после модификации таблицы.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="481"/>
- <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
- <translation>Возникла проблема при обработке триггера %1. Впоследствии он не будет полностью обновлён и потребует вашего внимания.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="528"/>
- <source>Cannot not update trigger %1 according to table %2 modification.</source>
- <translation>Невозможно обновить триггер %1 в соответствии с модификацией таблицы %2.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="708"/>
- <location filename="../tablemodifier.cpp" line="732"/>
- <location filename="../tablemodifier.cpp" line="751"/>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation>Возникла проблема при обновлении конструкции %1 внутри триггера %2. Одна из вложенных конструкций %1, которая возможно ссылается на таблицу %3, не может быть корректно модифицирована. Возможно необходима ручная правка триггера.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="496"/>
- <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
- <translation>Все столбцы, затронутые в триггере %1, удалены. Триггер не будет воссоздан после модификации таблицы.</translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="546"/>
- <source>Cannot not update view %1 according to table %2 modifications.
-The view will remain as it is.</source>
- <translation>Невозможно обновить представление %1 в соответствии с модификациями таблицы %2.
-Представление останется как есть.</translation>
- </message>
- <message>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation type="obsolete">Возникла проблема при обновлении конструкции %1 внутри триггера %2. Одна из вложенных конструкций SELECT, которая возможно ссылается на таблицу %3, не может быть корректно модифицирована. Возможно необходима ручная правка триггера.</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="25"/>
- <source>Could not parse DDL of the view to be created. Details: %1</source>
- <translation>Невозможно проанализировать DDL создаваемого представления. Подробности: %1</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="34"/>
- <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
- <translation>Проанализированный запрос не является запросом CREATE VIEW. Тип запроса: %1</translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="82"/>
- <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
- <translation>SQLiteStudio не удалось определить столбцы, возвращаемые новым представлением, поэтому невозможно указать, какие триггеры могут сломаться в процессе воссоздания.</translation>
- </message>
- <message>
- <location filename="../common/utils.cpp" line="1022"/>
- <source>Could not open file &apos;%1&apos; for reading: %2</source>
- <translation>Невозможно открыть файл &apos;%1&apos; для чтения: %2</translation>
- </message>
-</context>
-<context>
- <name>QueryExecutor</name>
- <message>
- <location filename="../db/queryexecutor.cpp" line="186"/>
- <source>Execution interrupted.</source>
- <translation>Выполнение прервано.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="227"/>
- <source>Database is not open.</source>
- <translation>База данных не открыта.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="235"/>
- <source>Only one query can be executed simultaneously.</source>
- <translation>Одновременно может быть выполнен только один запрос.</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="339"/>
- <location filename="../db/queryexecutor.cpp" line="618"/>
- <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
- <translation>Возникла ошибка при выполнении запроса count(*), поэтому разбивка данных по страницам отключена. Детали ошибки из базы данных: %1</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="529"/>
- <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
- <translation>SQLiteStudio не удалось извлечь метаданные из запроса. Результаты нельзя будет редактировать.</translation>
- </message>
-</context>
-<context>
- <name>ScriptingQtDbProxy</name>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
- <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
- <translation>При вызове команды QtScript %1 в текущем контексте нет доступных баз данных.</translation>
- </message>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
- <source>Error from %1: %2</source>
- <translation>Ошибка в команде %1: %2</translation>
- </message>
-</context>
-<context>
- <name>SqlHistoryModel</name>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="34"/>
- <source>Database</source>
- <comment>sql history header</comment>
- <translation>База данных</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="36"/>
- <source>Execution date</source>
- <comment>sql history header</comment>
- <translation>Дата выполнения</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="38"/>
- <source>Time spent</source>
- <comment>sql history header</comment>
- <translation>Затраченное время</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="40"/>
- <source>Rows affected</source>
- <comment>sql history header</comment>
- <translation>Затронуто строк</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="42"/>
- <source>SQL</source>
- <comment>sql history header</comment>
- <translation>SQL</translation>
- </message>
-</context>
-<context>
- <name>UpdateManager</name>
- <message>
- <source>An error occurred while checking for updates: %1.</source>
- <translation>При проверке обновлений возникла ошибка: %1</translation>
- </message>
- <message>
- <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
- <translation>Невозможно проверить наличие обновлений, так как ответ сервера имеет некорректный формат. Это предупреждение можно проигнорировать.</translation>
- </message>
- <message>
- <source>An error occurred while reading updates metadata: %1.</source>
- <translation>При чтении метаданных об обновлениях возникла ошибка: %1</translation>
- </message>
- <message>
- <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
- <translation>Невозможно загрузить обновления, так как ответ сервера имеет некорректный формат. Вы можете попробовать снова позже или скачать и установить обновления вручную. Подробности смотрите в &lt;a href=&quot;%1&quot;&gt;Руководстве пользователя&lt;/a&gt;.</translation>
- </message>
- <message>
- <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
- <translation>Невозможно создать временный каталог для загрузки обновления. Обновление прервано.</translation>
- </message>
- <message>
- <source>There was no updates to download. Updating aborted.</source>
- <translation>Нет обновлений для загрузки. Обновление прервано.</translation>
- </message>
- <message>
- <source>Downloading: %1</source>
- <translation>Загрузка: %1</translation>
- </message>
- <message>
- <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
- <translation>Невозможно определить имя файла из URL обновления. Обновление прервано.</translation>
- </message>
- <message>
- <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
- <translation>Не удалось открыть файл %1 для записи: %2. Обновление прервано.</translation>
- </message>
- <message>
- <source>Installing updates.</source>
- <translation>Установка обновлений.</translation>
- </message>
- <message>
- <source>Could not copy current application directory into %1 directory.</source>
- <translation>Невозможно скопировать текущий каталог приложения в каталог %1.</translation>
- </message>
- <message>
- <source>Could not create directory %1.</source>
- <translation>Невозможно создать каталог %1.</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2.
-Details: %3</source>
- <translation>Невозможно переименовать каталог %1 в %2.
-Подробности: %3</translation>
- </message>
- <message>
- <source>Cannot not rename directory %1 to %2.
-Details: %3</source>
- <translation>Невозможно переименовать каталог %1 в %2.
-Подробности: %3</translation>
- </message>
- <message>
- <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
- <translation>Невозможно переместить каталог %1 в %2, а также не удалось восстановить оригинальный каталог, поэтому оригинальный каталог SQLiteStudio теперь расположен в: %3</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
- <translation>Невозможно переименовать каталог %1 в %2. Восстановлена изначальная версия SQLiteStudio.</translation>
- </message>
- <message>
- <source>Could not unpack component %1 into %2 directory.</source>
- <translation>Невозможно распаковать компонент %1 в каталог %2.</translation>
- </message>
- <message>
- <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
- <translation>Невозможно найти приложение повышения привилегий для запуска обновления с правами root. Были испробованы: %1</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as root: %1</source>
- <translation>Невозможно выполнить финальные шаги обновления с правами root: %1</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as admin: %1</source>
- <translation>Невозможно выполнить финальные шаги обновления с правами администратора: %1</translation>
- </message>
- <message>
- <source>Cannot create temporary directory for updater.</source>
- <translation>Невозможно создать временный каталог для установщика обновлений.</translation>
- </message>
- <message>
- <source>Cannot create updater script file.</source>
- <translation>Невозможно создать файл скрипта обновления.</translation>
- </message>
- <message>
- <source>Updating canceled.</source>
- <translation>Обновление отменено.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator.</source>
- <translation>Невозможно выполнить финальные шаги обновления с правами администратора.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
- <translation>Невозможно выполнить финальные шаги обновления с правами администратора. Превышен тайм-аут запуска программы обновления.</translation>
- </message>
- <message>
- <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
- <translation>Невозможно выполнить финальные шаги обновления с правами администратора. Превышен тайм-аут операции программы обновления.</translation>
- </message>
- <message>
- <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
- <translation>Невозможно очистить временный каталог %1. Вы можете удалить его вручную в любое время.</translation>
- </message>
- <message>
- <source>Could not run new version for continuing update.</source>
- <translation>Невозможно запустить новую версию приложения для продолжения обновления.</translation>
- </message>
- <message>
- <source>Package not in tar.gz format, cannot install: %1</source>
- <translation>Пакет не в формате tar.gz, установка невозможна: %1</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
- <translation>Пакет %1 не может быть установлен, так как невозможно перенести его в каталог: %2</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
- <translation>Пакет %1 не может быть установлен, так как его невозможно распаковать: %2</translation>
- </message>
- <message>
- <source>Package not in zip format, cannot install: %1</source>
- <translation>Пакет не в формате zip, установка невозможна: %1</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
- <translation>Пакет %1 не может быть установлен, так как его невозможно распаковать в каталог %2: %3</translation>
- </message>
- <message>
- <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
- <translation>Пакет %1 не может быть установлен, так как его невозможно распаковать в каталог: %2</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2.</source>
- <translation>Невозможно переименовать каталог %1 в %2.</translation>
- </message>
- <message>
- <source>Could not delete directory %1.</source>
- <translation>Невозможно удалить каталог %1.</translation>
- </message>
- <message>
- <source>Error executing update command: %1
-Error message: %2</source>
- <translation>Ошибка при выполнении команды обновления: %1
-Сообщение об ошибке: %2</translation>
- </message>
- <message>
- <source>An error occurred while downloading updates: %1. Updating aborted.</source>
- <translation>При загрузке обновлений произошла ошибка: %1. Обновление прервано.</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="48"/>
- <source>Updates installer executable is missing.</source>
- <translation>Отсутствует исполняемый файл установщика обновлений.</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="49"/>
- <location filename="../services/updatemanager.cpp" line="68"/>
- <source>Unable to check for updates (%1)</source>
- <translation>Невозможно проверить обновления (%1)</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="66"/>
- <source>details are unknown</source>
- <translation>подробности неизвестны</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="81"/>
- <source>Unable to run updater application (%1). Please report this.</source>
- <translation>Невозможно запустить установщик обновлений (%1). Ссообщите пожалуйста об этом разработчику.</translation>
- </message>
-</context>
-</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru_RU.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru_RU.ts
new file mode 100644
index 0000000..1dc362d
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_ru_RU.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="ru" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Невозможно выполнить запрос при закрытой базе данных.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Ошибка во время присоединения базы данных %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation>Не удалось создать полную контрольную точку WAL в базе данных &apos;%1&apos;. Ошибка из движка SQLite: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>Не указана база данных для выполнения запросов.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>Не открыта база данных для выполнения запросов.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Невозможно отключить внешние ключи в базе данных. Подробности: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Невозможно начать транзакцию. Подробности: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Прервано</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Невозможно завершить транзакцию. Подробности: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation>Новая ссылка на строку</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation>Старая ссылка на строку</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>Новое имя таблицы</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>Новое имя индекса</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>Новое имя представления</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>Новое имя триггера</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>Псевдоним таблицы или столбца</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>имя транзакции</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>Новое имя столбца</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation>Тип данных столбца</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation>Имя ограничения</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>Сообщение об ошибке</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation>Любое слово</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>База данных по умолчанию</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation>База данных временных объектов</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Невозможно начать транзакцию для удаления истории SQL, поэтому она не удалена.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Невозможно завершить транзакцию для удаления истории SQL, поэтому она не удалена.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>Не удалось добавить базу данных %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>Невозможно обновить базу данных %1 из-за ошибки: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Файл базы данных не существует.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>Модуль поддержки не загружен.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation>Невозможно инициализировать базу данных.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>Не найден подходящий драйвер базы данных.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>Ошибка при создании таблицы в целевой базе данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation>Невозможно проанализировать структуру таблицы.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation>Невозможно присоединить базу данных %1 к базе данных %2, поэтому данные таблицы %3 будут скопированы при посредничестве SQLiteStudio. Этот метод может быть медленным для больших таблиц, так что наберитесь терпения.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation>Ошибка при копировании данных из таблицы %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation>Ошибка при копировании данных в таблицу %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation>Ошибка при удалении исходного представления %1: %2
+Таблицы, индексы, триггеры и представления, скопированные в базу данных %3, сохранятся.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation>Ошибка при создании представления в целевой базе данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation>Ошибка при создании индекса в целевой базе данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation>Ошибка при создании триггера в целевой базе данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation>Невозможно проанализировать объект &apos;%1&apos; для его перемещения либо копирования.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>Имя базы данных</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>Файл базы данных</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>Дата выполнения</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>Изменения</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation>Модуль экспорта %1 не поддерживает экспорт результатов запроса.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation>Модуль экспорта %1 не поддерживает экспорт таблиц.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation>Модуль экспорта %1 не поддерживает экспорт баз данных.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation>Формат экспорта %1 не поддерживается. Поддерживаемые форматы: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>Экспорт в буфер обмена успешно выполнен.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation>Экспорт в файл %1 успешно выполнен.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>Экспорт успешно выполнен.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation>Невозможно выполнить экспорт в файл %1. Не удалось открыть файл для записи.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>Ошибка при экспорте результатов запроса: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation>Ошибка при подсчёте ширины столбца данных для экспорта результатов запроса: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation>Невозможно проанализировать структуру %1. Данный объект будет исключён при выполнении экспорта.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation>Ошибка при считывании данных для экспорта из таблицы %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation>Ошибка при подсчёте количества данных для экспорта из таблицы %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation>Ошибка при подсчёте ширины столбца данных для экспорта из таблицы %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation>Неверное количество аргументов для функции &apos;%1&apos;. Ожидаемое количество: %2, передано: %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation>Функция не зарегистрирована в SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation>Функция %1(%2) зарегистрирована для языка %3, однако модуль поддержки этого языка на данный момент не загружен.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>Неверный шаблон регулярного выражения: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>Невозможно открыть файл %1 для чтения: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>Невозможно открыть файл %1 для записи: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>Ошибка при записи в файл %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation>Неподдерживаемый скриптовый язык: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation>Невозможно инициализировать текстовый кодек для экспорта. Используется кодек по умолчанию: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation>Импорт данных в таблицу &apos;%1&apos; выполнен успешно. Количество импортированных строк: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation>Модуль импорта не обнаружил ни одного столбца.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation>Невозможно начать транзакцию для импорта данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation>Невозможно завершить транзакцию для импортированных данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation>В таблице &apos;%1&apos; столбцов меньше, чем в импортируемых данных. Лишние столбцы будут проигнорированы.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation>В таблице &apos;%1&apos; столбцов больше, чем в импортируемых данных. Недостающие столбцы будут оставлены пустыми.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation>Невозможно создать таблицу для импорта: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation>Ошибка при импорте данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>Прервано.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation>Невозможно импортировать строку данных № %1. Строка пропущена. Подробности проблемы: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>Невозможно загрузить модуль %1, так как он конфликтует с модулем %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation>Невозможно загрузить модуль %1, так как не загружен необходимый ему модуль: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation>Невозможно загрузить модуль %1. Подробности ошибки: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation>Невозможно загрузить модуль %1 (ошибка при инициализации модуля).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>минимальная: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>максимальная: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>Константа</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>Значение константы:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>Словарь</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>Файл словаря</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>Выберите файл словаря</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>Разделитель слов</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>Пробел</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>Перенос строки</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>Способ использования слов</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>По порядку</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>Случайным образом</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>Таблица &apos;%1&apos; успешно заполнена.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>Случайное число</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>Префикс константы</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>Без префикса</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>Минимальное значение</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>Максимальное значение</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>Суффикс константы</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>Без суффикса</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>Случайный текст</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation>Использовать символы из стандартных наборов:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>Минимальная длина</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation>Буквы от a до z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>Буквенный</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>Цифры от 0 до 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>Цифровой</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation>Пробел, табуляция и символ переноса строки.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>Непечатаемые символы</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation>Включает все вышеперечисленные и все остальные.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>Бинарный</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>Использовать символы из моего набора:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>Максимальная длина</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation>При указании одного символа несколько раз, вероятность его использования увеличивается.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>Скрипт</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation>Инициализирующий код (необязательно)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation>Код для каждого шага</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>Язык</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>Помощь</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>Последовательность</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>Начальное значение:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>Шаг:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation>Невозможно начать транзакцию для заполнения таблицы. Подробности ошибки: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation>Ошибка при заполнении таблицы: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>Невозможно завершить транзакцию после заполнения таблицы. Подробности ошибки: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Невозможно открыть файл &apos;%1&apos; для чтения: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation>Невозможно открыть базу данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation>Результирующая выборка устарела или ни одна строка не доступна.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation>Невозможно загрузить расширение %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation>Не удалось запустить контрольную точку WAL: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation>Невозможно закрыть базу данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation>Не удалось присоединить базу данных %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>Незавершённый запрос.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation>Переполнение стека анализатора</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>Синтаксическая ошибка</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation>Невозможно открыть файл словаря %1 для чтения.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation>Файл словаря должен существовать и быть доступным для чтения.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation>Максимальное значение не может быть меньше минимального.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation>Максимальная длина не может быть меньше минимальной.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation>Произвольный набор символов не может быть пустым.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation>Невозможно найти модуль поддержки скриптового языка: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation>Ошибка при выполнении инициализирующего кода заполнения: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation>Ошибка при выполнении кода заполнения: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation>Выберите язык реализации.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation>Заполняющий код не может быть пустым.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation>Невозможно определить источник данных для столбца: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation>Невозможно определить таблицу для столбца &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation>Не удалось инициализировать конфигурационный файл. Любые изменения конфигурации и история запросов будут потеряны после перезагрузки приложения. Невозможно создать файл в следующих местах: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>Общего назначения</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>Поддержка баз данных</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Форматирование кода</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Скриптовые языки</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>Экспорт</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>Импорт</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Заполнение таблиц</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>Таблица %1 ссылается на таблицу %2, но описание внешнего ключа не будет обновлено для описания новой таблицы из-за проблем с анализом DDL таблицы %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>Все столбцы, проиндексированные индексом %1, удалены. Индекс не будет воссоздан после модификации таблицы.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation>Возникла проблема при обработке триггера %1. Впоследствии он не будет полностью обновлён и потребует вашего внимания.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>Все столбцы, затронутые в триггере %1, удалены. Триггер не будет воссоздан после модификации таблицы.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>Невозможно обновить триггер %1 в соответствии с модификацией таблицы %2.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>Невозможно обновить представление %1 в соответствии с модификациями таблицы %2.
+Представление останется как есть.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation>Возникла проблема при обновлении конструкции %1 внутри триггера %2. Одна из вложенных конструкций %1, которая возможно ссылается на таблицу %3, не может быть корректно модифицирована. Возможно необходима ручная правка триггера.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation>Невозможно проанализировать DDL создаваемого представления. Подробности: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation>Проанализированный запрос не является запросом CREATE VIEW. Тип запроса: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation>SQLiteStudio не удалось определить столбцы, возвращаемые новым представлением, поэтому невозможно указать, какие триггеры могут сломаться в процессе воссоздания.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation>Выполнение прервано.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation>База данных не открыта.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>Одновременно может быть выполнен только один запрос.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>Возникла ошибка при выполнении запроса count(*), поэтому разбивка данных по страницам отключена. Детали ошибки из базы данных: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation>SQLiteStudio не удалось извлечь метаданные из запроса. Результаты нельзя будет редактировать.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation>При вызове команды JavaScript %1, в текущем контексте нет доступных баз данных.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>Ошибка в команде %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation>Невозможно выполнить SQL-запрос, так как приложению не удалось начать транзакцию: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation>Выполнение запросов из файла отменено. Все выполненные ранее из него запросы откачены.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Невозможно открыть файл &apos;%1&apos; для чтения: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation>Невозможно выполнить SQL-запрос, так как приложению не удалось завершить транзакцию: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation>Завершено выполнение %1 запросов за %2 секунд. %3 запросов не было выполнено из-за ошибок.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation>Завершено выполнение %1 запросов за %2 секунд.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation>Невозможно выполнить SQL-запрос из-за ошибки.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>База данных</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Дата выполнения</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Затраченное время</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Затронуто строк</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation>Невозможно проверить наличие обновлений (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qm
deleted file mode 100644
index de604e9..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.qm
+++ /dev/null
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts
deleted file mode 100644
index 8db8efb..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk.ts
+++ /dev/null
@@ -1,1178 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.1" language="sk_SK">
-<context>
- <name>AbstractDb</name>
- <message>
- <location filename="../db/abstractdb.cpp" line="343"/>
- <location filename="../db/abstractdb.cpp" line="360"/>
- <source>Cannot execute query on closed database.</source>
- <translation>Nemôžem spustiť dotaz na uzatvorenej databáze.</translation>
- </message>
- <message>
- <location filename="../db/abstractdb.cpp" line="643"/>
- <source>Error attaching database %1: %2</source>
- <translation>Chyba pri pripájaní databázy %1: %2</translation>
- </message>
-</context>
-<context>
- <name>BugReporter</name>
- <message>
- <source>Invalid login or password</source>
- <translation type="vanished">Neplatné meno alebo heslo</translation>
- </message>
-</context>
-<context>
- <name>ChainExecutor</name>
- <message>
- <location filename="../db/chainexecutor.cpp" line="37"/>
- <source>The database for executing queries was not defined.</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="44"/>
- <source>The database for executing queries was not open.</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="54"/>
- <source>Could not disable foreign keys in the database. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="62"/>
- <source>Could not start a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="89"/>
- <source>Interrupted</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/chainexecutor.cpp" line="151"/>
- <source>Could not commit a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>CompletionHelper</name>
- <message>
- <location filename="../completionhelper.cpp" line="196"/>
- <source>New row reference</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="203"/>
- <source>Old row reference</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="208"/>
- <source>New table name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="211"/>
- <source>New index name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="214"/>
- <source>New view name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="217"/>
- <source>New trigger name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="220"/>
- <source>Table or column alias</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="223"/>
- <source>transaction name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="226"/>
- <source>New column name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="229"/>
- <source>Column data type</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="232"/>
- <source>Constraint name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="245"/>
- <source>Error message</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="289"/>
- <source>Collation name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="304"/>
- <source>Any word</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="485"/>
- <source>Default database</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../completionhelper.cpp" line="486"/>
- <source>Temporary objects database</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ConfigImpl</name>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="863"/>
- <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="870"/>
- <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbManagerImpl</name>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
- <source>Could not add database %1: %2</source>
- <translation>Nemôžem pridať databázu %1: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="139"/>
- <source>Database %1 could not be updated, because of an error: %2</source>
- <translation>Databáza %1 nemôže byť aktualizovaná kvôli chybe: %2</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
- <source>Database file doesn&apos;t exist.</source>
- <translation>Databázový súbor neexistuje.</translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="357"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="609"/>
- <source>No supporting plugin loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="527"/>
- <source>Database could not be initialized.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="537"/>
- <source>No suitable database driver plugin found.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbObjectOrganizer</name>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <location filename="../dbobjectorganizer.cpp" line="412"/>
- <source>Error while creating table in target database: %1</source>
- <translation>Vyskytla sa chyba počas vytvárania tabuľky v cieľovej databáze: %1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <source>Could not parse table.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="426"/>
- <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="447"/>
- <source>Error while copying data for table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="466"/>
- <location filename="../dbobjectorganizer.cpp" line="473"/>
- <location filename="../dbobjectorganizer.cpp" line="496"/>
- <source>Error while copying data to table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="535"/>
- <source>Error while dropping source view %1: %2
-Tables, indexes, triggers and views copied to database %3 will remain.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="542"/>
- <source>Error while creating view in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="547"/>
- <source>Error while creating index in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="552"/>
- <source>Error while creating trigger in target database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="773"/>
- <location filename="../dbobjectorganizer.cpp" line="780"/>
- <location filename="../dbobjectorganizer.cpp" line="789"/>
- <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DbVersionConverter</name>
- <message>
- <location filename="../dbversionconverter.cpp" line="932"/>
- <source>Target file exists, but could not be overwritten.</source>
- <translation>Cieľový súbor existuje ale nemôže byť prepísaný.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="951"/>
- <source>Could not find proper database plugin to create target database.</source>
- <translation>Nieje možné nájsť správny databázový plugin pre vytvorenie cieľovej databázy.</translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="1185"/>
- <source>Error while converting database: %1</source>
- <translation>Vyskytla sa chyba počas konvertovania databázy: %1</translation>
- </message>
-</context>
-<context>
- <name>DdlHistoryModel</name>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="65"/>
- <source>Database name</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="67"/>
- <source>Database file</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="69"/>
- <source>Date of execution</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../ddlhistorymodel.cpp" line="71"/>
- <source>Changes</source>
- <comment>ddl history header</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ExportManager</name>
- <message>
- <location filename="../services/exportmanager.cpp" line="72"/>
- <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="98"/>
- <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="122"/>
- <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="155"/>
- <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="218"/>
- <source>Export to the clipboard was successful.</source>
- <translation>Export do schránky bol úspešný.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="222"/>
- <source>Export to the file &apos;%1&apos; was successful.</source>
- <translation>Export do súboru &apos;%1&apos; bol úspešný.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="224"/>
- <source>Export was successful.</source>
- <translation>Export bol úspešný.</translation>
- </message>
- <message>
- <location filename="../services/exportmanager.cpp" line="266"/>
- <source>Could not export to file %1. File cannot be open for writting.</source>
- <translation>Nemôžem exportovať do súboru %1.Súbor nieje možné otvoriť pre zápis.</translation>
- </message>
-</context>
-<context>
- <name>ExportWorker</name>
- <message>
- <location filename="../exportworker.cpp" line="122"/>
- <source>Error while exporting query results: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="202"/>
- <source>Error while counting data column width to export from query results: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="346"/>
- <location filename="../exportworker.cpp" line="404"/>
- <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="608"/>
- <source>Error while reading data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="616"/>
- <source>Error while counting data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../exportworker.cpp" line="632"/>
- <source>Error while counting data column width to export from table %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FunctionManagerImpl</name>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="234"/>
- <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
- <source>No such function registered in SQLiteStudio: %1(%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="353"/>
- <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="371"/>
- <source>Invalid regular expression pattern: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="390"/>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="423"/>
- <source>Could not open file %1 for reading: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="445"/>
- <source>Could not open file %1 for writting: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="465"/>
- <source>Error while writting to file %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="483"/>
- <source>Unsupported scripting language: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>GenericExportPlugin</name>
- <message>
- <location filename="../plugins/genericexportplugin.cpp" line="20"/>
- <source>Could not initialize text codec for exporting. Using default codec: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ImportManager</name>
- <message>
- <location filename="../services/importmanager.cpp" line="96"/>
- <source>Imported data to the table &apos;%1&apos; successfully.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ImportWorker</name>
- <message>
- <location filename="../importworker.cpp" line="24"/>
- <source>No columns provided by the import plugin.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="30"/>
- <source>Could not start transaction in order to import a data: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="52"/>
- <source>Could not commit transaction for imported data: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="100"/>
- <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="105"/>
- <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="124"/>
- <source>Could not create table to import to: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="177"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Error while importing data: %1</source>
- <translation>Vyskytla sa chyba počas importu dát: %1</translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Interrupted.</source>
- <comment>import process status update</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../importworker.cpp" line="172"/>
- <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PluginManagerImpl</name>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="543"/>
- <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
- <translation>Nemôžem načítať plugin %1, pretože je v konflikte s pluginom %2.</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="554"/>
- <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
- <translation>Nemôžem načítať plugin %1, pretože neboli načítané jeho závislosti %2.</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="563"/>
- <source>Cannot load plugin %1. Error details: %2</source>
- <translation>Nemôžem načítať plugin %1. Detaily chyby %2</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="579"/>
- <source>Cannot load plugin %1 (error while initializing plugin).</source>
- <translation>Nemôžem načítať plugin %1 (nastala chyba pri jeho inicializácii).</translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
- <source>min: %1</source>
- <comment>plugin dependency version</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="732"/>
- <source>max: %1</source>
- <comment>plugin dependency version</comment>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateConstant</name>
- <message>
- <location filename="../plugins/populateconstant.cpp" line="10"/>
- <source>Constant</source>
- <comment>populate constant plugin name</comment>
- <translation>Konštanta</translation>
- </message>
-</context>
-<context>
- <name>PopulateConstantConfig</name>
- <message>
- <location filename="../plugins/populateconstant.ui" line="20"/>
- <source>Constant value:</source>
- <translation>Hodnota konštanty:</translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionary</name>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="15"/>
- <source>Dictionary</source>
- <comment>dictionary populating plugin name</comment>
- <translation>Slovník</translation>
- </message>
-</context>
-<context>
- <name>PopulateDictionaryConfig</name>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="20"/>
- <source>Dictionary file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="29"/>
- <source>Pick dictionary file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="39"/>
- <source>Word separator</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="45"/>
- <source>Whitespace</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="58"/>
- <source>Line break</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="74"/>
- <source>Method of using words</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="80"/>
- <source>Ordered</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.ui" line="93"/>
- <source>Randomly</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateManager</name>
- <message>
- <location filename="../services/populatemanager.cpp" line="89"/>
- <source>Table &apos;%1&apos; populated successfully.</source>
- <translation>Tabuľka %1 úspešne naplnená.</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandom</name>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="12"/>
- <source>Random number</source>
- <translation>Náhodné číslo</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomConfig</name>
- <message>
- <location filename="../plugins/populaterandom.ui" line="20"/>
- <source>Constant prefix</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="26"/>
- <source>No prefix</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="39"/>
- <source>Minimum value</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="61"/>
- <source>Maximum value</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="86"/>
- <source>Constant suffix</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.ui" line="92"/>
- <source>No suffix</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomText</name>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="12"/>
- <source>Random text</source>
- <translation>Náhodný text</translation>
- </message>
-</context>
-<context>
- <name>PopulateRandomTextConfig</name>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="20"/>
- <source>Use characters from common sets:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="36"/>
- <source>Minimum length</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="64"/>
- <source>Letters from a to z.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="67"/>
- <source>Alpha</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="77"/>
- <source>Numbers from 0 to 9.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="80"/>
- <source>Numeric</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="90"/>
- <source>A whitespace, a tab and a new line character.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="93"/>
- <source>Whitespace</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="103"/>
- <source>Includes all above and all others.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="106"/>
- <source>Binary</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="119"/>
- <source>Use characters from my custom set:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="132"/>
- <source>Maximum length</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.ui" line="160"/>
- <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateScript</name>
- <message>
- <location filename="../plugins/populatescript.cpp" line="13"/>
- <source>Script</source>
- <translation>Skript</translation>
- </message>
-</context>
-<context>
- <name>PopulateScriptConfig</name>
- <message>
- <location filename="../plugins/populatescript.ui" line="26"/>
- <source>Initialization code (optional)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="45"/>
- <source>Per step code</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="70"/>
- <source>Language</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.ui" line="89"/>
- <source>Help</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateSequence</name>
- <message>
- <location filename="../plugins/populatesequence.cpp" line="13"/>
- <source>Sequence</source>
- <translation>Sekvencia</translation>
- </message>
-</context>
-<context>
- <name>PopulateSequenceConfig</name>
- <message>
- <location filename="../plugins/populatesequence.ui" line="33"/>
- <source>Start value:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatesequence.ui" line="56"/>
- <source>Step:</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PopulateWorker</name>
- <message>
- <location filename="../populateworker.cpp" line="23"/>
- <source>Could not start transaction in order to perform table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="70"/>
- <source>Error while populating table: %1</source>
- <translation>Vyskytla sa chyba počas napĺňania tabuľky: %1</translation>
- </message>
- <message>
- <location filename="../populateworker.cpp" line="81"/>
- <source>Could not commit transaction after table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <location filename="../db/abstractdb2.h" line="222"/>
- <location filename="../db/abstractdb3.h" line="384"/>
- <source>Could not open database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb2.h" line="833"/>
- <location filename="../db/abstractdb3.h" line="1132"/>
- <source>Result set expired or no row available.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="328"/>
- <location filename="../db/abstractdb3.h" line="332"/>
- <source>Could not load extension %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/abstractdb3.h" line="405"/>
- <source>Could not close database: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="138"/>
- <location filename="../dbversionconverter.cpp" line="143"/>
- <location filename="../dbversionconverter.cpp" line="196"/>
- <location filename="../dbversionconverter.cpp" line="243"/>
- <location filename="../dbversionconverter.cpp" line="248"/>
- <location filename="../dbversionconverter.cpp" line="256"/>
- <location filename="../dbversionconverter.cpp" line="336"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="202"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="429"/>
- <source>Could not parse statement: %1
-Error details: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="440"/>
- <location filename="../dbversionconverter.cpp" line="468"/>
- <location filename="../dbversionconverter.cpp" line="491"/>
- <location filename="../dbversionconverter.cpp" line="529"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="497"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="772"/>
- <source>SQLite %1 does not support current date or time clauses in expressions.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="775"/>
- <source>SQLite %1 does not support row value clauses in expressions.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbversionconverter.cpp" line="786"/>
- <location filename="../dbversionconverter.cpp" line="789"/>
- <location filename="../dbversionconverter.cpp" line="800"/>
- <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../impl/dbattacherimpl.cpp" line="115"/>
- <source>Could not attach database %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../parser/parsercontext.cpp" line="108"/>
- <location filename="../parser/parsercontext.cpp" line="110"/>
- <source>Incomplete query.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
- <location filename="../parser/sqlite3_parse.cpp" line="2212"/>
- <source>Parser stack overflow</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../parser/sqlite2_parse.cpp" line="4465"/>
- <location filename="../parser/sqlite3_parse.cpp" line="5195"/>
- <source>Syntax error</source>
- <translation>Chyba syntaxe</translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="30"/>
- <source>Could not open dictionary file %1 for reading.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatedictionary.cpp" line="91"/>
- <source>Dictionary file must exist and be readable.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandom.cpp" line="53"/>
- <source>Maximum value cannot be less than minimum value.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="77"/>
- <source>Maximum length cannot be less than minimum length.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populaterandomtext.cpp" line="88"/>
- <source>Custom character set cannot be empty.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="40"/>
- <source>Could not find plugin to support scripting language: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="58"/>
- <source>Error while executing populating initial code: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="80"/>
- <source>Error while executing populating code: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="112"/>
- <source>Select implementation language.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/populatescript.cpp" line="113"/>
- <source>Implementation code cannot be empty.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="359"/>
- <source>Could not resolve data source for column: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../selectresolver.cpp" line="431"/>
- <source>Could not resolve table for column &apos;%1&apos;.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/impl/configimpl.cpp" line="768"/>
- <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="305"/>
- <source>General purpose</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="306"/>
- <source>Database support</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="307"/>
- <source>Code formatter</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="308"/>
- <source>Scripting languages</source>
- <comment>plugin category name</comment>
- <translation>Skriptovacie jazyky</translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="309"/>
- <source>Exporting</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="310"/>
- <source>Importing</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../sqlitestudio.cpp" line="311"/>
- <source>Table populating</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="115"/>
- <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="438"/>
- <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="481"/>
- <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="528"/>
- <source>Cannot not update trigger %1 according to table %2 modification.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="708"/>
- <location filename="../tablemodifier.cpp" line="732"/>
- <location filename="../tablemodifier.cpp" line="751"/>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="496"/>
- <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../tablemodifier.cpp" line="546"/>
- <source>Cannot not update view %1 according to table %2 modifications.
-The view will remain as it is.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="25"/>
- <source>Could not parse DDL of the view to be created. Details: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="34"/>
- <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../viewmodifier.cpp" line="82"/>
- <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../common/utils.cpp" line="1022"/>
- <source>Could not open file &apos;%1&apos; for reading: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QueryExecutor</name>
- <message>
- <location filename="../db/queryexecutor.cpp" line="186"/>
- <source>Execution interrupted.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="227"/>
- <source>Database is not open.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="235"/>
- <source>Only one query can be executed simultaneously.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="339"/>
- <location filename="../db/queryexecutor.cpp" line="618"/>
- <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
- <translation>Vyskytla sa chyba počas vykonávania dotazu count(*), dôsledkom čoho bolo zablokované stránkovanie. Detail chyby: %1</translation>
- </message>
- <message>
- <location filename="../db/queryexecutor.cpp" line="529"/>
- <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ScriptingQtDbProxy</name>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
- <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
- <source>Error from %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SqlHistoryModel</name>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="34"/>
- <source>Database</source>
- <comment>sql history header</comment>
- <translatorcomment>Dátum spustenia</translatorcomment>
- <translation>Databáza</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="36"/>
- <source>Execution date</source>
- <comment>sql history header</comment>
- <translation>Dátum spustenia</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="38"/>
- <source>Time spent</source>
- <comment>sql history header</comment>
- <translation>Trvanie dotazu</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="40"/>
- <source>Rows affected</source>
- <comment>sql history header</comment>
- <translation>Počet riadkov</translation>
- </message>
- <message>
- <location filename="../sqlhistorymodel.cpp" line="42"/>
- <source>SQL</source>
- <comment>sql history header</comment>
- <translation>SQL</translation>
- </message>
-</context>
-<context>
- <name>UpdateManager</name>
- <message>
- <source>An error occurred while checking for updates: %1.</source>
- <translation type="vanished">Vyskytla sa chyba počas kontroly aktualizácii: %1.</translation>
- </message>
- <message>
- <source>Downloading: %1</source>
- <translation type="vanished">Sťahujem: %1</translation>
- </message>
- <message>
- <source>Installing updates.</source>
- <translation type="vanished">Inštalujem aktualizácie.</translation>
- </message>
- <message>
- <source>Could not rename directory %1 to %2.</source>
- <translation type="vanished">Nemôžem premenovať adresár %1na %2.</translation>
- </message>
- <message>
- <source>Could not delete directory %1.</source>
- <translation type="vanished">Nemôžem vymazať adresár %1.</translation>
- </message>
- <message>
- <source>An error occurred while downloading updates: %1. Updating aborted.</source>
- <translation type="vanished">Vyskytla sa chyba počas sťahovani aktualizácií:%1. Aktualizácia zrušená.</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="48"/>
- <source>Updates installer executable is missing.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="49"/>
- <location filename="../services/updatemanager.cpp" line="68"/>
- <source>Unable to check for updates (%1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="66"/>
- <source>details are unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="81"/>
- <source>Unable to run updater application (%1). Please report this.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk_SK.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk_SK.ts
new file mode 100644
index 0000000..3496a22
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sk_SK.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="sk" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Nemôžem spustiť dotaz na uzatvorenej databáze.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Chyba pri pripájaní databázy %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>Nemôžem pridať databázu %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>Databáza %1 nemôže byť aktualizovaná kvôli chybe: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Databázový súbor neexistuje.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>Vyskytla sa chyba počas vytvárania tabuľky v cieľovej databáze: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>Export do schránky bol úspešný.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation>Export do súboru &apos;%1&apos; bol úspešný.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>Export bol úspešný.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation>Nemôžem exportovať do súboru %1.Súbor nieje možné otvoriť pre zápis.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation>Vyskytla sa chyba počas importu dát: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>Nemôžem načítať plugin %1, pretože je v konflikte s pluginom %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation>Nemôžem načítať plugin %1, pretože neboli načítané jeho závislosti %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation>Nemôžem načítať plugin %1. Detaily chyby %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation>Nemôžem načítať plugin %1 (nastala chyba pri jeho inicializácii).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>Konštanta</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>Hodnota konštanty:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>Slovník</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>Tabuľka %1 úspešne naplnená.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>Náhodné číslo</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>Náhodný text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>Skript</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>Sekvencia</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation>Vyskytla sa chyba počas napĺňania tabuľky: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>Chyba syntaxe</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Skriptovacie jazyky</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>Vyskytla sa chyba počas vykonávania dotazu count(*), dôsledkom čoho bolo zablokované stránkovanie. Detail chyby: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>Databáza</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Dátum spustenia</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Trvanie dotazu</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Počet riadkov</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sr_SP.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sr_SP.ts
new file mode 100644
index 0000000..48b9e7a
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sr_SP.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="sr" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sv_SE.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sv_SE.ts
new file mode 100644
index 0000000..7943cb5
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_sv_SE.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="sv-SE" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_tr_TR.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_tr_TR.ts
new file mode 100644
index 0000000..4f3173c
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_tr_TR.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="tr" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Kapalı veritabanında sorgu çalıştırılamaz.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Veritabanına eklenirken hata %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>Sorgu çalıştırılacak veritabanı belirtilmemiş.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>Sorgu çalıştırılacak veritabanı açılmamış.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Veritabanındaki ikincil anahtar devredışı bırakılamadı. Detaylar: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Veritabanı işlemi başlatılamadı. Detaylar: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Yarıda kesildi</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Veritabanı işlemi başarılı bitirilemedi. Detaylar: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation>Yeni satır referansı</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation>Eski satır referansı</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>Yeni tablo adı</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>Yeni indeks</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>Yeni view adı</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>Yeni trigger adı</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>Tablo ya da kolon takma adı</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>işlem adı</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>Yeni kolon adı</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation>Kolon veri tipi</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation>Constraint adı</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>Hata mesajı</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation>Herhangi bir kelime</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>Varsayılan veritabanı</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation>Geçici nesneler veritabanı</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>SQL geçmişini silme işlemi başlatılamadı, bu sebeple silinemedi.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>SQL geçmişini silme işlemi commitlenemedi, bu sebeple silinmedi.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>%1 veritabanı eklenemedi: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>%2 hatası sebebiyle %1 veritabanı güncellenemedi</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Veritabanı dosyası bulunamadı.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>Hiçbir destekleyen eklenti yüklenmedi.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation>Veritabanı açılamadı.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>Hiçbir veritabanı sürücü eklentisi bulunamadı.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>Hedef veritabanında tablo yaratırken hata: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation>Tablo ayrıştırılamadı.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>Veritabanı dosyası</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>Değişiklikler</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>Yarıda kesildi.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>en az: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>en fazla: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>Sabit</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>Sabit değer:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>Sözlük</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>Kütüphane dosyası</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>Sözlük dosyası seç</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>Kelime ayracı</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>Boşluk</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>Satır sonu</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>Sıralandı</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>Rastgele</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>Rasgele Numara</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>Ön Ek Yok</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>En düşük değer</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>En yüksek değer</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>Son ek yok</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>Rastgele metin</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>En az uzunluk</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>Şefaflık</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>0&apos;dan 9&apos;a kadar sayılar.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>Sayısal</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>Boşluk</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>İkili (Binary)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>En yüksek uzunluk</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>Komut dizini</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>Dil</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>Yardım</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>Sıra</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>Başlangıç değeri:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>Adım:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation>Veritabanı açılamadı: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>Sözdizimi hatası</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>Genel amaçlı</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>Veritabanı desteği</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Kod biçimleyici</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Betik dilleri</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>Dışa aktarılıyor</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>İçeri aktarılıyor</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Tablo doldurma</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation>Veritabanı açık değil.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>Hata %1 den %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>Veritabanı</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Yürütme tarihi</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Harcanan zaman</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Etkilenen satırlar</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation>Güncelleştirmeler kontrol edilemedi (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_uk_UA.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_uk_UA.ts
new file mode 100644
index 0000000..5abb81e
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_uk_UA.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="uk" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Неможливо виконати запит в закритій базі даних.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>Помилка підключення бази даних %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>Не вказана база даних для виконання запитів.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>Не відкрита база даних для виконання запитів.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Не вдалося відключити зовнішні ключі в базі даних. Подробиці: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Неможливо розпочати транзакцію. Подробиці: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Перервано</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Неможливо завершити транзакцію. Подробиці: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation>Нове посилання на рядок</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation>Старе посилання на рядок</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>Назва нової таблиці</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>Назва нового індексу</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>Нова назва розрізу даних (view)</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>Назва нової тригера</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>Псевдонім таблиці або стовпця</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>назва транзакції</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>Нове ім&apos;я стовпця</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation>Тип даних стовпця</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation>Назва обмеження</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>Повідомлення про помилку</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation>Будь-яке слово</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>База даних за замовчуванням</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation>База даних тимчасових об&apos;єктів</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Не вдалося почати транзакцію бази даних для видалення SQL історії, тому вона не видалена.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>Не вдалося завершити транзакцію бази даних для видалення SQL історії, тому вона не видалена.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>Не вдалося додати базу даних %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>База даних %1 не може бути оновлена через помилку: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Файл бази даних не існує.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>Модуль підтримки не завантажений.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation>Неможливо ініціалізувати базу даних.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>Не знайдено відповідного драйвера бази даних.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>Помилка створення таблиці в цільовій базі даних: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation>Не вдалося проаналізувати структуру таблиці.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation>Неможливо приєднати базу даних %1 до бази даних %2, тому дані таблиці %3 будуть скопійовані за допомогою SQLiteStudio. Цей метод може бути повільним для великих таблиць, так що наберіться терпіння.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation>Помилка при копіюванні даних з таблиці %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation>Помилка при копіюванні даних в таблицю %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation>Помилка при видаленні розрізу даних (view) %1: %2
+Таблиці, індекси, тригери та перегляди, що скопійовані в базу %3, залишаться.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation>Помилка створення таблиці в цільовій базі даних: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation>Помилка створення індексу в цільовій базі даних: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation>Помилка створення тригера в цільовій базі даних: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation>Не вдалося проаналізувати об&apos;єкт &apos;%1&apos; для того, щоб перемістити або скопіювати його.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>Назва бази даних</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>Файл бази даних</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>Дата виконання</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>Зміни</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation>Модуль експорту %1 не підтримує експорт результатів запиту.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation>Модуль експорту %1 не підтримує експорт таблиць.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation>Модуль експорту %1 не підтримує експорт бази даних.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation>Формат експорту &apos;%1&apos; не підтримується. Підтримуються формати: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>Експорт до буфера обміну пройшов успішно.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation>Експорт у файл &apos;%1&apos; успішно здійснено.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>Видалення пройшло успішно.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation>Не вдалося експортувати до файлу %1. Файл не може бути відкритий для запису.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>Помилка під час експорту результатів запиту: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation>Помилка під час підрахунку ширини стовпця даних для експорту з результатів запиту: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation>Неможливо проаналізувати структуру %1. Даний об&apos;єкт буде виключений при виконанні експорту.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation>Помилка при читанні даних для експорту з таблиці %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation>Помилка при підрахунку кількості даних для експорту з таблиці %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation>Помилка при підрахунку ширини стовпчика даних для експорту з таблиці %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation>Некоректна кількість аргументів для функції &apos;%1&apos;. Очікувалось %2, але отримано %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation>Немає такої функції, зареєстрованої в SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation>Функція %1(%2) була зареєстрована на мові %3, але плагін, що підтримує мову, наразі не завантажений.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>Невірний шаблон регулярного виразу: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>Неможливо відкрити файл %1 для читання: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>Неможливо відкрити файл %1 для запису: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>Помилка при запису в файл %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation>Непідтримуваний скриптова мова: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation>Неможливо ініціалізувати текстовий кодек для експорту. Використовується кодек за замовчуванням: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation>Дані в таблицю &apos;%1&apos; імпортовані успішно. Кількість імпортованих рядків: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation>Модуль імпорту не виявив жодного стовпчика.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation>Не вдалося почати транзакцію для імпортування даних: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation>Не вдалося завершити транзакцію для імпортованих даних: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation>Таблиця &apos;%1&apos; має менше стовпців, ніж в імпортованих даних. Зайві стовпці даних будуть проігноровані.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation>У таблиці &apos;%1&apos; стовпців більше, ніж в імпортованих даних. Відсутні стовпці будуть залишені порожніми.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation>Не вдалося створити таблицю для імпорту: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation>Помилка при імпорті даних: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>Перервано.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation>Не вдалося імпортувати дані у рядку %1. Рядок було проігноровано. Подробиці проблеми: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>Не вдалося завантажити плагін %1, тому що він конфліктує з плагіном %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation>Неможливо завантажити модуль%1, тому що не завантажений необхідний йому модуль: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation>Не вдалося завантажити плагін %1. Подробиці помилки: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation>Не вдалося завантажити плагін %1 (помилка при ініціалізації плагіна).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>мінімум: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>максимум: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>Константа</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>Значення константи:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>Словник</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>Файл словника</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>Вибрати файл словника</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>Розділювач слів</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>Пробіл</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>Перенесення рядка</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>Спосіб використання слів</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>По порядку</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>Випадковим чином</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>Таблиця &apos;%1&apos; успішно заповнена.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>Випадкове число</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>Префікс константи</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>Без префікса</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>Мінімальне значення</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>Максимальне значення</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>Суфікс константи</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>Без суфікса</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>Випадковий текст</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation>Використовувати символи з стандартного набору:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>Мінімальна довжина</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation>Букви від a до z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>Буквений</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>Числа від 0 до 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>Цифровий</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation>Пробіл, табуляція та символ нового рядка.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>Пробіл</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation>Включає всі перераховані вище і всі інші.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>Бінарний</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>Використовувати символи з мого набору:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>Максимальна довжина</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation>При вказівці одного символу кілька разів, ймовірність його використання збільшується.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>Скрипт</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation>Ініціалізаційний код (необов&apos;язково)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation>Код для кожного кроку</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>Мова</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>Допомога</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>Послідовність</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>Початкове значення:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>Крок:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation>Не вдалося почати транзакцію для заповнення таблиці. Подробиці помилки: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation>Помилка при заповненні таблиці: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>Не вдалося завершити транзакцію після заповнення таблиці. Подробиці помилки: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Не вдалося відкрити файл &apos;%1&apos; для читання: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation>Не вдалося відкрити базу даних: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation>Результуюча вибірка застаріла або жоден рядок не доступний.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation>Не вдалося завантажити розширення %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation>Не вдалося закрити базу даних: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation>Не вдалося підключити базу даних %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>Незавершений запит.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation>Переповнення стека аналізатора</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>Синтаксична помилка</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation>Не вдалося відкрити файл словника %1 для читання.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation>Файл словника має існувати та бути читабельним.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation>Максимальне значення не може бути менше мінімального значення.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation>Максимальна довжина не може бути меншою мінімальної довжини.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation>Довільний набір символів не може бути пустим.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation>Неможливо знайти модуль підтримки скриптового мови: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation>Помилка при виконанні ініціалізації коду заповнення: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation>Помилка при виконанні коду заповнення: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation>Виберіть мову реалізації.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation>Заповнюючий код не може бути порожнім.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation>Неможливо визначити джерело даних для стовпця: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation>Неможливо визначити таблицю для стовпця &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation>Неможливо ініціалізувати конфігураційний файл. Будь-які зміни конфігурації і історія запитів будуть втрачені після перезавантаження програми. Неможливо створити файл в наступних місцях: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>Загального призначення</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>Підтримка баз даних</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Форматування коду</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Скриптові мови</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>Експорт</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>Імпорт</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Заповнення таблиць</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>Таблиця %1 посилається на таблицю %2, але опис зовнішнього ключа не буде оновлено для опису нової таблиці через проблеми з аналізом DDL таблиці %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>Всі стовпчики, проіндексовані індексом %1, видалені. Індекс не буде відтворений після модифікації таблиці.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation>Виникла проблема при обробці тригера %1. Згодом він не буде повністю оновлений і вимагає вашої уваги.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>Всі стовпчики, зачеплені в тригері %1, видалені. Тригер буде відтворений після модифікації таблиці.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>Не вдалося оновити тригер %1 відповідно до зміни таблиці %2.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>Неможливо оновити розріз даних (view) %1 у відповідності зі зміною таблиці %2.
+Вид залишиться таким, як є.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation>Виникла проблема при оновленні конструкції %1 всередині тригера %2. Одна з вкладених конструкцій %1, яка можливо посилається на таблицю %3, не може бути коректно модифікована. Можливо необхідне ручна правка тригера.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation>Неможливо проаналізувати DDL створюваного розрізу даних (view). Подробиці: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation>Проаналізований запит не є запитом CREATE VIEW. Тип запиту: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation>SQLiteStudio не вдалося визначити стовпці, які повертаються новим розрізом даних (view), тому неможливо вказати, які тригери можуть зламатися в процесі відтворення.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation>Виконання перервано.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation>Базу даних не відкрито.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>Одночасно може бути виконаний тільки один запит.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>Сталася помилка під час виконання count(*) запиту, тому розбивка даних по сторінках буде вимкнено. Деталі помилки з бази даних: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation>SQLiteStudio не вдалося витягти метадані із запиту. Результат не зможе бути редагованим.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation>Немає доступної бази даних в поточному контексті, під час виклику JavaScript&apos;s %1 команди.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>Помилка в команді %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Не вдалося відкрити файл &apos;%1&apos; для читання: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>База даних</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Дата виконання</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Витрачено часу</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Торкнулося рядків</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation>Не вдається перевірити наявність оновлень (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_vi_VN.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_vi_VN.ts
new file mode 100644
index 0000000..173c03e
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_vi_VN.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="vi" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation type="unfinished">Cannot execute query on closed database.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation type="unfinished">Error attaching database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not defined.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">The database for executing queries was not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not disable foreign keys in the database. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not start a database transaction. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Interrupted</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation type="unfinished">Could not commit a database transaction. Details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation type="unfinished">New row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation type="unfinished">Old row reference</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation type="unfinished">New table name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation type="unfinished">New index name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation type="unfinished">New view name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation type="unfinished">New trigger name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation type="unfinished">Table or column alias</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation type="unfinished">transaction name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation type="unfinished">New column name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation type="unfinished">Column data type</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation type="unfinished">Constraint name</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation type="unfinished">Error message</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation type="unfinished">Any word</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation type="unfinished">Default database</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation type="unfinished">Temporary objects database</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation type="unfinished">Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation type="unfinished">Could not add database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation type="unfinished">Database %1 could not be updated, because of an error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation type="unfinished">Database file doesn&apos;t exist.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation type="unfinished">No supporting plugin loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation type="unfinished">Database could not be initialized.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation type="unfinished">No suitable database driver plugin found.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation type="unfinished">Error while creating table in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation type="unfinished">Could not parse table.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation type="unfinished">Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation type="unfinished">Error while copying data for table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation type="unfinished">Error while copying data to table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation type="unfinished">Error while creating view in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation type="unfinished">Error while creating index in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation type="unfinished">Error while creating trigger in target database: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation type="unfinished">Could not parse object &apos;%1&apos; in order to move or copy it.</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database name</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Database file</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Date of execution</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation type="unfinished">Changes</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation type="unfinished">Export to the clipboard was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation type="unfinished">Export was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation type="unfinished">Error while exporting query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation type="unfinished">No such function registered in SQLiteStudio: %1(%2)</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation type="unfinished">Invalid regular expression pattern: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation type="unfinished">Could not open file %1 for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation type="unfinished">Could not open file %1 for writting: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation type="unfinished">Error while writting to file %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation type="unfinished">Unsupported scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation type="unfinished">Error while importing data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation type="unfinished">Interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation type="unfinished">max: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation type="unfinished">Constant</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation type="unfinished">Constant value:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation type="unfinished">Dictionary</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation type="unfinished">Dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation type="unfinished">Pick dictionary file</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation type="unfinished">Word separator</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation type="unfinished">Line break</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation type="unfinished">Method of using words</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation type="unfinished">Ordered</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation type="unfinished">Randomly</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation type="unfinished">Table &apos;%1&apos; populated successfully.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation type="unfinished">Random number</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation type="unfinished">Constant prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation type="unfinished">No prefix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation type="unfinished">Minimum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation type="unfinished">Maximum value</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation type="unfinished">Constant suffix</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation type="unfinished">No suffix</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation type="unfinished">Random text</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation type="unfinished">Use characters from common sets:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation type="unfinished">Minimum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation type="unfinished">Letters from a to z.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation type="unfinished">Alpha</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation type="unfinished">Numbers from 0 to 9.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation type="unfinished">Numeric</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation type="unfinished">Whitespace</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation type="unfinished">Includes all above and all others.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation type="unfinished">Binary</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation type="unfinished">Use characters from my custom set:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation type="unfinished">Maximum length</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation type="unfinished">Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation type="unfinished">Initialization code (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation type="unfinished">Language</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation type="unfinished">Help</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation type="unfinished">Sequence</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation type="unfinished">Start value:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation type="unfinished">Step:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation type="unfinished">Could not start transaction in order to perform table populating. Error details: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation type="unfinished">Error while populating table: %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation type="unfinished">Could not commit transaction after table populating. Error details: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation type="unfinished">Could not open database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation type="unfinished">Result set expired or no row available.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation type="unfinished">Could not load extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation type="unfinished">Could not close database: %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation type="unfinished">Could not attach database %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation type="unfinished">Incomplete query.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation type="unfinished">Parser stack overflow</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation type="unfinished">Syntax error</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation type="unfinished">Could not open dictionary file %1 for reading.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation type="unfinished">Dictionary file must exist and be readable.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation type="unfinished">Maximum value cannot be less than minimum value.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation type="unfinished">Maximum length cannot be less than minimum length.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation type="unfinished">Custom character set cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation type="unfinished">Could not find plugin to support scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation type="unfinished">Error while executing populating initial code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation type="unfinished">Error while executing populating code: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation type="unfinished">Select implementation language.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation type="unfinished">Implementation code cannot be empty.</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation type="unfinished">Could not resolve data source for column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation type="unfinished">Could not resolve table for column &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation type="unfinished">Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">General purpose</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Database support</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Exporting</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Importing</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation type="unfinished">Table populating</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation type="unfinished">Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation type="unfinished">There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation type="unfinished">All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation type="unfinished">Cannot not update trigger %1 according to table %2 modification.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation type="unfinished">Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation type="unfinished">There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation type="unfinished">Could not parse DDL of the view to be created. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation type="unfinished">Parsed query is not CREATE VIEW. It&apos;s: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation type="unfinished">SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation type="unfinished">Execution interrupted.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation type="unfinished">Database is not open.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation type="unfinished">Only one query can be executed simultaneously.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation type="unfinished">An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation type="unfinished">SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation type="unfinished">No database available in current context, while called JavaScript&apos;s %1 command.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation type="unfinished">Error from %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation type="unfinished">Could not open file &apos;%1&apos; for reading: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Database</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Execution date</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Time spent</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">Rows affected</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation type="unfinished">SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation type="unfinished">Could not check for updates (%1).</translation>
+ </message>
+ </context>
+</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.qm
deleted file mode 100644
index be651ee..0000000
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.qm
+++ /dev/null
@@ -1 +0,0 @@
-<d!` \ No newline at end of file
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts
index 1d68aaa..b0ced46 100644
--- a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_CN.ts
@@ -1,1153 +1,1101 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.1" language="zh_CN">
-<context>
+<TS version="2.1" language="zh-CN" sourcelanguage="en">
+ <context>
<name>AbstractDb</name>
<message>
- <location filename="../db/abstractdb.cpp" line="343"/>
- <location filename="../db/abstractdb.cpp" line="360"/>
- <source>Cannot execute query on closed database.</source>
- <translation>无法在关闭的数据库上执行查询。</translation>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>无法在关闭的数据库上执行查询。</translation>
</message>
<message>
- <location filename="../db/abstractdb.cpp" line="643"/>
- <source>Error attaching database %1: %2</source>
- <translation>附加数据库 %1 时发生错误:%2</translation>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>附加数据库 %1 时发生错误:%2</translation>
</message>
-</context>
-<context>
- <name>BugReporter</name>
<message>
- <source>Invalid login or password</source>
- <translation type="vanished">用户名或密码错误</translation>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ChainExecutor</name>
<message>
- <location filename="../db/chainexecutor.cpp" line="37"/>
- <source>The database for executing queries was not defined.</source>
- <comment>chain executor</comment>
- <translation>用于执行查询的数据库没有被定义。</translation>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>没有定义执行查询的数据库。</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="44"/>
- <source>The database for executing queries was not open.</source>
- <comment>chain executor</comment>
- <translation>用于执行查询的数据库没有打开。</translation>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>没有打开执行查询的数据库。</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="54"/>
- <source>Could not disable foreign keys in the database. Details: %1</source>
- <comment>chain executor</comment>
- <translation>无法在数据库中禁用外键。详情:%1</translation>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>未能禁用该数据库中的外键。详情:%1</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="62"/>
- <source>Could not start a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>无法开始数据库事务。详情:%1</translation>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>未能启动数据库事务。详情:%1</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="89"/>
- <source>Interrupted</source>
- <comment>chain executor</comment>
- <translation>中断</translation>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>中断</translation>
</message>
<message>
- <location filename="../db/chainexecutor.cpp" line="151"/>
- <source>Could not commit a database transaction. Details: %1</source>
- <comment>chain executor</comment>
- <translation>无法提交数据库事务。详情:%1</translation>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>未能提交数据库事务。详情:%1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>CompletionHelper</name>
<message>
- <location filename="../completionhelper.cpp" line="196"/>
- <source>New row reference</source>
- <translation type="unfinished">新的行引用</translation>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation>新的行引用</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="203"/>
- <source>Old row reference</source>
- <translation type="unfinished">旧的行引用</translation>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation>旧的行引用</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="208"/>
- <source>New table name</source>
- <translation>新的表名</translation>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>新的表名</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="211"/>
- <source>New index name</source>
- <translation>新的索引名</translation>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>新的索引名</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="214"/>
- <source>New view name</source>
- <translation>新的视图名</translation>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>新的视图名</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="217"/>
- <source>New trigger name</source>
- <translation>新的触发器名</translation>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>新的触发器名</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="220"/>
- <source>Table or column alias</source>
- <translation>表或字段别名</translation>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>表或列别名</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="223"/>
- <source>transaction name</source>
- <translation>事务名</translation>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>事务名</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="226"/>
- <source>New column name</source>
- <translation>新字段名</translation>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>新列名</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="229"/>
- <source>Column data type</source>
- <translation>字段数据类型</translation>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation>列数据类型</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="232"/>
- <source>Constraint name</source>
- <translation>约束名</translation>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation>约束名</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="245"/>
- <source>Error message</source>
- <translation>错误信息</translation>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>错误信息</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="289"/>
- <source>Collation name</source>
- <translation>排序规则名</translation>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation>任意单词</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="304"/>
- <source>Any word</source>
- <translation type="unfinished">任意单词</translation>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>默认数据库</translation>
</message>
<message>
- <location filename="../completionhelper.cpp" line="485"/>
- <source>Default database</source>
- <translation>默认数据库</translation>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation>临时对象数据库</translation>
</message>
- <message>
- <location filename="../completionhelper.cpp" line="486"/>
- <source>Temporary objects database</source>
- <translation type="unfinished">临时对象数据库</translation>
- </message>
-</context>
-<context>
+ </context>
+ <context>
<name>ConfigImpl</name>
<message>
- <location filename="../services/impl/configimpl.cpp" line="863"/>
- <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished">无法为删除 SQL 历史开始数据库事务,因此它没有被删除。</translation>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>删除 SQL 历史的数据库事务启动失败,因此未删除。</translation>
</message>
<message>
- <location filename="../services/impl/configimpl.cpp" line="870"/>
- <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
- <translation type="unfinished">无法为删除 SQL 历史提交数据库事务,因此它没有被删除。</translation>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>删除 SQL 历史的数据库事务提交失败,因此未删除。</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>DbManagerImpl</name>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
- <source>Could not add database %1: %2</source>
- <translation>无法添加数据库 %1:%2</translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>无法添加数据库 %1:%2</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="139"/>
- <source>Database %1 could not be updated, because of an error: %2</source>
- <translation>数据库 %1 没有被更新,由于错误:%2</translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>数据库 %1 没有被更新,由于错误:%2</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
- <source>Database file doesn&apos;t exist.</source>
- <translation>数据库文件不存在</translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>数据库文件不存在。</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="357"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="609"/>
- <source>No supporting plugin loaded.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>没有加载所需的插件。</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="527"/>
- <source>Database could not be initialized.</source>
- <translation>数据库无法被初始化。</translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation>无法初始化数据库。</translation>
</message>
<message>
- <location filename="../services/impl/dbmanagerimpl.cpp" line="537"/>
- <source>No suitable database driver plugin found.</source>
- <translation>没有找到合适的数据库驱动插件</translation>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>没有找到合适的数据库驱动插件。</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>DbObjectOrganizer</name>
<message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <location filename="../dbobjectorganizer.cpp" line="412"/>
- <source>Error while creating table in target database: %1</source>
- <translation>在目标数据库中创建表时发生错误:%1</translation>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>在目标数据库中创建表时发生错误:%1</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="380"/>
- <source>Could not parse table.</source>
- <translation>无法解析表。</translation>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation>无法解析表。</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="426"/>
- <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation>数据库 %1 无法附加到数据库 %2,因此将使用 SQLiteStudio 做中间人来复制表 %3 的数据。此方法用于大型表格可能会很慢,请耐心等待。</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="447"/>
- <source>Error while copying data for table %1: %2</source>
- <translation>在从表 %1 中复制数据时发生错误:%2</translation>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation>在从表 %1 中复制数据时发生错误:%2</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="466"/>
- <location filename="../dbobjectorganizer.cpp" line="473"/>
- <location filename="../dbobjectorganizer.cpp" line="496"/>
- <source>Error while copying data to table %1: %2</source>
- <translation>在向表 %1 中复制数据时发生错误:%2</translation>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation>在向表 %1 中复制数据时发生错误:%2</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="535"/>
- <source>Error while dropping source view %1: %2
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
Tables, indexes, triggers and views copied to database %3 will remain.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="542"/>
- <source>Error while creating view in target database: %1</source>
- <translation>在目标数据库中创建视图时发生错误:%1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="547"/>
- <source>Error while creating index in target database: %1</source>
- <translation>在目标数据库中创建索引时发生错误:%1</translation>
- </message>
- <message>
- <location filename="../dbobjectorganizer.cpp" line="552"/>
- <source>Error while creating trigger in target database: %1</source>
- <translation>在目标数据库中创建触发器时发生错误:%1</translation>
+ <translation>在丢弃源视图 %1:%2 时出错
+已拷贝至数据库 %3 的表格、索引、触发器和视图将被保留。</translation>
</message>
<message>
- <location filename="../dbobjectorganizer.cpp" line="773"/>
- <location filename="../dbobjectorganizer.cpp" line="780"/>
- <location filename="../dbobjectorganizer.cpp" line="789"/>
- <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
- <translation type="unfinished"></translation>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation>在目标数据库中创建视图时发生错误:%1</translation>
</message>
-</context>
-<context>
- <name>DbVersionConverter</name>
<message>
- <location filename="../dbversionconverter.cpp" line="932"/>
- <source>Target file exists, but could not be overwritten.</source>
- <translation>目标文件存在,但无法被覆写。</translation>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation>在目标数据库中创建索引时发生错误:%1</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="951"/>
- <source>Could not find proper database plugin to create target database.</source>
- <translation>无法找到合适的数据库插件用以创建目标数据库。</translation>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation>在目标数据库中创建触发器时发生错误:%1</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="1185"/>
- <source>Error while converting database: %1</source>
- <translation>转换数据库时发生错误:%1</translation>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation>无法解析对象 &apos;%1&apos; 用于移动或复制。</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>DdlHistoryModel</name>
<message>
- <location filename="../ddlhistorymodel.cpp" line="65"/>
- <source>Database name</source>
- <comment>ddl history header</comment>
- <translation>数据库名</translation>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>数据库名</translation>
</message>
<message>
- <location filename="../ddlhistorymodel.cpp" line="67"/>
- <source>Database file</source>
- <comment>ddl history header</comment>
- <translation>数据库文件</translation>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>数据库文件</translation>
</message>
<message>
- <location filename="../ddlhistorymodel.cpp" line="69"/>
- <source>Date of execution</source>
- <comment>ddl history header</comment>
- <translation>执行日期</translation>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>执行日期</translation>
</message>
<message>
- <location filename="../ddlhistorymodel.cpp" line="71"/>
- <source>Changes</source>
- <comment>ddl history header</comment>
- <translation type="unfinished">影响</translation>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>影响</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ExportManager</name>
<message>
- <location filename="../services/exportmanager.cpp" line="72"/>
- <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
- <translation>导出插件 %1 不支持导出查询结果。</translation>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation>导出插件 %1 不支持导出查询结果。</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="98"/>
- <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
- <translation>导出插件 %1 不支持导出表。</translation>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation>导出插件 %1 不支持导出表。</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="122"/>
- <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
- <translation>导出插件 %1 不支持导出数据库。</translation>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation>导出插件 %1 不支持导出数据库。</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="155"/>
- <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
- <translation type="unfinished">导出格式 &apos;%1&apos; 不受支持,受支持的格式是:%2。</translation>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation>导出格式 &apos;%1&apos; 不受支持,受支持的格式是:%2。</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="218"/>
- <source>Export to the clipboard was successful.</source>
- <translation>成功导出到剪贴板。</translation>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>成功导出到剪贴板。</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="222"/>
- <source>Export to the file &apos;%1&apos; was successful.</source>
- <translation>成功导出到文件 &apos;%1&apos;。</translation>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation>成功导出到文件 &apos;%1&apos;。</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="224"/>
- <source>Export was successful.</source>
- <translation>导出成功。</translation>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>导出成功。</translation>
</message>
<message>
- <location filename="../services/exportmanager.cpp" line="266"/>
- <source>Could not export to file %1. File cannot be open for writting.</source>
- <translation>无法导出到文件 %1。文件无法以写模式打开。</translation>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation>无法导出到文件 %1。文件无法以写模式打开。</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ExportWorker</name>
<message>
- <location filename="../exportworker.cpp" line="122"/>
- <source>Error while exporting query results: %1</source>
- <translation>导出查询结果时发生错误:%1</translation>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>导出查询结果时发生错误:%1</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="202"/>
- <source>Error while counting data column width to export from query results: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation>计算从查询结果来导出数据的列宽度时出错:%1</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="346"/>
- <location filename="../exportworker.cpp" line="404"/>
- <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
- <translation type="unfinished">无法为导出解析 %1。因此它将不会被包含在导出输出中。</translation>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation>无法为导出解析 %1。因此它将不会被包含在导出输出中。</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="608"/>
- <source>Error while reading data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation>从表 %1读取数据并导出时出错:%2</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="616"/>
- <source>Error while counting data to export from table %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation>计算从 %1: %2 表导出数据的数量时出错</translation>
</message>
<message>
- <location filename="../exportworker.cpp" line="632"/>
- <source>Error while counting data column width to export from table %1: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation>计算从 %1: %2 表导出数据的列宽度时出错</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>FunctionManagerImpl</name>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="234"/>
- <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
- <translation>无效的参数个数。对于函数 %1,需要 %2 个,但得到 %3 个。</translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation>无效的参数个数。对于函数 %1,需要 %2 个,但得到 %3 个。</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="347"/>
- <source>No such function registered in SQLiteStudio: %1(%2)</source>
- <translation>没有这样的一个在 SQLiteStudio 中注册的函数:%1(%2)</translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation>SQLiteStudio 中没有注册该函数:%1(%2)</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="353"/>
- <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
- <translation>函数 %1(%2) 以 %3 语言被注册。但是支持该语言的插件没有被正确加载。</translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation>函数 %1(%2) 以 %3 语言注册,但是支持该语言的插件没有被正确加载。</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="371"/>
- <source>Invalid regular expression pattern: %1</source>
- <translation>无效的正则表达式:%1</translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>无效的正则表达式模式:%1</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="390"/>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="423"/>
- <source>Could not open file %1 for reading: %2</source>
- <translation>无法以读模式打开文件 %1:%2</translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>无法以读模式打开文件 %1:%2</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="445"/>
- <source>Could not open file %1 for writting: %2</source>
- <translation>无法以写模式打开文件 %1:%2</translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>无法以写模式打开文件 %1:%2</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="465"/>
- <source>Error while writting to file %1: %2</source>
- <translation>写入文件 %1 时发生错误:%2</translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>写入文件 %1 时发生错误:%2</translation>
</message>
<message>
- <location filename="../services/impl/functionmanagerimpl.cpp" line="483"/>
- <source>Unsupported scripting language: %1</source>
- <translation>不支持的脚本语言:%1</translation>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation>不支持的脚本语言:%1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>GenericExportPlugin</name>
<message>
- <location filename="../plugins/genericexportplugin.cpp" line="20"/>
- <source>Could not initialize text codec for exporting. Using default codec: %1</source>
- <translation>无法为导出初始化文本编解码器。使用默认的编解码器:%1</translation>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation>无法为导出初始化文本编解码器。使用默认的编解码器:%1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ImportManager</name>
<message>
- <location filename="../services/importmanager.cpp" line="96"/>
- <source>Imported data to the table &apos;%1&apos; successfully.</source>
- <translation>成功导入数据至表 %1</translation>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation>成功向表 &apos;%1&apos; 导入数据。影响行数:%2</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>ImportWorker</name>
<message>
- <location filename="../importworker.cpp" line="24"/>
- <source>No columns provided by the import plugin.</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation>导入插件没有提供列。</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="30"/>
- <source>Could not start transaction in order to import a data: %1</source>
- <translation>无法为导入数据开始事务:%1</translation>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation>无法为导入数据开始事务:%1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="52"/>
- <source>Could not commit transaction for imported data: %1</source>
- <translation>无法为导入数据提交事务:%1</translation>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation>无法为导入数据提交事务:%1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="100"/>
- <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
- <translation>表 %1 的字段数少于即将导入数据的字段数。过多的字段将会被忽略。</translation>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation>表 &apos;%1&apos; 的列少于即将导入数据的列数。过多的数据列将被忽略。</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="105"/>
- <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
- <translation>表 %1 的字段数多于即将导入数据的字段数。一些字段将会被置为空值。</translation>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation>表 &apos;%1&apos; 的列多于即将导入数据的列数。一些字段将被留空。</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="124"/>
- <source>Could not create table to import to: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation>未能创建导入所用的表:%1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="177"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Error while importing data: %1</source>
- <translation>导入数据时发生错误:%1</translation>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation>导入数据时发生错误:%1</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="133"/>
- <location filename="../importworker.cpp" line="184"/>
- <source>Interrupted.</source>
- <comment>import process status update</comment>
- <translation>中断。</translation>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>中断。</translation>
</message>
<message>
- <location filename="../importworker.cpp" line="172"/>
- <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
- <translation>无法导入行数为 %1 的数据,该行将会被忽略。问题详情:%2</translation>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation>无法导入行号 %1 的数据。该行将被忽略。问题详情:%2</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PluginManagerImpl</name>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="543"/>
- <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
- <translation>无法加载插件 %1,因为它与这些插件冲突:%2。</translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>无法加载插件 %1,因为它与这些插件冲突:%2。</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="554"/>
- <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
- <translation>无法加载插件 %1,因为它依赖的这些插件没有被加载:%2。</translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation>无法加载插件 %1,因为它依赖的这些插件没有被加载:%2。</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="563"/>
- <source>Cannot load plugin %1. Error details: %2</source>
- <translation>无法加载插件 %1。错误详情:52</translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation>无法加载插件 %1。错误详情:%2</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="579"/>
- <source>Cannot load plugin %1 (error while initializing plugin).</source>
- <translation>无法加载插件 %1(初始化插件时发生错误)。</translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation>无法加载插件 %1(初始化插件时发生错误)。</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
- <source>min: %1</source>
- <comment>plugin dependency version</comment>
- <translation>最小:%1</translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>最小:%1</translation>
</message>
<message>
- <location filename="../services/impl/pluginmanagerimpl.cpp" line="732"/>
- <source>max: %1</source>
- <comment>plugin dependency version</comment>
- <translation>最大:%1</translation>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>最大:%1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateConstant</name>
<message>
- <location filename="../plugins/populateconstant.cpp" line="10"/>
- <source>Constant</source>
- <comment>populate constant plugin name</comment>
- <translation>常量</translation>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>常量</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateConstantConfig</name>
<message>
- <location filename="../plugins/populateconstant.ui" line="20"/>
- <source>Constant value:</source>
- <translation>常量值:</translation>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>常量值:</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateDictionary</name>
<message>
- <location filename="../plugins/populatedictionary.cpp" line="15"/>
- <source>Dictionary</source>
- <comment>dictionary populating plugin name</comment>
- <translation type="unfinished">字典</translation>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>字典</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateDictionaryConfig</name>
<message>
- <location filename="../plugins/populatedictionary.ui" line="20"/>
- <source>Dictionary file</source>
- <translation type="unfinished">字典文件</translation>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>字典文件</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="29"/>
- <source>Pick dictionary file</source>
- <translation type="unfinished">选择字典文件</translation>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>选择字典文件</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="39"/>
- <source>Word separator</source>
- <translation>文本分隔符</translation>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>单词分隔符</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="45"/>
- <source>Whitespace</source>
- <translation>空白</translation>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>空白</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="58"/>
- <source>Line break</source>
- <translation type="unfinished">换行</translation>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>换行</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="74"/>
- <source>Method of using words</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>单词用法</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="80"/>
- <source>Ordered</source>
- <translation type="unfinished">有序的</translation>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>有序</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.ui" line="93"/>
- <source>Randomly</source>
- <translation type="unfinished">随机地</translation>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>随机</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateManager</name>
<message>
- <location filename="../services/populatemanager.cpp" line="89"/>
- <source>Table &apos;%1&apos; populated successfully.</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>表 &apos;%1&apos; 填充成功。</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandom</name>
<message>
- <location filename="../plugins/populaterandom.cpp" line="12"/>
- <source>Random number</source>
- <translation type="unfinished">随机数</translation>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>随机数</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandomConfig</name>
<message>
- <location filename="../plugins/populaterandom.ui" line="20"/>
- <source>Constant prefix</source>
- <translation type="unfinished">常量前缀</translation>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>固定前缀</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="26"/>
- <source>No prefix</source>
- <translation type="unfinished">无前缀</translation>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>无前缀</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="39"/>
- <source>Minimum value</source>
- <translation type="unfinished">最小值</translation>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>最小值</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="61"/>
- <source>Maximum value</source>
- <translation type="unfinished">最大值</translation>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>最大值</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="86"/>
- <source>Constant suffix</source>
- <translation type="unfinished">常量后缀</translation>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>固定后缀</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.ui" line="92"/>
- <source>No suffix</source>
- <translation type="unfinished">无后缀</translation>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>无后缀</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandomText</name>
<message>
- <location filename="../plugins/populaterandomtext.cpp" line="12"/>
- <source>Random text</source>
- <translation type="unfinished">随机文本</translation>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>随机文本</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateRandomTextConfig</name>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="20"/>
- <source>Use characters from common sets:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation>使用常用字符集合:</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="36"/>
- <source>Minimum length</source>
- <translation>最小长度</translation>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>最小长度</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="64"/>
- <source>Letters from a to z.</source>
- <translation>字母a到z。</translation>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation>字母 a 到 z。</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="67"/>
- <source>Alpha</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>英文字母</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="77"/>
- <source>Numbers from 0 to 9.</source>
- <translation>数字0到9</translation>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>数字 0 到 9。</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="80"/>
- <source>Numeric</source>
- <translation>数字</translation>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>数字</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="90"/>
- <source>A whitespace, a tab and a new line character.</source>
- <translation></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation>空格、制表符和换行符。</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="93"/>
- <source>Whitespace</source>
- <translation>空白</translation>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>空白字符</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="103"/>
- <source>Includes all above and all others.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation>包括上述及其他所有。</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="106"/>
- <source>Binary</source>
- <translation type="unfinished">二进制</translation>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>二进制</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="119"/>
- <source>Use characters from my custom set:</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>使用自定义字符集合:</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="132"/>
- <source>Maximum length</source>
- <translation>最大长度</translation>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>最大长度</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.ui" line="160"/>
- <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation>字符被输入的次数越多,被使用的概率越大。</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateScript</name>
<message>
- <location filename="../plugins/populatescript.cpp" line="13"/>
- <source>Script</source>
- <translation>脚本</translation>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>脚本</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateScriptConfig</name>
<message>
- <location filename="../plugins/populatescript.ui" line="26"/>
- <source>Initialization code (optional)</source>
- <translation>初始化代码(可选)</translation>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation>初始化代码(可选)</translation>
</message>
<message>
- <location filename="../plugins/populatescript.ui" line="45"/>
- <source>Per step code</source>
- <translation>每一步代码</translation>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation>步进代码</translation>
</message>
<message>
- <location filename="../plugins/populatescript.ui" line="70"/>
- <source>Language</source>
- <translation>语言</translation>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>语言</translation>
</message>
<message>
- <location filename="../plugins/populatescript.ui" line="89"/>
- <source>Help</source>
- <translation>帮助</translation>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>帮助</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateSequence</name>
<message>
- <location filename="../plugins/populatesequence.cpp" line="13"/>
- <source>Sequence</source>
- <translation type="unfinished">序列</translation>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>序列</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateSequenceConfig</name>
<message>
- <location filename="../plugins/populatesequence.ui" line="33"/>
- <source>Start value:</source>
- <translation>开始值:</translation>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>起始值:</translation>
</message>
<message>
- <location filename="../plugins/populatesequence.ui" line="56"/>
- <source>Step:</source>
- <translation>步数:</translation>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>步进:</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>PopulateWorker</name>
<message>
- <location filename="../populateworker.cpp" line="23"/>
- <source>Could not start transaction in order to perform table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation>未能启动执行表填充的事务。错误细节:%1</translation>
</message>
<message>
- <location filename="../populateworker.cpp" line="70"/>
- <source>Error while populating table: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation>表填充出错:%1</translation>
</message>
<message>
- <location filename="../populateworker.cpp" line="81"/>
- <source>Could not commit transaction after table populating. Error details: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>未能提交表填充事务。错误细节:%1</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>QObject</name>
<message>
- <location filename="../db/abstractdb2.h" line="222"/>
- <location filename="../db/abstractdb3.h" line="384"/>
- <source>Could not open database: %1</source>
- <translation>无法打开数据库:%1</translation>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>无法以读模式打开文件 &apos;%1&apos;:%2</translation>
</message>
<message>
- <location filename="../db/abstractdb2.h" line="833"/>
- <location filename="../db/abstractdb3.h" line="1132"/>
- <source>Result set expired or no row available.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation>无法打开数据库:%1</translation>
</message>
<message>
- <location filename="../db/abstractdb3.h" line="328"/>
- <location filename="../db/abstractdb3.h" line="332"/>
- <source>Could not load extension %1: %2</source>
- <translation>无法加载扩展 %1:%2</translation>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation>结果集过期或者无可用的行。</translation>
</message>
<message>
- <location filename="../db/abstractdb3.h" line="405"/>
- <source>Could not close database: %1</source>
- <translation>无法关闭数据库:%1</translation>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation>无法加载扩展 %1:%2</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="138"/>
- <location filename="../dbversionconverter.cpp" line="143"/>
- <location filename="../dbversionconverter.cpp" line="196"/>
- <location filename="../dbversionconverter.cpp" line="243"/>
- <location filename="../dbversionconverter.cpp" line="248"/>
- <location filename="../dbversionconverter.cpp" line="256"/>
- <location filename="../dbversionconverter.cpp" line="336"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="202"/>
- <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation>无法关闭数据库:%1</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="429"/>
- <source>Could not parse statement: %1
-Error details: %2</source>
- <translation type="unfinished"></translation>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation>无法附加数据库 %1:%2</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="440"/>
- <location filename="../dbversionconverter.cpp" line="468"/>
- <location filename="../dbversionconverter.cpp" line="491"/>
- <location filename="../dbversionconverter.cpp" line="529"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
- <translation type="unfinished"></translation>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>不完整的查询。</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="497"/>
- <source>SQLite %1 does not support the &apos;%2&apos; clause in the &apos;%3&apos; statement.</source>
- <translation type="unfinished"></translation>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation>解析堆栈溢出</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="772"/>
- <source>SQLite %1 does not support current date or time clauses in expressions.</source>
- <translation type="unfinished"></translation>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>语法错误</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="775"/>
- <source>SQLite %1 does not support row value clauses in expressions.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation>无法以读模式打开字典文件 %1。</translation>
</message>
<message>
- <location filename="../dbversionconverter.cpp" line="786"/>
- <location filename="../dbversionconverter.cpp" line="789"/>
- <location filename="../dbversionconverter.cpp" line="800"/>
- <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation>字典文件必须存在且可读。</translation>
</message>
<message>
- <location filename="../impl/dbattacherimpl.cpp" line="115"/>
- <source>Could not attach database %1: %2</source>
- <translation>无法附加数据库 %1:%2</translation>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation>最大值不能小于最小值。</translation>
</message>
<message>
- <location filename="../parser/parsercontext.cpp" line="108"/>
- <location filename="../parser/parsercontext.cpp" line="110"/>
- <source>Incomplete query.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation>最大长度不能小于最小长度。</translation>
</message>
<message>
- <location filename="../parser/sqlite2_parse.cpp" line="1904"/>
- <location filename="../parser/sqlite3_parse.cpp" line="2212"/>
- <source>Parser stack overflow</source>
- <translation>解析堆栈溢出</translation>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation>自定义字符集合不能为空。</translation>
</message>
<message>
- <location filename="../parser/sqlite2_parse.cpp" line="4465"/>
- <location filename="../parser/sqlite3_parse.cpp" line="5195"/>
- <source>Syntax error</source>
- <translation>语法错误</translation>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation>无法找到提供脚本语言支持的插件:%1</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.cpp" line="30"/>
- <source>Could not open dictionary file %1 for reading.</source>
- <translation>无法以读模式打开字典文件 %1。</translation>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation>执行填充初始化代码时出错:%1</translation>
</message>
<message>
- <location filename="../plugins/populatedictionary.cpp" line="91"/>
- <source>Dictionary file must exist and be readable.</source>
- <translation>字典文件必须存在且可读。</translation>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation>执行填充代码时出错:%1</translation>
</message>
<message>
- <location filename="../plugins/populaterandom.cpp" line="53"/>
- <source>Maximum value cannot be less than minimum value.</source>
- <translation>最大值不饿能小于最小值。</translation>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation>选择实现语言。</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.cpp" line="77"/>
- <source>Maximum length cannot be less than minimum length.</source>
- <translation>最大长度不能小于最小长度。</translation>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation>实现代码不得为空。</translation>
</message>
<message>
- <location filename="../plugins/populaterandomtext.cpp" line="88"/>
- <source>Custom character set cannot be empty.</source>
- <translation type="unfinished"></translation>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation>无法解析该列的数据源:%1</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="40"/>
- <source>Could not find plugin to support scripting language: %1</source>
- <translation>无法找到插件去支持脚本语言:%1</translation>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation>无法解析表的列 &apos;%1&apos;。</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="58"/>
- <source>Error while executing populating initial code: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation>无法初始化配置文件。所有的配置更改和查询历史都将在应用程序重启时丢失。无法在下列位置创建文件:%1。</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="80"/>
- <source>Error while executing populating code: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>一般用途</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="112"/>
- <source>Select implementation language.</source>
- <translation>选择实现语言。</translation>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>数据库支持</translation>
</message>
<message>
- <location filename="../plugins/populatescript.cpp" line="113"/>
- <source>Implementation code cannot be empty.</source>
- <translation>实现代码不得为空。</translation>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>代码格式化</translation>
</message>
<message>
- <location filename="../selectresolver.cpp" line="359"/>
- <source>Could not resolve data source for column: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>脚本语言</translation>
</message>
<message>
- <location filename="../selectresolver.cpp" line="431"/>
- <source>Could not resolve table for column &apos;%1&apos;.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>导出</translation>
</message>
<message>
- <location filename="../services/impl/configimpl.cpp" line="768"/>
- <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Tried to initialize the file at following localizations: %1.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>导入</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="305"/>
- <source>General purpose</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>数据表填充</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="306"/>
- <source>Database support</source>
- <comment>plugin category name</comment>
- <translation>数据库支持</translation>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>表 %1 引用了表 %2,但由于解析表 %3 的 DDL 出现问题,不会为新的表定义更新该外键。</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="307"/>
- <source>Code formatter</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>索引 %1 涵盖的所有列索引已消失。表修改后该索引也不会被重新触发。</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="308"/>
- <source>Scripting languages</source>
- <comment>plugin category name</comment>
- <translation>脚本语言</translation>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation>处理触发器 %1 时出现问题。它可能没有被充分更新,这需要您的注意。</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="309"/>
- <source>Exporting</source>
- <comment>plugin category name</comment>
- <translation>导出</translation>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>触发器 %1 涵盖的所有列已消失。表修改后该触发器也不会被重新触发。</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="310"/>
- <source>Importing</source>
- <comment>plugin category name</comment>
- <translation>导入</translation>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>无法根据表 %2 的修改更新触发器 %1。</translation>
</message>
<message>
- <location filename="../sqlitestudio.cpp" line="311"/>
- <source>Table populating</source>
- <comment>plugin category name</comment>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>无法根据表 %2 的修改更新视图 %1。
+视图将保持原样不变。</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="115"/>
- <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
- <translation type="unfinished"></translation>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation>更新 %2 触发器内的一个 %1 语句时出现问题。%1 子句中引用的表 %3 可能无法被正确修改。必要时需要手动更新触发器。</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="438"/>
- <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation>无法解析要创建的视图的 DDL。详情:%1</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="481"/>
- <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
- <translation type="unfinished"></translation>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation>解析的查询不是 CREATE VIEW。它是:%1</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="528"/>
- <source>Cannot not update trigger %1 according to table %2 modification.</source>
- <translation>无法根据表 %2 的修改去更新触发器 %1。</translation>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation>SQLiteStudio 无法解析新建视图时返回的列,因此无法告知哪些触发器可能在触发过程中失败。</translation>
</message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
<message>
- <location filename="../tablemodifier.cpp" line="708"/>
- <location filename="../tablemodifier.cpp" line="732"/>
- <location filename="../tablemodifier.cpp" line="751"/>
- <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation>执行被中断。</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="496"/>
- <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation>数据库没有打开。</translation>
</message>
<message>
- <location filename="../tablemodifier.cpp" line="546"/>
- <source>Cannot not update view %1 according to table %2 modifications.
-The view will remain as it is.</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>只能同时执行一个查询。</translation>
</message>
<message>
- <location filename="../viewmodifier.cpp" line="25"/>
- <source>Could not parse DDL of the view to be created. Details: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>执行 count(*) 查询时出错,因此将禁用数据分页。数据库错误详情:%1</translation>
</message>
<message>
- <location filename="../viewmodifier.cpp" line="34"/>
- <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation>SQLiteStudio 无法从查询中提取元数据。结果将不可编辑。</translation>
</message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
<message>
- <location filename="../viewmodifier.cpp" line="82"/>
- <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
- <translation type="unfinished"></translation>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation>调用 JavaScript 的 %1 命令期间,当前上下文没有可用的数据库。</translation>
</message>
<message>
- <location filename="../common/utils.cpp" line="1022"/>
- <source>Could not open file &apos;%1&apos; for reading: %2</source>
- <translation>无法以读模式打开文件 &apos;%1&apos;:%2</translation>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>来自 %1 的错误:%2</translation>
</message>
-</context>
-<context>
- <name>QueryExecutor</name>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
<message>
- <location filename="../db/queryexecutor.cpp" line="186"/>
- <source>Execution interrupted.</source>
- <translation>执行被中断。</translation>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="227"/>
- <source>Database is not open.</source>
- <translation>数据库没有打开。</translation>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="235"/>
- <source>Only one query can be executed simultaneously.</source>
- <translation type="unfinished">只能同时执行一个查询。</translation>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>无法以读模式打开文件 &apos;%1&apos;:%2</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="339"/>
- <location filename="../db/queryexecutor.cpp" line="618"/>
- <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
</message>
<message>
- <location filename="../db/queryexecutor.cpp" line="529"/>
- <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
- <translation>SQLiteStudio 无法从查询中提取元数据。结果将不可编辑。</translation>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
</message>
-</context>
-<context>
- <name>ScriptingQtDbProxy</name>
<message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
- <source>No database available in current context, while called QtScript&apos;s %1 command.</source>
- <translation type="unfinished"></translation>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
</message>
<message>
- <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
- <source>Error from %1: %2</source>
- <translation>来自 %1 的错误:%2</translation>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>SqlHistoryModel</name>
<message>
- <location filename="../sqlhistorymodel.cpp" line="34"/>
- <source>Database</source>
- <comment>sql history header</comment>
- <translation>数据库</translation>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>数据库</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="36"/>
- <source>Execution date</source>
- <comment>sql history header</comment>
- <translation>执行代码</translation>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>执行日期</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="38"/>
- <source>Time spent</source>
- <comment>sql history header</comment>
- <translation>耗时</translation>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>用时</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="40"/>
- <source>Rows affected</source>
- <comment>sql history header</comment>
- <translation>影响的行数</translation>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>影响行数</translation>
</message>
<message>
- <location filename="../sqlhistorymodel.cpp" line="42"/>
- <source>SQL</source>
- <comment>sql history header</comment>
- <translation>SQL</translation>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
</message>
-</context>
-<context>
+ </context>
+ <context>
<name>UpdateManager</name>
<message>
- <location filename="../services/updatemanager.cpp" line="48"/>
- <source>Updates installer executable is missing.</source>
- <translation>缺少更新安装程序可执行文件。</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="49"/>
- <location filename="../services/updatemanager.cpp" line="68"/>
- <source>Unable to check for updates (%1)</source>
- <translation>无法检查更新(%1)</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="66"/>
- <source>details are unknown</source>
- <translation>无法得知详情</translation>
- </message>
- <message>
- <location filename="../services/updatemanager.cpp" line="81"/>
- <source>Unable to run updater application (%1). Please report this.</source>
- <translation type="unfinished">无法运行更新安装器(%1)。请报告这个问题。</translation>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation>检查更新失败 (%1)。</translation>
</message>
-</context>
+ </context>
</TS>
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_TW.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_TW.ts
new file mode 100644
index 0000000..7bcf7ed
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_zh_TW.ts
@@ -0,0 +1,1101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="zh-TW" sourcelanguage="en">
+ <context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="349"/>
+ <location filename="../db/abstractdb.cpp" line="366"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>在已關閉的資料庫中, 無法執行查詢</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="661"/>
+ <source>Error attaching database %1: %2</source>
+ <translation>無法附加資料庫 %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="919"/>
+ <source>Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</source>
+ <translation type="unfinished">Failed to make full WAL checkpoint on database &apos;%1&apos;. Error returned from SQLite engine: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="37"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>此資料庫無法執行不被定義的查詢</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="44"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>此資料庫無法執行沒有被開啟的查詢</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="54"/>
+ <source>Could not disable foreign keys in the database. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>無法disable foreign keys. Details: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="62"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>無法啟動資料庫交易. 請見詳細資料說明: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="89"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>已中斷</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="151"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>無法啟動資料庫交易. 請見詳細資料說明: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>CompletionHelper</name>
+ <message>
+ <location filename="../completionhelper.cpp" line="159"/>
+ <source>New row reference</source>
+ <translation>新的 row 參考</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="166"/>
+ <source>Old row reference</source>
+ <translation>舊的 row 參考</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="171"/>
+ <source>New table name</source>
+ <translation>新的table 名稱 %1</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="174"/>
+ <source>New index name</source>
+ <translation>新的index名稱</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="177"/>
+ <source>New view name</source>
+ <translation>新的view名稱</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="180"/>
+ <source>New trigger name</source>
+ <translation>新的trigger名稱</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="183"/>
+ <source>Table or column alias</source>
+ <translation>Table 或 Column 別名</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="186"/>
+ <source>transaction name</source>
+ <translation>transaction 名稱</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="189"/>
+ <source>New column name</source>
+ <translation>新欄位名稱:</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="192"/>
+ <source>Column data type</source>
+ <translation>欄位型別</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="195"/>
+ <source>Constraint name</source>
+ <translation>Constraint名稱</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="208"/>
+ <source>Error message</source>
+ <translation>錯誤訊息</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="257"/>
+ <source>Any word</source>
+ <translation>任何字</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="438"/>
+ <source>Default database</source>
+ <translation>預設資料庫</translation>
+ </message>
+ <message>
+ <location filename="../completionhelper.cpp" line="439"/>
+ <source>Temporary objects database</source>
+ <translation>暫時的物件資料庫</translation>
+ </message>
+ </context>
+ <context>
+ <name>ConfigImpl</name>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="867"/>
+ <source>Could not start database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>因無法啟動資料庫交易, 造成刪除SQL 歷史失敗</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="874"/>
+ <source>Could not commit database transaction for deleting SQL history, therefore it&apos;s not deleted.</source>
+ <translation>因無法commit資料庫交易, 造成刪除SQL 歷史失敗</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="64"/>
+ <source>Could not add database %1: %2</source>
+ <translation>無法新增資料庫 %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="137"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>資料庫 %1 無法被更新,因為 error: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="353"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="382"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>資料庫檔案不存在</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="355"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="603"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>無法載入可支援的 plugin</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="521"/>
+ <source>Database could not be initialized.</source>
+ <translation>無法開啟資料庫。</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="531"/>
+ <source>No suitable database driver plugin found.</source>
+ <translation>沒有適合的資料庫趨動程式 plugin</translation>
+ </message>
+ </context>
+ <context>
+ <name>DbObjectOrganizer</name>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <location filename="../dbobjectorganizer.cpp" line="404"/>
+ <source>Error while creating table in target database: %1</source>
+ <translation>在資料庫 %1 建立 table時發生錯誤</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="373"/>
+ <source>Could not parse table.</source>
+ <translation>無法解析 table</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="418"/>
+ <source>Database %1 could not be attached to database %2, so the data of table %3 will be copied with SQLiteStudio as a mediator. This method can be slow for huge tables, so please be patient.</source>
+ <translation>資料庫 %1 無法被附加至資料庫 %2, 所以 table %3 的資料將會被SQLiteStudio複製一份作為mediator. 此方法對於大table會很慢,請耐心等待.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="442"/>
+ <source>Error while copying data for table %1: %2</source>
+ <translation>當複製table %1: %2 時發生錯誤</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="461"/>
+ <location filename="../dbobjectorganizer.cpp" line="468"/>
+ <location filename="../dbobjectorganizer.cpp" line="495"/>
+ <source>Error while copying data to table %1: %2</source>
+ <translation>當複製table %1: %2 時發生錯誤</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="517"/>
+ <source>Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</source>
+ <translation type="unfinished">Error while dropping source view %1: %2
+Tables, indexes, triggers and views copied to database %3 will remain.</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="524"/>
+ <source>Error while creating view in target database: %1</source>
+ <translation>在資料庫 %1 建立 table時發生錯誤</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="529"/>
+ <source>Error while creating index in target database: %1</source>
+ <translation>在資料庫 %1 建立 index時發生錯誤</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="534"/>
+ <source>Error while creating trigger in target database: %1</source>
+ <translation>在資料庫 %1 建立 trigger 時發生錯誤</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectorganizer.cpp" line="679"/>
+ <location filename="../dbobjectorganizer.cpp" line="686"/>
+ <location filename="../dbobjectorganizer.cpp" line="695"/>
+ <source>Could not parse object &apos;%1&apos; in order to move or copy it.</source>
+ <translation>無法依序解析 object &apos;%1&apos; 是要移動 (move) 或是複製 (copy)</translation>
+ </message>
+ </context>
+ <context>
+ <name>DdlHistoryModel</name>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="66"/>
+ <source>Database name</source>
+ <comment>ddl history header</comment>
+ <translation>資料庫名稱</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="68"/>
+ <source>Database file</source>
+ <comment>ddl history header</comment>
+ <translation>資料庫檔案</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="70"/>
+ <source>Date of execution</source>
+ <comment>ddl history header</comment>
+ <translation>執行日期</translation>
+ </message>
+ <message>
+ <location filename="../ddlhistorymodel.cpp" line="72"/>
+ <source>Changes</source>
+ <comment>ddl history header</comment>
+ <translation>變更</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportManager</name>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="72"/>
+ <source>Export plugin %1 doesn&apos;t support exporing query results.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing query results.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="98"/>
+ <source>Export plugin %1 doesn&apos;t support exporing tables.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing tables.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="122"/>
+ <source>Export plugin %1 doesn&apos;t support exporing databases.</source>
+ <translation type="unfinished">Export plugin %1 doesn&apos;t support exporing databases.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="155"/>
+ <source>Export format &apos;%1&apos; is not supported. Supported formats are: %2.</source>
+ <translation type="unfinished">Export format &apos;%1&apos; is not supported. Supported formats are: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="218"/>
+ <source>Export to the clipboard was successful.</source>
+ <translation>已成功將資料匯出至剪貼簿</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="222"/>
+ <source>Export to the file &apos;%1&apos; was successful.</source>
+ <translation type="unfinished">Export to the file &apos;%1&apos; was successful.</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="224"/>
+ <source>Export was successful.</source>
+ <translation>匯出成功。</translation>
+ </message>
+ <message>
+ <location filename="../services/exportmanager.cpp" line="266"/>
+ <source>Could not export to file %1. File cannot be open for writting.</source>
+ <translation type="unfinished">Could not export to file %1. File cannot be open for writting.</translation>
+ </message>
+ </context>
+ <context>
+ <name>ExportWorker</name>
+ <message>
+ <location filename="../exportworker.cpp" line="123"/>
+ <source>Error while exporting query results: %1</source>
+ <translation>當載入查詢結果 %1 時發生錯誤</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="203"/>
+ <source>Error while counting data column width to export from query results: %1</source>
+ <translation type="unfinished">Error while counting data column width to export from query results: %1</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="347"/>
+ <location filename="../exportworker.cpp" line="405"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation type="unfinished">Could not parse %1 in order to export it. It will be excluded from the export output.</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="609"/>
+ <source>Error while reading data to export from table %1: %2</source>
+ <translation type="unfinished">Error while reading data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="617"/>
+ <source>Error while counting data to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data to export from table %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../exportworker.cpp" line="633"/>
+ <source>Error while counting data column width to export from table %1: %2</source>
+ <translation type="unfinished">Error while counting data column width to export from table %1: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>FunctionManagerImpl</name>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="283"/>
+ <source>Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</source>
+ <translation type="unfinished">Invalid number of arguments to function &apos;%1&apos;. Expected %2, but got %3.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="396"/>
+ <source>No such function registered in SQLiteStudio: %1(%2)</source>
+ <translation>於 SQLiteStudio: %1(%2) ,找不到此function 被註冊的紀錄</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="402"/>
+ <source>Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</source>
+ <translation type="unfinished">Function %1(%2) was registered with language %3, but the plugin supporting that language is not currently loaded.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="420"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>無效的正規表示式:%1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="472"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>無法開啟檔案 %1 以讀取:%2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="494"/>
+ <source>Could not open file %1 for writting: %2</source>
+ <translation>無法開啟檔案 %1 以寫入:%2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="514"/>
+ <source>Error while writting to file %1: %2</source>
+ <translation>當寫入檔案 %1:%2時發生錯誤。</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="532"/>
+ <source>Unsupported scripting language: %1</source>
+ <translation>不支援的scripting language: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>GenericExportPlugin</name>
+ <message>
+ <location filename="../plugins/genericexportplugin.cpp" line="20"/>
+ <source>Could not initialize text codec for exporting. Using default codec: %1</source>
+ <translation type="unfinished">Could not initialize text codec for exporting. Using default codec: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportManager</name>
+ <message>
+ <location filename="../services/importmanager.cpp" line="96"/>
+ <source>Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</source>
+ <translation type="unfinished">Imported data to the table &apos;%1&apos; successfully. Number of imported rows: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>ImportWorker</name>
+ <message>
+ <location filename="../importworker.cpp" line="24"/>
+ <source>No columns provided by the import plugin.</source>
+ <translation type="unfinished">No columns provided by the import plugin.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="30"/>
+ <source>Could not start transaction in order to import a data: %1</source>
+ <translation type="unfinished">Could not start transaction in order to import a data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="53"/>
+ <source>Could not commit transaction for imported data: %1</source>
+ <translation type="unfinished">Could not commit transaction for imported data: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="100"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="105"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation type="unfinished">Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="124"/>
+ <source>Could not create table to import to: %1</source>
+ <translation type="unfinished">Could not create table to import to: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="180"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Error while importing data: %1</source>
+ <translation>載入資料 %1 時發生錯誤。</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="133"/>
+ <location filename="../importworker.cpp" line="187"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>已中斷</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="175"/>
+ <source>Could not import data row number %1. The row was ignored. Problem details: %2</source>
+ <translation type="unfinished">Could not import data row number %1. The row was ignored. Problem details: %2</translation>
+ </message>
+ </context>
+ <context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="546"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="557"/>
+ <source>Cannot load plugin %1, because its dependency was not loaded: %2.</source>
+ <translation type="unfinished">Cannot load plugin %1, because its dependency was not loaded: %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="566"/>
+ <source>Cannot load plugin %1. Error details: %2</source>
+ <translation type="unfinished">Cannot load plugin %1. Error details: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="582"/>
+ <source>Cannot load plugin %1 (error while initializing plugin).</source>
+ <translation type="unfinished">Cannot load plugin %1 (error while initializing plugin).</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="743"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>最小值: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="744"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>最大值: %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstant</name>
+ <message>
+ <location filename="../plugins/populateconstant.cpp" line="10"/>
+ <source>Constant</source>
+ <comment>populate constant plugin name</comment>
+ <translation>常數</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateConstantConfig</name>
+ <message>
+ <location filename="../plugins/populateconstant.ui" line="20"/>
+ <source>Constant value:</source>
+ <translation>常數值:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionary</name>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="16"/>
+ <source>Dictionary</source>
+ <comment>dictionary populating plugin name</comment>
+ <translation>字典</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateDictionaryConfig</name>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="20"/>
+ <source>Dictionary file</source>
+ <translation>字典檔案</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="29"/>
+ <source>Pick dictionary file</source>
+ <translation>選擇字典檔</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="39"/>
+ <source>Word separator</source>
+ <translation>文字分隔字元</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="45"/>
+ <source>Whitespace</source>
+ <translation>空格</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="58"/>
+ <source>Line break</source>
+ <translation>換行</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="74"/>
+ <source>Method of using words</source>
+ <translation>使用字元的方法</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="80"/>
+ <source>Ordered</source>
+ <translation>排列</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.ui" line="93"/>
+ <source>Randomly</source>
+ <translation>隨機</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateManager</name>
+ <message>
+ <location filename="../services/populatemanager.cpp" line="89"/>
+ <source>Table &apos;%1&apos; populated successfully.</source>
+ <translation>表格 &apos;%1&apos; 已成功擴展</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandom</name>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="13"/>
+ <source>Random number</source>
+ <translation>亂數</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomConfig</name>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="20"/>
+ <source>Constant prefix</source>
+ <translation>常數的字首文字</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="26"/>
+ <source>No prefix</source>
+ <translation>無字首文字</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="39"/>
+ <source>Minimum value</source>
+ <translation>最小值</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="61"/>
+ <source>Maximum value</source>
+ <translation>最大值</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="86"/>
+ <source>Constant suffix</source>
+ <translation>常數的字尾文字</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.ui" line="92"/>
+ <source>No suffix</source>
+ <translation>無字尾文字</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomText</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="14"/>
+ <source>Random text</source>
+ <translation>亂數文字</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateRandomTextConfig</name>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="20"/>
+ <source>Use characters from common sets:</source>
+ <translation>使用通用集合中的字元</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="36"/>
+ <source>Minimum length</source>
+ <translation>最小長度</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="64"/>
+ <source>Letters from a to z.</source>
+ <translation>從a到z的文字</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="67"/>
+ <source>Alpha</source>
+ <translation>透明度</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="77"/>
+ <source>Numbers from 0 to 9.</source>
+ <translation>從0到9的數字</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="80"/>
+ <source>Numeric</source>
+ <translation>數值</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="90"/>
+ <source>A whitespace, a tab and a new line character.</source>
+ <translation type="unfinished">A whitespace, a tab and a new line character.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="93"/>
+ <source>Whitespace</source>
+ <translation>空格</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="103"/>
+ <source>Includes all above and all others.</source>
+ <translation>包含以下及所有.</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="106"/>
+ <source>Binary</source>
+ <translation>二進制(Binary)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="119"/>
+ <source>Use characters from my custom set:</source>
+ <translation>使用自訂集合中的字元</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="132"/>
+ <source>Maximum length</source>
+ <translation>最大長度</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.ui" line="160"/>
+ <source>If you type some character multiple times, it&apos;s more likely to be used.</source>
+ <translation type="unfinished">If you type some character multiple times, it&apos;s more likely to be used.</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScript</name>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="34"/>
+ <source>Script</source>
+ <translation>腳本 Script</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateScriptConfig</name>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="26"/>
+ <source>Initialization code (optional)</source>
+ <translation>初始化的程式片段 (optional)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="45"/>
+ <source>Per step code</source>
+ <translation type="unfinished">Per step code</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="70"/>
+ <source>Language</source>
+ <translation>語言設定</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.ui" line="89"/>
+ <source>Help</source>
+ <translation>幫助</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequence</name>
+ <message>
+ <location filename="../plugins/populatesequence.cpp" line="13"/>
+ <source>Sequence</source>
+ <translation>序列</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateSequenceConfig</name>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="33"/>
+ <source>Start value:</source>
+ <translation>起始值:</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatesequence.ui" line="56"/>
+ <source>Step:</source>
+ <translation>步骤:</translation>
+ </message>
+ </context>
+ <context>
+ <name>PopulateWorker</name>
+ <message>
+ <location filename="../populateworker.cpp" line="23"/>
+ <source>Could not start transaction in order to perform table populating. Error details: %1</source>
+ <translation>當匯出table後無法依序啟動交易. 錯誤訊息 %1</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="69"/>
+ <source>Error while populating table: %1</source>
+ <translation>當產生 table %1 時發生錯誤</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="80"/>
+ <source>Could not commit transaction after table populating. Error details: %1</source>
+ <translation>當滙出table後無法commit transaction. 錯誤訊息 %1</translation>
+ </message>
+ </context>
+ <context>
+ <name>QObject</name>
+ <message>
+ <location filename="../common/utils.cpp" line="1028"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>無法開啟檔案 &apos;%1&apos; 為了讀取: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="435"/>
+ <source>Could not open database: %1</source>
+ <translation>無法開啟資料庫 %1。</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="1214"/>
+ <source>Result set expired or no row available.</source>
+ <translation>結果集已過期或是無有效的資料</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="331"/>
+ <location filename="../db/abstractdb3.h" line="335"/>
+ <source>Could not load extension %1: %2</source>
+ <translation>無法載入extension %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="421"/>
+ <source>Could not run WAL checkpoint: %1</source>
+ <translation type="unfinished">Could not run WAL checkpoint: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="459"/>
+ <source>Could not close database: %1</source>
+ <translation>無法關閉資料庫 %1</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="114"/>
+ <source>Could not attach database %1: %2</source>
+ <translation>無法附加資料庫 %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../parser/parsercontext.cpp" line="108"/>
+ <location filename="../parser/parsercontext.cpp" line="110"/>
+ <source>Incomplete query.</source>
+ <translation>不完整的查詢</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="2526"/>
+ <source>Parser stack overflow</source>
+ <translation>Parser 溢位</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite3_parse.cpp" line="5937"/>
+ <source>Syntax error</source>
+ <translation>語法錯誤</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="31"/>
+ <source>Could not open dictionary file %1 for reading.</source>
+ <translation>無法開啟檔案 %1 以讀取。</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatedictionary.cpp" line="92"/>
+ <source>Dictionary file must exist and be readable.</source>
+ <translation>字典檔必須存在並且可被讀取</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandom.cpp" line="54"/>
+ <source>Maximum value cannot be less than minimum value.</source>
+ <translation>最大值不能小於最小值</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="79"/>
+ <source>Maximum length cannot be less than minimum length.</source>
+ <translation>最大值不能小於最小值</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populaterandomtext.cpp" line="90"/>
+ <source>Custom character set cannot be empty.</source>
+ <translation>自訂字元集不能為空白</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="61"/>
+ <source>Could not find plugin to support scripting language: %1</source>
+ <translation>無法找到plugin以支援scripting language: %1</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="79"/>
+ <source>Error while executing populating initial code: %1</source>
+ <translation>當產生initial code: %1 時發生錯誤</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="101"/>
+ <source>Error while executing populating code: %1</source>
+ <translation>當產生code: %1 時發生錯誤</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="133"/>
+ <source>Select implementation language.</source>
+ <translation>請選擇實作的語系</translation>
+ </message>
+ <message>
+ <location filename="../plugins/populatescript.cpp" line="134"/>
+ <source>Implementation code cannot be empty.</source>
+ <translation>Implementation code 不能是空的</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="369"/>
+ <source>Could not resolve data source for column: %1</source>
+ <translation>無法解析資料來源, Column: %1</translation>
+ </message>
+ <message>
+ <location filename="../selectresolver.cpp" line="439"/>
+ <source>Could not resolve table for column &apos;%1&apos;.</source>
+ <translation>無法解析table, Column: &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/configimpl.cpp" line="747"/>
+ <source>Could not initialize configuration file. Any configuration changes and queries history will be lost after application restart. Unable to create a file at following locations: %1.</source>
+ <translation>無法初始化設定檔. 在應用程式重啟時,任何設定檔的異動及查詢歷史將遺失. 無法建立檔案在以下位置: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="347"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>通用目的說明</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="348"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>資料庫支援</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="349"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Code formatter</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="350"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Scripting languages</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="351"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>匯出中</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="352"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>匯入中...</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="353"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Table 產生中</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="121"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>當解析 table %3 的DDL時候發生了錯誤,因為Table %1 參照 Table %2 ,影響 table 中的foreign key 無法成功更新,</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="470"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>All columns indexed by the index %1 已遺失. 在 table 修改後, 此 index 並不會建立.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="514"/>
+ <source>There is problem with proper processing trigger %1. It may be not fully updated afterwards and will need your attention.</source>
+ <translation>當處理trigger %1時發生了問題。請注意此 trigger 可能尚未更新完成。</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="529"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>被trigger %1 包含的所有欄位異動均失效. 在 table 修改後, 此 Trigger 亦無法被建立.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="561"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>根據 table %2 的修改內容,導致無法更新 trigger %1</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="580"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>因 table %2 的異動導致無法更新 view %1
+view 將保留原始內容</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="742"/>
+ <location filename="../tablemodifier.cpp" line="766"/>
+ <location filename="../tablemodifier.cpp" line="785"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the %1 substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation>更新 trigger %2 中的SQL %1 時發生了錯誤,有可能是SQL %1 中參考了某張不能被修改的 table %3. 若有需要的話,如有需要請手動更新此trigger。</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="24"/>
+ <source>Could not parse DDL of the view to be created. Details: %1</source>
+ <translation>無法解析此view的DDL, 詳細資料請見: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="33"/>
+ <source>Parsed query is not CREATE VIEW. It&apos;s: %1</source>
+ <translation>解析後的查詢並非CREATE VIEW, 它是: %1</translation>
+ </message>
+ <message>
+ <location filename="../viewmodifier.cpp" line="81"/>
+ <source>SQLiteStudio was unable to resolve columns returned by the new view, therefore it won&apos;t be able to tell which triggers might fail during the recreation process.</source>
+ <translation>SQLiteStudio 無法從回傳的新view中解析columns, 亦無法確認trigger 在重建程序中將導致失敗的狀況.</translation>
+ </message>
+ </context>
+ <context>
+ <name>QueryExecutor</name>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="194"/>
+ <source>Execution interrupted.</source>
+ <translation>執行中斷</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="235"/>
+ <source>Database is not open.</source>
+ <translation>資料庫未開啟</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="243"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>儘有單一查詢可被冋時執行</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="347"/>
+ <location filename="../db/queryexecutor.cpp" line="596"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>當執行count(*) 查詢時發生錯誤, 資料分頁功能亦被停用. 詳細錯誤資訊來自於資料庫: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="507"/>
+ <source>SQLiteStudio was unable to extract metadata from the query. Results won&apos;t be editable.</source>
+ <translation>SQLiteStudio無法從此查詢解析metadata. 結果亦無法編輯</translation>
+ </message>
+ </context>
+ <context>
+ <name>ScriptingQtDbProxy</name>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="48"/>
+ <source>No database available in current context, while called JavaScript&apos;s %1 command.</source>
+ <translation>當呼叫JavaScript %1 時 ,無法確認資料庫是否有效。</translation>
+ </message>
+ <message>
+ <location filename="../plugins/scriptingqtdbproxy.cpp" line="65"/>
+ <source>Error from %1: %2</source>
+ <translation>從 %1: %2 引發的錯誤</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlFileExecutor</name>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="50"/>
+ <source>Could not execute SQL, because application has failed to start transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to start transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="81"/>
+ <source>Execution from file cancelled. Any queries executed so far have been rolled back.</source>
+ <translation type="unfinished">Execution from file cancelled. Any queries executed so far have been rolled back.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="97"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>無法開啟檔案 &apos;%1&apos; 為了讀取: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="142"/>
+ <source>Could not execute SQL, because application has failed to commit the transaction: %1</source>
+ <translation type="unfinished">Could not execute SQL, because application has failed to commit the transaction: %1</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="147"/>
+ <source>Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds. %3 were not executed due to errors.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="153"/>
+ <source>Finished executing %1 queries in %2 seconds.</source>
+ <translation type="unfinished">Finished executing %1 queries in %2 seconds.</translation>
+ </message>
+ <message>
+ <location filename="../sqlfileexecutor.cpp" line="160"/>
+ <source>Could not execute SQL due to error.</source>
+ <translation type="unfinished">Could not execute SQL due to error.</translation>
+ </message>
+ </context>
+ <context>
+ <name>SqlHistoryModel</name>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>資料庫</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>執行時間</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>所花費的時間</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>被影響的列數</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="40"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+ </context>
+ <context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="92"/>
+ <source>Could not check for updates (%1).</source>
+ <translation>不能檢查 for updates (%1).</translation>
+ </message>
+ </context>
+</TS>