aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2015-01-30 17:00:07 -0500
committerLibravatarUnit 193 <unit193@ubuntu.com>2015-01-30 17:00:07 -0500
commit016003905ca0e8e459e3dc33e786beda8ec92f45 (patch)
tree34aba2d2e0d66fbf2c3821ee8358f56e40c4c95e
parent724c012ada23ef480c61fe99e3c9784b91aeb1ca (diff)
downloadsqlitestudio-016003905ca0e8e459e3dc33e786beda8ec92f45.tar.bz2
sqlitestudio-016003905ca0e8e459e3dc33e786beda8ec92f45.tar.xz
sqlitestudio-016003905ca0e8e459e3dc33e786beda8ec92f45.tar.zst
Imported Upstream version 3.0.2upstream/3.0.2
-rw-r--r--Plugins/ConfigMigration/ConfigMigration.pro4
-rw-r--r--Plugins/ConfigMigration/ConfigMigration_pl.qmbin0 -> 7282 bytes
-rw-r--r--Plugins/ConfigMigration/ConfigMigration_pl.ts152
-rw-r--r--Plugins/ConfigMigration/configmigration.cpp2
-rw-r--r--Plugins/ConfigMigration/configmigration.json2
-rw-r--r--Plugins/ConfigMigration/configmigration.qrc3
-rw-r--r--Plugins/ConfigMigration/configmigrationwizard.cpp4
-rw-r--r--Plugins/CsvExport/CsvExport.pro4
-rw-r--r--Plugins/CsvExport/CsvExport.ui10
-rw-r--r--Plugins/CsvExport/CsvExport_pl.qmbin0 -> 953 bytes
-rw-r--r--Plugins/CsvExport/CsvExport_pl.ts57
-rw-r--r--Plugins/CsvExport/csvexport.qrc3
-rw-r--r--Plugins/CsvImport/CsvImport.pro4
-rw-r--r--Plugins/CsvImport/CsvImportOptions.ui25
-rw-r--r--Plugins/CsvImport/CsvImport_pl.qmbin0 -> 2366 bytes
-rw-r--r--Plugins/CsvImport/CsvImport_pl.ts89
-rw-r--r--Plugins/CsvImport/csvimport.json2
-rw-r--r--Plugins/CsvImport/csvimport.qrc3
-rw-r--r--Plugins/HtmlExport/HtmlExport.pro4
-rw-r--r--Plugins/HtmlExport/HtmlExport_pl.qmbin0 -> 3840 bytes
-rw-r--r--Plugins/HtmlExport/HtmlExport_pl.ts173
-rw-r--r--Plugins/HtmlExport/htmlexport.qrc3
-rw-r--r--Plugins/HtmlExport/htmlexport.ui20
-rw-r--r--Plugins/JsonExport/JsonExport.pro4
-rw-r--r--Plugins/JsonExport/JsonExport_pl.qmbin0 -> 442 bytes
-rw-r--r--Plugins/JsonExport/JsonExport_pl.ts22
-rw-r--r--Plugins/JsonExport/jsonexport.qrc3
-rw-r--r--Plugins/JsonExport/jsonexport.ui10
-rw-r--r--Plugins/PdfExport/PdfExport.pro4
-rw-r--r--Plugins/PdfExport/PdfExport_pl.qmbin0 -> 3945 bytes
-rw-r--r--Plugins/PdfExport/PdfExport_pl.ts256
-rw-r--r--Plugins/PdfExport/pdfexport.cpp4
-rw-r--r--Plugins/PdfExport/pdfexport.qrc3
-rw-r--r--Plugins/PdfExport/pdfexport.ui36
-rw-r--r--Plugins/Printing/Printing.pro4
-rw-r--r--Plugins/Printing/Printing_pl.qmbin0 -> 514 bytes
-rw-r--r--Plugins/Printing/Printing_pl.ts40
-rw-r--r--Plugins/Printing/printing.cpp3
-rw-r--r--Plugins/Printing/printing.json2
-rw-r--r--Plugins/Printing/printing.qrc3
-rw-r--r--Plugins/RegExpImport/RegExpImport.pro4
-rw-r--r--Plugins/RegExpImport/RegExpImport_pl.qmbin0 -> 3752 bytes
-rw-r--r--Plugins/RegExpImport/RegExpImport_pl.ts86
-rw-r--r--Plugins/RegExpImport/regexpimport.qrc3
-rw-r--r--Plugins/RegExpImport/regexpimport.ui14
-rw-r--r--Plugins/ScriptingTcl/ScriptingTcl.pro4
-rw-r--r--Plugins/ScriptingTcl/ScriptingTcl_pl.qmbin0 -> 653 bytes
-rw-r--r--Plugins/ScriptingTcl/ScriptingTcl_pl.ts25
-rw-r--r--Plugins/ScriptingTcl/scriptingtcl.cpp6
-rw-r--r--Plugins/ScriptingTcl/scriptingtcl.qrc3
-rw-r--r--Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter.pro4
-rw-r--r--Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter_pl.qmbin0 -> 5528 bytes
-rw-r--r--Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter_pl.ts209
-rw-r--r--Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.qrc3
-rw-r--r--Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.ui80
-rw-r--r--Plugins/SqlExport/SqlExport.pro4
-rw-r--r--Plugins/SqlExport/SqlExportCommon.ui8
-rw-r--r--Plugins/SqlExport/SqlExportQuery.ui16
-rw-r--r--Plugins/SqlExport/SqlExport_pl.qmbin0 -> 2768 bytes
-rw-r--r--Plugins/SqlExport/SqlExport_pl.ts99
-rw-r--r--Plugins/SqlExport/sqlexport.qrc3
-rw-r--r--Plugins/SqlFormatterSimple/SqlFormatterSimple.pro4
-rw-r--r--Plugins/SqlFormatterSimple/SqlFormatterSimple.ui7
-rw-r--r--Plugins/SqlFormatterSimple/SqlFormatterSimple_pl.qmbin0 -> 376 bytes
-rw-r--r--Plugins/SqlFormatterSimple/SqlFormatterSimple_pl.ts17
-rw-r--r--Plugins/SqlFormatterSimple/sqlformattersimple.qrc3
-rw-r--r--Plugins/XmlExport/XmlExport.pro4
-rw-r--r--Plugins/XmlExport/XmlExport.ui26
-rw-r--r--Plugins/XmlExport/XmlExport_pl.qmbin0 -> 2551 bytes
-rw-r--r--Plugins/XmlExport/XmlExport_pl.ts71
-rw-r--r--Plugins/XmlExport/xmlexport.cpp2
-rw-r--r--Plugins/XmlExport/xmlexport.qrc3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt30
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/completionhelper.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro8
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/coresqlitestudio.qrc3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp5
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/abstractdb.cpp10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h9
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h10
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp61
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h46
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordetectschemaalter.cpp4
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.cpp8
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/db/sqlquery.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/dbversionconverter.cpp35
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/exportworker.cpp29
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.cpp1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/parsercontext.cpp7
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp530
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y6
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp714
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y7
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/exportplugin.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/genericexportplugin.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/populateconstant.ui4
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/populatedictionary.ui28
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.ui26
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.ui52
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/populatescript.ui14
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/plugins/populatesequence.ui14
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/populateworker.cpp5
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/schemaresolver.cpp9
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/schemaresolver.h4
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/config.h1
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/exportmanager.cpp2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/extralicensemanager.cpp99
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/extralicensemanager.h28
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp8
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp3
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/sqlhistorymodel.h2
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp25
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h7
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp58
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/tablemodifier.h17
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations.cpp108
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations.h25
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qmbin0 -> 41506 bytes
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts1298
-rw-r--r--SQLiteStudio3/dirs.pri1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/fontedit.ui8
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/common/numericspinbox.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columncollatepanel.ui24
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp245
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.h16
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.ui8
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.ui35
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/columnuniqueandnotnullpanel.ui24
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.ui6
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui8
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp14
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.cpp12
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp32
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp9
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp152
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h6
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/datagrid/sqltablemodel.cpp16
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dblistmodel.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbobjectdialogs.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp49
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.h8
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.cpp56
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.h5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.ui93
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.ui4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/bugreportlogindialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp22
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.ui180
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/constraintdialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.cpp1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/errorsconfirmdialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.ui20
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui8
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.cpp34
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.h27
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.ui77
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/messagelistdialog.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/searchtextdialog.ui4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/triggercolumnsdialog.ui28
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.ui4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/formmanager.cpp20
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/formmanager.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/forms/sqlformatterplugin.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro14
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/iconmanager.cpp5
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/iconmanager.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/icons.qrc1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/img/reset_autoincrement.pngbin0 -> 708 bytes
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp7
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mainwindow.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/mainwindow.ui7
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/sqlcompareview.cpp3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/sqleditor.cpp88
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/sqleditor.h3
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/taskbar.cpp2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/taskbar.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qmbin0 -> 137929 bytes
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts5980
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/uiconfig.h1
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/bugreporthistorywindow.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/collationseditor.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/ddlhistorywindow.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp19
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.ui45
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/functionseditor.ui2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp35
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.h2
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.ui4
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp6
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.ui34
-rwxr-xr-xSQLiteStudio3/lang.tcl114
-rw-r--r--SQLiteStudio3/sqlitestudio/main.cpp20
-rw-r--r--SQLiteStudio3/sqlitestudio/sqlitestudio.pro107
-rw-r--r--SQLiteStudio3/sqlitestudio/sqlitestudio.qrc5
-rw-r--r--SQLiteStudio3/sqlitestudio/translations/sqlitestudio_pl.qmbin0 -> 1942 bytes
-rw-r--r--SQLiteStudio3/sqlitestudio/translations/sqlitestudio_pl.ts51
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandadd.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandcd.cpp2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandcd.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandclose.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommanddblist.cpp8
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommanddblist.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommanddir.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandexit.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandhelp.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandhistory.cpp2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandhistory.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandmode.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandnullvalue.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandpwd.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandremove.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandtables.cpp2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandtables.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommandtree.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/commands/clicommanduse.h2
-rw-r--r--SQLiteStudio3/sqlitestudiocli/main.cpp3
-rw-r--r--SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.pro207
-rw-r--r--SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.qrc5
-rw-r--r--SQLiteStudio3/sqlitestudiocli/translations/sqlitestudiocli_pl.qmbin0 -> 39063 bytes
-rw-r--r--SQLiteStudio3/sqlitestudiocli/translations/sqlitestudiocli_pl.ts642
243 files changed, 12291 insertions, 1537 deletions
diff --git a/Plugins/ConfigMigration/ConfigMigration.pro b/Plugins/ConfigMigration/ConfigMigration.pro
index 965cfeb..aae8b5b 100644
--- a/Plugins/ConfigMigration/ConfigMigration.pro
+++ b/Plugins/ConfigMigration/ConfigMigration.pro
@@ -29,3 +29,7 @@ FORMS += \
RESOURCES += \
configmigration.qrc
+
+
+TRANSLATIONS += ConfigMigration_pl.ts
+
diff --git a/Plugins/ConfigMigration/ConfigMigration_pl.qm b/Plugins/ConfigMigration/ConfigMigration_pl.qm
new file mode 100644
index 0000000..b62b803
--- /dev/null
+++ b/Plugins/ConfigMigration/ConfigMigration_pl.qm
Binary files differ
diff --git a/Plugins/ConfigMigration/ConfigMigration_pl.ts b/Plugins/ConfigMigration/ConfigMigration_pl.ts
new file mode 100644
index 0000000..08919fd
--- /dev/null
+++ b/Plugins/ConfigMigration/ConfigMigration_pl.ts
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>ConfigMigration</name>
+ <message>
+ <location filename="configmigration.cpp" line="36"/>
+ <source>A configuration from old SQLiteStudio 2.x.x has been detected. Would you like to migrate old settings into the current version? &lt;a href=&quot;%1&quot;&gt;Click here to do that&lt;/a&gt;.</source>
+ <translation>Wykryto ustawienia ze starej wersji SQLiteStudio 2.x.x. Czy chcesz zmigrować stare ustawienia do aktualnej wersji? &lt;a href=&quot;%1&quot;&gt;Kliknij, aby to zrobić&lt;/a&gt;.</translation>
+ </message>
+ <message>
+ <location filename="configmigration.cpp" line="136"/>
+ <source>Bug reports history (%1)</source>
+ <translation>Historia zgłoszonych błędów (%1)</translation>
+ </message>
+ <message>
+ <location filename="configmigration.cpp" line="145"/>
+ <source>Database list (%1)</source>
+ <translation>Lista baz danych (%1)</translation>
+ </message>
+ <message>
+ <location filename="configmigration.cpp" line="154"/>
+ <source>Custom SQL functions (%1)</source>
+ <translation>Własne funkcje SQL (%1)</translation>
+ </message>
+ <message>
+ <location filename="configmigration.cpp" line="163"/>
+ <source>SQL queries history (%1)</source>
+ <translation>Historia zapytań SQL (%1)</translation>
+ </message>
+</context>
+<context>
+ <name>ConfigMigrationWizard</name>
+ <message>
+ <location filename="configmigrationwizard.ui" line="14"/>
+ <source>Configuration migration</source>
+ <translation>Migracja ustawień</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.ui" line="24"/>
+ <source>Items to migrate</source>
+ <translation>Elementy do zmigrowania</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.ui" line="27"/>
+ <source>This is a list of items found in the old configuration file, which can be migrated into the current configuration.</source>
+ <translation>To jest lista elementów znalezionych w starym pliku konfiguracyjnym, które mogą być zmigrowane do aktualnych ustawień.</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.ui" line="58"/>
+ <source>Options</source>
+ <translation>Opcje</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.ui" line="64"/>
+ <source>Put imported databases into separate group</source>
+ <translation>Umieść zaimportowane bazy danych w osobnej grupie</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.ui" line="76"/>
+ <source>Group name</source>
+ <translation>Nazwa grupy</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="60"/>
+ <source>Enter a non-empty name.</source>
+ <translation>Wprowadź niepustą nazwę.</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="68"/>
+ <source>Top level group named &apos;%1&apos; already exists. Enter a group name that does not exist yet.</source>
+ <translation>Grupa o nazwie &apos;%1&apos; istnieje już na najwyższym poziomie. Wprowadź nazwę grupy, która jeszcze nie istnieje.</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="102"/>
+ <source>Could not open old configuration file in order to migrate settings from it.</source>
+ <translation>Nie udało się otworzyć starego pliku ustawień w celu zmigtowania z niego ustawień.</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="110"/>
+ <source>Could not open current configuration file in order to migrate settings from old configuration file.</source>
+ <translation>Nie udało się otworzyć aktualnego pliku ustawień w celu zmigrowania do niego ustawień ze starego pliku konfiguracyjnego.</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="119"/>
+ <source>Could not commit migrated data into new configuration file: %1</source>
+ <translation>Nie udało się zatwierdzenie zmigrowanych danych w nowym pliku ustawień: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="163"/>
+ <source>Could not read bug reports history from old configuration file in order to migrate it: %1</source>
+ <translation>Nie udał się odczyt historii zgłoszeń błędów ze starego pliku konfiguracyjnego w celu jej zmigrowania: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="180"/>
+ <source>Could not insert a bug reports history entry into new configuration file: %1</source>
+ <translation>Nie udało się dodać wpisów historii zgłoszeń błędów do nowego pliku ustawień: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="201"/>
+ <source>Could not read database list from old configuration file in order to migrate it: %1</source>
+ <translation>Nie udało się odczytać listy baz danych ze starego pliku ustawień w celu jej zmigtowania: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="215"/>
+ <source>Could not query for available order for containing group in new configuration file in order to migrate the database list: %1</source>
+ <oldsource>Could query for available order for containing group in new configuration file in order to migrate the database list: %1</oldsource>
+ <translation>Nie udało się odpytać o dostępną kolejność dla grupy zawierającej w nowym pliku ustawień, w celu zmigrowania listy baz danych: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="226"/>
+ <source>Could not create containing group in new configuration file in order to migrate the database list: %1</source>
+ <translation>Nie udało się stworzyć grupy w nowym pliku ustawień, w celu zmigrowania listy baz danych: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="247"/>
+ <source>Could not insert a database entry into new configuration file: %1</source>
+ <translation>Nie udało się dodać wpisu bazy danych do nowego pliku ustawień: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="259"/>
+ <source>Could not query for available order for next database in new configuration file in order to migrate the database list: %1</source>
+ <oldsource>Could query for available order for next database in new configuration file in order to migrate the database list: %1</oldsource>
+ <translation>Nie udało się odpytać o dostępną kolejność dla następnej bazy w nowym pliku ustawień, w celu zmigrowania listy baz danych: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="270"/>
+ <source>Could not create group referencing the database in new configuration file: %1</source>
+ <translation>Nie udało się utworzyć grupy odwołującej się do bazy danych w nowym pliku ustawień: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="288"/>
+ <source>Could not read function list from old configuration file in order to migrate it: %1</source>
+ <translation>Nie udało się odczytać listy funkcji ze starego pliku ustawień w celu jej zmigrowania: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="323"/>
+ <source>Could not read SQL queries history from old configuration file in order to migrate it: %1</source>
+ <translation>Nie udało się odczytać historii zapytań SQL ze starego pliku ustawień w celu zmigrowania jej: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="330"/>
+ <source>Could not read next ID for SQL queries history in new configuration file: %1</source>
+ <translation>Nie udało się odczytać następnego ID dla historii zapytań SQL w nowym pliku ustawień: %1</translation>
+ </message>
+ <message>
+ <location filename="configmigrationwizard.cpp" line="346"/>
+ <source>Could not insert SQL history entry into new configuration file: %1</source>
+ <translation>Nie udało się dodanie wpisu do historii SQL w nowym pliku ustawień: %1</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/ConfigMigration/configmigration.cpp b/Plugins/ConfigMigration/configmigration.cpp
index cd49d24..8d75e37 100644
--- a/Plugins/ConfigMigration/configmigration.cpp
+++ b/Plugins/ConfigMigration/configmigration.cpp
@@ -5,6 +5,7 @@
#include "statusfield.h"
#include "configmigrationwizard.h"
#include "db/dbsqlite3.h"
+#include "translations.h"
#include <QCoreApplication>
#include <QDir>
#include <QFileInfo>
@@ -17,6 +18,7 @@ ConfigMigration::ConfigMigration()
bool ConfigMigration::init()
{
Q_INIT_RESOURCE(configmigration);
+ loadTranslation("ConfigMigration");
if (cfg.CfgMigration.Migrated.get())
{
diff --git a/Plugins/ConfigMigration/configmigration.json b/Plugins/ConfigMigration/configmigration.json
index 14e5d4b..a8c62d3 100644
--- a/Plugins/ConfigMigration/configmigration.json
+++ b/Plugins/ConfigMigration/configmigration.json
@@ -2,7 +2,7 @@
"type": "GeneralPurposePlugin",
"title": "Configuration migration",
"description": "Performs migration from SQLiteStudio 2.1.x configuration to version 3.0.0.",
- "version": 10001,
+ "version": 10002,
"author": "SalSoft",
"gui": true
}
diff --git a/Plugins/ConfigMigration/configmigration.qrc b/Plugins/ConfigMigration/configmigration.qrc
index 9df7d5e..a46382a 100644
--- a/Plugins/ConfigMigration/configmigration.qrc
+++ b/Plugins/ConfigMigration/configmigration.qrc
@@ -2,4 +2,7 @@
<qresource prefix="/icons">
<file>config_migration.png</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>ConfigMigration_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/ConfigMigration/configmigrationwizard.cpp b/Plugins/ConfigMigration/configmigrationwizard.cpp
index afdf705..7868761 100644
--- a/Plugins/ConfigMigration/configmigrationwizard.cpp
+++ b/Plugins/ConfigMigration/configmigrationwizard.cpp
@@ -212,7 +212,7 @@ bool ConfigMigrationWizard::migrateDatabases(Db* oldCfgDb, Db* newCfgDb)
groupResults = newCfgDb->exec(groupOrderQuery.arg("IS NULL"));
if (groupResults->isError())
{
- notifyError(tr("Could query for available order for containing group in new configuration file in order to migrate the database list: %1")
+ notifyError(tr("Could not query for available order for containing group in new configuration file in order to migrate the database list: %1")
.arg(groupResults->getErrorText()));
return false;
}
@@ -256,7 +256,7 @@ bool ConfigMigrationWizard::migrateDatabases(Db* oldCfgDb, Db* newCfgDb)
if (groupResults->isError())
{
- notifyError(tr("Could query for available order for next database in new configuration file in order to migrate the database list: %1")
+ notifyError(tr("Could not query for available order for next database in new configuration file in order to migrate the database list: %1")
.arg(groupResults->getErrorText()));
return false;
}
diff --git a/Plugins/CsvExport/CsvExport.pro b/Plugins/CsvExport/CsvExport.pro
index 9ffc8f9..f1fccc6 100644
--- a/Plugins/CsvExport/CsvExport.pro
+++ b/Plugins/CsvExport/CsvExport.pro
@@ -27,3 +27,7 @@ OTHER_FILES += \
RESOURCES += \
csvexport.qrc
+
+
+TRANSLATIONS += CsvExport_pl.ts
+
diff --git a/Plugins/CsvExport/CsvExport.ui b/Plugins/CsvExport/CsvExport.ui
index ec80b57..8ab93c6 100644
--- a/Plugins/CsvExport/CsvExport.ui
+++ b/Plugins/CsvExport/CsvExport.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="3">
@@ -20,7 +20,7 @@
<string>Column names in first row</string>
</property>
<property name="cfg" stdset="0">
- <string>CsvExport.ColumnsInFirstRow</string>
+ <string notr="true">CsvExport.ColumnsInFirstRow</string>
</property>
</widget>
</item>
@@ -34,7 +34,7 @@
<item row="1" column="1">
<widget class="QComboBox" name="comboBox">
<property name="cfg" stdset="0">
- <string>CsvExport.Separator</string>
+ <string notr="true">CsvExport.Separator</string>
</property>
<item>
<property name="text">
@@ -72,7 +72,7 @@
</size>
</property>
<property name="cfg" stdset="0">
- <string>CsvExport.CustomSeparator</string>
+ <string notr="true">CsvExport.CustomSeparator</string>
</property>
</widget>
</item>
@@ -89,7 +89,7 @@
<string>Empty string</string>
</property>
<property name="cfg" stdset="0">
- <string>CsvExport.NullValueString</string>
+ <string notr="true">CsvExport.NullValueString</string>
</property>
</widget>
</item>
diff --git a/Plugins/CsvExport/CsvExport_pl.qm b/Plugins/CsvExport/CsvExport_pl.qm
new file mode 100644
index 0000000..4d64a8b
--- /dev/null
+++ b/Plugins/CsvExport/CsvExport_pl.qm
Binary files differ
diff --git a/Plugins/CsvExport/CsvExport_pl.ts b/Plugins/CsvExport/CsvExport_pl.ts
new file mode 100644
index 0000000..a925db2
--- /dev/null
+++ b/Plugins/CsvExport/CsvExport_pl.ts
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>CsvExport</name>
+ <message>
+ <location filename="CsvExport.ui" line="20"/>
+ <source>Column names in first row</source>
+ <translation>Nazwy kolumn w pierwszym wierszu</translation>
+ </message>
+ <message>
+ <location filename="CsvExport.ui" line="30"/>
+ <source>Column separator:</source>
+ <translation>Separator kolumny:</translation>
+ </message>
+ <message>
+ <location filename="CsvExport.ui" line="41"/>
+ <source>, (comma)</source>
+ <translation>, (przecinek)</translation>
+ </message>
+ <message>
+ <location filename="CsvExport.ui" line="46"/>
+ <source>; (semicolon)</source>
+ <translation>; (średnik)</translation>
+ </message>
+ <message>
+ <location filename="CsvExport.ui" line="51"/>
+ <source>\t (tab)</source>
+ <translation>\t (znak tabulacji)</translation>
+ </message>
+ <message>
+ <location filename="CsvExport.ui" line="56"/>
+ <source> (whitespace)</source>
+ <translation> (spacja)</translation>
+ </message>
+ <message>
+ <location filename="CsvExport.ui" line="61"/>
+ <source>Custom:</source>
+ <translation>Własny:</translation>
+ </message>
+ <message>
+ <location filename="CsvExport.ui" line="82"/>
+ <source>Export NULL values as:</source>
+ <translation>Eksportuj wartości NULL jako:</translation>
+ </message>
+ <message>
+ <location filename="CsvExport.ui" line="89"/>
+ <source>Empty string</source>
+ <translation>Pusty łańcuch</translation>
+ </message>
+ <message>
+ <location filename="csvexport.cpp" line="42"/>
+ <source>Enter the custom separator character.</source>
+ <translation>Wprowadź własny znak separatora.</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/CsvExport/csvexport.qrc b/Plugins/CsvExport/csvexport.qrc
index 21d7213..f72a0e4 100644
--- a/Plugins/CsvExport/csvexport.qrc
+++ b/Plugins/CsvExport/csvexport.qrc
@@ -2,4 +2,7 @@
<qresource prefix="/forms">
<file>CsvExport.ui</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>CsvExport_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/CsvImport/CsvImport.pro b/Plugins/CsvImport/CsvImport.pro
index dfdb15b..fdd85b6 100644
--- a/Plugins/CsvImport/CsvImport.pro
+++ b/Plugins/CsvImport/CsvImport.pro
@@ -26,3 +26,7 @@ OTHER_FILES += \
RESOURCES += \
csvimport.qrc
+
+
+TRANSLATIONS += CsvImport_pl.ts
+
diff --git a/Plugins/CsvImport/CsvImportOptions.ui b/Plugins/CsvImport/CsvImportOptions.ui
index 5a1c6ab..ff06613 100644
--- a/Plugins/CsvImport/CsvImportOptions.ui
+++ b/Plugins/CsvImport/CsvImportOptions.ui
@@ -6,18 +6,18 @@
<rect>
<x>0</x>
<y>0</y>
- <width>333</width>
+ <width>365</width>
<height>90</height>
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="1">
<widget class="QComboBox" name="separatorCombo">
<property name="cfg" stdset="0">
- <string>CsvImport.Separator</string>
+ <string notr="true">CsvImport.Separator</string>
</property>
<item>
<property name="text">
@@ -48,11 +48,14 @@
</item>
<item row="0" column="0" colspan="3">
<widget class="QCheckBox" name="firstRowAsColumnsCheck">
- <property name="cfg" stdset="0">
- <string>CsvImport.FirstRowAsColumns</string>
+ <property name="toolTip">
+ <string>&lt;p&gt;Enable this if the first data line in your CSV file represents column names. You don't want column names to be imported into the table as a regular data.&lt;/p&gt;</string>
</property>
<property name="text">
- <string>First row represents column names</string>
+ <string>Skip first row of data</string>
+ </property>
+ <property name="cfg" stdset="0">
+ <string notr="true">CsvImport.FirstRowAsColumns</string>
</property>
</widget>
</item>
@@ -72,18 +75,18 @@
</size>
</property>
<property name="cfg" stdset="0">
- <string>CsvImport.CustomSeparator</string>
+ <string notr="true">CsvImport.CustomSeparator</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="nullCheck">
- <property name="cfg" stdset="0">
- <string>CsvImport.NullValues</string>
- </property>
<property name="text">
<string>NULL values:</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">CsvImport.NullValues</string>
+ </property>
</widget>
</item>
<item row="2" column="1" colspan="2">
@@ -92,7 +95,7 @@
<string>If your CSV data contains null values, define how are they represented in the CSV.</string>
</property>
<property name="cfg" stdset="0">
- <string>CsvImport.NullValueString</string>
+ <string notr="true">CsvImport.NullValueString</string>
</property>
</widget>
</item>
diff --git a/Plugins/CsvImport/CsvImport_pl.qm b/Plugins/CsvImport/CsvImport_pl.qm
new file mode 100644
index 0000000..2e0a4e0
--- /dev/null
+++ b/Plugins/CsvImport/CsvImport_pl.qm
Binary files differ
diff --git a/Plugins/CsvImport/CsvImport_pl.ts b/Plugins/CsvImport/CsvImport_pl.ts
new file mode 100644
index 0000000..ca9a7aa
--- /dev/null
+++ b/Plugins/CsvImport/CsvImport_pl.ts
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>CsvImport</name>
+ <message>
+ <location filename="csvimport.cpp" line="30"/>
+ <source>Cannot read file %1</source>
+ <translation>Nie można odczytać pliku %1</translation>
+ </message>
+ <message>
+ <location filename="csvimport.cpp" line="62"/>
+ <source>Could not find any data in the file %1.</source>
+ <translation>Nie znaleziono danych w pliku %1.</translation>
+ </message>
+ <message>
+ <location filename="csvimport.cpp" line="167"/>
+ <source>Enter the custom separator character.</source>
+ <translation>Wprowadź własny znak separatora.</translation>
+ </message>
+ <message>
+ <location filename="csvimport.cpp" line="181"/>
+ <source>Enter the value that will be interpreted as a NULL.</source>
+ <translation>Wprowadź wartość, która będzie interpretowana jako NULL.</translation>
+ </message>
+ <message>
+ <location filename="csvimport.cpp" line="194"/>
+ <source>CSV files (*.csv);;Text files (*.txt);;All files (*)</source>
+ <translation>Pliki CSV (*.csv);;Pliki tekstowe (*.txt);;Wszystkie pliki (*)</translation>
+ </message>
+</context>
+<context>
+ <name>csvImportOptions</name>
+ <message>
+ <location filename="CsvImportOptions.ui" line="24"/>
+ <source>, (comma)</source>
+ <translation>, (przecinek)</translation>
+ </message>
+ <message>
+ <location filename="CsvImportOptions.ui" line="29"/>
+ <source>; (semicolon)</source>
+ <translation>; (średnik)</translation>
+ </message>
+ <message>
+ <location filename="CsvImportOptions.ui" line="34"/>
+ <source>\t (tab)</source>
+ <translation>\t (znak tabulacji)</translation>
+ </message>
+ <message>
+ <location filename="CsvImportOptions.ui" line="39"/>
+ <source> (whitespace)</source>
+ <translation> (spacja)</translation>
+ </message>
+ <message>
+ <location filename="CsvImportOptions.ui" line="44"/>
+ <source>Custom:</source>
+ <translation>Własny:</translation>
+ </message>
+ <message>
+ <location filename="CsvImportOptions.ui" line="52"/>
+ <source>&lt;p&gt;Enable this if the first data line in your CSV file represents column names. You don&apos;t want column names to be imported into the table as a regular data.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Włącz to, jeśli pierwsza linia danych w twoim pliku CSV reprezentuje nazwy kolumn. Nie chcesz, aby nazwy kolumn zostały zaimportowane jako zwykłe dane.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="CsvImportOptions.ui" line="55"/>
+ <source>Skip first row of data</source>
+ <translation>Pomiń pierwszy wiersz danych</translation>
+ </message>
+ <message>
+ <source>First row represents column names</source>
+ <translation type="obsolete">Pierwszy wiersz reprezentuje nazwy kolumn</translation>
+ </message>
+ <message>
+ <location filename="CsvImportOptions.ui" line="65"/>
+ <source>Field separator:</source>
+ <translation>Separator pól:</translation>
+ </message>
+ <message>
+ <location filename="CsvImportOptions.ui" line="85"/>
+ <source>NULL values:</source>
+ <translation>Wartości NULL:</translation>
+ </message>
+ <message>
+ <location filename="CsvImportOptions.ui" line="95"/>
+ <source>If your CSV data contains null values, define how are they represented in the CSV.</source>
+ <translation>Jeśli twoje dane CSV zawierają wartości null, zdefiniuj jak są one reprezentowane w CSV.</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/CsvImport/csvimport.json b/Plugins/CsvImport/csvimport.json
index 016c539..a2bf5f8 100644
--- a/Plugins/CsvImport/csvimport.json
+++ b/Plugins/CsvImport/csvimport.json
@@ -2,6 +2,6 @@
"type": "ImportPlugin",
"title": "CSV import",
"description": "CSV format support for importing data",
- "version": 10000,
+ "version": 10001,
"author": "SalSoft"
}
diff --git a/Plugins/CsvImport/csvimport.qrc b/Plugins/CsvImport/csvimport.qrc
index a071122..727237d 100644
--- a/Plugins/CsvImport/csvimport.qrc
+++ b/Plugins/CsvImport/csvimport.qrc
@@ -2,4 +2,7 @@
<qresource prefix="/forms">
<file>CsvImportOptions.ui</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>CsvImport_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/HtmlExport/HtmlExport.pro b/Plugins/HtmlExport/HtmlExport.pro
index ff0a68e..c4f7468 100644
--- a/Plugins/HtmlExport/HtmlExport.pro
+++ b/Plugins/HtmlExport/HtmlExport.pro
@@ -27,3 +27,7 @@ RESOURCES += \
FORMS += \
htmlexport.ui
+
+
+TRANSLATIONS += HtmlExport_pl.ts
+
diff --git a/Plugins/HtmlExport/HtmlExport_pl.qm b/Plugins/HtmlExport/HtmlExport_pl.qm
new file mode 100644
index 0000000..a0cac5e
--- /dev/null
+++ b/Plugins/HtmlExport/HtmlExport_pl.qm
Binary files differ
diff --git a/Plugins/HtmlExport/HtmlExport_pl.ts b/Plugins/HtmlExport/HtmlExport_pl.ts
new file mode 100644
index 0000000..ebe1925
--- /dev/null
+++ b/Plugins/HtmlExport/HtmlExport_pl.ts
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>HtmlExport</name>
+ <message>
+ <location filename="htmlexport.cpp" line="46"/>
+ <source>SQL query results</source>
+ <translation>Wyniki zapytania SQL</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="78"/>
+ <location filename="htmlexport.cpp" line="155"/>
+ <source>no type</source>
+ <translation>brak typu</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="115"/>
+ <location filename="htmlexport.cpp" line="243"/>
+ <source>Exported table: %1</source>
+ <translation>Eksportowana tabela: %1</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="127"/>
+ <location filename="htmlexport.cpp" line="255"/>
+ <source>Table: %1</source>
+ <translation>Tabela: %1</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="255"/>
+ <source>virtual</source>
+ <translation>wirtualna</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="308"/>
+ <source>Exported database: %1</source>
+ <translation>Eksportowana baza: %1</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="324"/>
+ <source>Index: %1</source>
+ <translation>Indeks: %1</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="330"/>
+ <source>For table:</source>
+ <translation>Dla tabeli:</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="337"/>
+ <source>Unique:</source>
+ <translation>Unikalny:</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="338"/>
+ <source>Yes</source>
+ <translation>Tak</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="338"/>
+ <source>No</source>
+ <translation>Nie</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="344"/>
+ <source>Column</source>
+ <translation>Kolumna</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="345"/>
+ <source>Collating</source>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="346"/>
+ <source>Sort order</source>
+ <translation>Sortowanie</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="377"/>
+ <source>Trigger: %1</source>
+ <translation>Wyzwalacz: %1</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="383"/>
+ <source>Activated:</source>
+ <translation>Aktywowany:</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="391"/>
+ <source>Action:</source>
+ <translation>Akcja:</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="398"/>
+ <source>On view:</source>
+ <translation>Na widoku:</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="400"/>
+ <source>On table:</source>
+ <translation>Na tabeli:</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="411"/>
+ <source>Activate condition:</source>
+ <translation>Warunek aktywacji:</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="418"/>
+ <source>Code executed:</source>
+ <translation>Wykonywany kod:</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="452"/>
+ <source>View: %1</source>
+ <translation>Widok: %1</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.cpp" line="477"/>
+ <source>Document generated by SQLiteStudio v%1 on %2</source>
+ <translation>Dokument wygenerowany przez SQLiteStudio v%1 dnia %2</translation>
+ </message>
+</context>
+<context>
+ <name>HtmlExportConfig</name>
+ <message>
+ <location filename="htmlexport.ui" line="36"/>
+ <source>Maximum number of characters per cell:</source>
+ <translation>Maksymalna liczba znaków w komórce:</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.ui" line="43"/>
+ <source>Include data types in first row</source>
+ <translation>Dodaj typy danych w pierwszym wierszu</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.ui" line="53"/>
+ <source>Column names as first row</source>
+ <translation>Nazwy kolumn w pierwszym wierszu</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.ui" line="63"/>
+ <source>Row numbers as first column</source>
+ <translation>Numery wierszy w pierwszej kolumnie</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.ui" line="73"/>
+ <source>Output format</source>
+ <translation>Format wyjściowy</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.ui" line="79"/>
+ <source>Format document (new lines, indentation)</source>
+ <translation>Formatuj dokument (nowe linie, wcięcia)</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.ui" line="92"/>
+ <source>Compress (everything in one line)</source>
+ <translation>Kompresuj (wszystko w jednej linii)</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.ui" line="108"/>
+ <source>&lt;p&gt;When enabled, HTML characters such as &amp;lt;, &amp;gt; and &amp;amp; are not escaped in exported values. This allows you for example to export hyper-link enabled documents, but it also may result in incorrect HTML document (unmatched pairs of &amp;lt; and &amp;gt; characters). Be warned.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Kiedy włączone, znaki HTML takie jak &amp;lt;, &amp;gt; i &amp;amp; nie będą podmieniane w wyeksportowanych wartościach. Pozwala to przykładowo na eksportowanie odnośników w dokumencie, ale może też spowodować, ze dokument HTML będzie niepoprawny (niedopasowane pary znaków &amp;lt; i &amp;gt;). Miej tego świadomość.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="htmlexport.ui" line="111"/>
+ <source>Don&apos;t escape HTML characters</source>
+ <translation>Nie podmieniaj znaków HTML.</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/HtmlExport/htmlexport.qrc b/Plugins/HtmlExport/htmlexport.qrc
index 77f9482..8756c61 100644
--- a/Plugins/HtmlExport/htmlexport.qrc
+++ b/Plugins/HtmlExport/htmlexport.qrc
@@ -5,4 +5,7 @@
<qresource prefix="/forms">
<file>htmlexport.ui</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>HtmlExport_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/HtmlExport/htmlexport.ui b/Plugins/HtmlExport/htmlexport.ui
index a4727a4..6606b1f 100644
--- a/Plugins/HtmlExport/htmlexport.ui
+++ b/Plugins/HtmlExport/htmlexport.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="4" column="1">
@@ -26,7 +26,7 @@
<number>999999999</number>
</property>
<property name="cfg" stdset="0">
- <string>HtmlExport.ByteLengthLimit</string>
+ <string notr="true">HtmlExport.ByteLengthLimit</string>
</property>
</widget>
</item>
@@ -43,7 +43,7 @@
<string>Include data types in first row</string>
</property>
<property name="cfg" stdset="0">
- <string>HtmlExport.PrintDataTypes</string>
+ <string notr="true">HtmlExport.PrintDataTypes</string>
</property>
</widget>
</item>
@@ -53,7 +53,7 @@
<string>Column names as first row</string>
</property>
<property name="cfg" stdset="0">
- <string>HtmlExport.PrintHeader</string>
+ <string notr="true">HtmlExport.PrintHeader</string>
</property>
</widget>
</item>
@@ -63,7 +63,7 @@
<string>Row numbers as first column</string>
</property>
<property name="cfg" stdset="0">
- <string>HtmlExport.PrintRowNum</string>
+ <string notr="true">HtmlExport.PrintRowNum</string>
</property>
</widget>
</item>
@@ -79,10 +79,10 @@
<string>Format document (new lines, indentation)</string>
</property>
<property name="cfg" stdset="0">
- <string>HtmlExport.Format</string>
+ <string notr="true">HtmlExport.Format</string>
</property>
<property name="assignedValue" stdset="0">
- <string>format</string>
+ <string notr="true">format</string>
</property>
</widget>
</item>
@@ -92,10 +92,10 @@
<string>Compress (everything in one line)</string>
</property>
<property name="cfg" stdset="0">
- <string>HtmlExport.Format</string>
+ <string notr="true">HtmlExport.Format</string>
</property>
<property name="assignedValue" stdset="0">
- <string>compress</string>
+ <string notr="true">compress</string>
</property>
</widget>
</item>
@@ -111,7 +111,7 @@
<string>Don't escape HTML characters</string>
</property>
<property name="cfg" stdset="0">
- <string>HtmlExport.DontEscapeHtml</string>
+ <string notr="true">HtmlExport.DontEscapeHtml</string>
</property>
</widget>
</item>
diff --git a/Plugins/JsonExport/JsonExport.pro b/Plugins/JsonExport/JsonExport.pro
index 8e29fcf..c259664 100644
--- a/Plugins/JsonExport/JsonExport.pro
+++ b/Plugins/JsonExport/JsonExport.pro
@@ -26,3 +26,7 @@ FORMS += \
RESOURCES += \
jsonexport.qrc
+
+
+TRANSLATIONS += JsonExport_pl.ts
+
diff --git a/Plugins/JsonExport/JsonExport_pl.qm b/Plugins/JsonExport/JsonExport_pl.qm
new file mode 100644
index 0000000..3ed3bcd
--- /dev/null
+++ b/Plugins/JsonExport/JsonExport_pl.qm
Binary files differ
diff --git a/Plugins/JsonExport/JsonExport_pl.ts b/Plugins/JsonExport/JsonExport_pl.ts
new file mode 100644
index 0000000..bdfdf8a
--- /dev/null
+++ b/Plugins/JsonExport/JsonExport_pl.ts
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>JsonExportConfig</name>
+ <message>
+ <location filename="jsonexport.ui" line="20"/>
+ <source>Output format</source>
+ <translation>Format wyjściowy</translation>
+ </message>
+ <message>
+ <location filename="jsonexport.ui" line="26"/>
+ <source>Format document (new lines, indentation)</source>
+ <translation>Formatuj dokument (nowe linie, wcięcia)</translation>
+ </message>
+ <message>
+ <location filename="jsonexport.ui" line="42"/>
+ <source>Compress (everything in one line)</source>
+ <translation>Kompresuj (wszystko w jednej linii)</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/JsonExport/jsonexport.qrc b/Plugins/JsonExport/jsonexport.qrc
index 19ea921..c9c8b78 100644
--- a/Plugins/JsonExport/jsonexport.qrc
+++ b/Plugins/JsonExport/jsonexport.qrc
@@ -2,4 +2,7 @@
<qresource prefix="/forms">
<file>jsonexport.ui</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>JsonExport_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/JsonExport/jsonexport.ui b/Plugins/JsonExport/jsonexport.ui
index ebb0d78..df31f58 100644
--- a/Plugins/JsonExport/jsonexport.ui
+++ b/Plugins/JsonExport/jsonexport.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -29,10 +29,10 @@
<bool>true</bool>
</property>
<property name="assignedValue" stdset="0">
- <string>format</string>
+ <string notr="true">format</string>
</property>
<property name="cfg" stdset="0">
- <string>JsonExport.Format</string>
+ <string notr="true">JsonExport.Format</string>
</property>
</widget>
</item>
@@ -42,10 +42,10 @@
<string>Compress (everything in one line)</string>
</property>
<property name="assignedValue" stdset="0">
- <string>compress</string>
+ <string notr="true">compress</string>
</property>
<property name="cfg" stdset="0">
- <string>JsonExport.Format</string>
+ <string notr="true">JsonExport.Format</string>
</property>
</widget>
</item>
diff --git a/Plugins/PdfExport/PdfExport.pro b/Plugins/PdfExport/PdfExport.pro
index 46dda37..598e23c 100644
--- a/Plugins/PdfExport/PdfExport.pro
+++ b/Plugins/PdfExport/PdfExport.pro
@@ -24,3 +24,7 @@ FORMS += \
RESOURCES += \
pdfexport.qrc
+
+
+TRANSLATIONS += PdfExport_pl.ts
+
diff --git a/Plugins/PdfExport/PdfExport_pl.qm b/Plugins/PdfExport/PdfExport_pl.qm
new file mode 100644
index 0000000..ff4fc42
--- /dev/null
+++ b/Plugins/PdfExport/PdfExport_pl.qm
Binary files differ
diff --git a/Plugins/PdfExport/PdfExport_pl.ts b/Plugins/PdfExport/PdfExport_pl.ts
new file mode 100644
index 0000000..5ac637d
--- /dev/null
+++ b/Plugins/PdfExport/PdfExport_pl.ts
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>PdfExport</name>
+ <message>
+ <location filename="pdfexport.cpp" line="28"/>
+ <source>SQLiteStudio v%1</source>
+ <translation>SQLiteStudio v%1</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="60"/>
+ <source>SQL query results</source>
+ <translation>Wyniki zapytania SQL</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="89"/>
+ <location filename="pdfexport.cpp" line="143"/>
+ <source>Exported table: %1</source>
+ <translation>Eksportowana tabela: %1</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="92"/>
+ <location filename="pdfexport.cpp" line="158"/>
+ <source>Table: %1</source>
+ <translation>Tabela: %1</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="94"/>
+ <location filename="pdfexport.cpp" line="230"/>
+ <source>Column</source>
+ <translation>Kolumna</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="94"/>
+ <source>Data type</source>
+ <translation>Typ danych</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="94"/>
+ <source>Constraints</source>
+ <translation>Ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="125"/>
+ <source>Global table constraints</source>
+ <translation>Globalne ograniczenia tabeli</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="214"/>
+ <source>Exported database: %1</source>
+ <translation>Eksportowana baza: %1</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="222"/>
+ <source>Index: %1</source>
+ <translation>Indeks: %1</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="224"/>
+ <source>Property</source>
+ <comment>index header</comment>
+ <translation>Własność</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="224"/>
+ <source>Value</source>
+ <comment>index header</comment>
+ <translation>Wartość</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="227"/>
+ <source>Indexed table</source>
+ <translation>Zaindeksowana tabela</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="228"/>
+ <source>Unique index</source>
+ <translation>Indeks unikalny</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="228"/>
+ <source>Yes</source>
+ <translation>Tak</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="228"/>
+ <source>No</source>
+ <translation>Nie</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="230"/>
+ <source>Collation</source>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="230"/>
+ <source>Sort order</source>
+ <translation>Sortowanie</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="246"/>
+ <source>Partial index condition</source>
+ <translation>Warunek indeksu częściowego</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="260"/>
+ <source>Trigger: %1</source>
+ <translation>Wyzwalacz: %1</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="262"/>
+ <source>Property</source>
+ <comment>trigger header</comment>
+ <translation>Własność</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="262"/>
+ <source>Value</source>
+ <comment>trigger header</comment>
+ <translation>Wartość</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="264"/>
+ <source>Activation time</source>
+ <translation>Moment aktywacji</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="267"/>
+ <source>For action</source>
+ <translation>Dla akcji</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="271"/>
+ <source>On view</source>
+ <translation>Na widoku</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="273"/>
+ <source>On table</source>
+ <translation>Na tabeli</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="278"/>
+ <source>Activation condition</source>
+ <translation>Warunek aktywacji</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="284"/>
+ <source>Code executed</source>
+ <translation>Kod do wykonania</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="296"/>
+ <source>View: %1</source>
+ <translation>Widok: %1</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="297"/>
+ <source>Query:</source>
+ <translation>Zapytanie:</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.cpp" line="649"/>
+ <source>Document generated with SQLiteStudio v%1</source>
+ <translation>Dokument wygenerowany przy pomocy SQLiteStudio v%1</translation>
+ </message>
+</context>
+<context>
+ <name>PdfExportConfig</name>
+ <message>
+ <location filename="pdfexport.ui" line="20"/>
+ <source>Size and layout</source>
+ <translation>Rozmiar i układ</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="36"/>
+ <source>Page size:</source>
+ <translation>Rozmiar strony:</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="63"/>
+ <source>Right margin:</source>
+ <translation>Prawy margines:</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="70"/>
+ <source>Left margin:</source>
+ <translation>Lewy margines:</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="77"/>
+ <source>Cell padding:</source>
+ <translation>Odstęp wewnątrz komórki:</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="84"/>
+ <source>Limit characters in single cell:</source>
+ <translation>Ogranicz liczbę znaków w komórce:</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="91"/>
+ <location filename="pdfexport.ui" line="108"/>
+ <location filename="pdfexport.ui" line="115"/>
+ <location filename="pdfexport.ui" line="132"/>
+ <location filename="pdfexport.ui" line="156"/>
+ <source>mm</source>
+ <translation>mm</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="139"/>
+ <source>Bottom margin:</source>
+ <translation>Dolny margines:</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="163"/>
+ <source>Top margin:</source>
+ <translation>Górny margines:</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="183"/>
+ <source>Font</source>
+ <translation>Czcionka</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="206"/>
+ <source>Colors</source>
+ <translation>Kolory</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="212"/>
+ <source>Headers background:</source>
+ <translation>Tło nagłówków:</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="235"/>
+ <source>NULL value color:</source>
+ <translation>Kolor wartości NULL:</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="261"/>
+ <source>Other settings</source>
+ <translation>Inne ustawienia</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="267"/>
+ <source>Print row numbers for data</source>
+ <translation>Drukuj numery wierszy dla danych</translation>
+ </message>
+ <message>
+ <location filename="pdfexport.ui" line="277"/>
+ <source>Print page numbers</source>
+ <translation>Drukuj numery stron</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/PdfExport/pdfexport.cpp b/Plugins/PdfExport/pdfexport.cpp
index da15ab7..cd1ceca 100644
--- a/Plugins/PdfExport/pdfexport.cpp
+++ b/Plugins/PdfExport/pdfexport.cpp
@@ -227,7 +227,7 @@ bool PdfExport::exportIndex(const QString& database, const QString& name, const
exportObjectRow({tr("Indexed table"), name});
exportObjectRow({tr("Unique index"), (createIndex->uniqueKw ? tr("Yes") : tr("No"))});
- indexColumns = {tr("Column"), tr("Collation"), tr("Sort order")};
+ indexColumns = QStringList({tr("Column"), tr("Collation"), tr("Sort order")});
exportObjectColumnsHeader(indexColumns);
QString sort;
@@ -243,7 +243,7 @@ bool PdfExport::exportIndex(const QString& database, const QString& name, const
if (createIndex->where)
{
- indexColumns = {tr("Partial index condition")};
+ indexColumns = QStringList({tr("Partial index condition")});
exportObjectColumnsHeader(indexColumns);
exportObjectRow(createIndex->where->detokenize());
}
diff --git a/Plugins/PdfExport/pdfexport.qrc b/Plugins/PdfExport/pdfexport.qrc
index fce27e6..5a2e9d8 100644
--- a/Plugins/PdfExport/pdfexport.qrc
+++ b/Plugins/PdfExport/pdfexport.qrc
@@ -2,4 +2,7 @@
<qresource prefix="/forms">
<file>pdfexport.ui</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>PdfExport_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/PdfExport/pdfexport.ui b/Plugins/PdfExport/pdfexport.ui
index 31dfce5..1d396ef 100644
--- a/Plugins/PdfExport/pdfexport.ui
+++ b/Plugins/PdfExport/pdfexport.ui
@@ -6,12 +6,12 @@
<rect>
<x>0</x>
<y>0</y>
- <width>332</width>
+ <width>335</width>
<height>492</height>
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -26,7 +26,7 @@
<number>999</number>
</property>
<property name="cfg" stdset="0">
- <string>PdfExport.MaxCellBytes</string>
+ <string notr="true">PdfExport.MaxCellBytes</string>
</property>
</widget>
</item>
@@ -43,7 +43,7 @@
<number>999999</number>
</property>
<property name="cfg" stdset="0">
- <string>PdfExport.BottomMargin</string>
+ <string notr="true">PdfExport.BottomMargin</string>
</property>
</widget>
</item>
@@ -53,7 +53,7 @@
<number>999999</number>
</property>
<property name="cfg" stdset="0">
- <string>PdfExport.RightMargin</string>
+ <string notr="true">PdfExport.RightMargin</string>
</property>
</widget>
</item>
@@ -98,7 +98,7 @@
<number>999999</number>
</property>
<property name="cfg" stdset="0">
- <string>PdfExport.Padding</string>
+ <string notr="true">PdfExport.Padding</string>
</property>
</widget>
</item>
@@ -122,7 +122,7 @@
<number>999999</number>
</property>
<property name="cfg" stdset="0">
- <string>PdfExport.TopMargin</string>
+ <string notr="true">PdfExport.TopMargin</string>
</property>
</widget>
</item>
@@ -143,10 +143,10 @@
<item row="0" column="1">
<widget class="ConfigComboBox" name="pageSizeCombo">
<property name="modelName" stdset="0">
- <string>PdfExport.PageSizes</string>
+ <string notr="true">PdfExport.PageSizes</string>
</property>
<property name="cfg" stdset="0">
- <string>PdfExport.PageSize</string>
+ <string notr="true">PdfExport.PageSize</string>
</property>
</widget>
</item>
@@ -170,7 +170,7 @@
<number>999999</number>
</property>
<property name="cfg" stdset="0">
- <string>PdfExport.LeftMargin</string>
+ <string notr="true">PdfExport.LeftMargin</string>
</property>
</widget>
</item>
@@ -186,14 +186,14 @@
<item row="0" column="1">
<widget class="QSpinBox" name="fontSizeSpin">
<property name="cfg" stdset="0">
- <string>PdfExport.FontSize</string>
+ <string notr="true">PdfExport.FontSize</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QFontComboBox" name="fontComboBox">
<property name="cfg" stdset="0">
- <string>PdfExport.Font</string>
+ <string notr="true">PdfExport.Font</string>
</property>
</widget>
</item>
@@ -222,10 +222,10 @@
</size>
</property>
<property name="text">
- <string/>
+ <string notr="true"/>
</property>
<property name="cfg" stdset="0">
- <string>PdfExport.HeaderBgColor</string>
+ <string notr="true">PdfExport.HeaderBgColor</string>
</property>
</widget>
</item>
@@ -245,10 +245,10 @@
</size>
</property>
<property name="text">
- <string/>
+ <string notr="true"/>
</property>
<property name="cfg" stdset="0">
- <string>PdfExport.NullValueColor</string>
+ <string notr="true">PdfExport.NullValueColor</string>
</property>
</widget>
</item>
@@ -267,7 +267,7 @@
<string>Print row numbers for data</string>
</property>
<property name="cfg" stdset="0">
- <string>PdfExport.PrintRowNum</string>
+ <string notr="true">PdfExport.PrintRowNum</string>
</property>
</widget>
</item>
@@ -277,7 +277,7 @@
<string>Print page numbers</string>
</property>
<property name="cfg" stdset="0">
- <string>PdfExport.PrintPageNumbers</string>
+ <string notr="true">PdfExport.PrintPageNumbers</string>
</property>
</widget>
</item>
diff --git a/Plugins/Printing/Printing.pro b/Plugins/Printing/Printing.pro
index 49469c2..3f496be 100644
--- a/Plugins/Printing/Printing.pro
+++ b/Plugins/Printing/Printing.pro
@@ -33,3 +33,7 @@ win32|macx: {
RESOURCES += \
printing.qrc
+
+
+TRANSLATIONS += Printing_pl.ts
+
diff --git a/Plugins/Printing/Printing_pl.qm b/Plugins/Printing/Printing_pl.qm
new file mode 100644
index 0000000..0a736b9
--- /dev/null
+++ b/Plugins/Printing/Printing_pl.qm
Binary files differ
diff --git a/Plugins/Printing/Printing_pl.ts b/Plugins/Printing/Printing_pl.ts
new file mode 100644
index 0000000..b372ef9
--- /dev/null
+++ b/Plugins/Printing/Printing_pl.ts
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>Printing</name>
+ <message>
+ <location filename="printing.cpp" line="35"/>
+ <source>Print data</source>
+ <translation>Drukuj dane</translation>
+ </message>
+ <message>
+ <location filename="printing.cpp" line="37"/>
+ <source>Print query</source>
+ <translation>Drukuj zapytanie</translation>
+ </message>
+ <message>
+ <location filename="printing.cpp" line="75"/>
+ <source>No data to print.</source>
+ <translation>Brak danych do wydruku.</translation>
+ </message>
+ <message>
+ <location filename="printing.cpp" line="84"/>
+ <source>Printing data.</source>
+ <translation>Drukuj dane.</translation>
+ </message>
+ <message>
+ <location filename="printing.cpp" line="110"/>
+ <source>Printing query.</source>
+ <translation>Drukuj zapytanie.</translation>
+ </message>
+</context>
+<context>
+ <name>PrintingExport</name>
+ <message>
+ <location filename="printingexport.cpp" line="34"/>
+ <source>Printing</source>
+ <translation>Drukuj</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/Printing/printing.cpp b/Plugins/Printing/printing.cpp
index ff8443d..3591d4b 100644
--- a/Plugins/Printing/printing.cpp
+++ b/Plugins/Printing/printing.cpp
@@ -9,6 +9,7 @@
#include "exportworker.h"
#include "services/notifymanager.h"
#include "sqleditor.h"
+#include "translations.h"
#include <QDebug>
#include <QPrinter>
#include <QPrintDialog>
@@ -23,6 +24,8 @@ bool Printing::init()
if (!printingExportInit)
return false;
+ loadTranslation("Printing");
+
printingConfig = new ExportManager::StandardExportConfig();
printingConfig->exportData = true;
printingConfig->exportTableIndexes = false;
diff --git a/Plugins/Printing/printing.json b/Plugins/Printing/printing.json
index 1a59fb5..101f07b 100644
--- a/Plugins/Printing/printing.json
+++ b/Plugins/Printing/printing.json
@@ -2,7 +2,7 @@
"type": "GeneralPurposePlugin",
"title": "Printing",
"description": "Provides printing support.",
- "version": 10000,
+ "version": 10001,
"author": "SalSoft",
"gui": true,
"dependencies": "PdfExport"
diff --git a/Plugins/Printing/printing.qrc b/Plugins/Printing/printing.qrc
index faf09c1..54dc86f 100644
--- a/Plugins/Printing/printing.qrc
+++ b/Plugins/Printing/printing.qrc
@@ -2,4 +2,7 @@
<qresource prefix="/icons">
<file>printer.png</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>Printing_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/RegExpImport/RegExpImport.pro b/Plugins/RegExpImport/RegExpImport.pro
index 99c884e..6b3b955 100644
--- a/Plugins/RegExpImport/RegExpImport.pro
+++ b/Plugins/RegExpImport/RegExpImport.pro
@@ -26,3 +26,7 @@ FORMS += \
RESOURCES += \
regexpimport.qrc
+
+
+TRANSLATIONS += RegExpImport_pl.ts
+
diff --git a/Plugins/RegExpImport/RegExpImport_pl.qm b/Plugins/RegExpImport/RegExpImport_pl.qm
new file mode 100644
index 0000000..b71fbf8
--- /dev/null
+++ b/Plugins/RegExpImport/RegExpImport_pl.qm
Binary files differ
diff --git a/Plugins/RegExpImport/RegExpImport_pl.ts b/Plugins/RegExpImport/RegExpImport_pl.ts
new file mode 100644
index 0000000..a5d567c
--- /dev/null
+++ b/Plugins/RegExpImport/RegExpImport_pl.ts
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>RegExpImport</name>
+ <message>
+ <location filename="regexpimport.cpp" line="37"/>
+ <source>Text files (*.txt);;All files (*)</source>
+ <translation>Pliki tekstowe (*.txt);;Wszystkie pliki (*)</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.cpp" line="53"/>
+ <source>Cannot read file %1</source>
+ <translation>Nie można odczytać pliku %1</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.cpp" line="161"/>
+ <source>Enter the regular expression pattern.</source>
+ <translation>Wprowadź wzorzec wyrażenia regularnego.</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.cpp" line="169"/>
+ <source>Invalid pattern: %1</source>
+ <translation>Niepoprawny wzorzec: %1</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.cpp" line="189"/>
+ <source>Requested capture index %1 is out of range.</source>
+ <translation>Żądany indeks przechwytywania %1 jest poza zakresem.</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.cpp" line="196"/>
+ <source>&lt;p&gt;Requested capture group name &apos;%1&apos;, but it&apos;s not defined in the pattern: &lt;pre&gt;%2&lt;/pre&gt;&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Zażądano grupy do przechwycenia o nazwie &apos;%1&apos;, ale nie jest ona zdefiniowana we wzorcu: &lt;pre&gt;%2&lt;/pre&gt;&lt;/p&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>RegExpImportConfig</name>
+ <message>
+ <location filename="regexpimport.ui" line="20"/>
+ <source>Capture groups</source>
+ <translation>Grupy przechwytujące</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.ui" line="26"/>
+ <source>Treat all RegExp capture groups as columns</source>
+ <translation>Traktuj wszystkie grupy przechwytujące jako kolumny</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.ui" line="39"/>
+ <source>Import only following groups:</source>
+ <translation>Importuj tylko następujące grupy:</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.ui" line="52"/>
+ <source>&lt;p&gt;Enter comma separated list of capture group indexes. The 0 index refers to the entire matched string.&lt;/p&gt;
+&lt;p&gt;If you used named groups in the pattern, you can use names instead of indexes. You can mix indexes and names in this list.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Wprowadź listę indeksów grup oddzieloną przecinkami. Indeks 0 odpowiada całemu dopasowanemu łańcuchowi.&lt;/p&gt;
+&lt;p&gt;Jeśli użyłeś nazwanych grup we wzorcu, to możesz używać nazw, zamiast indeksów. Możesz mieszać inseksy i nazwy na liście.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.ui" line="56"/>
+ <source>Example: 1, 3, 4</source>
+ <translation>Przykład: 1, 3, 4</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.ui" line="69"/>
+ <source>Pattern:</source>
+ <translation>Wzorzec:</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.ui" line="76"/>
+ <source>&lt;p&gt;Use Regular Expression groups to enclose parts of the expression that you want to import. If you want to use a group, that you don&apos;t want to import, then use &quot;import only following groups&quot; option below.
+
+You can use named groups and refer to them in group list below. To name a group use: &lt;pre&gt;(?&amp;lt;myGroupName&amp;gt;\s+\d+\s+)&lt;/pre&gt;&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Użyj grup przechwytujących Wyrażeń Regularnych, aby otoczyć części wyrażenia, które chcesz zaimportować. Jeśli chcesz użyć grupy, której nie chcesz zaimportować, to użyj opcji &quot;importuj tylko następujące grupy&quot; poniżej.
+
+Możesz użyć grup nazwanych i odwoływać się do nich w liście grup poniżej. Aby nazwać grupę, użyj: &lt;pre&gt;(?&amp;lt;nazwaGrupy&amp;gt;\s+\d+\s+)&lt;/pre&gt;&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="regexpimport.ui" line="81"/>
+ <source>Example: (\d+)\s+((\d+)\w+)\s+(\w+)</source>
+ <translation>Przykład: (\d+)\s+((\d+)\w+)\s+(\w+)</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/RegExpImport/regexpimport.qrc b/Plugins/RegExpImport/regexpimport.qrc
index 9ece86e..0d545ab 100644
--- a/Plugins/RegExpImport/regexpimport.qrc
+++ b/Plugins/RegExpImport/regexpimport.qrc
@@ -2,4 +2,7 @@
<qresource prefix="/forms">
<file>regexpimport.ui</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>RegExpImport_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/RegExpImport/regexpimport.ui b/Plugins/RegExpImport/regexpimport.ui
index d1287cb..3844a40 100644
--- a/Plugins/RegExpImport/regexpimport.ui
+++ b/Plugins/RegExpImport/regexpimport.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0" colspan="2">
@@ -26,10 +26,10 @@
<string>Treat all RegExp capture groups as columns</string>
</property>
<property name="assignedValue" stdset="0">
- <string>all</string>
+ <string notr="true">all</string>
</property>
<property name="cfg" stdset="0">
- <string>RegExpImport.GroupsMode</string>
+ <string notr="true">RegExpImport.GroupsMode</string>
</property>
</widget>
</item>
@@ -39,10 +39,10 @@
<string>Import only following groups:</string>
</property>
<property name="assignedValue" stdset="0">
- <string>custom</string>
+ <string notr="true">custom</string>
</property>
<property name="cfg" stdset="0">
- <string>RegExpImport.GroupsMode</string>
+ <string notr="true">RegExpImport.GroupsMode</string>
</property>
</widget>
</item>
@@ -56,7 +56,7 @@
<string>Example: 1, 3, 4</string>
</property>
<property name="cfg" stdset="0">
- <string>RegExpImport.CustomGroupList</string>
+ <string notr="true">RegExpImport.CustomGroupList</string>
</property>
</widget>
</item>
@@ -81,7 +81,7 @@ You can use named groups and refer to them in group list below. To name a group
<string>Example: (\d+)\s+((\d+)\w+)\s+(\w+)</string>
</property>
<property name="cfg" stdset="0">
- <string>RegExpImport.Pattern</string>
+ <string notr="true">RegExpImport.Pattern</string>
</property>
</widget>
</item>
diff --git a/Plugins/ScriptingTcl/ScriptingTcl.pro b/Plugins/ScriptingTcl/ScriptingTcl.pro
index 08d8796..7197a11 100644
--- a/Plugins/ScriptingTcl/ScriptingTcl.pro
+++ b/Plugins/ScriptingTcl/ScriptingTcl.pro
@@ -136,3 +136,7 @@ win32: {
RESOURCES += \
scriptingtcl.qrc
+
+
+TRANSLATIONS += ScriptingTcl_pl.ts
+
diff --git a/Plugins/ScriptingTcl/ScriptingTcl_pl.qm b/Plugins/ScriptingTcl/ScriptingTcl_pl.qm
new file mode 100644
index 0000000..1232971
--- /dev/null
+++ b/Plugins/ScriptingTcl/ScriptingTcl_pl.qm
Binary files differ
diff --git a/Plugins/ScriptingTcl/ScriptingTcl_pl.ts b/Plugins/ScriptingTcl/ScriptingTcl_pl.ts
new file mode 100644
index 0000000..be6a580
--- /dev/null
+++ b/Plugins/ScriptingTcl/ScriptingTcl_pl.ts
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>ScriptingTcl</name>
+ <message>
+ <location filename="scriptingtcl.cpp" line="411"/>
+ <source>No database available in current context, while called Tcl&apos;s &apos;%1&apos; command.</source>
+ <oldsource>No database available in current context, while called Tcl&apos;s &apos;db&apos; command.</oldsource>
+ <translation>Brak dostępnej bazy w bieżącym kontekście, podczas wywołania polecenie Tcl &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="scriptingtcl.cpp" line="433"/>
+ <source>Invalid &apos;%1&apos; command sytax. Should be: %2</source>
+ <oldsource>Invalid &apos;db&apos; command sytax. Should be: db eval sql</oldsource>
+ <translation>Niepoprawna składnia polecenia &apos;%1&apos;. Powinno być: %2</translation>
+ </message>
+ <message>
+ <location filename="scriptingtcl.cpp" line="554"/>
+ <source>Error from Tcl&apos;s&apos; &apos;%1&apos; command: %2</source>
+ <oldsource>Error from Tcl&apos;s&apos; &apos;db&apos; command: %1</oldsource>
+ <translation>Wystąpił błąd w poleceniu Tcl &apos;%1&apos;: %2</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/ScriptingTcl/scriptingtcl.cpp b/Plugins/ScriptingTcl/scriptingtcl.cpp
index 5709808..4390317 100644
--- a/Plugins/ScriptingTcl/scriptingtcl.cpp
+++ b/Plugins/ScriptingTcl/scriptingtcl.cpp
@@ -408,7 +408,7 @@ int ScriptingTcl::dbCommand(ClientData clientData, Tcl_Interp* interp, int objc,
Tcl_Obj* result = nullptr;
if (!ctx->db)
{
- result = Tcl_NewStringObj(tr("No database available in current context, while called Tcl's 'db' command.").toUtf8().constData(), -1);
+ result = Tcl_NewStringObj(tr("No database available in current context, while called Tcl's '%1' command.").arg("db").toUtf8().constData(), -1);
Tcl_SetObjResult(interp, result);
return TCL_ERROR;
}
@@ -430,7 +430,7 @@ int ScriptingTcl::dbCommand(ClientData clientData, Tcl_Interp* interp, int objc,
return dbEvalOneColumn(ctx, interp, objv);
}
- result = Tcl_NewStringObj(tr("Invalid 'db' command sytax. Should be: db eval sql").toUtf8().constData(), -1);
+ result = Tcl_NewStringObj(tr("Invalid '%1' command sytax. Should be: %2").arg("db", "db eval sql").toUtf8().constData(), -1);
Tcl_SetObjResult(interp, result);
return TCL_ERROR;
}
@@ -551,7 +551,7 @@ SqlQueryPtr ScriptingTcl::dbCommonEval(ContextTcl* ctx, Tcl_Interp* interp, Tcl_
SqlQueryPtr execResults = ctx->db->exec(sql, queryArgs, flags);
if (execResults->isError())
{
- result = Tcl_NewStringObj(tr("Error from Tcl's' 'db' command: %1").arg(execResults->getErrorText()).toUtf8().constData(), -1);
+ result = Tcl_NewStringObj(tr("Error from Tcl's' '%1' command: %2").arg("db", execResults->getErrorText()).toUtf8().constData(), -1);
Tcl_SetObjResult(interp, result);
}
return execResults;
diff --git a/Plugins/ScriptingTcl/scriptingtcl.qrc b/Plugins/ScriptingTcl/scriptingtcl.qrc
index 8a0d047..0a78160 100644
--- a/Plugins/ScriptingTcl/scriptingtcl.qrc
+++ b/Plugins/ScriptingTcl/scriptingtcl.qrc
@@ -2,4 +2,7 @@
<qresource prefix="/scriptingtcl">
<file>scriptingtcl.png</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>ScriptingTcl_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter.pro b/Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter.pro
index ae68b60..23efd4c 100644
--- a/Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter.pro
+++ b/Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter.pro
@@ -98,3 +98,7 @@ FORMS += \
RESOURCES += \
sqlenterpriseformatter.qrc
+
+
+TRANSLATIONS += SqlEnterpriseFormatter_pl.ts
+
diff --git a/Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter_pl.qm b/Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter_pl.qm
new file mode 100644
index 0000000..ea184fe
--- /dev/null
+++ b/Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter_pl.qm
Binary files differ
diff --git a/Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter_pl.ts b/Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter_pl.ts
new file mode 100644
index 0000000..b73d4ad
--- /dev/null
+++ b/Plugins/SqlEnterpriseFormatter/SqlEnterpriseFormatter_pl.ts
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="sqlenterpriseformatter.cpp" line="82"/>
+ <location filename="sqlenterpriseformatter.cpp" line="89"/>
+ <source>name</source>
+ <comment>example name wrapper</comment>
+ <translation>nazwa</translation>
+ </message>
+</context>
+<context>
+ <name>SqlEnterpriseFormatter</name>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="46"/>
+ <source>Indentation</source>
+ <translation>Wcięcia</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="58"/>
+ <source>Line up keywords in multi-line queries</source>
+ <translation>Wyrównaj słowa kluczowe w wielolinijkowych zapytaniach</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="68"/>
+ <source>Indent contents of parenthesis block</source>
+ <translation>Dodaj wcięcia do zawartości bloków w nawiasach</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="91"/>
+ <source>Tab size:</source>
+ <translation>Rozmiar tabulacji:</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="106"/>
+ <source>New lines</source>
+ <translation>Nowe linie</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="160"/>
+ <source>Before opening parenthesis in column definitions</source>
+ <translation>Przed nawiasem otwierającym w definicjach kolumn</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="170"/>
+ <source>After opening parenthesis in column definitions</source>
+ <translation>Po nawiasie otwierającym w definicjach kolumn</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="180"/>
+ <source>Before closing parenthesis in column definitions</source>
+ <translation>Przed nawiasem zamykającym w definicjach kolumn</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="190"/>
+ <source>After closing parenthesis in column definitions</source>
+ <translation>Po nawiasie zamykającym w definicjach kolumn</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="200"/>
+ <source>Before opening parenthesis in expressions</source>
+ <translation>Przed nawiasem otwierającym w wyrażeniach</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="210"/>
+ <source>After opening parenthesis in expressions</source>
+ <translation>Po nawiasie otwierającym w wyrażeniach</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="220"/>
+ <source>Before closing parenthesis in expressions</source>
+ <translation>Przed nawiasem zamykającym w wyrażeniach</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="230"/>
+ <source>After closing parenthesis in expressions</source>
+ <translation>Po nawiasie zamykającym w wyrażeniach</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="240"/>
+ <source>After JOIN keywords in FROM clause</source>
+ <oldsource>After *JOIN keywords in FROM clause</oldsource>
+ <translation>Po słowach kluczowych JOIN w klauzuli FROM</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="250"/>
+ <source>Put each column constraint in CREATE TABLE into new line</source>
+ <translation>Ustaw każde ograniczenie kolumny w CREATE TABLE w nowej linii</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="260"/>
+ <source>After comma</source>
+ <translation>Po przecinku</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="270"/>
+ <source>After comma in expressions</source>
+ <translation>Po przecinku w wyrażeniach</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="280"/>
+ <source>After semicolon</source>
+ <translation>Po średniku</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="290"/>
+ <location filename="sqlenterpriseformatter.ui" line="512"/>
+ <source>Never before semicolon</source>
+ <translation>Nigdy przed średnikiem</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="338"/>
+ <source>White spaces</source>
+ <translation>Spacje</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="392"/>
+ <source>Before comma in lists</source>
+ <translation>Przed przecinkiem w listach</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="402"/>
+ <source>After comma in lists</source>
+ <translation>Po przecinku w listach</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="412"/>
+ <source>Before opening parenthesis</source>
+ <translation>Przed nawiasem otwierającym</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="422"/>
+ <source>After opening parenthesis</source>
+ <translation>Po nawiasie otwierającym</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="432"/>
+ <source>Before closing parenthesis</source>
+ <translation>Przed nawiasem zamykającym</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="442"/>
+ <source>After closing parenthesis</source>
+ <translation>Po nawiasie zamykającym</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="452"/>
+ <source>No space between SQL function name and opening parenthesis</source>
+ <translation>Bez spacji między nazwą funkcji SQL i nawiasem otwierającym</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="462"/>
+ <source>Before dot operator (in path to database object)</source>
+ <translation>Przed operatorem kropki (w ścieżce do obiektu bazodanowego)</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="472"/>
+ <source>After dot operator (in path to database object)</source>
+ <translation>Po operatorze kropki (w ścieżce do obiektu bazodanowego)</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="482"/>
+ <source>Before mathematical operator</source>
+ <translation>Przed operatorem matematycznym</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="492"/>
+ <source>After mathematical operator</source>
+ <translation>Po operatorze matematycznym</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="502"/>
+ <source>Never before comma</source>
+ <translation>Nigdy przed przecinkiem</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="558"/>
+ <source>Names</source>
+ <translation>Nazwy</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="583"/>
+ <source>Preferred name wrapper</source>
+ <translation>Preferowane opakowanie nazwy</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="600"/>
+ <source>Always use name wrapping</source>
+ <translation>Zawsze opakowuj nazwy</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="610"/>
+ <source>Uppercase data type names</source>
+ <translation>Zmieniaj litery nazw typów danych na duże</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="620"/>
+ <source>Uppercase keywords</source>
+ <translation>Zmieniaj litery słów kluczowych na duże</translation>
+ </message>
+ <message>
+ <location filename="sqlenterpriseformatter.ui" line="638"/>
+ <source>Preview</source>
+ <translation>Podgląd</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.qrc b/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.qrc
index bd23092..79ed2c7 100644
--- a/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.qrc
+++ b/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.qrc
@@ -2,4 +2,7 @@
<qresource prefix="/forms">
<file>sqlenterpriseformatter.ui</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>SqlEnterpriseFormatter_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.ui b/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.ui
index 49e8788..2ebfbdf 100644
--- a/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.ui
+++ b/Plugins/SqlEnterpriseFormatter/sqlenterpriseformatter.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
@@ -39,7 +39,7 @@
</sizepolicy>
</property>
<property name="currentIndex">
- <number>0</number>
+ <number>1</number>
</property>
<widget class="QWidget" name="indentTab">
<attribute name="title">
@@ -58,7 +58,7 @@
<string>Line up keywords in multi-line queries</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.LineUpKeywords</string>
+ <string notr="true">SqlEnterpriseFormatter.LineUpKeywords</string>
</property>
</widget>
</item>
@@ -68,7 +68,7 @@
<string>Indent contents of parenthesis block</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.IndentParenthesisBlock</string>
+ <string notr="true">SqlEnterpriseFormatter.IndentParenthesisBlock</string>
</property>
</widget>
</item>
@@ -95,7 +95,7 @@
<item row="3" column="2">
<widget class="QSpinBox" name="spinBox">
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.TabSize</string>
+ <string notr="true">SqlEnterpriseFormatter.TabSize</string>
</property>
</widget>
</item>
@@ -133,7 +133,7 @@
<property name="geometry">
<rect>
<x>0</x>
- <y>0</y>
+ <y>-166</y>
<width>578</width>
<height>350</height>
</rect>
@@ -160,7 +160,7 @@
<string>Before opening parenthesis in column definitions</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlBeforeOpenParDef</string>
+ <string notr="true">SqlEnterpriseFormatter.NlBeforeOpenParDef</string>
</property>
</widget>
</item>
@@ -170,7 +170,7 @@
<string>After opening parenthesis in column definitions</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlAfterOpenParDef</string>
+ <string notr="true">SqlEnterpriseFormatter.NlAfterOpenParDef</string>
</property>
</widget>
</item>
@@ -180,7 +180,7 @@
<string>Before closing parenthesis in column definitions</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlBeforeCloseParDef</string>
+ <string notr="true">SqlEnterpriseFormatter.NlBeforeCloseParDef</string>
</property>
</widget>
</item>
@@ -190,7 +190,7 @@
<string>After closing parenthesis in column definitions</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlAfterCloseParDef</string>
+ <string notr="true">SqlEnterpriseFormatter.NlAfterCloseParDef</string>
</property>
</widget>
</item>
@@ -200,7 +200,7 @@
<string>Before opening parenthesis in expressions</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlBeforeOpenParExpr</string>
+ <string notr="true">SqlEnterpriseFormatter.NlBeforeOpenParExpr</string>
</property>
</widget>
</item>
@@ -210,7 +210,7 @@
<string>After opening parenthesis in expressions</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlAfterOpenParExpr</string>
+ <string notr="true">SqlEnterpriseFormatter.NlAfterOpenParExpr</string>
</property>
</widget>
</item>
@@ -220,7 +220,7 @@
<string>Before closing parenthesis in expressions</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlBeforeCloseParExpr</string>
+ <string notr="true">SqlEnterpriseFormatter.NlBeforeCloseParExpr</string>
</property>
</widget>
</item>
@@ -230,17 +230,17 @@
<string>After closing parenthesis in expressions</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlAfterCloseParExpr</string>
+ <string notr="true">SqlEnterpriseFormatter.NlAfterCloseParExpr</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="checkBox_32">
<property name="text">
- <string>After *JOIN keywords in FROM clause</string>
+ <string>After JOIN keywords in FROM clause</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlAfterJoinStmt</string>
+ <string notr="true">SqlEnterpriseFormatter.NlAfterJoinStmt</string>
</property>
</widget>
</item>
@@ -250,7 +250,7 @@
<string>Put each column constraint in CREATE TABLE into new line</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlBetweenConstraints</string>
+ <string notr="true">SqlEnterpriseFormatter.NlBetweenConstraints</string>
</property>
</widget>
</item>
@@ -260,7 +260,7 @@
<string>After comma</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlAfterComma</string>
+ <string notr="true">SqlEnterpriseFormatter.NlAfterComma</string>
</property>
</widget>
</item>
@@ -270,7 +270,7 @@
<string>After comma in expressions</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlAfterCommaInExpr</string>
+ <string notr="true">SqlEnterpriseFormatter.NlAfterCommaInExpr</string>
</property>
</widget>
</item>
@@ -280,7 +280,7 @@
<string>After semicolon</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlAfterSemicolon</string>
+ <string notr="true">SqlEnterpriseFormatter.NlAfterSemicolon</string>
</property>
</widget>
</item>
@@ -290,7 +290,7 @@
<string>Never before semicolon</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NlNeverBeforeSemicolon</string>
+ <string notr="true">SqlEnterpriseFormatter.NlNeverBeforeSemicolon</string>
</property>
</widget>
</item>
@@ -392,7 +392,7 @@
<string>Before comma in lists</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceBeforeCommaInList</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceBeforeCommaInList</string>
</property>
</widget>
</item>
@@ -402,7 +402,7 @@
<string>After comma in lists</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceAfterCommaInList</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceAfterCommaInList</string>
</property>
</widget>
</item>
@@ -412,7 +412,7 @@
<string>Before opening parenthesis</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceBeforeOpenPar</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceBeforeOpenPar</string>
</property>
</widget>
</item>
@@ -422,7 +422,7 @@
<string>After opening parenthesis</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceAfterOpenPar</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceAfterOpenPar</string>
</property>
</widget>
</item>
@@ -432,7 +432,7 @@
<string>Before closing parenthesis</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceBeforeClosePar</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceBeforeClosePar</string>
</property>
</widget>
</item>
@@ -442,7 +442,7 @@
<string>After closing parenthesis</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceAfterClosePar</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceAfterClosePar</string>
</property>
</widget>
</item>
@@ -452,7 +452,7 @@
<string>No space between SQL function name and opening parenthesis</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.NoSpaceAfterFunctionName</string>
+ <string notr="true">SqlEnterpriseFormatter.NoSpaceAfterFunctionName</string>
</property>
</widget>
</item>
@@ -462,7 +462,7 @@
<string>Before dot operator (in path to database object)</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceBeforeDot</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceBeforeDot</string>
</property>
</widget>
</item>
@@ -472,7 +472,7 @@
<string>After dot operator (in path to database object)</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceAfterDot</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceAfterDot</string>
</property>
</widget>
</item>
@@ -482,7 +482,7 @@
<string>Before mathematical operator</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceBeforeMathOp</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceBeforeMathOp</string>
</property>
</widget>
</item>
@@ -492,7 +492,7 @@
<string>After mathematical operator</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceAfterMathOp</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceAfterMathOp</string>
</property>
</widget>
</item>
@@ -502,7 +502,7 @@
<string>Never before comma</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceNeverBeforeComma</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceNeverBeforeComma</string>
</property>
</widget>
</item>
@@ -512,7 +512,7 @@
<string>Never before semicolon</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.SpaceNeverBeforeSemicolon</string>
+ <string notr="true">SqlEnterpriseFormatter.SpaceNeverBeforeSemicolon</string>
</property>
</widget>
</item>
@@ -587,10 +587,10 @@
<item row="3" column="1">
<widget class="ConfigComboBox" name="comboBox">
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.PrefferedWrapper</string>
+ <string notr="true">SqlEnterpriseFormatter.PrefferedWrapper</string>
</property>
<property name="modelName" stdset="0">
- <string>SqlEnterpriseFormatter.Wrappers</string>
+ <string notr="true">SqlEnterpriseFormatter.Wrappers</string>
</property>
</widget>
</item>
@@ -600,7 +600,7 @@
<string>Always use name wrapping</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.AlwaysUseNameWrapping</string>
+ <string notr="true">SqlEnterpriseFormatter.AlwaysUseNameWrapping</string>
</property>
</widget>
</item>
@@ -610,7 +610,7 @@
<string>Uppercase data type names</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.UppercaseDataTypes</string>
+ <string notr="true">SqlEnterpriseFormatter.UppercaseDataTypes</string>
</property>
</widget>
</item>
@@ -620,7 +620,7 @@
<string>Uppercase keywords</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.UppercaseKeywords</string>
+ <string notr="true">SqlEnterpriseFormatter.UppercaseKeywords</string>
</property>
</widget>
</item>
@@ -641,7 +641,7 @@
<item>
<widget class="SqlView" name="previewEdit">
<property name="cfg" stdset="0">
- <string>SqlEnterpriseFormatter.PreviewCode</string>
+ <string notr="true">SqlEnterpriseFormatter.PreviewCode</string>
</property>
<property name="preview" stdset="0">
<bool>true</bool>
diff --git a/Plugins/SqlExport/SqlExport.pro b/Plugins/SqlExport/SqlExport.pro
index 29a952b..f789222 100644
--- a/Plugins/SqlExport/SqlExport.pro
+++ b/Plugins/SqlExport/SqlExport.pro
@@ -27,3 +27,7 @@ OTHER_FILES += \
RESOURCES += \
sqlexport.qrc
+
+
+TRANSLATIONS += SqlExport_pl.ts
+
diff --git a/Plugins/SqlExport/SqlExportCommon.ui b/Plugins/SqlExport/SqlExportCommon.ui
index 9b5de21..891c26a 100644
--- a/Plugins/SqlExport/SqlExportCommon.ui
+++ b/Plugins/SqlExport/SqlExportCommon.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0" colspan="2">
@@ -20,7 +20,7 @@
<string>Generate &quot;DROP IF EXISTS&quot; statement before &quot;CREATE&quot; statement</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlExport.GenerateDrop</string>
+ <string notr="true">SqlExport.GenerateDrop</string>
</property>
</widget>
</item>
@@ -30,7 +30,7 @@
<string>Format DDL statements only (excludes &quot;INSERT&quot; statements)</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlExport.FormatDdlsOnly</string>
+ <string notr="true">SqlExport.FormatDdlsOnly</string>
</property>
</widget>
</item>
@@ -40,7 +40,7 @@
<string>Use SQL formatter to format exported SQL statements</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlExport.UseFormatter</string>
+ <string notr="true">SqlExport.UseFormatter</string>
</property>
</widget>
</item>
diff --git a/Plugins/SqlExport/SqlExportQuery.ui b/Plugins/SqlExport/SqlExportQuery.ui
index 4d2a6ae..ff874bd 100644
--- a/Plugins/SqlExport/SqlExportQuery.ui
+++ b/Plugins/SqlExport/SqlExportQuery.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="3" column="0" colspan="2">
@@ -20,14 +20,14 @@
<string>Use SQL formatter to format exported SQL statements</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlExport.UseFormatter</string>
+ <string notr="true">SqlExport.UseFormatter</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="tableLabel">
<property name="text">
- <string>Table name to use for insert statements:</string>
+ <string>Table name to use for INSERT statements:</string>
</property>
</widget>
</item>
@@ -37,7 +37,7 @@
<string>Generate &quot;CREATE TABLE&quot; statement at the begining</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlExport.GenerateCreateTable</string>
+ <string notr="true">SqlExport.GenerateCreateTable</string>
</property>
</widget>
</item>
@@ -47,7 +47,7 @@
<string>Include the query in comments</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlExport.IncludeQueryInComments</string>
+ <string notr="true">SqlExport.IncludeQueryInComments</string>
</property>
</widget>
</item>
@@ -57,14 +57,14 @@
<string>Generate &quot;DROP IF EXISTS&quot; statement before &quot;CREATE&quot; statement</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlExport.GenerateDrop</string>
+ <string notr="true">SqlExport.GenerateDrop</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="tableEdit">
<property name="cfg" stdset="0">
- <string>SqlExport.QueryTable</string>
+ <string notr="true">SqlExport.QueryTable</string>
</property>
</widget>
</item>
@@ -74,7 +74,7 @@
<string>Format DDL statements only (excludes &quot;INSERT&quot; statements)</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlExport.FormatDdlsOnly</string>
+ <string notr="true">SqlExport.FormatDdlsOnly</string>
</property>
</widget>
</item>
diff --git a/Plugins/SqlExport/SqlExport_pl.qm b/Plugins/SqlExport/SqlExport_pl.qm
new file mode 100644
index 0000000..5647c1c
--- /dev/null
+++ b/Plugins/SqlExport/SqlExport_pl.qm
Binary files differ
diff --git a/Plugins/SqlExport/SqlExport_pl.ts b/Plugins/SqlExport/SqlExport_pl.ts
new file mode 100644
index 0000000..5fc187b
--- /dev/null
+++ b/Plugins/SqlExport/SqlExport_pl.ts
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>SqlExport</name>
+ <message>
+ <location filename="sqlexport.cpp" line="57"/>
+ <source>-- Results of query:</source>
+ <translation>-- Wyniki zapytania:</translation>
+ </message>
+ <message>
+ <location filename="sqlexport.cpp" line="122"/>
+ <source>-- Table: %1</source>
+ <translation>-- Tabela: %1</translation>
+ </message>
+ <message>
+ <location filename="sqlexport.cpp" line="167"/>
+ <source>-- Index: %1</source>
+ <translation>-- Indeks: %1</translation>
+ </message>
+ <message>
+ <location filename="sqlexport.cpp" line="184"/>
+ <source>-- Trigger: %1</source>
+ <translation>-- Wyzwalacz: %1</translation>
+ </message>
+ <message>
+ <location filename="sqlexport.cpp" line="201"/>
+ <source>-- View: %1</source>
+ <translation>-- Widok: %1</translation>
+ </message>
+ <message>
+ <location filename="sqlexport.cpp" line="215"/>
+ <source>-- File generated with SQLiteStudio v%1 on %2</source>
+ <translation>-- Plik wygenerowany przez SQLiteStudio v%1 dnia %2</translation>
+ </message>
+ <message>
+ <location filename="sqlexport.cpp" line="219"/>
+ <source>-- Text encoding used: %1</source>
+ <translation>-- Użyte kodowanie tekstu: %1</translation>
+ </message>
+ <message>
+ <location filename="sqlexport.cpp" line="303"/>
+ <source>Table name for INSERT statements is mandatory.</source>
+ <translation>Nazwa tabeli dla zapytania INSERT jest obowiązkowa.</translation>
+ </message>
+</context>
+<context>
+ <name>sqlExportCommonConfig</name>
+ <message>
+ <location filename="SqlExportCommon.ui" line="20"/>
+ <source>Generate &quot;DROP IF EXISTS&quot; statement before &quot;CREATE&quot; statement</source>
+ <translation>Generuj zapytanie &quot;DROP IF EXISTS&quot; przed zapytaniem &quot;CREATE&quot;</translation>
+ </message>
+ <message>
+ <location filename="SqlExportCommon.ui" line="30"/>
+ <source>Format DDL statements only (excludes &quot;INSERT&quot; statements)</source>
+ <translation>Formatuj tylko zapytania DDL (wyklucza zapytania &quot;INSERT&quot;)</translation>
+ </message>
+ <message>
+ <location filename="SqlExportCommon.ui" line="40"/>
+ <source>Use SQL formatter to format exported SQL statements</source>
+ <translation>Użyj formatera SQL do formatowania eksportowanych zapytań SQL</translation>
+ </message>
+</context>
+<context>
+ <name>sqlExportQueryConfig</name>
+ <message>
+ <location filename="SqlExportQuery.ui" line="20"/>
+ <source>Use SQL formatter to format exported SQL statements</source>
+ <translation>Użyj formatera SQL do formatowania eksportowanych zapytań SQL</translation>
+ </message>
+ <message>
+ <location filename="SqlExportQuery.ui" line="30"/>
+ <source>Table name to use for INSERT statements:</source>
+ <oldsource>Table name to use for insert statements:</oldsource>
+ <translation>Nazwa tabeli dla zapytań INSERT:</translation>
+ </message>
+ <message>
+ <location filename="SqlExportQuery.ui" line="37"/>
+ <source>Generate &quot;CREATE TABLE&quot; statement at the begining</source>
+ <translation>Generuj zapytanie &quot;CREATE TABLE&quot; na początku</translation>
+ </message>
+ <message>
+ <location filename="SqlExportQuery.ui" line="47"/>
+ <source>Include the query in comments</source>
+ <translation>Dodaj zapytanie w komentarzach</translation>
+ </message>
+ <message>
+ <location filename="SqlExportQuery.ui" line="57"/>
+ <source>Generate &quot;DROP IF EXISTS&quot; statement before &quot;CREATE&quot; statement</source>
+ <translation>Generuj zapytanie &quot;DROP IF EXISTS&quot; przed zapytaniem &quot;CREATE&quot;</translation>
+ </message>
+ <message>
+ <location filename="SqlExportQuery.ui" line="74"/>
+ <source>Format DDL statements only (excludes &quot;INSERT&quot; statements)</source>
+ <translation>Formatuj tylko zapytania DDL (wyklucza zapytania &quot;INSERT&quot;)</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/SqlExport/sqlexport.qrc b/Plugins/SqlExport/sqlexport.qrc
index 447617f..3920490 100644
--- a/Plugins/SqlExport/sqlexport.qrc
+++ b/Plugins/SqlExport/sqlexport.qrc
@@ -3,4 +3,7 @@
<file>SqlExportQuery.ui</file>
<file>SqlExportCommon.ui</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>SqlExport_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/SqlFormatterSimple/SqlFormatterSimple.pro b/Plugins/SqlFormatterSimple/SqlFormatterSimple.pro
index 2c60801..ecf3355 100644
--- a/Plugins/SqlFormatterSimple/SqlFormatterSimple.pro
+++ b/Plugins/SqlFormatterSimple/SqlFormatterSimple.pro
@@ -26,3 +26,7 @@ OTHER_FILES += \
RESOURCES += \
sqlformattersimple.qrc
+
+
+TRANSLATIONS += SqlFormatterSimple_pl.ts
+
diff --git a/Plugins/SqlFormatterSimple/SqlFormatterSimple.ui b/Plugins/SqlFormatterSimple/SqlFormatterSimple.ui
index 7e81ee0..7cb76b2 100644
--- a/Plugins/SqlFormatterSimple/SqlFormatterSimple.ui
+++ b/Plugins/SqlFormatterSimple/SqlFormatterSimple.ui
@@ -10,6 +10,9 @@
<height>290</height>
</rect>
</property>
+ <property name="windowTitle">
+ <string notr="true"/>
+ </property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QCheckBox" name="upperKeywordsCheck">
@@ -17,7 +20,7 @@
<string>Upper case keywords</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlFormatterSimple.UpperCaseKeywords</string>
+ <string notr="true">SqlFormatterSimple.UpperCaseKeywords</string>
</property>
</widget>
</item>
@@ -27,7 +30,7 @@
<string>Reduce multiple whitespaces to single whitespace</string>
</property>
<property name="cfg" stdset="0">
- <string>SqlFormatterSimple.TrimLongSpaces</string>
+ <string notr="true">SqlFormatterSimple.TrimLongSpaces</string>
</property>
</widget>
</item>
diff --git a/Plugins/SqlFormatterSimple/SqlFormatterSimple_pl.qm b/Plugins/SqlFormatterSimple/SqlFormatterSimple_pl.qm
new file mode 100644
index 0000000..a88fc0f
--- /dev/null
+++ b/Plugins/SqlFormatterSimple/SqlFormatterSimple_pl.qm
Binary files differ
diff --git a/Plugins/SqlFormatterSimple/SqlFormatterSimple_pl.ts b/Plugins/SqlFormatterSimple/SqlFormatterSimple_pl.ts
new file mode 100644
index 0000000..048a876
--- /dev/null
+++ b/Plugins/SqlFormatterSimple/SqlFormatterSimple_pl.ts
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>SqlFormatterSimplePlugin</name>
+ <message>
+ <location filename="SqlFormatterSimple.ui" line="20"/>
+ <source>Upper case keywords</source>
+ <translation>Zmień litery słów kluczowych na duże</translation>
+ </message>
+ <message>
+ <location filename="SqlFormatterSimple.ui" line="30"/>
+ <source>Reduce multiple whitespaces to single whitespace</source>
+ <translation>Zredukuj wiele znaków białych do pojedynczego</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/SqlFormatterSimple/sqlformattersimple.qrc b/Plugins/SqlFormatterSimple/sqlformattersimple.qrc
index febfbd2..33f00ba 100644
--- a/Plugins/SqlFormatterSimple/sqlformattersimple.qrc
+++ b/Plugins/SqlFormatterSimple/sqlformattersimple.qrc
@@ -2,4 +2,7 @@
<qresource prefix="/forms">
<file>SqlFormatterSimple.ui</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>SqlFormatterSimple_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/Plugins/XmlExport/XmlExport.pro b/Plugins/XmlExport/XmlExport.pro
index 87e0c7f..f7dbb7f 100644
--- a/Plugins/XmlExport/XmlExport.pro
+++ b/Plugins/XmlExport/XmlExport.pro
@@ -25,3 +25,7 @@ OTHER_FILES += \
RESOURCES += \
xmlexport.qrc
+
+
+TRANSLATIONS += XmlExport_pl.ts
+
diff --git a/Plugins/XmlExport/XmlExport.ui b/Plugins/XmlExport/XmlExport.ui
index 2a236c6..6c6f27e 100644
--- a/Plugins/XmlExport/XmlExport.ui
+++ b/Plugins/XmlExport/XmlExport.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
@@ -29,10 +29,10 @@
<bool>true</bool>
</property>
<property name="assignedValue" stdset="0">
- <string>format</string>
+ <string notr="true">format</string>
</property>
<property name="cfg" stdset="0">
- <string>XmlExport.Format</string>
+ <string notr="true">XmlExport.Format</string>
</property>
</widget>
</item>
@@ -42,10 +42,10 @@
<string>Compress (everything in one line)</string>
</property>
<property name="assignedValue" stdset="0">
- <string>compress</string>
+ <string notr="true">compress</string>
</property>
<property name="cfg" stdset="0">
- <string>XmlExport.Format</string>
+ <string notr="true">XmlExport.Format</string>
</property>
</widget>
</item>
@@ -70,10 +70,10 @@
<bool>true</bool>
</property>
<property name="assignedValue" stdset="0">
- <string>mixed</string>
+ <string notr="true">mixed</string>
</property>
<property name="cfg" stdset="0">
- <string>XmlExport.Escaping</string>
+ <string notr="true">XmlExport.Escaping</string>
</property>
</widget>
</item>
@@ -86,10 +86,10 @@
<string>Always use CDATA</string>
</property>
<property name="assignedValue" stdset="0">
- <string>cdata</string>
+ <string notr="true">cdata</string>
</property>
<property name="cfg" stdset="0">
- <string>XmlExport.Escaping</string>
+ <string notr="true">XmlExport.Escaping</string>
</property>
</widget>
</item>
@@ -102,10 +102,10 @@
<string>Always use ampersand</string>
</property>
<property name="assignedValue" stdset="0">
- <string>ampersand</string>
+ <string notr="true">ampersand</string>
</property>
<property name="cfg" stdset="0">
- <string>XmlExport.Escaping</string>
+ <string notr="true">XmlExport.Escaping</string>
</property>
</widget>
</item>
@@ -124,13 +124,13 @@
<bool>false</bool>
</property>
<property name="cfg" stdset="0">
- <string>XmlExport.UseNamespace</string>
+ <string notr="true">XmlExport.UseNamespace</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="namespaceEdit">
<property name="cfg" stdset="0">
- <string>XmlExport.Namespace</string>
+ <string notr="true">XmlExport.Namespace</string>
</property>
</widget>
</item>
diff --git a/Plugins/XmlExport/XmlExport_pl.qm b/Plugins/XmlExport/XmlExport_pl.qm
new file mode 100644
index 0000000..40b5b24
--- /dev/null
+++ b/Plugins/XmlExport/XmlExport_pl.qm
Binary files differ
diff --git a/Plugins/XmlExport/XmlExport_pl.ts b/Plugins/XmlExport/XmlExport_pl.ts
new file mode 100644
index 0000000..fc0cfaa
--- /dev/null
+++ b/Plugins/XmlExport/XmlExport_pl.ts
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>XmlExport</name>
+ <message>
+ <location filename="xmlexport.cpp" line="38"/>
+ <source>Enter the namespace to use (for example: http://my.namespace.org)</source>
+ <oldsource>Enter the namespace to use (for example: http://my.namespace.org</oldsource>
+ <translation>Wprowadź przestrzeń nazw (na przykład: http://moja.przestrzen.nazw.org)</translation>
+ </message>
+</context>
+<context>
+ <name>XmlExportConfig</name>
+ <message>
+ <location filename="XmlExport.ui" line="20"/>
+ <source>Output format</source>
+ <translation>Format wyjściowy</translation>
+ </message>
+ <message>
+ <location filename="XmlExport.ui" line="26"/>
+ <source>Format document (new lines, indentation)</source>
+ <translation>Formatuj dokument (nowe linie, wcięcia)</translation>
+ </message>
+ <message>
+ <location filename="XmlExport.ui" line="42"/>
+ <source>Compress (everything in one line)</source>
+ <translation>Kompresuj (wszystko w jednej linii)</translation>
+ </message>
+ <message>
+ <location filename="XmlExport.ui" line="58"/>
+ <source>Special characters escaping</source>
+ <translation>Podmiana znaków specjalnych</translation>
+ </message>
+ <message>
+ <location filename="XmlExport.ui" line="64"/>
+ <source>&lt;p&gt;Ampersands will be used for shorter values and CDATA will be used for larger values. This applies only to values that require character escaping. Other values will be exported as they are.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Dla krótszych wartości będzie użyty ampersand, a dla dłuższych CDATA. Dotyczy to tylko wartości, które wymagają podmiany znaków. Inne wartości będą wyeksportowane bez zmian.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="XmlExport.ui" line="67"/>
+ <source>Use CDATA and ampersands</source>
+ <translation>Użyj CDATA i ampersandów</translation>
+ </message>
+ <message>
+ <location filename="XmlExport.ui" line="83"/>
+ <source>&lt;p&gt;Every value requiring character escepe will be enclosed in CDATA block.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Każda wartość wymagająca podmiany znaków będzie zamknięta w bloku CDATA.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="XmlExport.ui" line="86"/>
+ <source>Always use CDATA</source>
+ <translation>Zawsze używaj CDATA</translation>
+ </message>
+ <message>
+ <location filename="XmlExport.ui" line="99"/>
+ <source>&lt;p&gt;Every character that require esceping will be replaced with its ampersand escape sequence. No CDATA blocks will be used.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Każdy znak wymagający podmiany będzie zastąpiony odpowiednią sekwencją z ampersandem. Bloki CDATA nie będą używane.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="XmlExport.ui" line="102"/>
+ <source>Always use ampersand</source>
+ <translation>Zawsze używaj ampersanda</translation>
+ </message>
+ <message>
+ <location filename="XmlExport.ui" line="118"/>
+ <source>Define XML namespace</source>
+ <translation>Zdefiniuj przestrzeń nazw XML</translation>
+ </message>
+</context>
+</TS>
diff --git a/Plugins/XmlExport/xmlexport.cpp b/Plugins/XmlExport/xmlexport.cpp
index 746d246..e76fe7d 100644
--- a/Plugins/XmlExport/xmlexport.cpp
+++ b/Plugins/XmlExport/xmlexport.cpp
@@ -35,7 +35,7 @@ void XmlExport::validateOptions()
EXPORT_MANAGER->updateVisibilityAndEnabled(cfg.XmlExport.Namespace, true, useNs);
bool nsValid = !useNs || !cfg.XmlExport.Namespace.get().isEmpty();
- EXPORT_MANAGER->handleValidationFromPlugin(nsValid, cfg.XmlExport.Namespace, tr("Enter the namespace to use (for example: http://my.namespace.org"));
+ EXPORT_MANAGER->handleValidationFromPlugin(nsValid, cfg.XmlExport.Namespace, tr("Enter the namespace to use (for example: http://my.namespace.org)"));
}
QString XmlExport::defaultFileExtension() const
diff --git a/Plugins/XmlExport/xmlexport.qrc b/Plugins/XmlExport/xmlexport.qrc
index d6a77a6..cfa97ff 100644
--- a/Plugins/XmlExport/xmlexport.qrc
+++ b/Plugins/XmlExport/xmlexport.qrc
@@ -2,4 +2,7 @@
<qresource prefix="/forms">
<file>XmlExport.ui</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>XmlExport_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt b/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt
index 0baf02c..c890b69 100644
--- a/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt
+++ b/SQLiteStudio3/coreSQLiteStudio/ChangeLog.txt
@@ -1,3 +1,33 @@
+[3.0.2]
+ * [ADDED]: Full support for the interface translations.
+ * [ADDED]: Polish translation.
+ * [ADDED]: #219, #2711 Reset autoincrement feature to context menu of table and to structure toolbar in table window.
+ * [ADDED]: #2715 Added "rows affected" to the execution result message for INSERT/DELETE/UPDATE queries.
+ * [BUGFIX]: Fixed deleting column from table that is the only column covered by an index or an "UPDATE OF" trigger.
+ * [BUGFIX]: #2703 Fixed compilation errors on GCC 4.9.
+ * [BUGFIX]: #2707 Fixed crash when importing CSV file with empty value for last column.
+ * [BUGFIX]: Valid objects in SQL editor are now highlighted and are Ctrl+clickable (the feature was there, but was broken and it didn't work).
+ * [BUGFIX]: Fixed invalid 'modified' status when focusing out NumberMultiEditor in FormView, resulting in uncommited change on FormView, even there was no change.
+ * [BUGFIX]: #2698 Fixed double precision numbers displaying in the Grid View.
+ * [BUGFIX]: #2696 Fixed handling foreign keys when the main table was not renamed, just columns changed.
+ * [BUGFIX]: #2713 Fixed foreign key actions in Foreign Key dialog, so they are no longer the same for ON UPDATE and ON DELETE, even they were configured differently.
+ * [BUGFIX]: #2715 Fixed storing rows affected/selected in SQL Editor history (bug since version 3.0.0 caused "rows" column in SQL history to be always 0).
+ * [BUGFIX]: Main window toolbar is updated after creating/deleting database objects (it was not).
+ * [BUGFIX]: #2722 Fixed crash when exporting database without data.
+ * [BUGFIX]: #2727 Fixed error message when calling SELECT with table from (transparently) attached database and selecting invalid column - message was misleading.
+ * [BUGFIX]: #2728, #2729 Fixed DEFAULT constraint dialog, so 1) it works when creating first column for new table, 2) it allows a single word as a default value, even the word is not an explicit string.
+ * [BUGFIX]: #2697 Fixed data populate dialog.
+ * [BUGFIX]: #2731 Fixed problem with attached databases not detaching after transparent attach in cross-database queries.
+ * [BUGFIX]: #2734 Fixed code assistant crash in Trigger Dialog.
+ * [BUGFIX]: #2721 Fixed initial selection of database in SQL Editor window, so it's set to the database currently selected in databases list on the left.
+ * [BUGFIX]: #2721 Added database name to error message when the SQL query execution failed.
+ * [BUGFIX]: #2718 Checkbox in CSV import plugin renamed to "Skip first row of data".
+ * [BUGFIX]: Fixed staring edition of data in grid by pressing Enter key.
+ * [BUGFIX]: #2745 Fixed crash when ctrl+right_clicking in SQL editor.
+ * [BUGFIX]: #2733 Fixed handling of foreign keys when changing table structure.
+ * [BUGFIX]: #2749 Fixed handling of function(distinct arg), resulting in incorrect results when executed.
+ * [BUGFIX]: Fixed logging SQL queries when --debug-sql is enabled. Queries from query executor were not logged.
+
[3.0.1]
* [ADDED]: When the data is being read into the Gird View, columns width gets automatically adjusted, so for small values they are shrinked and for bigger values they're enlarged, but never above the configured limit (a new option in config dialog).
* [ADDED]: Implemented support for immediate editing of rows just added to the WITHOUT ROWID tables (previously the manual refresh of data view was required).
diff --git a/SQLiteStudio3/coreSQLiteStudio/completionhelper.h b/SQLiteStudio3/coreSQLiteStudio/completionhelper.h
index 63b7225..2cb3c01 100644
--- a/SQLiteStudio3/coreSQLiteStudio/completionhelper.h
+++ b/SQLiteStudio3/coreSQLiteStudio/completionhelper.h
@@ -18,6 +18,8 @@ class DbAttacher;
class API_EXPORT CompletionHelper : public QObject
{
+ Q_OBJECT
+
friend class CompletionComparer;
public:
diff --git a/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro b/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
index 1ce7520..e58e2a8 100644
--- a/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
+++ b/SQLiteStudio3/coreSQLiteStudio/coreSQLiteStudio.pro
@@ -45,6 +45,8 @@ portable {
CONFIG += c++11
QMAKE_CXXFLAGS += -pedantic
+TRANSLATIONS += translations/coreSQLiteStudio_pl.ts
+
SOURCES += sqlitestudio.cpp \
returncode.cpp \
services/config.cpp \
@@ -200,7 +202,8 @@ SOURCES += sqlitestudio.cpp \
rsa/Key.cpp \
rsa/KeyPair.cpp \
rsa/PrimeGenerator.cpp \
- rsa/RSA.cpp
+ rsa/RSA.cpp \
+ translations.cpp
HEADERS += sqlitestudio.h\
coreSQLiteStudio_global.h \
@@ -386,7 +389,8 @@ HEADERS += sqlitestudio.h\
rsa/Key.h \
rsa/KeyPair.h \
rsa/PrimeGenerator.h \
- rsa/RSA.h
+ rsa/RSA.h \
+ translations.h
unix: {
target.path = $$LIBDIR
diff --git a/SQLiteStudio3/coreSQLiteStudio/coresqlitestudio.qrc b/SQLiteStudio3/coreSQLiteStudio/coresqlitestudio.qrc
index 2b58106..6f2f925 100644
--- a/SQLiteStudio3/coreSQLiteStudio/coresqlitestudio.qrc
+++ b/SQLiteStudio3/coreSQLiteStudio/coresqlitestudio.qrc
@@ -18,4 +18,7 @@
<file>licenses/diff_match.txt</file>
<file>licenses/gpl.txt</file>
</qresource>
+ <qresource prefix="/msg">
+ <file>translations/coreSQLiteStudio_pl.qm</file>
+ </qresource>
</RCC>
diff --git a/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp b/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp
index 97cc739..3672527 100644
--- a/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/csvserializer.cpp
@@ -43,12 +43,14 @@ QList<QStringList> CsvSerializer::deserialize(const QString& data, const CsvForm
int pos = 0;
int lgt = data.length();
bool quotes = false;
+ bool sepAsLast = false;
QString field = "";
QChar c;
while (pos < lgt)
{
c = data[pos];
+ sepAsLast = false;
if (!quotes && c == '"' )
{
quotes = true;
@@ -69,6 +71,7 @@ QList<QStringList> CsvSerializer::deserialize(const QString& data, const CsvForm
{
cells << field;
field.clear();
+ sepAsLast = true;
}
else if (!quotes && format.rowSeparator.contains(c))
{
@@ -84,7 +87,7 @@ QList<QStringList> CsvSerializer::deserialize(const QString& data, const CsvForm
pos++;
}
- if (field.size() > 0)
+ if (field.size() > 0 || sepAsLast)
cells << field;
if (cells.size() > 0)
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.cpp b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.cpp
index 56275aa..4b3165b 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb.cpp
@@ -305,7 +305,6 @@ SqlQueryPtr AbstractDb::execHashArg(const QString& query, const QHash<QString,QV
if (!isOpenInternal())
return SqlQueryPtr(new SqlErrorResults(SqlErrorCode::DB_NOT_OPEN, tr("Cannot execute query on closed database.")));
- logSql(this, query, args, flags);
QString newQuery = query;
SqlQueryPtr queryStmt = prepare(newQuery);
queryStmt->setArgs(args);
@@ -323,7 +322,6 @@ SqlQueryPtr AbstractDb::execListArg(const QString& query, const QList<QVariant>&
if (!isOpenInternal())
return SqlQueryPtr(new SqlErrorResults(SqlErrorCode::DB_NOT_OPEN, tr("Cannot execute query on closed database.")));
- logSql(this, query, args, flags);
QString newQuery = query;
SqlQueryPtr queryStmt = prepare(newQuery);
queryStmt->setArgs(args);
@@ -636,7 +634,13 @@ void AbstractDb::detachInternal(Db* otherDb)
return;
}
- exec(QString("DETACH %1;").arg(attachedDbMap.valueByRight(otherDb)), Flag::NO_LOCK);
+ QString dbName = attachedDbMap.valueByRight(otherDb);
+ SqlQueryPtr res = exec(QString("DETACH %1;").arg(dbName), Flag::NO_LOCK);
+ if (res->isError())
+ {
+ qCritical() << "Cannot detach" << dbName << " / " << otherDb->getName() << ":" << res->getErrorText();
+ return;
+ }
attachedDbMap.removeRight(otherDb);
emit detached(otherDb);
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h
index e35e038..c521bfa 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb2.h
@@ -7,6 +7,7 @@
#include "common/unused.h"
#include "db/sqlerrorcodes.h"
#include "db/sqlerrorresults.h"
+#include "log.h"
#include <sqlite.h>
#include <QThread>
#include <QPointer>
@@ -195,7 +196,7 @@ bool AbstractDb2<T>::openInternal()
if (errMsg)
{
- dbErrorMessage = tr("Could not open database: %1").arg(QString::fromUtf8(errMsg));
+ dbErrorMessage = QObject::tr("Could not open database: %1").arg(QString::fromUtf8(errMsg));
sqlite_freemem(errMsg);
}
return false;
@@ -570,6 +571,8 @@ bool AbstractDb2<T>::Query::execInternal(const QList<QVariant>& args)
ReadWriteLocker locker(&(db->dbOperLock), query, Dialect::Sqlite2, flags.testFlag(Db::Flag::NO_LOCK));
+ logSql(db.data(), query, args, flags);
+
QueryWithParamCount queryWithParams = getQueryWithParamCount(query, Dialect::Sqlite2);
QString singleStr = replaceNamedParams(queryWithParams.first);
@@ -604,6 +607,8 @@ bool AbstractDb2<T>::Query::execInternal(const QHash<QString, QVariant>& args)
ReadWriteLocker locker(&(db->dbOperLock), query, Dialect::Sqlite2, flags.testFlag(Db::Flag::NO_LOCK));
+ logSql(db.data(), query, args, flags);
+
QueryWithParamNames queryWithParams = getQueryWithParamNames(query, Dialect::Sqlite2);
QString singleStr = replaceNamedParams(queryWithParams.first);
@@ -788,7 +793,7 @@ int AbstractDb2<T>::Query::fetchNext()
if (!rowAvailable || !stmt)
{
- setError(SQLITE_MISUSE, tr("Result set expired or no row available."));
+ setError(SQLITE_MISUSE, QObject::tr("Result set expired or no row available."));
return SQLITE_MISUSE;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h
index 89c3d96..7a84ec2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/abstractdb3.h
@@ -8,6 +8,7 @@
#include "services/collationmanager.h"
#include "sqlitestudio.h"
#include "db/sqlerrorcodes.h"
+#include "log.h"
#include <QThread>
#include <QPointer>
#include <QDebug>
@@ -352,7 +353,7 @@ bool AbstractDb3<T>::openInternal()
if (handle)
T::close(handle);
- dbErrorMessage = tr("Could not open database: %1").arg(extractLastError());
+ dbErrorMessage = QObject::tr("Could not open database: %1").arg(extractLastError());
dbErrorCode = res;
return false;
}
@@ -372,7 +373,7 @@ bool AbstractDb3<T>::closeInternal()
int res = T::close(dbHandle);
if (res != T::OK)
{
- dbErrorMessage = tr("Could not close database: %1").arg(extractLastError());
+ dbErrorMessage = QObject::tr("Could not close database: %1").arg(extractLastError());
dbErrorCode = res;
qWarning() << "Error closing database. That's weird:" << dbErrorMessage;
return false;
@@ -854,6 +855,8 @@ bool AbstractDb3<T>::Query::execInternal(const QList<QVariant>& args)
return false;
ReadWriteLocker locker(&(db->dbOperLock), query, Dialect::Sqlite3, flags.testFlag(Db::Flag::NO_LOCK));
+ logSql(db.data(), query, args, flags);
+
QueryWithParamCount queryWithParams = getQueryWithParamCount(query, Dialect::Sqlite3);
int res;
@@ -890,6 +893,7 @@ bool AbstractDb3<T>::Query::execInternal(const QHash<QString, QVariant>& args)
return false;
ReadWriteLocker locker(&(db->dbOperLock), query, Dialect::Sqlite3, flags.testFlag(Db::Flag::NO_LOCK));
+ logSql(db.data(), query, args, flags);
QueryWithParamNames queryWithParams = getQueryWithParamNames(query, Dialect::Sqlite3);
@@ -1075,7 +1079,7 @@ int AbstractDb3<T>::Query::fetchNext()
if (!rowAvailable || !stmt)
{
- setError(T::MISUSE, tr("Result set expired or no row available."));
+ setError(T::MISUSE, QObject::tr("Result set expired or no row available."));
return T::MISUSE;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp
index c840947..97b3f1d 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.cpp
@@ -39,7 +39,6 @@ QueryExecutor::QueryExecutor(Db* db, const QString& query, QObject *parent) :
setDb(db);
setAutoDelete(false);
- connect(this, SIGNAL(executionFinished(SqlQueryPtr)), this, SLOT(cleanupAfterExecFinished(SqlQueryPtr)));
connect(this, SIGNAL(executionFailed(int,QString)), this, SLOT(cleanupAfterExecFailed(int,QString)));
connect(DBLIST, SIGNAL(dbAboutToBeUnloaded(Db*, DbPlugin*)), this, SLOT(cleanupBeforeDbDestroy(Db*, DbPlugin*)));
}
@@ -138,12 +137,6 @@ void QueryExecutor::stepFailed(QueryExecutorStep* currentStep)
executeSimpleMethod();
}
-void QueryExecutor::cleanupAfterExecFinished(SqlQueryPtr results)
-{
- UNUSED(results);
- cleanup();
-}
-
void QueryExecutor::cleanupAfterExecFailed(int code, QString errorMessage)
{
UNUSED(code);
@@ -213,6 +206,7 @@ void QueryExecutor::execInternal()
{
resultsCountingAsyncId = 0;
db->interrupt();
+ releaseResultsAndCleanup();
}
// Reset context
@@ -242,13 +236,13 @@ void QueryExecutor::interrupt()
db->asyncInterrupt();
}
-void QueryExecutor::countResults()
+bool QueryExecutor::countResults()
{
if (context->skipRowCounting)
- return;
+ return false;
if (context->countingQuery.isEmpty()) // simple method doesn't provide that
- return;
+ return false;
if (asyncMode)
{
@@ -267,8 +261,10 @@ void QueryExecutor::countResults()
{
notifyError(tr("An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1")
.arg(results->getErrorText()));
+ return false;
}
}
+ return true;
}
qint64 QueryExecutor::getLastExecutionTime() const
@@ -416,7 +412,7 @@ void QueryExecutor::simpleExecutionFinished(SqlQueryPtr results)
executionMutex.lock();
executionInProgress = false;
executionMutex.unlock();
- error(results->getErrorCode(), results->getErrorText());
+ handleErrorsFromSmartAndSimpleMethods(results);
return;
}
@@ -552,6 +548,44 @@ void QueryExecutor::setNoMetaColumns(bool value)
noMetaColumns = value;
}
+void QueryExecutor::handleErrorsFromSmartAndSimpleMethods(SqlQueryPtr results)
+{
+ QString simpleText = results->getErrorText();
+
+ // Smart text may contain messages from steps before the actual execution, but they will have negative error code.
+ // Positive error code means that the error came directly from SQLite.
+ QString smartText = context->errorCodeFromSmartExecution > 0 ? context->errorMessageFromSmartExecution : QString();
+
+ if (simpleText.contains("no such") && smartText.contains("no such"))
+ {
+ // This happens if user refers to invalid column in attached database.
+ // Smart execution will tell "no such column: xxx", while simple method will tell:
+ // "no such table: attach.table". In that case we're more interested in smart method message.
+ // This also applies to views.
+ error(context->errorCodeFromSmartExecution, smartText);
+ return;
+ }
+
+ if (simpleText.contains("no such") && smartText.contains("ambiguous"))
+ {
+ // This happens when smart execution raised "amigous column name" or something like that,
+ // but simple method failed to work because of transparent database attaching. We prefer smart method error.
+ error(context->errorCodeFromSmartExecution, smartText);
+ return;
+ }
+
+ // No special case, use simple method error
+ error(results->getErrorCode(), simpleText);
+}
+
+void QueryExecutor::releaseResultsAndCleanup()
+{
+ // The results have to be releases, otherwise attached databases cannot be detached.
+ // Results handle cannot be kept elsewhere, otherwise detach will fail.
+ context->executionResults.clear();
+ cleanup();
+}
+
SqlQueryPtr QueryExecutor::getResults() const
{
return context->executionResults;
@@ -562,6 +596,11 @@ bool QueryExecutor::wasSchemaModified() const
return context->schemaModified;
}
+bool QueryExecutor::wasDataModifyingQuery() const
+{
+ return context->dataModifyingQuery;
+}
+
QList<DataType> QueryExecutor::resolveColumnTypes(Db* db, QList<QueryExecutor::ResultColumnPtr>& columns, bool noDbLocking)
{
QSet<Table> tables;
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h
index c4a3e4d..72c7fed 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutor.h
@@ -604,11 +604,36 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
bool schemaModified = false;
/**
+ * @brief Tells if executed query was one of DELETE, UPDATE or INSERT.
+ */
+ bool dataModifyingQuery = false;
+
+ /**
* @brief Forbids QueryExecutor to return meta columns.
*
* See QueryExecutor::noMetaColumns for details.
*/
bool noMetaColumns = false;
+
+ /**
+ * @brief Contains error code from smart execution.
+ *
+ * This is always set by the smart execution method. It's useful if the smart execution
+ * failed and the simple execution method is being performed. In that case the query
+ * result will contain error code from simple execution, hiding the original error code
+ * from smart execution.
+ */
+ int errorCodeFromSmartExecution = 0;
+
+ /**
+ * @brief Contains error message from smart execution.
+ *
+ * This is always set by the smart execution method. It's useful if the smart execution
+ * failed and the simple execution method is being performed. In that case the query
+ * result will contain error message from simple execution, hiding the original error
+ * message from smart execution.
+ */
+ QString errorMessageFromSmartExecution;
};
/**
@@ -654,6 +679,7 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
/**
* @brief Executes counting query.
+ * @return true if counting query is executed (in async mode) or was executed correctly (in sync mode), false on error.
*
* Executes (asynchronously) counting query for currently defined query. After execution is done, the resultsCountingFinished()
* signal is emitted.
@@ -661,8 +687,10 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
* Counting query is made of original query wrapped with "SELECT count(*) FROM (original_query)".
*
* It is executed after the main query execution has finished.
+ *
+ * If query is being executed in async mode, the true result (sucess/fail) will be known from later, not from this method.
*/
- void countResults();
+ bool countResults();
/**
* @brief Gets time of how long it took to execute query.
@@ -976,12 +1004,20 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
SqlQueryPtr getResults() const;
bool wasSchemaModified() const;
+ bool wasDataModifyingQuery() const;
static QList<DataType> resolveColumnTypes(Db* db, QList<ResultColumnPtr>& columns, bool noDbLocking = false);
bool getNoMetaColumns() const;
void setNoMetaColumns(bool value);
+ void handleErrorsFromSmartAndSimpleMethods(SqlQueryPtr results);
+
+ /**
+ * @brief Clears results handle and detaches any attached databases.
+ */
+ void releaseResultsAndCleanup();
+
private:
/**
* @brief Executes query.
@@ -1335,14 +1371,6 @@ class API_EXPORT QueryExecutor : public QObject, public QRunnable
void stepFailed(QueryExecutorStep *currentStep);
/**
- * @brief Cleanup routines after successful query execution.
- * @param results Query results.
- *
- * Releases resources that are no longer used. Currently simply calls cleanup().
- */
- void cleanupAfterExecFinished(SqlQueryPtr results);
-
- /**
* @brief Cleanup routines after failed query execution.
* @param code Error code.
* @param errorMessage Error message.
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordetectschemaalter.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordetectschemaalter.cpp
index c3c8a5c..02a73d2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordetectschemaalter.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutordetectschemaalter.cpp
@@ -18,6 +18,10 @@ bool QueryExecutorDetectSchemaAlter::exec()
case SqliteQueryType::CreateVirtualTable:
context->schemaModified = true;
break;
+ case SqliteQueryType::Insert:
+ case SqliteQueryType::Delete:
+ case SqliteQueryType::Update:
+ context->dataModifyingQuery = true;
default:
break;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.cpp b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.cpp
index 7e0abe5..f42f647 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/db/queryexecutorsteps/queryexecutorexecute.cpp
@@ -11,7 +11,7 @@
bool QueryExecutorExecute::exec()
{
- qDebug() << "q:" << context->processedQuery;
+// qDebug() << "q:" << context->processedQuery;
startTime = QDateTime::currentMSecsSinceEpoch();
return executeQueries();
@@ -32,6 +32,7 @@ bool QueryExecutorExecute::executeQueries()
{
QHash<QString, QVariant> bindParamsForQuery;
SqlQueryPtr results;
+ context->rowsAffected = 0;
Db::Flags flags;
if (context->preloadResults)
@@ -56,6 +57,8 @@ bool QueryExecutorExecute::executeQueries()
handleFailResult(results);
return false;
}
+
+ context->rowsAffected += results->rowsAffected();
}
handleSuccessfulResult(results);
return true;
@@ -72,7 +75,6 @@ void QueryExecutorExecute::handleSuccessfulResult(SqlQueryPtr results)
}
context->executionTime = QDateTime::currentMSecsSinceEpoch() - startTime;
- context->rowsAffected = results->rowsAffected();
// For PRAGMA and EXPLAIN we simply count results for rows returned
SqliteQueryPtr lastQuery = context->parsedQueries.last();
@@ -92,6 +94,8 @@ void QueryExecutorExecute::handleFailResult(SqlQueryPtr results)
{
if (!results->isInterrupted())
{
+ context->errorCodeFromSmartExecution = results->getErrorCode();
+ context->errorMessageFromSmartExecution = results->getErrorText();
qWarning() << "Could not execute query with smart method:" << queryExecutor->getOriginalQuery()
<< "\nError message:" << results->getErrorText()
<< "\nSkipping smart execution.";
diff --git a/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.h b/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.h
index a7610fa..4e0d9cf 100644
--- a/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.h
+++ b/SQLiteStudio3/coreSQLiteStudio/db/sqlquery.h
@@ -133,7 +133,6 @@ class API_EXPORT SqlQuery
* @brief Gets number of rows that were affected by the query.
* @return Number of rows affected.
*
- * For SELECT statements this is number of returned rows.
* For UPDATE this is number of rows updated.
* For DELETE this is number of rows deleted.
* FOR INSERT this is number of rows inserted (starting with SQLite 3.7.11 you can insert multiple rows with single INSERT statement).
diff --git a/SQLiteStudio3/coreSQLiteStudio/dbversionconverter.cpp b/SQLiteStudio3/coreSQLiteStudio/dbversionconverter.cpp
index bf13eac..d31d536 100644
--- a/SQLiteStudio3/coreSQLiteStudio/dbversionconverter.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/dbversionconverter.cpp
@@ -134,12 +134,12 @@ SqliteQueryPtr DbVersionConverter::convert3To2(SqliteQueryPtr query)
switch (query->queryType)
{
case SqliteQueryType::AlterTable:
- errors << QObject::tr("SQLite 2 does not support 'ALTER TABLE' statement.");
+ errors << QObject::tr("SQLite %1 does not support '%2' statement.").arg("2", "ALTER TABLE");
newQuery = SqliteEmptyQueryPtr::create();
storeErrorDiff(query.data());
break;
case SqliteQueryType::Analyze:
- errors << QObject::tr("SQLite 2 does not support 'ANAYLZE' statement.");
+ errors << QObject::tr("SQLite %1 does not support '%2' statement.").arg("2", "ANAYLZE");
newQuery = SqliteEmptyQueryPtr::create();
storeErrorDiff(query.data());
break;
@@ -192,13 +192,14 @@ SqliteQueryPtr DbVersionConverter::convert3To2(SqliteQueryPtr query)
newQuery = copyQuery<SqliteCreateVirtualTable>(query);
if (!modifyVirtualTableForVesion2(newQuery, newQuery.dynamicCast<SqliteCreateVirtualTable>().data()))
{
- errors << QObject::tr("SQLite 2 does not support 'CREATE VIRTUAL TABLE' statement.");
+ errors << QObject::tr("SQLite %1 does not support '%2' statement.").arg("2", "CREATE VIRTUAL TABLE");
newQuery = SqliteEmptyQueryPtr::create();
storeErrorDiff(query.data());
}
else
{
- errors << QObject::tr("SQLite 2 does not support 'CREATE VIRTUAL TABLE' statement. The regular table can be created instead if you proceed.");
+ errors << QObject::tr("SQLite %1 does not support '%2' statement, but the regular table can be created instead if you proceed.")
+ .arg("2", "CREATE VIRTUAL TABLE");
}
break;
case SqliteQueryType::Delete:
@@ -236,12 +237,12 @@ SqliteQueryPtr DbVersionConverter::convert3To2(SqliteQueryPtr query)
newQuery = copyQuery<SqlitePragma>(query);
break;
case SqliteQueryType::Reindex:
- errors << QObject::tr("SQLite 2 does not support 'REINDEX' statement.");
+ errors << QObject::tr("SQLite %1 does not support '%2' statement.").arg("2", "REINDEX");
newQuery = SqliteEmptyQueryPtr::create();
storeErrorDiff(query.data());
break;
case SqliteQueryType::Release:
- errors << QObject::tr("SQLite 2 does not support 'RELEASE' statement.");
+ errors << QObject::tr("SQLite %1 does not support '%2' statement.").arg("2", "RELEASE");
newQuery = SqliteEmptyQueryPtr::create();
storeErrorDiff(query.data());
break;
@@ -249,7 +250,7 @@ SqliteQueryPtr DbVersionConverter::convert3To2(SqliteQueryPtr query)
newQuery = copyQuery<SqliteRollback>(query);
break;
case SqliteQueryType::Savepoint:
- errors << QObject::tr("SQLite 2 does not support 'SAVEPOINT' statement.");
+ errors << QObject::tr("SQLite %1 does not support '%2' statement.").arg("2", "SAVEPOINT");
newQuery = SqliteEmptyQueryPtr::create();
storeErrorDiff(query.data());
break;
@@ -327,7 +328,7 @@ SqliteQueryPtr DbVersionConverter::convert2To3(SqliteQueryPtr query)
newQuery = copyQuery<SqliteCommitTrans>(query);
break;
case SqliteQueryType::Copy:
- errors << QObject::tr("SQLite 3 does not support 'COPY' statement.");
+ errors << QObject::tr("SQLite %1 does not support '%2' statement.").arg("3", "COPY");
newQuery = SqliteEmptyQueryPtr::create();
storeErrorDiff(query.data());
break;
@@ -431,7 +432,7 @@ bool DbVersionConverter::modifySelectForVersion2(SqliteSelect* select)
{
if (select->with)
{
- errors << QObject::tr("SQLite 2 does not support the 'WITH' clause. Cannot convert '%1' statement with that clause.").arg("SELECT");
+ errors << QObject::tr("SQLite %1 does not support the '%2' clause. Cannot convert '%3' statement with that clause.").arg("2", "WITH", "SELECT");
return false;
}
@@ -457,7 +458,7 @@ bool DbVersionConverter::modifyDeleteForVersion2(SqliteDelete* del)
{
if (del->with)
{
- errors << QObject::tr("SQLite 2 does not support the 'WITH' clause. Cannot convert '%1' statement with that clause.").arg("DELETE");
+ errors << QObject::tr("SQLite %1 does not support the '%2' clause. Cannot convert '%3' statement with that clause.").arg("2", "WITH", "DELETE");
return false;
}
@@ -478,13 +479,13 @@ bool DbVersionConverter::modifyInsertForVersion2(SqliteInsert* insert)
{
if (insert->with)
{
- errors << QObject::tr("SQLite 2 does not support the 'WITH' clause. Cannot convert '%1' statement with that clause.").arg("INSERT");
+ errors << QObject::tr("SQLite %1 does not support the '%2' clause. Cannot convert '%3' statement with that clause.").arg("2", "WITH", "INSERT");
return false;
}
if (insert->defaultValuesKw)
{
- errors << QObject::tr("SQLite 2 does not support the 'DEFAULT VALUES' clause in the 'INSERT' clause.");
+ errors << QObject::tr("SQLite %1 does not support the '%2' clause in the '%3' statement.").arg("2", "DEFAULT VALUES", "INSERT");
return false;
}
@@ -511,7 +512,7 @@ bool DbVersionConverter::modifyUpdateForVersion2(SqliteUpdate* update)
{
if (update->with)
{
- errors << QObject::tr("SQLite 2 does not support the 'WITH' clause. Cannot convert '%1' statement with that clause.").arg("UPDATE");
+ errors << QObject::tr("SQLite %1 does not support the '%2' clause. Cannot convert '%3' statement with that clause.").arg("2", "WITH", "UPDATE");
return false;
}
@@ -752,7 +753,7 @@ bool DbVersionConverter::modifySingleExprForVersion2(SqliteExpr* expr)
case SqliteExpr::Mode::RAISE:
break;
case SqliteExpr::Mode::CTIME:
- errors << QObject::tr("SQLite 2 does not support current date or time clauses in expressions.");
+ errors << QObject::tr("SQLite %1 does not support current date or time clauses in expressions.").arg("2");
return false;
case SqliteExpr::Mode::IN:
case SqliteExpr::Mode::SUB_SELECT:
@@ -763,10 +764,10 @@ bool DbVersionConverter::modifySingleExprForVersion2(SqliteExpr* expr)
break;
}
case SqliteExpr::Mode::CAST:
- errors << QObject::tr("SQLite 2 does not support 'CAST' clause in expressions.");
+ errors << QObject::tr("SQLite %1 does not support '%2' clause in expressions.").arg("2", "CAST");
return false;
case SqliteExpr::Mode::EXISTS:
- errors << QObject::tr("SQLite 2 does not support 'EXISTS' clause in expressions.");
+ errors << QObject::tr("SQLite %1 does not support '%2' clause in expressions.").arg("2", "EXISTS");
return false;
case SqliteExpr::Mode::COLLATE:
{
@@ -777,7 +778,7 @@ bool DbVersionConverter::modifySingleExprForVersion2(SqliteExpr* expr)
}
else
{
- errors << QObject::tr("SQLite 2 does not support 'COLLATE' clause in expressions.");
+ errors << QObject::tr("SQLite %1 does not support '%2' clause in expressions.").arg("2", "COLLATE");
return false;
}
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/exportworker.cpp b/SQLiteStudio3/coreSQLiteStudio/exportworker.cpp
index 9d227de..b14bbf1 100644
--- a/SQLiteStudio3/coreSQLiteStudio/exportworker.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/exportworker.cpp
@@ -172,7 +172,7 @@ QHash<ExportManager::ExportProviderFlag, QVariant> ExportWorker::getProviderData
}
else if (results->isError())
{
- notifyError(tr("Error while counting data column width to export from query results: %2").arg(results->getErrorText()));
+ notifyError(tr("Error while counting data column width to export from query results: %1").arg(results->getErrorText()));
}
else
{
@@ -378,14 +378,21 @@ bool ExportWorker::exportTableInternal(const QString& database, const QString& t
SqliteCreateTablePtr createTable = parsedDdl.dynamicCast<SqliteCreateTable>();
SqliteCreateVirtualTablePtr createVirtualTable = parsedDdl.dynamicCast<SqliteCreateVirtualTable>();
+ QStringList colNames;
+ if (results)
+ colNames = results->getColumnNames();
+
if (createTable)
{
- if (!plugin->exportTable(database, table, results->getColumnNames(), ddl, createTable, providerData))
+ if (!results)
+ colNames = createTable->getColumnNames();
+
+ if (!plugin->exportTable(database, table, colNames, ddl, createTable, providerData))
return false;
}
else
{
- if (!plugin->exportVirtualTable(database, table, results->getColumnNames(), ddl, createVirtualTable, providerData))
+ if (!plugin->exportVirtualTable(database, table, colNames, ddl, createVirtualTable, providerData))
return false;
}
@@ -393,14 +400,17 @@ bool ExportWorker::exportTableInternal(const QString& database, const QString& t
return false;
SqlResultsRowPtr row;
- while (results->hasNext())
+ if (results)
{
- row = results->next();
- if (!plugin->exportTableRow(row))
- return false;
+ while (results->hasNext())
+ {
+ row = results->next();
+ if (!plugin->exportTableRow(row))
+ return false;
- if (isInterrupted())
- return false;
+ if (isInterrupted())
+ return false;
+ }
}
if (!plugin->afterExportTable())
@@ -467,7 +477,6 @@ void ExportWorker::queryTableDataToExport(Db* db, const QString& table, SqlQuery
if (config->exportData)
{
QString wrappedTable = wrapObjIfNeeded(table, db->getDialect());
-
dataPtr = db->exec(sql.arg(wrappedTable));
if (dataPtr->isError())
*errorMessage = tr("Error while reading data to export from table %1: %2").arg(table, dataPtr->getErrorText());
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp
index 969f029..1429cef 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/ast/sqliteexpr.cpp
@@ -457,7 +457,11 @@ TokenList SqliteExpr::rebuildTokensFromContents()
builder.withStatement(expr1).withSpace().withOperator(binaryOp).withSpace().withStatement(expr2);
break;
case SqliteExpr::Mode::FUNCTION:
- builder.withOther(function).withParLeft().withStatementList(exprList).withParRight();
+ builder.withOther(function).withParLeft();
+ if (distinctKw)
+ builder.withKeyword("DISTINCT");
+
+ builder.withStatementList(exprList).withParRight();
break;
case SqliteExpr::Mode::SUB_EXPR:
builder.withParLeft().withStatement(expr1).withParRight();
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.cpp
index 039c9a5..9299c52 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/parser_helper_stubs.cpp
@@ -21,6 +21,7 @@ ParserIndexedBy::ParserIndexedBy(bool notIndexed)
ParserStubInsertOrReplace::ParserStubInsertOrReplace(bool replace)
{
this->replace = replace;
+ this->orConflict = SqliteConflictAlgo::null;
}
ParserStubInsertOrReplace::ParserStubInsertOrReplace(bool replace, SqliteConflictAlgo orConflict)
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/parsercontext.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/parsercontext.cpp
index 7394e75..e9444e5 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/parsercontext.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/parsercontext.cpp
@@ -27,7 +27,12 @@ void ParserContext::error(TokenPtr token, const QString &text)
void ParserContext::error(Token* token, const QString& text)
{
- error(getTokenPtr(token), text);
+ if (token->type != Token::INVALID)
+ error(getTokenPtr(token), text);
+ else if (managedTokens.size() > 0)
+ error(managedTokens.last(), text);
+ else
+ error(text);
}
void ParserContext::error(const QString &text)
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp
index fa61c21..656444a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.cpp
@@ -165,7 +165,7 @@ typedef union {
#define sqlite2_parseARG_FETCH ParserContext* parserContext = yypParser->parserContext
#define sqlite2_parseARG_STORE yypParser->parserContext = parserContext
#define YYNSTATE 584
-#define YYNRULE 352
+#define YYNRULE 353
#define YYFALLBACK 1
#define YY_NO_ACTION (YYNSTATE+YYNRULE+2)
#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1)
@@ -241,16 +241,16 @@ static const YYMINORTYPE yyzerominor = { 0 };
static const YYACTIONTYPE yy_action[] = {
/* 0 */ 338, 191, 186, 242, 476, 511, 576, 193, 332, 16,
/* 10 */ 511, 384, 189, 322, 239, 519, 518, 570, 337, 450,
- /* 20 */ 15, 851, 125, 58, 575, 179, 851, 574, 63, 143,
+ /* 20 */ 15, 852, 125, 58, 575, 179, 852, 574, 63, 143,
/* 30 */ 401, 581, 328, 26, 84, 569, 114, 322, 573, 519,
- /* 40 */ 518, 851, 851, 35, 851, 851, 851, 851, 851, 851,
- /* 50 */ 851, 851, 851, 851, 851, 851, 851, 851, 851, 32,
- /* 60 */ 33, 851, 851, 851, 851, 320, 379, 34, 240, 238,
+ /* 40 */ 518, 852, 852, 35, 852, 852, 852, 852, 852, 852,
+ /* 50 */ 852, 852, 852, 852, 852, 852, 852, 852, 852, 32,
+ /* 60 */ 33, 852, 852, 852, 852, 320, 379, 34, 240, 238,
/* 70 */ 121, 556, 291, 251, 57, 7, 217, 577, 265, 264,
/* 80 */ 523, 179, 555, 336, 335, 338, 569, 549, 548, 550,
/* 90 */ 271, 569, 10, 724, 199, 297, 203, 489, 459, 332,
/* 100 */ 568, 567, 451, 253, 158, 523, 449, 444, 443, 337,
- /* 110 */ 187, 870, 266, 187, 580, 517, 168, 328, 505, 343,
+ /* 110 */ 187, 871, 266, 187, 580, 517, 168, 328, 505, 343,
/* 120 */ 143, 235, 490, 108, 101, 489, 523, 164, 35, 531,
/* 130 */ 187, 13, 523, 252, 234, 547, 236, 119, 340, 232,
/* 140 */ 339, 120, 216, 155, 32, 33, 481, 547, 322, 215,
@@ -258,23 +258,23 @@ static const YYACTIONTYPE yy_action[] = {
/* 160 */ 7, 714, 400, 321, 251, 523, 714, 563, 336, 335,
/* 170 */ 500, 553, 549, 548, 550, 188, 465, 500, 401, 466,
/* 180 */ 366, 365, 552, 364, 293, 435, 39, 39, 39, 38,
- /* 190 */ 523, 562, 60, 255, 714, 569, 714, 714, 852, 570,
- /* 200 */ 271, 714, 502, 852, 500, 714, 570, 714, 714, 714,
+ /* 190 */ 523, 562, 60, 255, 714, 569, 714, 714, 853, 570,
+ /* 200 */ 271, 714, 502, 853, 500, 714, 570, 714, 714, 714,
/* 210 */ 714, 523, 569, 178, 531, 422, 13, 523, 44, 45,
- /* 220 */ 330, 42, 42, 530, 530, 223, 852, 852, 43, 43,
+ /* 220 */ 330, 42, 42, 530, 530, 223, 853, 853, 43, 43,
/* 230 */ 43, 43, 41, 41, 41, 41, 40, 40, 39, 39,
/* 240 */ 39, 38, 199, 297, 203, 55, 236, 92, 340, 232,
/* 250 */ 339, 120, 216, 500, 106, 570, 268, 19, 187, 215,
/* 260 */ 500, 105, 553, 41, 41, 41, 41, 40, 40, 39,
/* 270 */ 39, 39, 38, 552, 40, 40, 39, 39, 39, 38,
- /* 280 */ 852, 3, 568, 567, 187, 852, 512, 500, 219, 568,
+ /* 280 */ 853, 3, 568, 567, 187, 853, 512, 500, 219, 568,
/* 290 */ 567, 17, 496, 156, 322, 345, 519, 518, 569, 292,
- /* 300 */ 44, 45, 330, 42, 42, 530, 530, 223, 852, 852,
+ /* 300 */ 44, 45, 330, 42, 42, 530, 530, 223, 853, 853,
/* 310 */ 43, 43, 43, 43, 41, 41, 41, 41, 40, 40,
- /* 320 */ 39, 39, 39, 38, 547, 533, 852, 100, 308, 306,
- /* 330 */ 305, 852, 448, 447, 418, 418, 316, 245, 568, 567,
- /* 340 */ 304, 937, 122, 344, 1, 582, 44, 45, 330, 42,
- /* 350 */ 42, 530, 530, 223, 852, 852, 43, 43, 43, 43,
+ /* 320 */ 39, 39, 39, 38, 547, 533, 853, 100, 308, 306,
+ /* 330 */ 305, 853, 448, 447, 418, 418, 316, 245, 568, 567,
+ /* 340 */ 304, 938, 122, 344, 1, 582, 44, 45, 330, 42,
+ /* 350 */ 42, 530, 530, 223, 853, 853, 43, 43, 43, 43,
/* 360 */ 41, 41, 41, 41, 40, 40, 39, 39, 39, 38,
/* 370 */ 338, 442, 44, 45, 330, 42, 42, 530, 530, 223,
/* 380 */ 524, 569, 43, 43, 43, 43, 41, 41, 41, 41,
@@ -287,14 +287,14 @@ static const YYACTIONTYPE yy_action[] = {
/* 450 */ 523, 524, 569, 336, 335, 285, 781, 549, 548, 550,
/* 460 */ 43, 43, 43, 43, 41, 41, 41, 41, 40, 40,
/* 470 */ 39, 39, 39, 38, 332, 523, 332, 425, 470, 774,
- /* 480 */ 560, 774, 774, 850, 337, 426, 337, 455, 850, 613,
+ /* 480 */ 560, 774, 774, 851, 337, 426, 337, 455, 851, 613,
/* 490 */ 774, 181, 774, 774, 774, 143, 523, 143, 30, 531,
- /* 500 */ 614, 13, 523, 850, 850, 850, 850, 850, 850, 850,
- /* 510 */ 850, 850, 850, 850, 850, 850, 850, 850, 850, 850,
- /* 520 */ 850, 850, 850, 850, 850, 850, 850, 852, 500, 460,
- /* 530 */ 357, 320, 852, 318, 75, 570, 401, 570, 311, 251,
+ /* 500 */ 614, 13, 523, 851, 851, 851, 851, 851, 851, 851,
+ /* 510 */ 851, 851, 851, 851, 851, 851, 851, 851, 851, 851,
+ /* 520 */ 851, 851, 851, 851, 851, 851, 851, 853, 500, 460,
+ /* 530 */ 357, 320, 853, 318, 75, 570, 401, 570, 311, 251,
/* 540 */ 569, 251, 446, 445, 570, 358, 359, 44, 45, 330,
- /* 550 */ 42, 42, 530, 530, 223, 852, 852, 43, 43, 43,
+ /* 550 */ 42, 42, 530, 530, 223, 853, 853, 43, 43, 43,
/* 560 */ 43, 41, 41, 41, 41, 40, 40, 39, 39, 39,
/* 570 */ 38, 338, 44, 45, 330, 42, 42, 530, 530, 223,
/* 580 */ 615, 570, 43, 43, 43, 43, 41, 41, 41, 41,
@@ -305,14 +305,14 @@ static const YYACTIONTYPE yy_action[] = {
/* 630 */ 32, 33, 337, 356, 482, 355, 569, 85, 34, 759,
/* 640 */ 532, 111, 70, 78, 487, 483, 7, 759, 90, 494,
/* 650 */ 508, 523, 493, 160, 336, 335, 782, 528, 549, 548,
- /* 660 */ 550, 532, 440, 434, 568, 567, 118, 54, 332, 919,
+ /* 660 */ 550, 532, 440, 434, 568, 567, 118, 54, 332, 920,
/* 670 */ 214, 100, 308, 306, 305, 75, 523, 333, 337, 571,
/* 680 */ 759, 529, 759, 759, 304, 48, 177, 522, 31, 143,
/* 690 */ 29, 759, 568, 567, 759, 759, 159, 523, 568, 567,
/* 700 */ 531, 464, 13, 523, 44, 45, 330, 42, 42, 530,
/* 710 */ 530, 223, 568, 567, 43, 43, 43, 43, 41, 41,
/* 720 */ 41, 41, 40, 40, 39, 39, 39, 38, 463, 570,
- /* 730 */ 498, 919, 570, 323, 514, 570, 222, 44, 45, 330,
+ /* 730 */ 498, 920, 570, 323, 514, 570, 222, 44, 45, 330,
/* 740 */ 42, 42, 530, 530, 223, 393, 392, 43, 43, 43,
/* 750 */ 43, 41, 41, 41, 41, 40, 40, 39, 39, 39,
/* 760 */ 38, 44, 45, 330, 42, 42, 530, 530, 223, 540,
@@ -324,7 +324,7 @@ static const YYACTIONTYPE yy_action[] = {
/* 820 */ 110, 570, 218, 44, 45, 330, 42, 42, 530, 530,
/* 830 */ 223, 27, 468, 43, 43, 43, 43, 41, 41, 41,
/* 840 */ 41, 40, 40, 39, 39, 39, 38, 486, 547, 44,
- /* 850 */ 45, 330, 42, 42, 530, 530, 223, 859, 212, 43,
+ /* 850 */ 45, 330, 42, 42, 530, 530, 223, 860, 212, 43,
/* 860 */ 43, 43, 43, 41, 41, 41, 41, 40, 40, 39,
/* 870 */ 39, 39, 38, 44, 47, 330, 42, 42, 530, 530,
/* 880 */ 223, 535, 284, 43, 43, 43, 43, 41, 41, 41,
@@ -339,7 +339,7 @@ static const YYACTIONTYPE yy_action[] = {
/* 970 */ 520, 569, 395, 547, 569, 569, 23, 328, 213, 254,
/* 980 */ 358, 275, 547, 75, 182, 32, 33, 310, 35, 569,
/* 990 */ 361, 66, 164, 34, 160, 396, 398, 317, 397, 293,
- /* 1000 */ 570, 7, 862, 516, 32, 33, 523, 570, 538, 336,
+ /* 1000 */ 570, 7, 863, 516, 32, 33, 523, 570, 538, 336,
/* 1010 */ 335, 522, 34, 549, 548, 550, 25, 4, 289, 338,
/* 1020 */ 7, 471, 395, 547, 12, 523, 568, 567, 336, 335,
/* 1030 */ 302, 523, 549, 548, 550, 75, 570, 404, 338, 276,
@@ -356,7 +356,7 @@ static const YYACTIONTYPE yy_action[] = {
/* 1140 */ 312, 391, 202, 523, 296, 523, 568, 567, 531, 198,
/* 1150 */ 13, 523, 569, 413, 345, 328, 568, 567, 532, 569,
/* 1160 */ 474, 570, 307, 570, 523, 495, 35, 531, 53, 13,
- /* 1170 */ 523, 496, 860, 456, 473, 568, 567, 570, 413, 532,
+ /* 1170 */ 523, 496, 861, 456, 473, 568, 567, 570, 413, 532,
/* 1180 */ 570, 485, 32, 33, 407, 439, 10, 568, 567, 500,
/* 1190 */ 34, 489, 730, 570, 568, 567, 431, 403, 7, 52,
/* 1200 */ 568, 567, 570, 523, 582, 234, 336, 335, 338, 407,
@@ -367,7 +367,7 @@ static const YYACTIONTYPE yy_action[] = {
/* 1250 */ 99, 35, 531, 124, 13, 523, 492, 368, 497, 148,
/* 1260 */ 568, 567, 570, 568, 567, 82, 376, 32, 33, 350,
/* 1270 */ 2, 570, 568, 567, 570, 34, 568, 567, 570, 73,
- /* 1280 */ 179, 259, 570, 7, 862, 568, 567, 417, 523, 338,
+ /* 1280 */ 179, 259, 570, 7, 863, 568, 567, 417, 523, 338,
/* 1290 */ 569, 336, 335, 22, 491, 549, 548, 550, 416, 69,
/* 1300 */ 568, 567, 371, 522, 568, 567, 570, 415, 405, 568,
/* 1310 */ 567, 261, 21, 523, 568, 567, 568, 567, 196, 368,
@@ -411,8 +411,8 @@ static const YYACTIONTYPE yy_action[] = {
/* 1690 */ 283, 402, 382, 117, 89, 87, 86, 116, 175, 280,
/* 1700 */ 347, 349, 173, 233, 113, 126, 230, 509, 541, 470,
/* 1710 */ 506, 537, 458, 282, 154, 410, 273, 190, 348, 438,
- /* 1720 */ 467, 462, 329, 461, 578, 231, 62, 938, 37, 412,
- /* 1730 */ 165, 433, 938, 938, 938, 327, 299,
+ /* 1720 */ 467, 462, 329, 461, 578, 231, 62, 939, 37, 412,
+ /* 1730 */ 165, 433, 939, 939, 939, 327, 299,
};
static const YYCODETYPE yy_lookahead[] = {
/* 0 */ 4, 8, 195, 10, 80, 25, 5, 14, 156, 202,
@@ -664,61 +664,61 @@ static const short yy_reduce_ofst[] = {
/* 250 */ 1242,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 589, 936, 936, 862, 903, 851, 851, 851, 936, 936,
- /* 10 */ 730, 936, 851, 851, 851, 936, 851, 851, 851, 851,
- /* 20 */ 851, 851, 851, 851, 851, 851, 851, 851, 851, 851,
- /* 30 */ 851, 851, 851, 851, 851, 851, 851, 851, 851, 851,
- /* 40 */ 851, 851, 851, 851, 851, 851, 851, 841, 724, 608,
- /* 50 */ 936, 936, 936, 936, 936, 936, 936, 936, 936, 936,
- /* 60 */ 616, 720, 730, 936, 936, 936, 936, 790, 777, 768,
- /* 70 */ 936, 800, 800, 783, 679, 936, 800, 756, 752, 936,
- /* 80 */ 839, 936, 936, 731, 936, 839, 936, 936, 936, 936,
- /* 90 */ 936, 791, 784, 778, 769, 936, 936, 936, 936, 936,
- /* 100 */ 936, 936, 936, 936, 720, 720, 936, 720, 936, 936,
- /* 110 */ 936, 840, 594, 936, 882, 936, 936, 936, 936, 936,
- /* 120 */ 936, 605, 589, 936, 936, 936, 710, 736, 773, 761,
- /* 130 */ 863, 856, 857, 855, 852, 852, 852, 852, 852, 852,
- /* 140 */ 852, 852, 852, 852, 823, 816, 827, 815, 831, 826,
- /* 150 */ 818, 817, 819, 936, 936, 936, 936, 723, 936, 936,
- /* 160 */ 936, 820, 936, 789, 698, 936, 910, 693, 601, 618,
- /* 170 */ 936, 936, 936, 936, 936, 936, 936, 772, 670, 756,
- /* 180 */ 645, 738, 756, 858, 936, 936, 721, 708, 756, 934,
- /* 190 */ 931, 934, 739, 683, 739, 739, 739, 681, 739, 683,
- /* 200 */ 796, 739, 739, 683, 772, 739, 918, 915, 739, 739,
- /* 210 */ 871, 681, 681, 681, 681, 662, 936, 871, 681, 739,
- /* 220 */ 936, 739, 936, 852, 821, 752, 762, 748, 760, 757,
- /* 230 */ 772, 936, 681, 681, 662, 681, 681, 665, 593, 593,
+ /* 0 */ 589, 937, 937, 863, 904, 852, 852, 852, 937, 937,
+ /* 10 */ 730, 937, 852, 852, 852, 937, 852, 852, 852, 852,
+ /* 20 */ 852, 852, 852, 852, 852, 852, 852, 852, 852, 852,
+ /* 30 */ 852, 852, 852, 852, 852, 852, 852, 852, 852, 852,
+ /* 40 */ 852, 852, 852, 852, 852, 852, 852, 841, 724, 608,
+ /* 50 */ 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
+ /* 60 */ 616, 720, 730, 937, 937, 937, 937, 790, 777, 768,
+ /* 70 */ 937, 800, 800, 783, 679, 937, 800, 756, 752, 937,
+ /* 80 */ 839, 937, 937, 731, 937, 839, 937, 937, 937, 937,
+ /* 90 */ 937, 791, 784, 778, 769, 937, 937, 937, 937, 937,
+ /* 100 */ 937, 937, 937, 937, 720, 720, 937, 720, 937, 937,
+ /* 110 */ 937, 840, 594, 937, 883, 937, 937, 937, 937, 937,
+ /* 120 */ 937, 605, 589, 937, 937, 937, 710, 736, 773, 761,
+ /* 130 */ 864, 857, 858, 856, 853, 853, 853, 853, 853, 844,
+ /* 140 */ 853, 853, 853, 853, 823, 816, 827, 815, 831, 826,
+ /* 150 */ 818, 817, 819, 937, 937, 937, 937, 723, 937, 937,
+ /* 160 */ 937, 820, 937, 789, 698, 937, 911, 693, 601, 618,
+ /* 170 */ 937, 937, 937, 937, 937, 937, 937, 772, 670, 756,
+ /* 180 */ 645, 738, 756, 859, 937, 937, 721, 708, 756, 935,
+ /* 190 */ 932, 935, 739, 683, 739, 739, 739, 681, 739, 683,
+ /* 200 */ 796, 739, 739, 683, 772, 739, 919, 916, 739, 739,
+ /* 210 */ 872, 681, 681, 681, 681, 662, 937, 872, 681, 739,
+ /* 220 */ 937, 739, 937, 853, 821, 752, 762, 748, 760, 757,
+ /* 230 */ 772, 937, 681, 681, 662, 681, 681, 665, 593, 593,
/* 240 */ 593, 681, 593, 649, 649, 726, 830, 829, 828, 822,
- /* 250 */ 629, 864, 936, 936, 936, 936, 936, 936, 936, 936,
- /* 260 */ 936, 936, 936, 936, 936, 936, 936, 936, 936, 763,
- /* 270 */ 936, 936, 936, 936, 936, 936, 936, 936, 936, 881,
- /* 280 */ 936, 936, 936, 936, 936, 936, 914, 913, 936, 936,
- /* 290 */ 936, 936, 936, 936, 936, 936, 936, 936, 902, 936,
- /* 300 */ 936, 936, 936, 936, 936, 936, 936, 936, 936, 936,
- /* 310 */ 936, 936, 936, 936, 936, 936, 936, 936, 758, 936,
- /* 320 */ 861, 843, 701, 850, 936, 936, 936, 936, 936, 842,
- /* 330 */ 853, 810, 936, 749, 936, 809, 806, 808, 611, 936,
- /* 340 */ 936, 936, 936, 936, 586, 590, 935, 933, 932, 930,
- /* 350 */ 890, 889, 888, 886, 895, 894, 893, 892, 891, 887,
- /* 360 */ 885, 884, 883, 880, 787, 775, 766, 697, 929, 927,
- /* 370 */ 928, 879, 877, 878, 696, 695, 692, 691, 690, 869,
- /* 380 */ 868, 866, 865, 867, 604, 906, 909, 908, 907, 912,
- /* 390 */ 911, 904, 917, 916, 921, 925, 924, 923, 922, 920,
- /* 400 */ 901, 795, 794, 792, 797, 788, 793, 780, 786, 785,
- /* 410 */ 776, 779, 684, 771, 767, 770, 905, 694, 603, 741,
+ /* 250 */ 629, 865, 937, 937, 937, 937, 937, 937, 937, 937,
+ /* 260 */ 937, 937, 937, 937, 937, 937, 937, 937, 937, 763,
+ /* 270 */ 937, 937, 937, 937, 937, 937, 937, 937, 937, 882,
+ /* 280 */ 937, 937, 937, 937, 937, 937, 915, 914, 937, 937,
+ /* 290 */ 937, 937, 937, 937, 937, 937, 937, 937, 903, 937,
+ /* 300 */ 937, 937, 937, 937, 937, 937, 937, 937, 937, 937,
+ /* 310 */ 937, 937, 937, 937, 937, 937, 937, 937, 758, 937,
+ /* 320 */ 862, 843, 701, 851, 937, 937, 937, 937, 937, 842,
+ /* 330 */ 854, 810, 937, 749, 937, 809, 806, 808, 611, 937,
+ /* 340 */ 937, 937, 937, 937, 586, 590, 936, 934, 933, 931,
+ /* 350 */ 891, 890, 889, 887, 896, 895, 894, 893, 892, 888,
+ /* 360 */ 886, 885, 884, 881, 787, 775, 766, 697, 930, 928,
+ /* 370 */ 929, 880, 878, 879, 696, 695, 692, 691, 690, 870,
+ /* 380 */ 869, 867, 866, 868, 604, 907, 910, 909, 908, 913,
+ /* 390 */ 912, 905, 918, 917, 922, 926, 925, 924, 923, 921,
+ /* 400 */ 902, 795, 794, 792, 797, 788, 793, 780, 786, 785,
+ /* 410 */ 776, 779, 684, 771, 767, 770, 906, 694, 603, 741,
/* 420 */ 602, 607, 668, 669, 677, 680, 675, 678, 674, 673,
/* 430 */ 672, 676, 671, 667, 610, 609, 623, 621, 622, 620,
/* 440 */ 619, 617, 639, 638, 635, 637, 634, 636, 633, 632,
- /* 450 */ 631, 630, 628, 661, 647, 646, 874, 876, 875, 873,
- /* 460 */ 872, 654, 653, 659, 658, 657, 656, 652, 655, 651,
+ /* 450 */ 631, 630, 628, 661, 647, 646, 875, 877, 876, 874,
+ /* 460 */ 873, 654, 653, 659, 658, 657, 656, 652, 655, 651,
/* 470 */ 650, 648, 644, 814, 813, 807, 835, 707, 706, 715,
/* 480 */ 713, 712, 711, 747, 746, 745, 744, 743, 742, 735,
/* 490 */ 733, 729, 728, 734, 732, 727, 719, 717, 718, 716,
/* 500 */ 612, 802, 799, 801, 798, 737, 725, 722, 709, 751,
- /* 510 */ 753, 854, 844, 834, 845, 740, 832, 833, 704, 703,
- /* 520 */ 702, 853, 850, 846, 926, 838, 849, 837, 836, 825,
- /* 530 */ 824, 812, 847, 848, 811, 750, 765, 898, 897, 900,
- /* 540 */ 899, 896, 764, 625, 624, 705, 700, 699, 805, 804,
+ /* 510 */ 753, 855, 845, 834, 846, 740, 832, 833, 704, 703,
+ /* 520 */ 702, 854, 851, 847, 927, 838, 850, 837, 836, 825,
+ /* 530 */ 824, 812, 848, 849, 811, 750, 765, 899, 898, 901,
+ /* 540 */ 900, 897, 764, 625, 624, 705, 700, 699, 805, 804,
/* 550 */ 803, 643, 755, 754, 642, 664, 663, 660, 641, 640,
/* 560 */ 627, 626, 606, 600, 599, 598, 597, 615, 614, 613,
/* 570 */ 611, 596, 595, 689, 688, 687, 686, 685, 682, 592,
@@ -1258,98 +1258,99 @@ static const char *const yyRuleName[] = {
/* 257 */ "exprx ::= expr not_opt BETWEEN expr AND",
/* 258 */ "exprx ::= CASE case_operand case_exprlist case_else",
/* 259 */ "exprx ::= expr not_opt IN LP exprlist",
- /* 260 */ "exprx ::= expr not_opt IN ID_DB",
- /* 261 */ "exprx ::= expr not_opt IN nm DOT ID_TAB",
- /* 262 */ "exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN",
- /* 263 */ "exprx ::= nm DOT ID_TAB|ID_COL",
- /* 264 */ "exprx ::= nm DOT nm DOT ID_COL",
- /* 265 */ "exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP",
- /* 266 */ "expr ::= exprx",
- /* 267 */ "expr ::=",
- /* 268 */ "not_opt ::=",
- /* 269 */ "not_opt ::= NOT",
- /* 270 */ "likeop ::= LIKE|GLOB",
- /* 271 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 272 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 273 */ "case_else ::= ELSE expr",
- /* 274 */ "case_else ::=",
- /* 275 */ "case_operand ::= exprx",
- /* 276 */ "case_operand ::=",
- /* 277 */ "exprlist ::= nexprlist",
- /* 278 */ "exprlist ::=",
- /* 279 */ "nexprlist ::= nexprlist COMMA expr",
- /* 280 */ "nexprlist ::= exprx",
- /* 281 */ "cmd ::= CREATE uniqueflag INDEX nm ON nm dbnm LP idxlist RP onconf",
- /* 282 */ "cmd ::= CREATE uniqueflag INDEX nm dbnm ON ID_TAB",
- /* 283 */ "cmd ::= CREATE uniqueflag INDEX nm DOT ID_IDX_NEW",
- /* 284 */ "cmd ::= CREATE uniqueflag INDEX ID_DB|ID_IDX_NEW",
- /* 285 */ "uniqueflag ::= UNIQUE",
- /* 286 */ "uniqueflag ::=",
- /* 287 */ "idxlist_opt ::=",
- /* 288 */ "idxlist_opt ::= LP idxlist RP",
- /* 289 */ "idxlist ::= idxlist COMMA idxlist_single",
- /* 290 */ "idxlist ::= idxlist_single",
- /* 291 */ "idxlist_single ::= nm sortorder",
- /* 292 */ "idxlist_single ::= ID_COL",
- /* 293 */ "cmd ::= DROP INDEX fullname",
- /* 294 */ "cmd ::= DROP INDEX nm DOT ID_IDX",
- /* 295 */ "cmd ::= DROP INDEX ID_DB|ID_IDX",
- /* 296 */ "cmd ::= COPY orconf nm dbnm FROM nm USING DELIMITERS STRING",
- /* 297 */ "cmd ::= COPY orconf nm dbnm FROM nm",
- /* 298 */ "cmd ::= VACUUM",
- /* 299 */ "cmd ::= VACUUM nm",
- /* 300 */ "cmd ::= PRAGMA ids",
- /* 301 */ "cmd ::= PRAGMA nm EQ nmnum",
- /* 302 */ "cmd ::= PRAGMA nm LP nmnum RP",
- /* 303 */ "cmd ::= PRAGMA nm EQ minus_num",
- /* 304 */ "cmd ::= PRAGMA nm LP minus_num RP",
- /* 305 */ "cmd ::= PRAGMA nm DOT ID_PRAGMA",
- /* 306 */ "cmd ::= PRAGMA ID_DB|ID_PRAGMA",
- /* 307 */ "nmnum ::= plus_num",
- /* 308 */ "nmnum ::= nm",
- /* 309 */ "nmnum ::= ON",
- /* 310 */ "nmnum ::= DELETE",
- /* 311 */ "nmnum ::= DEFAULT",
- /* 312 */ "plus_num ::= PLUS number",
- /* 313 */ "plus_num ::= number",
- /* 314 */ "minus_num ::= MINUS number",
- /* 315 */ "number ::= INTEGER",
- /* 316 */ "number ::= FLOAT",
- /* 317 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list END",
- /* 318 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause",
- /* 319 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list",
- /* 320 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON ID_TAB|ID_DB",
- /* 321 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm DOT ID_TAB",
- /* 322 */ "cmd ::= CREATE temp TRIGGER ID_TRIG_NEW",
- /* 323 */ "trigger_time ::= BEFORE",
- /* 324 */ "trigger_time ::= AFTER",
- /* 325 */ "trigger_time ::= INSTEAD OF",
- /* 326 */ "trigger_time ::=",
- /* 327 */ "trigger_event ::= DELETE",
- /* 328 */ "trigger_event ::= INSERT",
- /* 329 */ "trigger_event ::= UPDATE",
- /* 330 */ "trigger_event ::= UPDATE OF inscollist",
- /* 331 */ "foreach_clause ::=",
- /* 332 */ "foreach_clause ::= FOR EACH ROW",
- /* 333 */ "foreach_clause ::= FOR EACH STATEMENT",
- /* 334 */ "when_clause ::=",
- /* 335 */ "when_clause ::= WHEN expr",
- /* 336 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
- /* 337 */ "trigger_cmd_list ::= trigger_cmd SEMI",
- /* 338 */ "trigger_cmd ::= update_stmt",
- /* 339 */ "trigger_cmd ::= insert_stmt",
- /* 340 */ "trigger_cmd ::= delete_stmt",
- /* 341 */ "trigger_cmd ::= select_stmt",
- /* 342 */ "raisetype ::= ROLLBACK|ABORT|FAIL",
- /* 343 */ "cmd ::= DROP TRIGGER fullname",
- /* 344 */ "cmd ::= DROP TRIGGER nm DOT ID_TRIG",
- /* 345 */ "cmd ::= DROP TRIGGER ID_DB|ID_TRIG",
- /* 346 */ "cmd ::= ATTACH database_kw_opt ids AS ids key_opt",
- /* 347 */ "key_opt ::=",
- /* 348 */ "key_opt ::= USING ids",
- /* 349 */ "database_kw_opt ::= DATABASE",
- /* 350 */ "database_kw_opt ::=",
- /* 351 */ "cmd ::= DETACH database_kw_opt nm",
+ /* 260 */ "exprx ::= LP expr",
+ /* 261 */ "exprx ::= expr not_opt IN ID_DB",
+ /* 262 */ "exprx ::= expr not_opt IN nm DOT ID_TAB",
+ /* 263 */ "exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN",
+ /* 264 */ "exprx ::= nm DOT ID_TAB|ID_COL",
+ /* 265 */ "exprx ::= nm DOT nm DOT ID_COL",
+ /* 266 */ "exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP",
+ /* 267 */ "expr ::= exprx",
+ /* 268 */ "expr ::=",
+ /* 269 */ "not_opt ::=",
+ /* 270 */ "not_opt ::= NOT",
+ /* 271 */ "likeop ::= LIKE|GLOB",
+ /* 272 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 273 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 274 */ "case_else ::= ELSE expr",
+ /* 275 */ "case_else ::=",
+ /* 276 */ "case_operand ::= exprx",
+ /* 277 */ "case_operand ::=",
+ /* 278 */ "exprlist ::= nexprlist",
+ /* 279 */ "exprlist ::=",
+ /* 280 */ "nexprlist ::= nexprlist COMMA expr",
+ /* 281 */ "nexprlist ::= exprx",
+ /* 282 */ "cmd ::= CREATE uniqueflag INDEX nm ON nm dbnm LP idxlist RP onconf",
+ /* 283 */ "cmd ::= CREATE uniqueflag INDEX nm dbnm ON ID_TAB",
+ /* 284 */ "cmd ::= CREATE uniqueflag INDEX nm DOT ID_IDX_NEW",
+ /* 285 */ "cmd ::= CREATE uniqueflag INDEX ID_DB|ID_IDX_NEW",
+ /* 286 */ "uniqueflag ::= UNIQUE",
+ /* 287 */ "uniqueflag ::=",
+ /* 288 */ "idxlist_opt ::=",
+ /* 289 */ "idxlist_opt ::= LP idxlist RP",
+ /* 290 */ "idxlist ::= idxlist COMMA idxlist_single",
+ /* 291 */ "idxlist ::= idxlist_single",
+ /* 292 */ "idxlist_single ::= nm sortorder",
+ /* 293 */ "idxlist_single ::= ID_COL",
+ /* 294 */ "cmd ::= DROP INDEX fullname",
+ /* 295 */ "cmd ::= DROP INDEX nm DOT ID_IDX",
+ /* 296 */ "cmd ::= DROP INDEX ID_DB|ID_IDX",
+ /* 297 */ "cmd ::= COPY orconf nm dbnm FROM nm USING DELIMITERS STRING",
+ /* 298 */ "cmd ::= COPY orconf nm dbnm FROM nm",
+ /* 299 */ "cmd ::= VACUUM",
+ /* 300 */ "cmd ::= VACUUM nm",
+ /* 301 */ "cmd ::= PRAGMA ids",
+ /* 302 */ "cmd ::= PRAGMA nm EQ nmnum",
+ /* 303 */ "cmd ::= PRAGMA nm LP nmnum RP",
+ /* 304 */ "cmd ::= PRAGMA nm EQ minus_num",
+ /* 305 */ "cmd ::= PRAGMA nm LP minus_num RP",
+ /* 306 */ "cmd ::= PRAGMA nm DOT ID_PRAGMA",
+ /* 307 */ "cmd ::= PRAGMA ID_DB|ID_PRAGMA",
+ /* 308 */ "nmnum ::= plus_num",
+ /* 309 */ "nmnum ::= nm",
+ /* 310 */ "nmnum ::= ON",
+ /* 311 */ "nmnum ::= DELETE",
+ /* 312 */ "nmnum ::= DEFAULT",
+ /* 313 */ "plus_num ::= PLUS number",
+ /* 314 */ "plus_num ::= number",
+ /* 315 */ "minus_num ::= MINUS number",
+ /* 316 */ "number ::= INTEGER",
+ /* 317 */ "number ::= FLOAT",
+ /* 318 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list END",
+ /* 319 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause",
+ /* 320 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list",
+ /* 321 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON ID_TAB|ID_DB",
+ /* 322 */ "cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm DOT ID_TAB",
+ /* 323 */ "cmd ::= CREATE temp TRIGGER ID_TRIG_NEW",
+ /* 324 */ "trigger_time ::= BEFORE",
+ /* 325 */ "trigger_time ::= AFTER",
+ /* 326 */ "trigger_time ::= INSTEAD OF",
+ /* 327 */ "trigger_time ::=",
+ /* 328 */ "trigger_event ::= DELETE",
+ /* 329 */ "trigger_event ::= INSERT",
+ /* 330 */ "trigger_event ::= UPDATE",
+ /* 331 */ "trigger_event ::= UPDATE OF inscollist",
+ /* 332 */ "foreach_clause ::=",
+ /* 333 */ "foreach_clause ::= FOR EACH ROW",
+ /* 334 */ "foreach_clause ::= FOR EACH STATEMENT",
+ /* 335 */ "when_clause ::=",
+ /* 336 */ "when_clause ::= WHEN expr",
+ /* 337 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
+ /* 338 */ "trigger_cmd_list ::= trigger_cmd SEMI",
+ /* 339 */ "trigger_cmd ::= update_stmt",
+ /* 340 */ "trigger_cmd ::= insert_stmt",
+ /* 341 */ "trigger_cmd ::= delete_stmt",
+ /* 342 */ "trigger_cmd ::= select_stmt",
+ /* 343 */ "raisetype ::= ROLLBACK|ABORT|FAIL",
+ /* 344 */ "cmd ::= DROP TRIGGER fullname",
+ /* 345 */ "cmd ::= DROP TRIGGER nm DOT ID_TRIG",
+ /* 346 */ "cmd ::= DROP TRIGGER ID_DB|ID_TRIG",
+ /* 347 */ "cmd ::= ATTACH database_kw_opt ids AS ids key_opt",
+ /* 348 */ "key_opt ::=",
+ /* 349 */ "key_opt ::= USING ids",
+ /* 350 */ "database_kw_opt ::= DATABASE",
+ /* 351 */ "database_kw_opt ::=",
+ /* 352 */ "cmd ::= DETACH database_kw_opt nm",
};
#endif /* NDEBUG */
@@ -2219,6 +2220,7 @@ static const struct {
{ 221, 5 },
{ 221, 4 },
{ 221, 5 },
+ { 221, 2 },
{ 221, 4 },
{ 221, 6 },
{ 221, 1 },
@@ -2394,10 +2396,10 @@ static void yy_reduce(
{yygotominor.yy91 = new ParserStubExplain(true, false);}
break;
case 7: /* cmdx ::= cmd */
- case 338: /* trigger_cmd ::= update_stmt */ yytestcase(yyruleno==338);
- case 339: /* trigger_cmd ::= insert_stmt */ yytestcase(yyruleno==339);
- case 340: /* trigger_cmd ::= delete_stmt */ yytestcase(yyruleno==340);
- case 341: /* trigger_cmd ::= select_stmt */ yytestcase(yyruleno==341);
+ case 339: /* trigger_cmd ::= update_stmt */ yytestcase(yyruleno==339);
+ case 340: /* trigger_cmd ::= insert_stmt */ yytestcase(yyruleno==340);
+ case 341: /* trigger_cmd ::= delete_stmt */ yytestcase(yyruleno==341);
+ case 342: /* trigger_cmd ::= select_stmt */ yytestcase(yyruleno==342);
{yygotominor.yy203 = yymsp[0].minor.yy203;}
break;
case 8: /* cmd ::= BEGIN trans_opt onconf */
@@ -2500,7 +2502,7 @@ static void yy_reduce(
break;
case 19: /* cmd ::= CREATE temp TABLE ID_DB|ID_TAB_NEW */
case 110: /* cmd ::= CREATE temp VIEW ID_VIEW_NEW */ yytestcase(yyruleno==110);
- case 322: /* cmd ::= CREATE temp TRIGGER ID_TRIG_NEW */ yytestcase(yyruleno==322);
+ case 323: /* cmd ::= CREATE temp TRIGGER ID_TRIG_NEW */ yytestcase(yyruleno==323);
{ yy_destructor(yypParser,157,&yymsp[-2].minor);
}
break;
@@ -2597,9 +2599,9 @@ static void yy_reduce(
break;
case 40: /* signed ::= plus_num */
case 41: /* signed ::= minus_num */ yytestcase(yyruleno==41);
- case 307: /* nmnum ::= plus_num */ yytestcase(yyruleno==307);
- case 312: /* plus_num ::= PLUS number */ yytestcase(yyruleno==312);
- case 313: /* plus_num ::= number */ yytestcase(yyruleno==313);
+ case 308: /* nmnum ::= plus_num */ yytestcase(yyruleno==308);
+ case 313: /* plus_num ::= PLUS number */ yytestcase(yyruleno==313);
+ case 314: /* plus_num ::= number */ yytestcase(yyruleno==314);
{yygotominor.yy69 = yymsp[0].minor.yy69;}
break;
case 42: /* carglist ::= carglist ccons */
@@ -2847,15 +2849,15 @@ static void yy_reduce(
}
break;
case 85: /* tconscomma ::= COMMA */
- case 269: /* not_opt ::= NOT */ yytestcase(yyruleno==269);
- case 285: /* uniqueflag ::= UNIQUE */ yytestcase(yyruleno==285);
- case 349: /* database_kw_opt ::= DATABASE */ yytestcase(yyruleno==349);
+ case 270: /* not_opt ::= NOT */ yytestcase(yyruleno==270);
+ case 286: /* uniqueflag ::= UNIQUE */ yytestcase(yyruleno==286);
+ case 350: /* database_kw_opt ::= DATABASE */ yytestcase(yyruleno==350);
{yygotominor.yy291 = new bool(true);}
break;
case 86: /* tconscomma ::= */
- case 268: /* not_opt ::= */ yytestcase(yyruleno==268);
- case 286: /* uniqueflag ::= */ yytestcase(yyruleno==286);
- case 350: /* database_kw_opt ::= */ yytestcase(yyruleno==350);
+ case 269: /* not_opt ::= */ yytestcase(yyruleno==269);
+ case 287: /* uniqueflag ::= */ yytestcase(yyruleno==287);
+ case 351: /* database_kw_opt ::= */ yytestcase(yyruleno==351);
{yygotominor.yy291 = new bool(false);}
break;
case 87: /* tcons ::= CONSTRAINT nm */
@@ -2959,15 +2961,15 @@ static void yy_reduce(
case 187: /* delete_stmt ::= DELETE FROM ID_DB|ID_TAB */ yytestcase(yyruleno==187);
case 195: /* update_stmt ::= UPDATE orconf nm DOT ID_TAB */ yytestcase(yyruleno==195);
case 196: /* update_stmt ::= UPDATE orconf ID_DB|ID_TAB */ yytestcase(yyruleno==196);
- case 263: /* exprx ::= nm DOT ID_TAB|ID_COL */ yytestcase(yyruleno==263);
- case 283: /* cmd ::= CREATE uniqueflag INDEX nm DOT ID_IDX_NEW */ yytestcase(yyruleno==283);
- case 284: /* cmd ::= CREATE uniqueflag INDEX ID_DB|ID_IDX_NEW */ yytestcase(yyruleno==284);
- case 294: /* cmd ::= DROP INDEX nm DOT ID_IDX */ yytestcase(yyruleno==294);
- case 295: /* cmd ::= DROP INDEX ID_DB|ID_IDX */ yytestcase(yyruleno==295);
- case 305: /* cmd ::= PRAGMA nm DOT ID_PRAGMA */ yytestcase(yyruleno==305);
- case 306: /* cmd ::= PRAGMA ID_DB|ID_PRAGMA */ yytestcase(yyruleno==306);
- case 344: /* cmd ::= DROP TRIGGER nm DOT ID_TRIG */ yytestcase(yyruleno==344);
- case 345: /* cmd ::= DROP TRIGGER ID_DB|ID_TRIG */ yytestcase(yyruleno==345);
+ case 264: /* exprx ::= nm DOT ID_TAB|ID_COL */ yytestcase(yyruleno==264);
+ case 284: /* cmd ::= CREATE uniqueflag INDEX nm DOT ID_IDX_NEW */ yytestcase(yyruleno==284);
+ case 285: /* cmd ::= CREATE uniqueflag INDEX ID_DB|ID_IDX_NEW */ yytestcase(yyruleno==285);
+ case 295: /* cmd ::= DROP INDEX nm DOT ID_IDX */ yytestcase(yyruleno==295);
+ case 296: /* cmd ::= DROP INDEX ID_DB|ID_IDX */ yytestcase(yyruleno==296);
+ case 306: /* cmd ::= PRAGMA nm DOT ID_PRAGMA */ yytestcase(yyruleno==306);
+ case 307: /* cmd ::= PRAGMA ID_DB|ID_PRAGMA */ yytestcase(yyruleno==307);
+ case 345: /* cmd ::= DROP TRIGGER nm DOT ID_TRIG */ yytestcase(yyruleno==345);
+ case 346: /* cmd ::= DROP TRIGGER ID_DB|ID_TRIG */ yytestcase(yyruleno==346);
{ yy_destructor(yypParser,156,&yymsp[-2].minor);
}
break;
@@ -3339,11 +3341,11 @@ static void yy_reduce(
{yygotominor.yy389 = new SqliteSortOrder(SqliteSortOrder::null);}
break;
case 173: /* groupby_opt ::= */
- case 278: /* exprlist ::= */ yytestcase(yyruleno==278);
+ case 279: /* exprlist ::= */ yytestcase(yyruleno==279);
{yygotominor.yy231 = new ParserExprList();}
break;
case 174: /* groupby_opt ::= GROUP BY nexprlist */
- case 277: /* exprlist ::= nexprlist */ yytestcase(yyruleno==277);
+ case 278: /* exprlist ::= nexprlist */ yytestcase(yyruleno==278);
{yygotominor.yy231 = yymsp[0].minor.yy231;}
break;
case 175: /* groupby_opt ::= GROUP BY */
@@ -3354,18 +3356,18 @@ static void yy_reduce(
break;
case 176: /* having_opt ::= */
case 188: /* where_opt ::= */ yytestcase(yyruleno==188);
- case 274: /* case_else ::= */ yytestcase(yyruleno==274);
- case 276: /* case_operand ::= */ yytestcase(yyruleno==276);
- case 334: /* when_clause ::= */ yytestcase(yyruleno==334);
- case 347: /* key_opt ::= */ yytestcase(yyruleno==347);
+ case 275: /* case_else ::= */ yytestcase(yyruleno==275);
+ case 277: /* case_operand ::= */ yytestcase(yyruleno==277);
+ case 335: /* when_clause ::= */ yytestcase(yyruleno==335);
+ case 348: /* key_opt ::= */ yytestcase(yyruleno==348);
{yygotominor.yy192 = nullptr;}
break;
case 177: /* having_opt ::= HAVING expr */
case 189: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==189);
- case 266: /* expr ::= exprx */ yytestcase(yyruleno==266);
- case 273: /* case_else ::= ELSE expr */ yytestcase(yyruleno==273);
- case 275: /* case_operand ::= exprx */ yytestcase(yyruleno==275);
- case 335: /* when_clause ::= WHEN expr */ yytestcase(yyruleno==335);
+ case 267: /* expr ::= exprx */ yytestcase(yyruleno==267);
+ case 274: /* case_else ::= ELSE expr */ yytestcase(yyruleno==274);
+ case 276: /* case_operand ::= exprx */ yytestcase(yyruleno==276);
+ case 336: /* when_clause ::= WHEN expr */ yytestcase(yyruleno==336);
{yygotominor.yy192 = yymsp[0].minor.yy192;}
break;
case 178: /* limit_opt ::= */
@@ -3917,60 +3919,68 @@ static void yy_reduce(
parserContext->minorErrorBeforeNextToken("Syntax error");
}
break;
- case 260: /* exprx ::= expr not_opt IN ID_DB */
+ case 260: /* exprx ::= LP expr */
+{
+ yygotominor.yy192 = new SqliteExpr();
+ yygotominor.yy192->initSubExpr(yymsp[0].minor.yy192);
+ objectForTokens = yygotominor.yy192;
+ parserContext->minorErrorBeforeNextToken("Syntax error");
+ }
+ break;
+ case 261: /* exprx ::= expr not_opt IN ID_DB */
{ yy_destructor(yypParser,177,&yymsp[-3].minor);
}
break;
- case 261: /* exprx ::= expr not_opt IN nm DOT ID_TAB */
- case 262: /* exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN */ yytestcase(yyruleno==262);
+ case 262: /* exprx ::= expr not_opt IN nm DOT ID_TAB */
+ case 263: /* exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN */ yytestcase(yyruleno==263);
{ yy_destructor(yypParser,177,&yymsp[-5].minor);
yy_destructor(yypParser,156,&yymsp[-2].minor);
}
break;
- case 264: /* exprx ::= nm DOT nm DOT ID_COL */
- case 265: /* exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP */ yytestcase(yyruleno==265);
+ case 265: /* exprx ::= nm DOT nm DOT ID_COL */
+ case 266: /* exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP */ yytestcase(yyruleno==266);
{ yy_destructor(yypParser,156,&yymsp[-4].minor);
yy_destructor(yypParser,156,&yymsp[-2].minor);
}
break;
- case 267: /* expr ::= */
+ case 268: /* expr ::= */
{
yygotominor.yy192 = new SqliteExpr();
objectForTokens = yygotominor.yy192;
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 270: /* likeop ::= LIKE|GLOB */
+ case 271: /* likeop ::= LIKE|GLOB */
{yygotominor.yy41 = new SqliteExpr::LikeOp(SqliteExpr::likeOp(yymsp[0].minor.yy0->value));}
break;
- case 271: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ case 272: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
{
yymsp[-4].minor.yy231->append(yymsp[-2].minor.yy192);
yymsp[-4].minor.yy231->append(yymsp[0].minor.yy192);
yygotominor.yy231 = yymsp[-4].minor.yy231;
}
break;
- case 272: /* case_exprlist ::= WHEN expr THEN expr */
+ case 273: /* case_exprlist ::= WHEN expr THEN expr */
{
yygotominor.yy231 = new ParserExprList();
yygotominor.yy231->append(yymsp[-2].minor.yy192);
yygotominor.yy231->append(yymsp[0].minor.yy192);
}
break;
- case 279: /* nexprlist ::= nexprlist COMMA expr */
+ case 280: /* nexprlist ::= nexprlist COMMA expr */
{
yymsp[-2].minor.yy231->append(yymsp[0].minor.yy192);
yygotominor.yy231 = yymsp[-2].minor.yy231;
DONT_INHERIT_TOKENS("nexprlist");
}
break;
- case 280: /* nexprlist ::= exprx */
+ case 281: /* nexprlist ::= exprx */
{
yygotominor.yy231 = new ParserExprList();
yygotominor.yy231->append(yymsp[0].minor.yy192);
}
break;
- case 281: /* cmd ::= CREATE uniqueflag INDEX nm ON nm dbnm LP idxlist RP onconf */
+ case 282: /* cmd ::= CREATE uniqueflag INDEX nm ON nm dbnm LP idxlist RP onconf */
{
yygotominor.yy203 = new SqliteCreateIndex(
*(yymsp[-9].minor.yy291),
@@ -3990,31 +4000,31 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 282: /* cmd ::= CREATE uniqueflag INDEX nm dbnm ON ID_TAB */
+ case 283: /* cmd ::= CREATE uniqueflag INDEX nm dbnm ON ID_TAB */
{ yy_destructor(yypParser,156,&yymsp[-3].minor);
}
break;
- case 287: /* idxlist_opt ::= */
+ case 288: /* idxlist_opt ::= */
{yygotominor.yy63 = new ParserIndexedColumnList();}
break;
- case 288: /* idxlist_opt ::= LP idxlist RP */
+ case 289: /* idxlist_opt ::= LP idxlist RP */
{yygotominor.yy63 = yymsp[-1].minor.yy63;}
break;
- case 289: /* idxlist ::= idxlist COMMA idxlist_single */
+ case 290: /* idxlist ::= idxlist COMMA idxlist_single */
{
yymsp[-2].minor.yy63->append(yymsp[0].minor.yy428);
yygotominor.yy63 = yymsp[-2].minor.yy63;
DONT_INHERIT_TOKENS("idxlist");
}
break;
- case 290: /* idxlist ::= idxlist_single */
+ case 291: /* idxlist ::= idxlist_single */
{
yygotominor.yy63 = new ParserIndexedColumnList();
yygotominor.yy63->append(yymsp[0].minor.yy428);
}
break;
- case 291: /* idxlist_single ::= nm sortorder */
- case 292: /* idxlist_single ::= ID_COL */ yytestcase(yyruleno==292);
+ case 292: /* idxlist_single ::= nm sortorder */
+ case 293: /* idxlist_single ::= ID_COL */ yytestcase(yyruleno==293);
{
SqliteIndexedColumn* obj =
new SqliteIndexedColumn(
@@ -4028,14 +4038,14 @@ static void yy_reduce(
objectForTokens = yygotominor.yy428;
}
break;
- case 293: /* cmd ::= DROP INDEX fullname */
+ case 294: /* cmd ::= DROP INDEX fullname */
{
yygotominor.yy203 = new SqliteDropIndex(false, yymsp[0].minor.yy120->name1, yymsp[0].minor.yy120->name2);
delete yymsp[0].minor.yy120;
objectForTokens = yygotominor.yy203;
}
break;
- case 296: /* cmd ::= COPY orconf nm dbnm FROM nm USING DELIMITERS STRING */
+ case 297: /* cmd ::= COPY orconf nm dbnm FROM nm USING DELIMITERS STRING */
{
yygotominor.yy203 = new SqliteCopy(
*(yymsp[-7].minor.yy418),
@@ -4051,7 +4061,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 297: /* cmd ::= COPY orconf nm dbnm FROM nm */
+ case 298: /* cmd ::= COPY orconf nm dbnm FROM nm */
{
yygotominor.yy203 = new SqliteCopy(
*(yymsp[-4].minor.yy418),
@@ -4066,28 +4076,28 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 298: /* cmd ::= VACUUM */
+ case 299: /* cmd ::= VACUUM */
{
yygotominor.yy203 = new SqliteVacuum();
objectForTokens = yygotominor.yy203;
}
break;
- case 299: /* cmd ::= VACUUM nm */
+ case 300: /* cmd ::= VACUUM nm */
{
yygotominor.yy203 = new SqliteVacuum(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
objectForTokens = yygotominor.yy203;
}
break;
- case 300: /* cmd ::= PRAGMA ids */
+ case 301: /* cmd ::= PRAGMA ids */
{
yygotominor.yy203 = new SqlitePragma(*(yymsp[0].minor.yy319), QString::null);
delete yymsp[0].minor.yy319;
objectForTokens = yygotominor.yy203;
}
break;
- case 301: /* cmd ::= PRAGMA nm EQ nmnum */
- case 303: /* cmd ::= PRAGMA nm EQ minus_num */ yytestcase(yyruleno==303);
+ case 302: /* cmd ::= PRAGMA nm EQ nmnum */
+ case 304: /* cmd ::= PRAGMA nm EQ minus_num */ yytestcase(yyruleno==304);
{
yygotominor.yy203 = new SqlitePragma(*(yymsp[-2].minor.yy319), QString::null, *(yymsp[0].minor.yy69), true);
delete yymsp[-2].minor.yy319;
@@ -4095,8 +4105,8 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 302: /* cmd ::= PRAGMA nm LP nmnum RP */
- case 304: /* cmd ::= PRAGMA nm LP minus_num RP */ yytestcase(yyruleno==304);
+ case 303: /* cmd ::= PRAGMA nm LP nmnum RP */
+ case 305: /* cmd ::= PRAGMA nm LP minus_num RP */ yytestcase(yyruleno==305);
{
yygotominor.yy203 = new SqlitePragma(*(yymsp[-3].minor.yy319), QString::null, *(yymsp[-1].minor.yy69), false);
delete yymsp[-3].minor.yy319;
@@ -4104,18 +4114,18 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 308: /* nmnum ::= nm */
+ case 309: /* nmnum ::= nm */
{
yygotominor.yy69 = new QVariant(*(yymsp[0].minor.yy319));
delete yymsp[0].minor.yy319;
}
break;
- case 309: /* nmnum ::= ON */
- case 310: /* nmnum ::= DELETE */ yytestcase(yyruleno==310);
- case 311: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==311);
+ case 310: /* nmnum ::= ON */
+ case 311: /* nmnum ::= DELETE */ yytestcase(yyruleno==311);
+ case 312: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==312);
{yygotominor.yy69 = new QVariant(yymsp[0].minor.yy0->value);}
break;
- case 314: /* minus_num ::= MINUS number */
+ case 315: /* minus_num ::= MINUS number */
{
if (yymsp[0].minor.yy69->type() == QVariant::Double)
*(yymsp[0].minor.yy69) = -(yymsp[0].minor.yy69->toDouble());
@@ -4127,13 +4137,13 @@ static void yy_reduce(
yygotominor.yy69 = yymsp[0].minor.yy69;
}
break;
- case 315: /* number ::= INTEGER */
+ case 316: /* number ::= INTEGER */
{yygotominor.yy69 = new QVariant(QVariant(yymsp[0].minor.yy0->value).toLongLong());}
break;
- case 316: /* number ::= FLOAT */
+ case 317: /* number ::= FLOAT */
{yygotominor.yy69 = new QVariant(QVariant(yymsp[0].minor.yy0->value).toDouble());}
break;
- case 317: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list END */
+ case 318: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list END */
{
yygotominor.yy203 = new SqliteCreateTrigger(
*(yymsp[-12].minor.yy226),
@@ -4158,7 +4168,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 318: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause */
+ case 319: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause */
{
QList<SqliteQuery *> CL;
@@ -4185,7 +4195,7 @@ static void yy_reduce(
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 319: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list */
+ case 320: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm dbnm foreach_clause when_clause BEGIN trigger_cmd_list */
{
yygotominor.yy203 = new SqliteCreateTrigger(
*(yymsp[-11].minor.yy226),
@@ -4211,14 +4221,14 @@ static void yy_reduce(
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 320: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON ID_TAB|ID_DB */
+ case 321: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON ID_TAB|ID_DB */
{ yy_destructor(yypParser,157,&yymsp[-6].minor);
yy_destructor(yypParser,156,&yymsp[-4].minor);
yy_destructor(yypParser,232,&yymsp[-3].minor);
yy_destructor(yypParser,233,&yymsp[-2].minor);
}
break;
- case 321: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm DOT ID_TAB */
+ case 322: /* cmd ::= CREATE temp TRIGGER nm trigger_time trigger_event ON nm DOT ID_TAB */
{ yy_destructor(yypParser,157,&yymsp[-8].minor);
yy_destructor(yypParser,156,&yymsp[-6].minor);
yy_destructor(yypParser,232,&yymsp[-5].minor);
@@ -4226,76 +4236,76 @@ static void yy_reduce(
yy_destructor(yypParser,156,&yymsp[-2].minor);
}
break;
- case 323: /* trigger_time ::= BEFORE */
+ case 324: /* trigger_time ::= BEFORE */
{yygotominor.yy372 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::BEFORE);}
break;
- case 324: /* trigger_time ::= AFTER */
+ case 325: /* trigger_time ::= AFTER */
{yygotominor.yy372 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::AFTER);}
break;
- case 325: /* trigger_time ::= INSTEAD OF */
+ case 326: /* trigger_time ::= INSTEAD OF */
{yygotominor.yy372 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::INSTEAD_OF);}
break;
- case 326: /* trigger_time ::= */
+ case 327: /* trigger_time ::= */
{yygotominor.yy372 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::null);}
break;
- case 327: /* trigger_event ::= DELETE */
+ case 328: /* trigger_event ::= DELETE */
{
yygotominor.yy151 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::DELETE);
objectForTokens = yygotominor.yy151;
}
break;
- case 328: /* trigger_event ::= INSERT */
+ case 329: /* trigger_event ::= INSERT */
{
yygotominor.yy151 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::INSERT);
objectForTokens = yygotominor.yy151;
}
break;
- case 329: /* trigger_event ::= UPDATE */
+ case 330: /* trigger_event ::= UPDATE */
{
yygotominor.yy151 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::UPDATE);
objectForTokens = yygotominor.yy151;
}
break;
- case 330: /* trigger_event ::= UPDATE OF inscollist */
+ case 331: /* trigger_event ::= UPDATE OF inscollist */
{
yygotominor.yy151 = new SqliteCreateTrigger::Event(*(yymsp[0].minor.yy207));
delete yymsp[0].minor.yy207;
objectForTokens = yygotominor.yy151;
}
break;
- case 331: /* foreach_clause ::= */
+ case 332: /* foreach_clause ::= */
{yygotominor.yy83 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::null);}
break;
- case 332: /* foreach_clause ::= FOR EACH ROW */
+ case 333: /* foreach_clause ::= FOR EACH ROW */
{yygotominor.yy83 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::FOR_EACH_ROW);}
break;
- case 333: /* foreach_clause ::= FOR EACH STATEMENT */
+ case 334: /* foreach_clause ::= FOR EACH STATEMENT */
{yygotominor.yy83 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::FOR_EACH_STATEMENT);}
break;
- case 336: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ case 337: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
{
yymsp[-2].minor.yy270->append(yymsp[-1].minor.yy203);
yygotominor.yy270 = yymsp[-2].minor.yy270;
DONT_INHERIT_TOKENS("trigger_cmd_list");
}
break;
- case 337: /* trigger_cmd_list ::= trigger_cmd SEMI */
+ case 338: /* trigger_cmd_list ::= trigger_cmd SEMI */
{
yygotominor.yy270 = new ParserQueryList();
yygotominor.yy270->append(yymsp[-1].minor.yy203);
}
break;
- case 342: /* raisetype ::= ROLLBACK|ABORT|FAIL */
+ case 343: /* raisetype ::= ROLLBACK|ABORT|FAIL */
{yygotominor.yy0 = yymsp[0].minor.yy0;}
break;
- case 343: /* cmd ::= DROP TRIGGER fullname */
+ case 344: /* cmd ::= DROP TRIGGER fullname */
{
yygotominor.yy203 = new SqliteDropTrigger(false, yymsp[0].minor.yy120->name1, yymsp[0].minor.yy120->name2);
delete yymsp[0].minor.yy120;
objectForTokens = yygotominor.yy203;
}
break;
- case 346: /* cmd ::= ATTACH database_kw_opt ids AS ids key_opt */
+ case 347: /* cmd ::= ATTACH database_kw_opt ids AS ids key_opt */
{
SqliteExpr* e1 = new SqliteExpr();
SqliteExpr* e2 = new SqliteExpr();
@@ -4308,7 +4318,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy203;
}
break;
- case 348: /* key_opt ::= USING ids */
+ case 349: /* key_opt ::= USING ids */
{
SqliteExpr* e = new SqliteExpr();
e->initLiteral(*(yymsp[0].minor.yy319));
@@ -4316,7 +4326,7 @@ static void yy_reduce(
yygotominor.yy192 = e;
}
break;
- case 351: /* cmd ::= DETACH database_kw_opt nm */
+ case 352: /* cmd ::= DETACH database_kw_opt nm */
{
SqliteExpr* e = new SqliteExpr();
e->initLiteral(*(yymsp[0].minor.yy319));
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y
index 04da6cb..2fd9c0d 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite2_parse.y
@@ -1586,6 +1586,12 @@ exprx(X) ::= expr(E) not_opt(N) IN LP
objectForTokens = X;
parserContext->minorErrorBeforeNextToken("Syntax error");
}
+exprx(X) ::= LP expr(E). {
+ X = new SqliteExpr();
+ X->initSubExpr(E);
+ objectForTokens = X;
+ parserContext->minorErrorBeforeNextToken("Syntax error");
+ }
exprx ::= expr not_opt IN ID_DB. [IN] {}
exprx ::= expr not_opt IN nm DOT
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
index 8786832..7e4f3c0 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.cpp
@@ -170,7 +170,7 @@ typedef union {
#define sqlite3_parseARG_FETCH ParserContext* parserContext = yypParser->parserContext
#define sqlite3_parseARG_STORE yypParser->parserContext = parserContext
#define YYNSTATE 724
-#define YYNRULE 424
+#define YYNRULE 425
#define YYFALLBACK 1
#define YY_NO_ACTION (YYNSTATE+YYNRULE+2)
#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1)
@@ -246,22 +246,22 @@ static const YYMINORTYPE yyzerominor = { 0 };
static const YYACTIONTYPE yy_action[] = {
/* 0 */ 431, 48, 48, 47, 47, 47, 46, 216, 716, 339,
/* 10 */ 643, 425, 51, 51, 51, 51, 44, 49, 49, 49,
- /* 20 */ 49, 48, 48, 47, 47, 47, 46, 216, 721, 1026,
- /* 30 */ 1026, 643, 131, 580, 51, 51, 51, 51, 411, 49,
+ /* 20 */ 49, 48, 48, 47, 47, 47, 46, 216, 721, 1027,
+ /* 30 */ 1027, 643, 131, 580, 51, 51, 51, 51, 411, 49,
/* 40 */ 49, 49, 49, 48, 48, 47, 47, 47, 46, 216,
- /* 50 */ 579, 81, 58, 643, 157, 685, 301, 282, 1026, 1026,
- /* 60 */ 41, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
- /* 70 */ 1026, 1026, 563, 1026, 1026, 1026, 1026, 38, 39, 1026,
- /* 80 */ 1026, 1026, 1026, 1026, 40, 431, 528, 385, 716, 595,
+ /* 50 */ 579, 81, 58, 643, 157, 685, 301, 282, 1027, 1027,
+ /* 60 */ 41, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
+ /* 70 */ 1027, 1027, 563, 1027, 1027, 1027, 1027, 38, 39, 1027,
+ /* 80 */ 1027, 1027, 1027, 1027, 40, 431, 528, 385, 716, 595,
/* 90 */ 594, 280, 4, 377, 716, 630, 425, 642, 608, 422,
/* 100 */ 12, 134, 687, 429, 562, 609, 483, 690, 331, 279,
/* 110 */ 714, 713, 564, 565, 642, 689, 688, 687, 235, 506,
/* 120 */ 60, 320, 610, 411, 47, 47, 47, 46, 216, 122,
- /* 130 */ 243, 213, 247, 59, 1142, 1142, 486, 609, 607, 603,
+ /* 130 */ 243, 213, 247, 59, 1143, 1143, 486, 609, 607, 603,
/* 140 */ 685, 306, 485, 584, 716, 41, 507, 509, 642, 508,
/* 150 */ 676, 9, 642, 144, 95, 281, 379, 276, 378, 132,
/* 160 */ 297, 716, 38, 39, 601, 200, 199, 7, 355, 40,
- /* 170 */ 884, 307, 1134, 274, 249, 716, 17, 4, 884, 1134,
+ /* 170 */ 884, 307, 1135, 274, 249, 716, 17, 4, 884, 1135,
/* 180 */ 56, 717, 642, 431, 422, 884, 329, 687, 429, 716,
/* 190 */ 687, 643, 690, 687, 425, 690, 714, 713, 690, 642,
/* 200 */ 689, 688, 687, 689, 688, 687, 689, 688, 687, 98,
@@ -269,16 +269,16 @@ static const YYACTIONTYPE yy_action[] = {
/* 220 */ 716, 411, 239, 884, 303, 582, 512, 581, 884, 884,
/* 230 */ 884, 884, 884, 642, 643, 676, 9, 642, 685, 217,
/* 240 */ 245, 673, 102, 41, 287, 300, 714, 713, 67, 302,
- /* 250 */ 148, 307, 1133, 151, 306, 484, 81, 715, 97, 1133,
+ /* 250 */ 148, 307, 1134, 151, 306, 484, 81, 715, 97, 1134,
/* 260 */ 38, 39, 551, 714, 713, 771, 130, 40, 946, 376,
/* 270 */ 373, 372, 447, 46, 216, 4, 946, 714, 713, 334,
/* 280 */ 642, 682, 422, 946, 606, 687, 429, 371, 448, 447,
/* 290 */ 690, 714, 713, 304, 265, 146, 267, 642, 689, 688,
/* 300 */ 687, 287, 68, 677, 691, 255, 362, 259, 359, 692,
- /* 310 */ 1027, 1027, 682, 946, 715, 946, 946, 447, 698, 234,
+ /* 310 */ 1028, 1028, 682, 946, 715, 946, 946, 447, 698, 234,
/* 320 */ 386, 715, 714, 713, 773, 651, 946, 946, 946, 946,
/* 330 */ 110, 642, 317, 676, 9, 642, 222, 677, 299, 52,
- /* 340 */ 53, 426, 289, 1027, 1027, 675, 675, 50, 50, 51,
+ /* 340 */ 53, 426, 289, 1028, 1028, 675, 675, 50, 50, 51,
/* 350 */ 51, 51, 51, 716, 49, 49, 49, 49, 48, 48,
/* 360 */ 47, 47, 47, 46, 216, 431, 428, 340, 716, 335,
/* 370 */ 671, 670, 287, 283, 716, 138, 425, 209, 219, 430,
@@ -293,27 +293,27 @@ static const YYACTIONTYPE yy_action[] = {
/* 460 */ 92, 143, 642, 358, 422, 931, 674, 687, 429, 14,
/* 470 */ 714, 713, 690, 131, 456, 551, 714, 713, 953, 642,
/* 480 */ 689, 688, 687, 668, 667, 210, 593, 458, 384, 457,
- /* 490 */ 576, 88, 1027, 1027, 13, 931, 672, 931, 931, 54,
+ /* 490 */ 576, 88, 1028, 1028, 13, 931, 672, 931, 931, 54,
/* 500 */ 575, 678, 42, 368, 37, 401, 35, 381, 931, 1,
/* 510 */ 931, 931, 641, 642, 634, 676, 9, 642, 661, 714,
- /* 520 */ 713, 52, 53, 426, 289, 1027, 1027, 675, 675, 50,
+ /* 520 */ 713, 52, 53, 426, 289, 1028, 1028, 675, 675, 50,
/* 530 */ 50, 51, 51, 51, 51, 660, 49, 49, 49, 49,
/* 540 */ 48, 48, 47, 47, 47, 46, 216, 657, 648, 714,
/* 550 */ 713, 496, 542, 569, 714, 713, 714, 713, 656, 691,
/* 560 */ 543, 614, 320, 30, 692, 27, 716, 585, 274, 682,
- /* 570 */ 160, 1027, 1027, 426, 289, 693, 613, 675, 675, 50,
+ /* 570 */ 160, 1028, 1028, 426, 289, 693, 613, 675, 675, 50,
/* 580 */ 50, 51, 51, 51, 51, 398, 49, 49, 49, 49,
- /* 590 */ 48, 48, 47, 47, 47, 46, 216, 1025, 1025, 81,
- /* 600 */ 52, 53, 426, 289, 1027, 1027, 675, 675, 50, 50,
+ /* 590 */ 48, 48, 47, 47, 47, 46, 216, 1026, 1026, 81,
+ /* 600 */ 52, 53, 426, 289, 1028, 1028, 675, 675, 50, 50,
/* 610 */ 51, 51, 51, 51, 496, 49, 49, 49, 49, 48,
- /* 620 */ 48, 47, 47, 47, 46, 216, 1025, 1025, 1025, 1025,
- /* 630 */ 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
- /* 640 */ 716, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025, 1025,
- /* 650 */ 1025, 1025, 1027, 1027, 357, 49, 49, 49, 49, 48,
+ /* 620 */ 48, 47, 47, 47, 46, 216, 1026, 1026, 1026, 1026,
+ /* 630 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
+ /* 640 */ 716, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
+ /* 650 */ 1026, 1026, 1028, 1028, 357, 49, 49, 49, 49, 48,
/* 660 */ 48, 47, 47, 47, 46, 216, 288, 552, 714, 713,
/* 670 */ 495, 682, 298, 662, 346, 153, 538, 69, 694, 715,
- /* 680 */ 715, 52, 53, 426, 289, 1027, 1027, 675, 675, 50,
- /* 690 */ 50, 51, 51, 51, 51, 1094, 49, 49, 49, 49,
+ /* 680 */ 715, 52, 53, 426, 289, 1028, 1028, 675, 675, 50,
+ /* 690 */ 50, 51, 51, 51, 51, 1095, 49, 49, 49, 49,
/* 700 */ 48, 48, 47, 47, 47, 46, 216, 52, 53, 426,
/* 710 */ 289, 418, 511, 675, 675, 50, 50, 51, 51, 51,
/* 720 */ 51, 159, 49, 49, 49, 49, 48, 48, 47, 47,
@@ -321,12 +321,12 @@ static const YYACTIONTYPE yy_action[] = {
/* 740 */ 215, 650, 714, 713, 81, 52, 53, 426, 289, 954,
/* 750 */ 414, 675, 675, 50, 50, 51, 51, 51, 51, 397,
/* 760 */ 49, 49, 49, 49, 48, 48, 47, 47, 47, 46,
- /* 770 */ 216, 158, 1094, 21, 716, 627, 459, 716, 1079, 716,
- /* 780 */ 647, 1045, 140, 89, 716, 1149, 154, 435, 2, 715,
+ /* 770 */ 216, 158, 1095, 21, 716, 627, 459, 716, 1080, 716,
+ /* 780 */ 647, 1046, 140, 89, 716, 1150, 154, 435, 2, 715,
/* 790 */ 424, 671, 670, 396, 460, 461, 954, 52, 53, 426,
/* 800 */ 289, 573, 716, 675, 675, 50, 50, 51, 51, 51,
/* 810 */ 51, 321, 49, 49, 49, 49, 48, 48, 47, 47,
- /* 820 */ 47, 46, 216, 431, 1108, 81, 206, 205, 204, 52,
+ /* 820 */ 47, 46, 216, 431, 1109, 81, 206, 205, 204, 52,
/* 830 */ 53, 426, 289, 716, 425, 675, 675, 50, 50, 51,
/* 840 */ 51, 51, 51, 344, 49, 49, 49, 49, 48, 48,
/* 850 */ 47, 47, 47, 46, 216, 597, 715, 666, 600, 462,
@@ -334,17 +334,17 @@ static const YYACTIONTYPE yy_action[] = {
/* 870 */ 667, 609, 724, 434, 81, 656, 714, 713, 685, 714,
/* 880 */ 713, 714, 713, 41, 528, 272, 714, 713, 610, 349,
/* 890 */ 528, 450, 89, 677, 12, 633, 633, 338, 636, 609,
- /* 900 */ 38, 39, 649, 609, 714, 713, 716, 40, 1142, 1142,
+ /* 900 */ 38, 39, 649, 609, 714, 713, 716, 40, 1143, 1143,
/* 910 */ 716, 524, 682, 581, 716, 4, 610, 468, 60, 450,
/* 920 */ 642, 208, 422, 506, 60, 687, 429, 677, 32, 109,
/* 930 */ 690, 609, 500, 501, 352, 714, 713, 642, 689, 688,
/* 940 */ 687, 428, 900, 900, 467, 466, 552, 465, 421, 383,
- /* 950 */ 507, 509, 142, 508, 430, 440, 69, 1142, 1142, 715,
+ /* 950 */ 507, 509, 142, 508, 430, 440, 69, 1143, 1143, 715,
/* 960 */ 444, 722, 686, 182, 646, 714, 713, 645, 231, 230,
/* 970 */ 437, 642, 356, 676, 9, 642, 417, 444, 52, 53,
/* 980 */ 426, 289, 91, 91, 675, 675, 50, 50, 51, 51,
/* 990 */ 51, 51, 644, 49, 49, 49, 49, 48, 48, 47,
- /* 1000 */ 47, 47, 46, 216, 1034, 444, 668, 667, 714, 713,
+ /* 1000 */ 47, 47, 46, 216, 1035, 444, 668, 667, 714, 713,
/* 1010 */ 91, 453, 714, 713, 682, 641, 714, 713, 324, 202,
/* 1020 */ 52, 53, 426, 289, 446, 680, 675, 675, 50, 50,
/* 1030 */ 51, 51, 51, 51, 639, 49, 49, 49, 49, 48,
@@ -367,10 +367,10 @@ static const YYACTIONTYPE yy_action[] = {
/* 1200 */ 47, 47, 47, 46, 216, 532, 8, 517, 696, 87,
/* 1210 */ 137, 52, 53, 426, 289, 22, 557, 675, 675, 50,
/* 1220 */ 50, 51, 51, 51, 51, 135, 49, 49, 49, 49,
- /* 1230 */ 48, 48, 47, 47, 47, 46, 216, 81, 1109, 91,
+ /* 1230 */ 48, 48, 47, 47, 47, 46, 216, 81, 1110, 91,
/* 1240 */ 716, 91, 52, 53, 426, 289, 615, 722, 675, 675,
/* 1250 */ 50, 50, 51, 51, 51, 51, 620, 49, 49, 49,
- /* 1260 */ 49, 48, 48, 47, 47, 47, 46, 216, 604, 1107,
+ /* 1260 */ 49, 48, 48, 47, 47, 47, 46, 216, 604, 1108,
/* 1270 */ 99, 504, 390, 491, 52, 53, 426, 289, 714, 713,
/* 1280 */ 675, 675, 50, 50, 51, 51, 51, 51, 682, 49,
/* 1290 */ 49, 49, 49, 48, 48, 47, 47, 47, 46, 216,
@@ -395,7 +395,7 @@ static const YYACTIONTYPE yy_action[] = {
/* 1480 */ 530, 714, 713, 651, 715, 714, 713, 38, 39, 64,
/* 1490 */ 18, 399, 370, 431, 40, 129, 716, 366, 326, 534,
/* 1500 */ 534, 63, 4, 270, 425, 714, 713, 642, 475, 422,
- /* 1510 */ 316, 530, 687, 429, 716, 714, 713, 690, 279, 716,
+ /* 1510 */ 316, 530, 714, 429, 716, 714, 713, 690, 279, 716,
/* 1520 */ 533, 716, 156, 624, 642, 689, 688, 687, 525, 716,
/* 1530 */ 125, 411, 519, 714, 713, 514, 715, 714, 713, 3,
/* 1540 */ 714, 713, 714, 713, 79, 525, 682, 85, 685, 519,
@@ -408,9 +408,9 @@ static const YYACTIONTYPE yy_action[] = {
/* 1610 */ 687, 438, 428, 411, 497, 62, 714, 713, 430, 119,
/* 1620 */ 254, 714, 713, 714, 713, 430, 686, 181, 438, 704,
/* 1630 */ 685, 714, 713, 686, 163, 41, 251, 629, 311, 161,
- /* 1640 */ 138, 642, 715, 676, 9, 642, 455, 1035, 682, 531,
+ /* 1640 */ 138, 642, 715, 676, 9, 642, 455, 1036, 682, 531,
/* 1650 */ 701, 702, 38, 39, 152, 641, 498, 469, 431, 40,
- /* 1660 */ 499, 478, 699, 428, 715, 714, 713, 4, 1037, 425,
+ /* 1660 */ 499, 478, 699, 428, 715, 714, 713, 4, 1038, 425,
/* 1670 */ 714, 713, 642, 416, 422, 715, 430, 687, 429, 641,
/* 1680 */ 428, 350, 690, 619, 686, 172, 641, 494, 454, 642,
/* 1690 */ 689, 688, 687, 430, 111, 428, 411, 286, 337, 714,
@@ -794,59 +794,59 @@ static const short yy_reduce_ofst[] = {
/* 310 */ 1573, 1506, 1462, 1462, 1462, 1540,
};
static const YYACTIONTYPE yy_default[] = {
- /* 0 */ 729, 1037, 1142, 1142, 1026, 1026, 1026, 1142, 1026, 1026,
- /* 10 */ 1026, 1026, 900, 1148, 1148, 1148, 1026, 1026, 1026, 1026,
- /* 20 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
- /* 30 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
- /* 40 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
- /* 50 */ 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1015, 1148, 894,
- /* 60 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 774,
- /* 70 */ 890, 900, 1148, 1148, 1148, 1148, 1148, 962, 949, 940,
- /* 80 */ 1148, 1148, 1148, 972, 972, 955, 842, 972, 1148, 1148,
- /* 90 */ 1148, 1148, 928, 928, 1027, 1148, 766, 1112, 1117, 1013,
- /* 100 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 901, 1148,
- /* 110 */ 1013, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
- /* 120 */ 1148, 963, 956, 950, 941, 1148, 1148, 1148, 1148, 1148,
- /* 130 */ 1148, 1148, 1148, 1148, 1148, 890, 890, 1148, 1148, 890,
- /* 140 */ 1148, 1148, 1148, 1014, 1148, 1148, 763, 1148, 1148, 1148,
- /* 150 */ 735, 1058, 1148, 1148, 729, 1142, 1142, 1142, 1142, 1142,
- /* 160 */ 1142, 1135, 880, 935, 906, 945, 933, 937, 1038, 1031,
- /* 170 */ 1032, 1030, 936, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
- /* 180 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 988, 1000,
- /* 190 */ 987, 995, 1004, 999, 996, 990, 989, 991, 1148, 1148,
- /* 200 */ 1148, 992, 1148, 1148, 1148, 1148, 1148, 893, 1148, 1148,
- /* 210 */ 864, 1148, 1086, 1148, 1148, 776, 1148, 878, 738, 944,
- /* 220 */ 918, 918, 809, 833, 798, 928, 918, 908, 1033, 928,
- /* 230 */ 1148, 1148, 993, 891, 878, 1126, 909, 909, 909, 1111,
- /* 240 */ 1111, 909, 909, 855, 909, 855, 909, 855, 909, 855,
+ /* 0 */ 729, 1038, 1143, 1143, 1027, 1027, 1027, 1143, 1027, 1027,
+ /* 10 */ 1027, 1027, 900, 1149, 1149, 1149, 1027, 1027, 1027, 1027,
+ /* 20 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
+ /* 30 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
+ /* 40 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027,
+ /* 50 */ 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1015, 1149, 894,
+ /* 60 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 774,
+ /* 70 */ 890, 900, 1149, 1149, 1149, 1149, 1149, 962, 949, 940,
+ /* 80 */ 1149, 1149, 1149, 972, 972, 955, 842, 972, 1149, 1149,
+ /* 90 */ 1149, 1149, 928, 928, 1028, 1149, 766, 1113, 1118, 1013,
+ /* 100 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 901, 1149,
+ /* 110 */ 1013, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+ /* 120 */ 1149, 963, 956, 950, 941, 1149, 1149, 1149, 1149, 1149,
+ /* 130 */ 1149, 1149, 1149, 1149, 1149, 890, 890, 1149, 1149, 890,
+ /* 140 */ 1149, 1149, 1149, 1014, 1149, 1149, 763, 1149, 1149, 1149,
+ /* 150 */ 735, 1059, 1149, 1149, 729, 1143, 1143, 1143, 1143, 1143,
+ /* 160 */ 1143, 1136, 880, 935, 906, 945, 933, 937, 1039, 1032,
+ /* 170 */ 1033, 1031, 936, 1028, 1028, 1028, 1028, 1028, 1028, 1028,
+ /* 180 */ 1028, 1028, 1018, 1028, 1028, 1028, 1028, 1028, 988, 1000,
+ /* 190 */ 987, 995, 1004, 999, 996, 990, 989, 991, 1149, 1149,
+ /* 200 */ 1149, 992, 1149, 1149, 1149, 1149, 1149, 893, 1149, 1149,
+ /* 210 */ 864, 1149, 1087, 1149, 1149, 776, 1149, 878, 738, 944,
+ /* 220 */ 918, 918, 809, 833, 798, 928, 918, 908, 1034, 928,
+ /* 230 */ 1149, 1149, 993, 891, 878, 1127, 909, 909, 909, 1112,
+ /* 240 */ 1112, 909, 909, 855, 909, 855, 909, 855, 909, 855,
/* 250 */ 909, 760, 944, 909, 760, 846, 968, 909, 909, 846,
- /* 260 */ 944, 909, 1093, 1091, 909, 760, 909, 760, 909, 1046,
- /* 270 */ 844, 844, 844, 844, 825, 1046, 844, 809, 844, 825,
- /* 280 */ 844, 844, 1148, 909, 909, 1148, 1046, 1052, 1046, 1027,
- /* 290 */ 994, 934, 922, 932, 929, 944, 1148, 757, 828, 760,
- /* 300 */ 746, 746, 734, 734, 734, 734, 1139, 1139, 1135, 811,
- /* 310 */ 811, 896, 1003, 1002, 1001, 785, 1039, 1148, 1148, 1148,
- /* 320 */ 1148, 1148, 1148, 1060, 1148, 1148, 1148, 1148, 1148, 1148,
- /* 330 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 730, 1148,
- /* 340 */ 1148, 1148, 1148, 1148, 1129, 1148, 1148, 1148, 1148, 1148,
- /* 350 */ 1148, 1090, 1089, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
- /* 360 */ 1148, 1148, 1148, 1078, 1148, 1148, 1148, 1148, 1148, 1148,
- /* 370 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
- /* 380 */ 1148, 1148, 1148, 1148, 867, 869, 1148, 1148, 1148, 868,
- /* 390 */ 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 930,
- /* 400 */ 1148, 923, 1148, 1036, 1148, 1017, 1025, 1148, 1148, 1148,
- /* 410 */ 1148, 1148, 1016, 1148, 1148, 1148, 1144, 1148, 1148, 1148,
- /* 420 */ 1143, 1148, 1148, 1148, 1148, 1148, 1028, 980, 1148, 979,
- /* 430 */ 978, 769, 1148, 744, 1148, 726, 731, 1128, 1125, 1127,
- /* 440 */ 1122, 1123, 1121, 1124, 1120, 1118, 1119, 1116, 1114, 1113,
- /* 450 */ 1115, 1110, 1106, 1066, 1064, 1062, 1071, 1070, 1069, 1068,
- /* 460 */ 1067, 1063, 1061, 1065, 1059, 959, 947, 938, 862, 1105,
- /* 470 */ 1103, 1104, 1057, 1055, 1056, 861, 860, 859, 854, 853,
- /* 480 */ 852, 851, 1132, 1141, 1140, 1138, 1137, 1136, 1130, 1131,
- /* 490 */ 1044, 1043, 1041, 1040, 1042, 762, 1082, 1085, 1084, 1083,
- /* 500 */ 1088, 1087, 1080, 1092, 1097, 1096, 1101, 1100, 1099, 1098,
- /* 510 */ 1095, 1077, 967, 966, 964, 969, 961, 960, 965, 952,
- /* 520 */ 958, 957, 948, 951, 847, 943, 939, 942, 863, 1081,
+ /* 260 */ 944, 909, 1094, 1092, 909, 760, 909, 760, 909, 1047,
+ /* 270 */ 844, 844, 844, 844, 825, 1047, 844, 809, 844, 825,
+ /* 280 */ 844, 844, 1149, 909, 909, 1149, 1047, 1053, 1047, 1028,
+ /* 290 */ 994, 934, 922, 932, 929, 944, 1149, 757, 828, 760,
+ /* 300 */ 746, 746, 734, 734, 734, 734, 1140, 1140, 1136, 811,
+ /* 310 */ 811, 896, 1003, 1002, 1001, 785, 1040, 1149, 1149, 1149,
+ /* 320 */ 1149, 1149, 1149, 1061, 1149, 1149, 1149, 1149, 1149, 1149,
+ /* 330 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 730, 1149,
+ /* 340 */ 1149, 1149, 1149, 1149, 1130, 1149, 1149, 1149, 1149, 1149,
+ /* 350 */ 1149, 1091, 1090, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+ /* 360 */ 1149, 1149, 1149, 1079, 1149, 1149, 1149, 1149, 1149, 1149,
+ /* 370 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+ /* 380 */ 1149, 1149, 1149, 1149, 867, 869, 1149, 1149, 1149, 868,
+ /* 390 */ 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 930,
+ /* 400 */ 1149, 923, 1149, 1037, 1149, 1017, 1026, 1149, 1149, 1149,
+ /* 410 */ 1149, 1149, 1016, 1149, 1149, 1149, 1145, 1149, 1149, 1149,
+ /* 420 */ 1144, 1149, 1149, 1149, 1149, 1149, 1029, 980, 1149, 979,
+ /* 430 */ 978, 769, 1149, 744, 1149, 726, 731, 1129, 1126, 1128,
+ /* 440 */ 1123, 1124, 1122, 1125, 1121, 1119, 1120, 1117, 1115, 1114,
+ /* 450 */ 1116, 1111, 1107, 1067, 1065, 1063, 1072, 1071, 1070, 1069,
+ /* 460 */ 1068, 1064, 1062, 1066, 1060, 959, 947, 938, 862, 1106,
+ /* 470 */ 1104, 1105, 1058, 1056, 1057, 861, 860, 859, 854, 853,
+ /* 480 */ 852, 851, 1133, 1142, 1141, 1139, 1138, 1137, 1131, 1132,
+ /* 490 */ 1045, 1044, 1042, 1041, 1043, 762, 1083, 1086, 1085, 1084,
+ /* 500 */ 1089, 1088, 1081, 1093, 1098, 1097, 1102, 1101, 1100, 1099,
+ /* 510 */ 1096, 1078, 967, 966, 964, 969, 961, 960, 965, 952,
+ /* 520 */ 958, 957, 948, 951, 847, 943, 939, 942, 863, 1082,
/* 530 */ 858, 857, 856, 761, 756, 911, 755, 754, 765, 831,
/* 540 */ 832, 840, 843, 838, 841, 837, 836, 835, 839, 834,
/* 550 */ 830, 768, 767, 775, 824, 802, 800, 799, 803, 816,
@@ -857,12 +857,12 @@ static const YYACTIONTYPE yy_default[] = {
/* 600 */ 883, 882, 881, 917, 916, 915, 914, 913, 912, 905,
/* 610 */ 903, 899, 898, 904, 902, 920, 921, 919, 897, 889,
/* 620 */ 887, 888, 886, 974, 971, 973, 970, 907, 895, 892,
- /* 630 */ 879, 925, 924, 1029, 1018, 1008, 1019, 910, 1007, 1005,
- /* 640 */ 1028, 1025, 1020, 1102, 1024, 1012, 1011, 1010, 1147, 1145,
- /* 650 */ 1146, 1049, 1051, 1054, 1053, 1050, 927, 926, 1048, 1047,
- /* 660 */ 1009, 984, 781, 779, 780, 1074, 1073, 1076, 1075, 1072,
- /* 670 */ 783, 782, 778, 777, 998, 997, 982, 1021, 1022, 981,
- /* 680 */ 1023, 983, 770, 873, 866, 976, 975, 808, 807, 806,
+ /* 630 */ 879, 925, 924, 1030, 1019, 1008, 1020, 910, 1007, 1005,
+ /* 640 */ 1029, 1026, 1021, 1103, 1025, 1012, 1011, 1010, 1148, 1146,
+ /* 650 */ 1147, 1050, 1052, 1055, 1054, 1051, 927, 926, 1049, 1048,
+ /* 660 */ 1009, 984, 781, 779, 780, 1075, 1074, 1077, 1076, 1073,
+ /* 670 */ 783, 782, 778, 777, 998, 997, 982, 1022, 1023, 981,
+ /* 680 */ 1024, 983, 770, 873, 866, 976, 975, 808, 807, 806,
/* 690 */ 805, 877, 876, 787, 801, 786, 784, 764, 759, 758,
/* 700 */ 753, 751, 748, 750, 747, 752, 749, 745, 743, 742,
/* 710 */ 741, 740, 739, 773, 772, 771, 769, 737, 736, 733,
@@ -1462,136 +1462,137 @@ static const char *const yyRuleName[] = {
/* 291 */ "exprx ::= expr not_opt BETWEEN expr AND",
/* 292 */ "exprx ::= CASE case_operand case_exprlist case_else",
/* 293 */ "exprx ::= expr not_opt IN LP exprlist",
- /* 294 */ "exprx ::= expr not_opt IN ID_DB",
- /* 295 */ "exprx ::= expr not_opt IN nm DOT ID_TAB",
- /* 296 */ "exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN",
- /* 297 */ "exprx ::= nm DOT ID_TAB|ID_COL",
- /* 298 */ "exprx ::= nm DOT nm DOT ID_COL",
- /* 299 */ "exprx ::= expr COLLATE ID_COLLATE",
- /* 300 */ "exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP",
- /* 301 */ "expr ::= exprx",
- /* 302 */ "expr ::=",
- /* 303 */ "not_opt ::=",
- /* 304 */ "not_opt ::= NOT",
- /* 305 */ "likeop ::= LIKE_KW|MATCH",
- /* 306 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 307 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 308 */ "case_else ::= ELSE expr",
- /* 309 */ "case_else ::=",
- /* 310 */ "case_operand ::= exprx",
- /* 311 */ "case_operand ::=",
- /* 312 */ "exprlist ::= nexprlist",
- /* 313 */ "exprlist ::=",
- /* 314 */ "nexprlist ::= nexprlist COMMA expr",
- /* 315 */ "nexprlist ::= exprx",
- /* 316 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt",
- /* 317 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB",
- /* 318 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW",
- /* 319 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW",
- /* 320 */ "uniqueflag ::= UNIQUE",
- /* 321 */ "uniqueflag ::=",
- /* 322 */ "idxlist_opt ::=",
- /* 323 */ "idxlist_opt ::= LP idxlist RP",
- /* 324 */ "idxlist ::= idxlist COMMA idxlist_single",
- /* 325 */ "idxlist ::= idxlist_single",
- /* 326 */ "idxlist_single ::= nm collate sortorder",
- /* 327 */ "idxlist_single ::= ID_COL",
- /* 328 */ "collate ::=",
- /* 329 */ "collate ::= COLLATE ids",
- /* 330 */ "collate ::= COLLATE ID_COLLATE",
- /* 331 */ "cmd ::= DROP INDEX ifexists fullname",
- /* 332 */ "cmd ::= DROP INDEX ifexists nm DOT ID_IDX",
- /* 333 */ "cmd ::= DROP INDEX ifexists ID_DB|ID_IDX",
- /* 334 */ "cmd ::= VACUUM",
- /* 335 */ "cmd ::= VACUUM nm",
- /* 336 */ "cmd ::= PRAGMA nm dbnm",
- /* 337 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
- /* 338 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
- /* 339 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
- /* 340 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
- /* 341 */ "cmd ::= PRAGMA nm DOT ID_PRAGMA",
- /* 342 */ "cmd ::= PRAGMA ID_DB|ID_PRAGMA",
- /* 343 */ "nmnum ::= plus_num",
- /* 344 */ "nmnum ::= nm",
- /* 345 */ "nmnum ::= ON",
- /* 346 */ "nmnum ::= DELETE",
- /* 347 */ "nmnum ::= DEFAULT",
- /* 348 */ "plus_num ::= PLUS number",
- /* 349 */ "plus_num ::= number",
- /* 350 */ "minus_num ::= MINUS number",
- /* 351 */ "number ::= INTEGER",
- /* 352 */ "number ::= FLOAT",
- /* 353 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END",
- /* 354 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause",
- /* 355 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list",
- /* 356 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB",
- /* 357 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW",
- /* 358 */ "cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW",
- /* 359 */ "trigger_time ::= BEFORE",
- /* 360 */ "trigger_time ::= AFTER",
- /* 361 */ "trigger_time ::= INSTEAD OF",
- /* 362 */ "trigger_time ::=",
- /* 363 */ "trigger_event ::= DELETE",
- /* 364 */ "trigger_event ::= INSERT",
- /* 365 */ "trigger_event ::= UPDATE",
- /* 366 */ "trigger_event ::= UPDATE OF inscollist",
- /* 367 */ "foreach_clause ::=",
- /* 368 */ "foreach_clause ::= FOR EACH ROW",
- /* 369 */ "when_clause ::=",
- /* 370 */ "when_clause ::= WHEN expr",
- /* 371 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
- /* 372 */ "trigger_cmd_list ::= trigger_cmd SEMI",
- /* 373 */ "trigger_cmd_list ::= SEMI",
- /* 374 */ "trigger_cmd ::= update_stmt",
- /* 375 */ "trigger_cmd ::= insert_stmt",
- /* 376 */ "trigger_cmd ::= delete_stmt",
- /* 377 */ "trigger_cmd ::= select_stmt",
- /* 378 */ "raisetype ::= ROLLBACK|ABORT|FAIL",
- /* 379 */ "cmd ::= DROP TRIGGER ifexists fullname",
- /* 380 */ "cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG",
- /* 381 */ "cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG",
- /* 382 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
- /* 383 */ "cmd ::= DETACH database_kw_opt expr",
- /* 384 */ "key_opt ::=",
- /* 385 */ "key_opt ::= KEY expr",
- /* 386 */ "database_kw_opt ::= DATABASE",
- /* 387 */ "database_kw_opt ::=",
- /* 388 */ "cmd ::= REINDEX",
- /* 389 */ "cmd ::= REINDEX nm dbnm",
- /* 390 */ "cmd ::= REINDEX ID_COLLATE",
- /* 391 */ "cmd ::= REINDEX nm DOT ID_TAB|ID_IDX",
- /* 392 */ "cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB",
- /* 393 */ "cmd ::= ANALYZE",
- /* 394 */ "cmd ::= ANALYZE nm dbnm",
- /* 395 */ "cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX",
- /* 396 */ "cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB",
- /* 397 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 398 */ "cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column",
- /* 399 */ "cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW",
- /* 400 */ "cmd ::= ALTER TABLE nm DOT ID_TAB",
- /* 401 */ "cmd ::= ALTER TABLE ID_DB|ID_TAB",
- /* 402 */ "kwcolumn_opt ::=",
- /* 403 */ "kwcolumn_opt ::= COLUMNKW",
- /* 404 */ "cmd ::= create_vtab",
- /* 405 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm",
- /* 406 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP",
- /* 407 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW",
- /* 408 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW",
- /* 409 */ "vtabarglist ::= vtabarg",
- /* 410 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
- /* 411 */ "vtabarg ::=",
- /* 412 */ "vtabarg ::= vtabarg vtabargtoken",
- /* 413 */ "vtabargtoken ::= ANY",
- /* 414 */ "vtabargtoken ::= LP anylist RP",
- /* 415 */ "anylist ::=",
- /* 416 */ "anylist ::= anylist LP anylist RP",
- /* 417 */ "anylist ::= anylist ANY",
- /* 418 */ "with ::=",
- /* 419 */ "with ::= WITH wqlist",
- /* 420 */ "with ::= WITH RECURSIVE wqlist",
- /* 421 */ "wqlist ::= nm idxlist_opt AS LP select RP",
- /* 422 */ "wqlist ::= wqlist COMMA nm idxlist_opt AS LP select RP",
- /* 423 */ "wqlist ::= ID_TAB_NEW",
+ /* 294 */ "exprx ::= LP expr",
+ /* 295 */ "exprx ::= expr not_opt IN ID_DB",
+ /* 296 */ "exprx ::= expr not_opt IN nm DOT ID_TAB",
+ /* 297 */ "exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN",
+ /* 298 */ "exprx ::= nm DOT ID_TAB|ID_COL",
+ /* 299 */ "exprx ::= nm DOT nm DOT ID_COL",
+ /* 300 */ "exprx ::= expr COLLATE ID_COLLATE",
+ /* 301 */ "exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP",
+ /* 302 */ "expr ::= exprx",
+ /* 303 */ "expr ::=",
+ /* 304 */ "not_opt ::=",
+ /* 305 */ "not_opt ::= NOT",
+ /* 306 */ "likeop ::= LIKE_KW|MATCH",
+ /* 307 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 308 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 309 */ "case_else ::= ELSE expr",
+ /* 310 */ "case_else ::=",
+ /* 311 */ "case_operand ::= exprx",
+ /* 312 */ "case_operand ::=",
+ /* 313 */ "exprlist ::= nexprlist",
+ /* 314 */ "exprlist ::=",
+ /* 315 */ "nexprlist ::= nexprlist COMMA expr",
+ /* 316 */ "nexprlist ::= exprx",
+ /* 317 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt",
+ /* 318 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB",
+ /* 319 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW",
+ /* 320 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW",
+ /* 321 */ "uniqueflag ::= UNIQUE",
+ /* 322 */ "uniqueflag ::=",
+ /* 323 */ "idxlist_opt ::=",
+ /* 324 */ "idxlist_opt ::= LP idxlist RP",
+ /* 325 */ "idxlist ::= idxlist COMMA idxlist_single",
+ /* 326 */ "idxlist ::= idxlist_single",
+ /* 327 */ "idxlist_single ::= nm collate sortorder",
+ /* 328 */ "idxlist_single ::= ID_COL",
+ /* 329 */ "collate ::=",
+ /* 330 */ "collate ::= COLLATE ids",
+ /* 331 */ "collate ::= COLLATE ID_COLLATE",
+ /* 332 */ "cmd ::= DROP INDEX ifexists fullname",
+ /* 333 */ "cmd ::= DROP INDEX ifexists nm DOT ID_IDX",
+ /* 334 */ "cmd ::= DROP INDEX ifexists ID_DB|ID_IDX",
+ /* 335 */ "cmd ::= VACUUM",
+ /* 336 */ "cmd ::= VACUUM nm",
+ /* 337 */ "cmd ::= PRAGMA nm dbnm",
+ /* 338 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
+ /* 339 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
+ /* 340 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
+ /* 341 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
+ /* 342 */ "cmd ::= PRAGMA nm DOT ID_PRAGMA",
+ /* 343 */ "cmd ::= PRAGMA ID_DB|ID_PRAGMA",
+ /* 344 */ "nmnum ::= plus_num",
+ /* 345 */ "nmnum ::= nm",
+ /* 346 */ "nmnum ::= ON",
+ /* 347 */ "nmnum ::= DELETE",
+ /* 348 */ "nmnum ::= DEFAULT",
+ /* 349 */ "plus_num ::= PLUS number",
+ /* 350 */ "plus_num ::= number",
+ /* 351 */ "minus_num ::= MINUS number",
+ /* 352 */ "number ::= INTEGER",
+ /* 353 */ "number ::= FLOAT",
+ /* 354 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END",
+ /* 355 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause",
+ /* 356 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list",
+ /* 357 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB",
+ /* 358 */ "cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW",
+ /* 359 */ "cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW",
+ /* 360 */ "trigger_time ::= BEFORE",
+ /* 361 */ "trigger_time ::= AFTER",
+ /* 362 */ "trigger_time ::= INSTEAD OF",
+ /* 363 */ "trigger_time ::=",
+ /* 364 */ "trigger_event ::= DELETE",
+ /* 365 */ "trigger_event ::= INSERT",
+ /* 366 */ "trigger_event ::= UPDATE",
+ /* 367 */ "trigger_event ::= UPDATE OF inscollist",
+ /* 368 */ "foreach_clause ::=",
+ /* 369 */ "foreach_clause ::= FOR EACH ROW",
+ /* 370 */ "when_clause ::=",
+ /* 371 */ "when_clause ::= WHEN expr",
+ /* 372 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
+ /* 373 */ "trigger_cmd_list ::= trigger_cmd SEMI",
+ /* 374 */ "trigger_cmd_list ::= SEMI",
+ /* 375 */ "trigger_cmd ::= update_stmt",
+ /* 376 */ "trigger_cmd ::= insert_stmt",
+ /* 377 */ "trigger_cmd ::= delete_stmt",
+ /* 378 */ "trigger_cmd ::= select_stmt",
+ /* 379 */ "raisetype ::= ROLLBACK|ABORT|FAIL",
+ /* 380 */ "cmd ::= DROP TRIGGER ifexists fullname",
+ /* 381 */ "cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG",
+ /* 382 */ "cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG",
+ /* 383 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
+ /* 384 */ "cmd ::= DETACH database_kw_opt expr",
+ /* 385 */ "key_opt ::=",
+ /* 386 */ "key_opt ::= KEY expr",
+ /* 387 */ "database_kw_opt ::= DATABASE",
+ /* 388 */ "database_kw_opt ::=",
+ /* 389 */ "cmd ::= REINDEX",
+ /* 390 */ "cmd ::= REINDEX nm dbnm",
+ /* 391 */ "cmd ::= REINDEX ID_COLLATE",
+ /* 392 */ "cmd ::= REINDEX nm DOT ID_TAB|ID_IDX",
+ /* 393 */ "cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB",
+ /* 394 */ "cmd ::= ANALYZE",
+ /* 395 */ "cmd ::= ANALYZE nm dbnm",
+ /* 396 */ "cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX",
+ /* 397 */ "cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB",
+ /* 398 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 399 */ "cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column",
+ /* 400 */ "cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW",
+ /* 401 */ "cmd ::= ALTER TABLE nm DOT ID_TAB",
+ /* 402 */ "cmd ::= ALTER TABLE ID_DB|ID_TAB",
+ /* 403 */ "kwcolumn_opt ::=",
+ /* 404 */ "kwcolumn_opt ::= COLUMNKW",
+ /* 405 */ "cmd ::= create_vtab",
+ /* 406 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm",
+ /* 407 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP",
+ /* 408 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW",
+ /* 409 */ "create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW",
+ /* 410 */ "vtabarglist ::= vtabarg",
+ /* 411 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
+ /* 412 */ "vtabarg ::=",
+ /* 413 */ "vtabarg ::= vtabarg vtabargtoken",
+ /* 414 */ "vtabargtoken ::= ANY",
+ /* 415 */ "vtabargtoken ::= LP anylist RP",
+ /* 416 */ "anylist ::=",
+ /* 417 */ "anylist ::= anylist LP anylist RP",
+ /* 418 */ "anylist ::= anylist ANY",
+ /* 419 */ "with ::=",
+ /* 420 */ "with ::= WITH wqlist",
+ /* 421 */ "with ::= WITH RECURSIVE wqlist",
+ /* 422 */ "wqlist ::= nm idxlist_opt AS LP select RP",
+ /* 423 */ "wqlist ::= wqlist COMMA nm idxlist_opt AS LP select RP",
+ /* 424 */ "wqlist ::= ID_TAB_NEW",
};
#endif /* NDEBUG */
@@ -2519,6 +2520,7 @@ static const struct {
{ 251, 5 },
{ 251, 4 },
{ 251, 5 },
+ { 251, 2 },
{ 251, 4 },
{ 251, 6 },
{ 251, 1 },
@@ -2735,11 +2737,11 @@ static void yy_reduce(
{yygotominor.yy225 = new ParserStubExplain(true, true);}
break;
case 8: /* cmdx ::= cmd */
- case 374: /* trigger_cmd ::= update_stmt */ yytestcase(yyruleno==374);
- case 375: /* trigger_cmd ::= insert_stmt */ yytestcase(yyruleno==375);
- case 376: /* trigger_cmd ::= delete_stmt */ yytestcase(yyruleno==376);
- case 377: /* trigger_cmd ::= select_stmt */ yytestcase(yyruleno==377);
- case 404: /* cmd ::= create_vtab */ yytestcase(yyruleno==404);
+ case 375: /* trigger_cmd ::= update_stmt */ yytestcase(yyruleno==375);
+ case 376: /* trigger_cmd ::= insert_stmt */ yytestcase(yyruleno==376);
+ case 377: /* trigger_cmd ::= delete_stmt */ yytestcase(yyruleno==377);
+ case 378: /* trigger_cmd ::= select_stmt */ yytestcase(yyruleno==378);
+ case 405: /* cmd ::= create_vtab */ yytestcase(yyruleno==405);
{yygotominor.yy399 = yymsp[0].minor.yy399;}
break;
case 9: /* cmd ::= BEGIN transtype trans_opt */
@@ -2828,10 +2830,10 @@ static void yy_reduce(
case 86: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==86);
case 108: /* tconscomma ::= COMMA */ yytestcase(yyruleno==108);
case 130: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==130);
- case 304: /* not_opt ::= NOT */ yytestcase(yyruleno==304);
- case 320: /* uniqueflag ::= UNIQUE */ yytestcase(yyruleno==320);
- case 386: /* database_kw_opt ::= DATABASE */ yytestcase(yyruleno==386);
- case 402: /* kwcolumn_opt ::= */ yytestcase(yyruleno==402);
+ case 305: /* not_opt ::= NOT */ yytestcase(yyruleno==305);
+ case 321: /* uniqueflag ::= UNIQUE */ yytestcase(yyruleno==321);
+ case 387: /* database_kw_opt ::= DATABASE */ yytestcase(yyruleno==387);
+ case 403: /* kwcolumn_opt ::= */ yytestcase(yyruleno==403);
{yygotominor.yy237 = new bool(true);}
break;
case 22: /* savepoint_opt ::= */
@@ -2839,10 +2841,10 @@ static void yy_reduce(
case 85: /* autoinc ::= */ yytestcase(yyruleno==85);
case 109: /* tconscomma ::= */ yytestcase(yyruleno==109);
case 131: /* ifexists ::= */ yytestcase(yyruleno==131);
- case 303: /* not_opt ::= */ yytestcase(yyruleno==303);
- case 321: /* uniqueflag ::= */ yytestcase(yyruleno==321);
- case 387: /* database_kw_opt ::= */ yytestcase(yyruleno==387);
- case 403: /* kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==403);
+ case 304: /* not_opt ::= */ yytestcase(yyruleno==304);
+ case 322: /* uniqueflag ::= */ yytestcase(yyruleno==322);
+ case 388: /* database_kw_opt ::= */ yytestcase(yyruleno==388);
+ case 404: /* kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==404);
{yygotominor.yy237 = new bool(false);}
break;
case 23: /* cmd ::= SAVEPOINT nm */
@@ -2914,22 +2916,22 @@ static void yy_reduce(
break;
case 31: /* cmd ::= CREATE temp TABLE ifnotexists nm DOT ID_TAB_NEW */
case 133: /* cmd ::= CREATE temp VIEW ifnotexists nm DOT ID_VIEW_NEW */ yytestcase(yyruleno==133);
- case 357: /* cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW */ yytestcase(yyruleno==357);
+ case 358: /* cmd ::= CREATE temp TRIGGER ifnotexists nm DOT ID_TRIG_NEW */ yytestcase(yyruleno==358);
{ yy_destructor(yypParser,179,&yymsp[-5].minor);
yy_destructor(yypParser,177,&yymsp[-2].minor);
}
break;
case 32: /* cmd ::= CREATE temp TABLE ifnotexists ID_DB|ID_TAB_NEW */
case 134: /* cmd ::= CREATE temp VIEW ifnotexists ID_DB|ID_VIEW_NEW */ yytestcase(yyruleno==134);
- case 358: /* cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW */ yytestcase(yyruleno==358);
+ case 359: /* cmd ::= CREATE temp TRIGGER ifnotexists ID_DB|ID_TRIG_NEW */ yytestcase(yyruleno==359);
{ yy_destructor(yypParser,179,&yymsp[-3].minor);
}
break;
case 33: /* table_options ::= */
case 185: /* dbnm ::= */ yytestcase(yyruleno==185);
- case 328: /* collate ::= */ yytestcase(yyruleno==328);
- case 411: /* vtabarg ::= */ yytestcase(yyruleno==411);
- case 415: /* anylist ::= */ yytestcase(yyruleno==415);
+ case 329: /* collate ::= */ yytestcase(yyruleno==329);
+ case 412: /* vtabarg ::= */ yytestcase(yyruleno==412);
+ case 416: /* anylist ::= */ yytestcase(yyruleno==416);
{yygotominor.yy211 = new QString();}
break;
case 34: /* table_options ::= WITHOUT nm */
@@ -2974,8 +2976,8 @@ static void yy_reduce(
case 47: /* nm ::= id */ yytestcase(yyruleno==47);
case 55: /* typename ::= ids */ yytestcase(yyruleno==55);
case 186: /* dbnm ::= DOT nm */ yytestcase(yyruleno==186);
- case 329: /* collate ::= COLLATE ids */ yytestcase(yyruleno==329);
- case 330: /* collate ::= COLLATE ID_COLLATE */ yytestcase(yyruleno==330);
+ case 330: /* collate ::= COLLATE ids */ yytestcase(yyruleno==330);
+ case 331: /* collate ::= COLLATE ID_COLLATE */ yytestcase(yyruleno==331);
{yygotominor.yy211 = yymsp[0].minor.yy211;}
break;
case 45: /* id ::= ID */
@@ -3035,9 +3037,9 @@ static void yy_reduce(
break;
case 58: /* signed ::= plus_num */
case 59: /* signed ::= minus_num */ yytestcase(yyruleno==59);
- case 343: /* nmnum ::= plus_num */ yytestcase(yyruleno==343);
- case 348: /* plus_num ::= PLUS number */ yytestcase(yyruleno==348);
- case 349: /* plus_num ::= number */ yytestcase(yyruleno==349);
+ case 344: /* nmnum ::= plus_num */ yytestcase(yyruleno==344);
+ case 349: /* plus_num ::= PLUS number */ yytestcase(yyruleno==349);
+ case 350: /* plus_num ::= number */ yytestcase(yyruleno==350);
{yygotominor.yy21 = yymsp[0].minor.yy21;}
break;
case 60: /* carglist ::= carglist ccons */
@@ -3202,9 +3204,9 @@ static void yy_reduce(
}
break;
case 84: /* term ::= STRING|BLOB */
- case 345: /* nmnum ::= ON */ yytestcase(yyruleno==345);
- case 346: /* nmnum ::= DELETE */ yytestcase(yyruleno==346);
- case 347: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==347);
+ case 346: /* nmnum ::= ON */ yytestcase(yyruleno==346);
+ case 347: /* nmnum ::= DELETE */ yytestcase(yyruleno==347);
+ case 348: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==348);
{yygotominor.yy21 = new QVariant(yymsp[0].minor.yy0->value);}
break;
case 87: /* refargs ::= */
@@ -3389,23 +3391,23 @@ static void yy_reduce(
case 179: /* singlesrc ::= ID_DB|ID_TAB */ yytestcase(yyruleno==179);
case 180: /* singlesrc ::= nm DOT ID_VIEW */ yytestcase(yyruleno==180);
case 181: /* singlesrc ::= ID_DB|ID_VIEW */ yytestcase(yyruleno==181);
- case 297: /* exprx ::= nm DOT ID_TAB|ID_COL */ yytestcase(yyruleno==297);
- case 318: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW */ yytestcase(yyruleno==318);
- case 319: /* cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW */ yytestcase(yyruleno==319);
- case 332: /* cmd ::= DROP INDEX ifexists nm DOT ID_IDX */ yytestcase(yyruleno==332);
- case 333: /* cmd ::= DROP INDEX ifexists ID_DB|ID_IDX */ yytestcase(yyruleno==333);
- case 341: /* cmd ::= PRAGMA nm DOT ID_PRAGMA */ yytestcase(yyruleno==341);
- case 342: /* cmd ::= PRAGMA ID_DB|ID_PRAGMA */ yytestcase(yyruleno==342);
- case 380: /* cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG */ yytestcase(yyruleno==380);
- case 381: /* cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG */ yytestcase(yyruleno==381);
- case 391: /* cmd ::= REINDEX nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==391);
- case 392: /* cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==392);
- case 395: /* cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==395);
- case 396: /* cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==396);
- case 400: /* cmd ::= ALTER TABLE nm DOT ID_TAB */ yytestcase(yyruleno==400);
- case 401: /* cmd ::= ALTER TABLE ID_DB|ID_TAB */ yytestcase(yyruleno==401);
- case 407: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW */ yytestcase(yyruleno==407);
- case 408: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW */ yytestcase(yyruleno==408);
+ case 298: /* exprx ::= nm DOT ID_TAB|ID_COL */ yytestcase(yyruleno==298);
+ case 319: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm DOT ID_IDX_NEW */ yytestcase(yyruleno==319);
+ case 320: /* cmd ::= CREATE uniqueflag INDEX ifnotexists ID_DB|ID_IDX_NEW */ yytestcase(yyruleno==320);
+ case 333: /* cmd ::= DROP INDEX ifexists nm DOT ID_IDX */ yytestcase(yyruleno==333);
+ case 334: /* cmd ::= DROP INDEX ifexists ID_DB|ID_IDX */ yytestcase(yyruleno==334);
+ case 342: /* cmd ::= PRAGMA nm DOT ID_PRAGMA */ yytestcase(yyruleno==342);
+ case 343: /* cmd ::= PRAGMA ID_DB|ID_PRAGMA */ yytestcase(yyruleno==343);
+ case 381: /* cmd ::= DROP TRIGGER ifexists nm DOT ID_TRIG */ yytestcase(yyruleno==381);
+ case 382: /* cmd ::= DROP TRIGGER ifexists ID_DB|ID_TRIG */ yytestcase(yyruleno==382);
+ case 392: /* cmd ::= REINDEX nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==392);
+ case 393: /* cmd ::= REINDEX ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==393);
+ case 396: /* cmd ::= ANALYZE nm DOT ID_TAB|ID_IDX */ yytestcase(yyruleno==396);
+ case 397: /* cmd ::= ANALYZE ID_DB|ID_IDX|ID_TAB */ yytestcase(yyruleno==397);
+ case 401: /* cmd ::= ALTER TABLE nm DOT ID_TAB */ yytestcase(yyruleno==401);
+ case 402: /* cmd ::= ALTER TABLE ID_DB|ID_TAB */ yytestcase(yyruleno==402);
+ case 408: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm DOT ID_TAB_NEW */ yytestcase(yyruleno==408);
+ case 409: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists ID_DB|ID_TAB_NEW */ yytestcase(yyruleno==409);
{ yy_destructor(yypParser,177,&yymsp[-2].minor);
}
break;
@@ -3801,11 +3803,11 @@ static void yy_reduce(
{yygotominor.yy226 = new SqliteSortOrder(SqliteSortOrder::null);}
break;
case 205: /* groupby_opt ::= */
- case 313: /* exprlist ::= */ yytestcase(yyruleno==313);
+ case 314: /* exprlist ::= */ yytestcase(yyruleno==314);
{yygotominor.yy13 = new ParserExprList();}
break;
case 206: /* groupby_opt ::= GROUP BY nexprlist */
- case 312: /* exprlist ::= nexprlist */ yytestcase(yyruleno==312);
+ case 313: /* exprlist ::= nexprlist */ yytestcase(yyruleno==313);
{yygotominor.yy13 = yymsp[0].minor.yy13;}
break;
case 207: /* groupby_opt ::= GROUP BY */
@@ -3816,19 +3818,19 @@ static void yy_reduce(
break;
case 208: /* having_opt ::= */
case 220: /* where_opt ::= */ yytestcase(yyruleno==220);
- case 309: /* case_else ::= */ yytestcase(yyruleno==309);
- case 311: /* case_operand ::= */ yytestcase(yyruleno==311);
- case 369: /* when_clause ::= */ yytestcase(yyruleno==369);
- case 384: /* key_opt ::= */ yytestcase(yyruleno==384);
+ case 310: /* case_else ::= */ yytestcase(yyruleno==310);
+ case 312: /* case_operand ::= */ yytestcase(yyruleno==312);
+ case 370: /* when_clause ::= */ yytestcase(yyruleno==370);
+ case 385: /* key_opt ::= */ yytestcase(yyruleno==385);
{yygotominor.yy490 = nullptr;}
break;
case 209: /* having_opt ::= HAVING expr */
case 221: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==221);
- case 301: /* expr ::= exprx */ yytestcase(yyruleno==301);
- case 308: /* case_else ::= ELSE expr */ yytestcase(yyruleno==308);
- case 310: /* case_operand ::= exprx */ yytestcase(yyruleno==310);
- case 370: /* when_clause ::= WHEN expr */ yytestcase(yyruleno==370);
- case 385: /* key_opt ::= KEY expr */ yytestcase(yyruleno==385);
+ case 302: /* expr ::= exprx */ yytestcase(yyruleno==302);
+ case 309: /* case_else ::= ELSE expr */ yytestcase(yyruleno==309);
+ case 311: /* case_operand ::= exprx */ yytestcase(yyruleno==311);
+ case 371: /* when_clause ::= WHEN expr */ yytestcase(yyruleno==371);
+ case 386: /* key_opt ::= KEY expr */ yytestcase(yyruleno==386);
{yygotominor.yy490 = yymsp[0].minor.yy490;}
break;
case 210: /* limit_opt ::= */
@@ -4401,64 +4403,72 @@ static void yy_reduce(
parserContext->minorErrorBeforeNextToken("Syntax error");
}
break;
- case 294: /* exprx ::= expr not_opt IN ID_DB */
+ case 294: /* exprx ::= LP expr */
+{
+ yygotominor.yy490 = new SqliteExpr();
+ yygotominor.yy490->initSubExpr(yymsp[0].minor.yy490);
+ objectForTokens = yygotominor.yy490;
+ parserContext->minorErrorBeforeNextToken("Syntax error");
+ }
+ break;
+ case 295: /* exprx ::= expr not_opt IN ID_DB */
{ yy_destructor(yypParser,199,&yymsp[-3].minor);
}
break;
- case 295: /* exprx ::= expr not_opt IN nm DOT ID_TAB */
- case 296: /* exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN */ yytestcase(yyruleno==296);
+ case 296: /* exprx ::= expr not_opt IN nm DOT ID_TAB */
+ case 297: /* exprx ::= ID_DB|ID_TAB|ID_COL|ID_FN */ yytestcase(yyruleno==297);
{ yy_destructor(yypParser,199,&yymsp[-5].minor);
yy_destructor(yypParser,177,&yymsp[-2].minor);
}
break;
- case 298: /* exprx ::= nm DOT nm DOT ID_COL */
+ case 299: /* exprx ::= nm DOT nm DOT ID_COL */
{ yy_destructor(yypParser,177,&yymsp[-4].minor);
yy_destructor(yypParser,177,&yymsp[-2].minor);
}
break;
- case 299: /* exprx ::= expr COLLATE ID_COLLATE */
- case 300: /* exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP */ yytestcase(yyruleno==300);
+ case 300: /* exprx ::= expr COLLATE ID_COLLATE */
+ case 301: /* exprx ::= RAISE LP raisetype COMMA ID_ERR_MSG RP */ yytestcase(yyruleno==301);
{ yy_destructor(yypParser,199,&yymsp[-2].minor);
}
break;
- case 302: /* expr ::= */
+ case 303: /* expr ::= */
{
yygotominor.yy490 = new SqliteExpr();
objectForTokens = yygotominor.yy490;
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 305: /* likeop ::= LIKE_KW|MATCH */
+ case 306: /* likeop ::= LIKE_KW|MATCH */
{yygotominor.yy374 = new SqliteExpr::LikeOp(SqliteExpr::likeOp(yymsp[0].minor.yy0->value));}
break;
- case 306: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
+ case 307: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
{
yymsp[-4].minor.yy13->append(yymsp[-2].minor.yy490);
yymsp[-4].minor.yy13->append(yymsp[0].minor.yy490);
yygotominor.yy13 = yymsp[-4].minor.yy13;
}
break;
- case 307: /* case_exprlist ::= WHEN expr THEN expr */
+ case 308: /* case_exprlist ::= WHEN expr THEN expr */
{
yygotominor.yy13 = new ParserExprList();
yygotominor.yy13->append(yymsp[-2].minor.yy490);
yygotominor.yy13->append(yymsp[0].minor.yy490);
}
break;
- case 314: /* nexprlist ::= nexprlist COMMA expr */
+ case 315: /* nexprlist ::= nexprlist COMMA expr */
{
yymsp[-2].minor.yy13->append(yymsp[0].minor.yy490);
yygotominor.yy13 = yymsp[-2].minor.yy13;
DONT_INHERIT_TOKENS("nexprlist");
}
break;
- case 315: /* nexprlist ::= exprx */
+ case 316: /* nexprlist ::= exprx */
{
yygotominor.yy13 = new ParserExprList();
yygotominor.yy13->append(yymsp[0].minor.yy490);
}
break;
- case 316: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt */
+ case 317: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP where_opt */
{
yygotominor.yy399 = new SqliteCreateIndex(
*(yymsp[-10].minor.yy237),
@@ -4478,31 +4488,31 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 317: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB */
+ case 318: /* cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON ID_TAB */
{ yy_destructor(yypParser,177,&yymsp[-3].minor);
}
break;
- case 322: /* idxlist_opt ::= */
+ case 323: /* idxlist_opt ::= */
{yygotominor.yy139 = new ParserIndexedColumnList();}
break;
- case 323: /* idxlist_opt ::= LP idxlist RP */
+ case 324: /* idxlist_opt ::= LP idxlist RP */
{yygotominor.yy139 = yymsp[-1].minor.yy139;}
break;
- case 324: /* idxlist ::= idxlist COMMA idxlist_single */
+ case 325: /* idxlist ::= idxlist COMMA idxlist_single */
{
yymsp[-2].minor.yy139->append(yymsp[0].minor.yy90);
yygotominor.yy139 = yymsp[-2].minor.yy139;
DONT_INHERIT_TOKENS("idxlist");
}
break;
- case 325: /* idxlist ::= idxlist_single */
+ case 326: /* idxlist ::= idxlist_single */
{
yygotominor.yy139 = new ParserIndexedColumnList();
yygotominor.yy139->append(yymsp[0].minor.yy90);
}
break;
- case 326: /* idxlist_single ::= nm collate sortorder */
- case 327: /* idxlist_single ::= ID_COL */ yytestcase(yyruleno==327);
+ case 327: /* idxlist_single ::= nm collate sortorder */
+ case 328: /* idxlist_single ::= ID_COL */ yytestcase(yyruleno==328);
{
SqliteIndexedColumn* obj =
new SqliteIndexedColumn(
@@ -4517,7 +4527,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy90;
}
break;
- case 331: /* cmd ::= DROP INDEX ifexists fullname */
+ case 332: /* cmd ::= DROP INDEX ifexists fullname */
{
yygotominor.yy399 = new SqliteDropIndex(*(yymsp[-1].minor.yy237), yymsp[0].minor.yy66->name1, yymsp[0].minor.yy66->name2);
delete yymsp[-1].minor.yy237;
@@ -4525,20 +4535,20 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 334: /* cmd ::= VACUUM */
+ case 335: /* cmd ::= VACUUM */
{
yygotominor.yy399 = new SqliteVacuum();
objectForTokens = yygotominor.yy399;
}
break;
- case 335: /* cmd ::= VACUUM nm */
+ case 336: /* cmd ::= VACUUM nm */
{
yygotominor.yy399 = new SqliteVacuum(*(yymsp[0].minor.yy211));
delete yymsp[0].minor.yy211;
objectForTokens = yygotominor.yy399;
}
break;
- case 336: /* cmd ::= PRAGMA nm dbnm */
+ case 337: /* cmd ::= PRAGMA nm dbnm */
{
yygotominor.yy399 = new SqlitePragma(*(yymsp[-1].minor.yy211), *(yymsp[0].minor.yy211));
delete yymsp[-1].minor.yy211;
@@ -4546,8 +4556,8 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 337: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
- case 339: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ yytestcase(yyruleno==339);
+ case 338: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
+ case 340: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ yytestcase(yyruleno==340);
{
yygotominor.yy399 = new SqlitePragma(*(yymsp[-3].minor.yy211), *(yymsp[-2].minor.yy211), *(yymsp[0].minor.yy21), true);
delete yymsp[-3].minor.yy211;
@@ -4556,8 +4566,8 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 338: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
- case 340: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ yytestcase(yyruleno==340);
+ case 339: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
+ case 341: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ yytestcase(yyruleno==341);
{
yygotominor.yy399 = new SqlitePragma(*(yymsp[-4].minor.yy211), *(yymsp[-3].minor.yy211), *(yymsp[-1].minor.yy21), false);
delete yymsp[-4].minor.yy211;
@@ -4566,13 +4576,13 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 344: /* nmnum ::= nm */
+ case 345: /* nmnum ::= nm */
{
yygotominor.yy21 = new QVariant(*(yymsp[0].minor.yy211));
delete yymsp[0].minor.yy211;
}
break;
- case 350: /* minus_num ::= MINUS number */
+ case 351: /* minus_num ::= MINUS number */
{
if (yymsp[0].minor.yy21->type() == QVariant::Double)
*(yymsp[0].minor.yy21) = -(yymsp[0].minor.yy21->toDouble());
@@ -4584,13 +4594,13 @@ static void yy_reduce(
yygotominor.yy21 = yymsp[0].minor.yy21;
}
break;
- case 351: /* number ::= INTEGER */
+ case 352: /* number ::= INTEGER */
{yygotominor.yy21 = new QVariant(QVariant(yymsp[0].minor.yy0->value).toLongLong());}
break;
- case 352: /* number ::= FLOAT */
+ case 353: /* number ::= FLOAT */
{yygotominor.yy21 = new QVariant(QVariant(yymsp[0].minor.yy0->value).toDouble());}
break;
- case 353: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END */
+ case 354: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list END */
{
yygotominor.yy399 = new SqliteCreateTrigger(
*(yymsp[-13].minor.yy376),
@@ -4616,7 +4626,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 354: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause */
+ case 355: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause */
{
QList<SqliteQuery *> CL;
@@ -4644,7 +4654,7 @@ static void yy_reduce(
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 355: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list */
+ case 356: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON nm foreach_clause when_clause BEGIN trigger_cmd_list */
{
yygotominor.yy399 = new SqliteCreateTrigger(
*(yymsp[-12].minor.yy376),
@@ -4671,79 +4681,79 @@ static void yy_reduce(
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 356: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB */
+ case 357: /* cmd ::= CREATE temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON ID_TAB */
{ yy_destructor(yypParser,179,&yymsp[-8].minor);
yy_destructor(yypParser,177,&yymsp[-5].minor);
yy_destructor(yypParser,262,&yymsp[-3].minor);
yy_destructor(yypParser,263,&yymsp[-2].minor);
}
break;
- case 359: /* trigger_time ::= BEFORE */
+ case 360: /* trigger_time ::= BEFORE */
{yygotominor.yy152 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::BEFORE);}
break;
- case 360: /* trigger_time ::= AFTER */
+ case 361: /* trigger_time ::= AFTER */
{yygotominor.yy152 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::AFTER);}
break;
- case 361: /* trigger_time ::= INSTEAD OF */
+ case 362: /* trigger_time ::= INSTEAD OF */
{yygotominor.yy152 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::INSTEAD_OF);}
break;
- case 362: /* trigger_time ::= */
+ case 363: /* trigger_time ::= */
{yygotominor.yy152 = new SqliteCreateTrigger::Time(SqliteCreateTrigger::Time::null);}
break;
- case 363: /* trigger_event ::= DELETE */
+ case 364: /* trigger_event ::= DELETE */
{
yygotominor.yy309 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::DELETE);
objectForTokens = yygotominor.yy309;
}
break;
- case 364: /* trigger_event ::= INSERT */
+ case 365: /* trigger_event ::= INSERT */
{
yygotominor.yy309 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::INSERT);
objectForTokens = yygotominor.yy309;
}
break;
- case 365: /* trigger_event ::= UPDATE */
+ case 366: /* trigger_event ::= UPDATE */
{
yygotominor.yy309 = new SqliteCreateTrigger::Event(SqliteCreateTrigger::Event::UPDATE);
objectForTokens = yygotominor.yy309;
}
break;
- case 366: /* trigger_event ::= UPDATE OF inscollist */
+ case 367: /* trigger_event ::= UPDATE OF inscollist */
{
yygotominor.yy309 = new SqliteCreateTrigger::Event(*(yymsp[0].minor.yy445));
delete yymsp[0].minor.yy445;
objectForTokens = yygotominor.yy309;
}
break;
- case 367: /* foreach_clause ::= */
+ case 368: /* foreach_clause ::= */
{yygotominor.yy409 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::null);}
break;
- case 368: /* foreach_clause ::= FOR EACH ROW */
+ case 369: /* foreach_clause ::= FOR EACH ROW */
{yygotominor.yy409 = new SqliteCreateTrigger::Scope(SqliteCreateTrigger::Scope::FOR_EACH_ROW);}
break;
- case 371: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
+ case 372: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
{
yymsp[-2].minor.yy214->append(yymsp[-1].minor.yy399);
yygotominor.yy214 = yymsp[-2].minor.yy214;
DONT_INHERIT_TOKENS("trigger_cmd_list");
}
break;
- case 372: /* trigger_cmd_list ::= trigger_cmd SEMI */
+ case 373: /* trigger_cmd_list ::= trigger_cmd SEMI */
{
yygotominor.yy214 = new ParserQueryList();
yygotominor.yy214->append(yymsp[-1].minor.yy399);
}
break;
- case 373: /* trigger_cmd_list ::= SEMI */
+ case 374: /* trigger_cmd_list ::= SEMI */
{
yygotominor.yy214 = new ParserQueryList();
parserContext->minorErrorAfterLastToken("Syntax error");
}
break;
- case 378: /* raisetype ::= ROLLBACK|ABORT|FAIL */
+ case 379: /* raisetype ::= ROLLBACK|ABORT|FAIL */
{yygotominor.yy0 = yymsp[0].minor.yy0;}
break;
- case 379: /* cmd ::= DROP TRIGGER ifexists fullname */
+ case 380: /* cmd ::= DROP TRIGGER ifexists fullname */
{
yygotominor.yy399 = new SqliteDropTrigger(*(yymsp[-1].minor.yy237), yymsp[0].minor.yy66->name1, yymsp[0].minor.yy66->name2);
delete yymsp[-1].minor.yy237;
@@ -4751,25 +4761,25 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 382: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
+ case 383: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
{
yygotominor.yy399 = new SqliteAttach(*(yymsp[-4].minor.yy237), yymsp[-3].minor.yy490, yymsp[-1].minor.yy490, yymsp[0].minor.yy490);
delete yymsp[-4].minor.yy237;
objectForTokens = yygotominor.yy399;
}
break;
- case 383: /* cmd ::= DETACH database_kw_opt expr */
+ case 384: /* cmd ::= DETACH database_kw_opt expr */
{
yygotominor.yy399 = new SqliteDetach(*(yymsp[-1].minor.yy237), yymsp[0].minor.yy490);
delete yymsp[-1].minor.yy237;
objectForTokens = yygotominor.yy399;
}
break;
- case 388: /* cmd ::= REINDEX */
+ case 389: /* cmd ::= REINDEX */
{yygotominor.yy399 = new SqliteReindex();}
break;
- case 389: /* cmd ::= REINDEX nm dbnm */
- case 390: /* cmd ::= REINDEX ID_COLLATE */ yytestcase(yyruleno==390);
+ case 390: /* cmd ::= REINDEX nm dbnm */
+ case 391: /* cmd ::= REINDEX ID_COLLATE */ yytestcase(yyruleno==391);
{
yygotominor.yy399 = new SqliteReindex(*(yymsp[-1].minor.yy211), *(yymsp[0].minor.yy211));
delete yymsp[-1].minor.yy211;
@@ -4777,13 +4787,13 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 393: /* cmd ::= ANALYZE */
+ case 394: /* cmd ::= ANALYZE */
{
yygotominor.yy399 = new SqliteAnalyze();
objectForTokens = yygotominor.yy399;
}
break;
- case 394: /* cmd ::= ANALYZE nm dbnm */
+ case 395: /* cmd ::= ANALYZE nm dbnm */
{
yygotominor.yy399 = new SqliteAnalyze(*(yymsp[-1].minor.yy211), *(yymsp[0].minor.yy211));
delete yymsp[-1].minor.yy211;
@@ -4791,7 +4801,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 397: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
+ case 398: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
{
yygotominor.yy399 = new SqliteAlterTable(
yymsp[-3].minor.yy66->name1,
@@ -4803,7 +4813,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 398: /* cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column */
+ case 399: /* cmd ::= ALTER TABLE fullname ADD kwcolumn_opt column */
{
yygotominor.yy399 = new SqliteAlterTable(
yymsp[-3].minor.yy66->name1,
@@ -4816,11 +4826,11 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 399: /* cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW */
+ case 400: /* cmd ::= ALTER TABLE fullname RENAME TO ID_TAB_NEW */
{ yy_destructor(yypParser,181,&yymsp[-3].minor);
}
break;
- case 405: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm */
+ case 406: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm */
{
yygotominor.yy399 = new SqliteCreateVirtualTable(
*(yymsp[-4].minor.yy237),
@@ -4835,7 +4845,7 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 406: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP */
+ case 407: /* create_vtab ::= CREATE VIRTUAL TABLE ifnotexists nm dbnm USING nm LP vtabarglist RP */
{
yygotominor.yy399 = new SqliteCreateVirtualTable(
*(yymsp[-7].minor.yy237),
@@ -4852,14 +4862,14 @@ static void yy_reduce(
objectForTokens = yygotominor.yy399;
}
break;
- case 409: /* vtabarglist ::= vtabarg */
+ case 410: /* vtabarglist ::= vtabarg */
{
yygotominor.yy445 = new ParserStringList();
yygotominor.yy445->append((yymsp[0].minor.yy211)->mid(1)); // mid(1) to skip the first whitespace added in vtabarg
delete yymsp[0].minor.yy211;
}
break;
- case 410: /* vtabarglist ::= vtabarglist COMMA vtabarg */
+ case 411: /* vtabarglist ::= vtabarglist COMMA vtabarg */
{
yymsp[-2].minor.yy445->append((yymsp[0].minor.yy211)->mid(1)); // mid(1) to skip the first whitespace added in vtabarg
yygotominor.yy445 = yymsp[-2].minor.yy445;
@@ -4867,19 +4877,19 @@ static void yy_reduce(
DONT_INHERIT_TOKENS("vtabarglist");
}
break;
- case 412: /* vtabarg ::= vtabarg vtabargtoken */
+ case 413: /* vtabarg ::= vtabarg vtabargtoken */
{
yymsp[-1].minor.yy211->append(" "+ *(yymsp[0].minor.yy211));
yygotominor.yy211 = yymsp[-1].minor.yy211;
delete yymsp[0].minor.yy211;
}
break;
- case 413: /* vtabargtoken ::= ANY */
+ case 414: /* vtabargtoken ::= ANY */
{
yygotominor.yy211 = new QString(yymsp[0].minor.yy0->value);
}
break;
- case 414: /* vtabargtoken ::= LP anylist RP */
+ case 415: /* vtabargtoken ::= LP anylist RP */
{
yygotominor.yy211 = new QString("(");
yygotominor.yy211->append(*(yymsp[-1].minor.yy211));
@@ -4887,7 +4897,7 @@ static void yy_reduce(
delete yymsp[-1].minor.yy211;
}
break;
- case 416: /* anylist ::= anylist LP anylist RP */
+ case 417: /* anylist ::= anylist LP anylist RP */
{
yygotominor.yy211 = yymsp[-3].minor.yy211;
yygotominor.yy211->append("(");
@@ -4897,37 +4907,37 @@ static void yy_reduce(
DONT_INHERIT_TOKENS("anylist");
}
break;
- case 417: /* anylist ::= anylist ANY */
+ case 418: /* anylist ::= anylist ANY */
{
yygotominor.yy211 = yymsp[-1].minor.yy211;
yygotominor.yy211->append(yymsp[0].minor.yy0->value);
DONT_INHERIT_TOKENS("anylist");
}
break;
- case 418: /* with ::= */
+ case 419: /* with ::= */
{yygotominor.yy367 = nullptr;}
break;
- case 419: /* with ::= WITH wqlist */
+ case 420: /* with ::= WITH wqlist */
{
yygotominor.yy367 = yymsp[0].minor.yy367;
objectForTokens = yygotominor.yy367;
}
break;
- case 420: /* with ::= WITH RECURSIVE wqlist */
+ case 421: /* with ::= WITH RECURSIVE wqlist */
{
yygotominor.yy367 = yymsp[0].minor.yy367;
yygotominor.yy367->recursive = true;
objectForTokens = yygotominor.yy367;
}
break;
- case 421: /* wqlist ::= nm idxlist_opt AS LP select RP */
+ case 422: /* wqlist ::= nm idxlist_opt AS LP select RP */
{
yygotominor.yy367 = SqliteWith::append(*(yymsp[-5].minor.yy211), *(yymsp[-4].minor.yy139), yymsp[-1].minor.yy123);
delete yymsp[-5].minor.yy211;
delete yymsp[-4].minor.yy139;
}
break;
- case 422: /* wqlist ::= wqlist COMMA nm idxlist_opt AS LP select RP */
+ case 423: /* wqlist ::= wqlist COMMA nm idxlist_opt AS LP select RP */
{
yygotominor.yy367 = SqliteWith::append(yymsp[-7].minor.yy367, *(yymsp[-5].minor.yy211), *(yymsp[-4].minor.yy139), yymsp[-1].minor.yy123);
delete yymsp[-5].minor.yy211;
@@ -4935,7 +4945,7 @@ static void yy_reduce(
DONT_INHERIT_TOKENS("wqlist");
}
break;
- case 423: /* wqlist ::= ID_TAB_NEW */
+ case 424: /* wqlist ::= ID_TAB_NEW */
{
parserContext->minorErrorBeforeNextToken("Syntax error");
yygotominor.yy367 = new SqliteWith();
diff --git a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
index a249f6e..65a4dd7 100644
--- a/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
+++ b/SQLiteStudio3/coreSQLiteStudio/parser/sqlite3_parse.y
@@ -1738,7 +1738,12 @@ exprx(X) ::= expr(E) not_opt(N) IN LP
objectForTokens = X;
parserContext->minorErrorBeforeNextToken("Syntax error");
}
-
+exprx(X) ::= LP expr(E). {
+ X = new SqliteExpr();
+ X->initSubExpr(E);
+ objectForTokens = X;
+ parserContext->minorErrorBeforeNextToken("Syntax error");
+ }
exprx ::= expr not_opt IN ID_DB. [IN] {}
exprx ::= expr not_opt IN nm DOT
ID_TAB. [IN] {}
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/exportplugin.h b/SQLiteStudio3/coreSQLiteStudio/plugins/exportplugin.h
index 06aded7..8c269e2 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/exportplugin.h
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/exportplugin.h
@@ -224,6 +224,7 @@ class ExportPlugin : virtual public Plugin
* @param database "Attach" name of the database that the table belongs to. Can be "main", "temp", or any attach name.
* @param table Name of the table to export.
* @param columnNames Name of columns in the table, in order they will appear in the rows passed to exportTableRow().
+ * This will be empty if data is not being exported. This is different than for exportTable(), where columnNames are always present.
* @param ddl The DDL of the table.
* @param createTable Table DDL parsed into an object.
* @param providedData All data entries requested by the plugin in the return value of getProviderFlags().
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/genericexportplugin.h b/SQLiteStudio3/coreSQLiteStudio/plugins/genericexportplugin.h
index 1719baa..0edbde6 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/genericexportplugin.h
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/genericexportplugin.h
@@ -6,6 +6,8 @@
class API_EXPORT GenericExportPlugin : virtual public GenericPlugin, public ExportPlugin
{
+ Q_OBJECT
+
public:
bool initBeforeExport(Db* db, QIODevice* output, const ExportManager::StandardExportConfig& config);
ExportManager::ExportModes getSupportedModes() const;
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/populateconstant.ui b/SQLiteStudio3/coreSQLiteStudio/plugins/populateconstant.ui
index 39e80e1..ddd1131 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/populateconstant.ui
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/populateconstant.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -23,7 +23,7 @@
<item>
<widget class="QLineEdit" name="valueEdit">
<property name="cfg" stdset="0">
- <string>PopulateConstant.Value</string>
+ <string notr="true">PopulateConstant.Value</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/populatedictionary.ui b/SQLiteStudio3/coreSQLiteStudio/plugins/populatedictionary.ui
index f99491f..6a28476 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/populatedictionary.ui
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/populatedictionary.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -23,7 +23,7 @@
<item>
<widget class="FileEdit" name="fileEdit" native="true">
<property name="cfg" stdset="0">
- <string>PopulateDictionary.File</string>
+ <string notr="true">PopulateDictionary.File</string>
</property>
<property name="dialogTitle" stdset="0">
<string>Pick dictionary file</string>
@@ -41,12 +41,12 @@
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="ConfigRadioButton" name="whitespaceRadio">
- <property name="cfg" stdset="0">
- <string>PopulateDictionary.Lines</string>
- </property>
<property name="text">
<string>Whitespace</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateDictionary.Lines</string>
+ </property>
<property name="assignedValue" stdset="0">
<bool>false</bool>
</property>
@@ -54,12 +54,12 @@
</item>
<item>
<widget class="ConfigRadioButton" name="libeBreakRadio">
- <property name="cfg" stdset="0">
- <string>PopulateDictionary.Lines</string>
- </property>
<property name="text">
<string>Line break</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateDictionary.Lines</string>
+ </property>
<property name="assignedValue" stdset="0">
<bool>true</bool>
</property>
@@ -76,12 +76,12 @@
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="ConfigRadioButton" name="orderedRadio">
- <property name="cfg" stdset="0">
- <string>PopulateDictionary.Random</string>
- </property>
<property name="text">
<string>Ordered</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateDictionary.Random</string>
+ </property>
<property name="assignedValue" stdset="0">
<bool>false</bool>
</property>
@@ -89,12 +89,12 @@
</item>
<item>
<widget class="ConfigRadioButton" name="randomlyRadio">
- <property name="cfg" stdset="0">
- <string>PopulateDictionary.Random</string>
- </property>
<property name="text">
<string>Randomly</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateDictionary.Random</string>
+ </property>
<property name="assignedValue" stdset="0">
<bool>true</bool>
</property>
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.ui b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.ui
index fb304ea..4e7853e 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.ui
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandom.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0">
@@ -22,12 +22,12 @@
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QLineEdit" name="prefixEdit">
- <property name="cfg" stdset="0">
- <string>PopulateRandom.Prefix</string>
- </property>
<property name="placeholderText">
<string>No prefix</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandom.Prefix</string>
+ </property>
</widget>
</item>
</layout>
@@ -41,15 +41,15 @@
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QSpinBox" name="minSpin">
- <property name="cfg" stdset="0">
- <string>PopulateRandom.MinValue</string>
- </property>
<property name="minimum">
<number>-999999999</number>
</property>
<property name="maximum">
<number>999999999</number>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandom.MinValue</string>
+ </property>
</widget>
</item>
</layout>
@@ -63,9 +63,6 @@
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QSpinBox" name="maxSpin">
- <property name="cfg" stdset="0">
- <string>PopulateRandom.MaxValue</string>
- </property>
<property name="minimum">
<number>-999999999</number>
</property>
@@ -75,6 +72,9 @@
<property name="value">
<number>999999999</number>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandom.MaxValue</string>
+ </property>
</widget>
</item>
</layout>
@@ -88,12 +88,12 @@
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="suffixEdit">
- <property name="cfg" stdset="0">
- <string>PopulateRandom.Suffix</string>
- </property>
<property name="placeholderText">
<string>No suffix</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandom.Suffix</string>
+ </property>
</widget>
</item>
</layout>
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.ui b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.ui
index 28febde..00ff1e5 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.ui
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/populaterandomtext.ui
@@ -11,20 +11,20 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0" colspan="2">
<widget class="ConfigRadioButton" name="commonSetRadio">
- <property name="cfg" stdset="0">
- <string>PopulateRandomText.UseCustomSets</string>
- </property>
<property name="text">
<string>Use characters from common sets:</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandomText.UseCustomSets</string>
+ </property>
<property name="assignedValue" stdset="0">
<bool>false</bool>
</property>
@@ -38,12 +38,12 @@
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QSpinBox" name="minLengthSpin">
- <property name="cfg" stdset="0">
- <string>PopulateRandomText.MinLength</string>
- </property>
<property name="maximum">
<number>999999999</number>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandomText.MinLength</string>
+ </property>
</widget>
</item>
</layout>
@@ -63,12 +63,12 @@
<property name="toolTip">
<string>Letters from a to z.</string>
</property>
- <property name="cfg" stdset="0">
- <string>PopulateRandomText.IncludeAlpha</string>
- </property>
<property name="text">
<string>Alpha</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandomText.IncludeAlpha</string>
+ </property>
</widget>
</item>
<item>
@@ -76,12 +76,12 @@
<property name="toolTip">
<string>Numbers from 0 to 9.</string>
</property>
- <property name="cfg" stdset="0">
- <string>PopulateRandomText.IncludeNumeric</string>
- </property>
<property name="text">
<string>Numeric</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandomText.IncludeNumeric</string>
+ </property>
</widget>
</item>
<item>
@@ -89,12 +89,12 @@
<property name="toolTip">
<string>A whitespace, a tab and a new line character.</string>
</property>
- <property name="cfg" stdset="0">
- <string>PopulateRandomText.IncludeWhitespace</string>
- </property>
<property name="text">
<string>Whitespace</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandomText.IncludeWhitespace</string>
+ </property>
</widget>
</item>
<item>
@@ -102,12 +102,12 @@
<property name="toolTip">
<string>Includes all above and all others.</string>
</property>
- <property name="cfg" stdset="0">
- <string>PopulateRandomText.IncludeBinary</string>
- </property>
<property name="text">
<string>Binary</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandomText.IncludeBinary</string>
+ </property>
</widget>
</item>
</layout>
@@ -115,12 +115,12 @@
</item>
<item row="3" column="0" colspan="2">
<widget class="ConfigRadioButton" name="customSetRadio">
- <property name="cfg" stdset="0">
- <string>PopulateRandomText.UseCustomSets</string>
- </property>
<property name="text">
<string>Use characters from my custom set:</string>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandomText.UseCustomSets</string>
+ </property>
<property name="assignedValue" stdset="0">
<bool>true</bool>
</property>
@@ -134,12 +134,12 @@
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QSpinBox" name="maxLengthSpin">
- <property name="cfg" stdset="0">
- <string>PopulateRandomText.MaxLength</string>
- </property>
<property name="maximum">
<number>999999999</number>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateRandomText.MaxLength</string>
+ </property>
</widget>
</item>
</layout>
@@ -160,7 +160,7 @@
<string>If you type some character multiple times, it's more likely to be used.</string>
</property>
<property name="cfg" stdset="0">
- <string>PopulateRandomText.CustomCharacters</string>
+ <string notr="true">PopulateRandomText.CustomCharacters</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/populatescript.ui b/SQLiteStudio3/coreSQLiteStudio/plugins/populatescript.ui
index 8d37994..7e530f5 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/populatescript.ui
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/populatescript.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<property name="initialSize" stdset="0">
<size>
@@ -29,7 +29,7 @@
<item>
<widget class="QPlainTextEdit" name="initCodeEdit">
<property name="cfg" stdset="0">
- <string>PopulateScript.InitCode</string>
+ <string notr="true">PopulateScript.InitCode</string>
</property>
<property name="scriptingEdit" stdset="0">
<bool>true</bool>
@@ -48,7 +48,7 @@
<item>
<widget class="QPlainTextEdit" name="codeEdit">
<property name="cfg" stdset="0">
- <string>PopulateScript.Code</string>
+ <string notr="true">PopulateScript.Code</string>
</property>
<property name="scriptingEdit" stdset="0">
<bool>true</bool>
@@ -73,7 +73,7 @@
<item>
<widget class="QComboBox" name="langCombo">
<property name="cfg" stdset="0">
- <string>PopulateScript.Language</string>
+ <string notr="true">PopulateScript.Language</string>
</property>
<property name="ScriptingLangCombo" stdset="0">
<bool>true</bool>
@@ -92,13 +92,13 @@
<item>
<widget class="QToolButton" name="toolButton">
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
<property name="openUrl" stdset="0">
- <string>http://sqlitestudio.pl/wiki/index.php/Official_plugins#Script_.28built-in.29</string>
+ <string notr="true">http://sqlitestudio.pl/wiki/index.php/Official_plugins#Script_.28built-in.29</string>
</property>
<property name="customIcon" stdset="0">
- <string>help</string>
+ <string notr="true">help</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/coreSQLiteStudio/plugins/populatesequence.ui b/SQLiteStudio3/coreSQLiteStudio/plugins/populatesequence.ui
index 231af85..20c7064 100644
--- a/SQLiteStudio3/coreSQLiteStudio/plugins/populatesequence.ui
+++ b/SQLiteStudio3/coreSQLiteStudio/plugins/populatesequence.ui
@@ -11,20 +11,20 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QSpinBox" name="startValueSpin">
- <property name="cfg" stdset="0">
- <string>PopulateSequence.StartValue</string>
- </property>
<property name="minimum">
<number>-99999999</number>
</property>
<property name="maximum">
<number>99999999</number>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateSequence.StartValue</string>
+ </property>
</widget>
</item>
<item row="0" column="0">
@@ -36,9 +36,6 @@
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="stepSpin">
- <property name="cfg" stdset="0">
- <string>PopulateSequence.Step</string>
- </property>
<property name="minimum">
<number>-999999</number>
</property>
@@ -48,6 +45,9 @@
<property name="value">
<number>1</number>
</property>
+ <property name="cfg" stdset="0">
+ <string notr="true">PopulateSequence.Step</string>
+ </property>
</widget>
</item>
<item row="1" column="0">
diff --git a/SQLiteStudio3/coreSQLiteStudio/populateworker.cpp b/SQLiteStudio3/coreSQLiteStudio/populateworker.cpp
index 71ab9a4..0b08526 100644
--- a/SQLiteStudio3/coreSQLiteStudio/populateworker.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/populateworker.cpp
@@ -48,12 +48,7 @@ void PopulateWorker::run()
args.clear();
for (PopulateEngine* engine : engines)
- {
args << engine->nextValue(nextValueError);
- db->rollback();
- emit finished(false);
- return;
- }
query->setArgs(args);
if (!query->execute())
diff --git a/SQLiteStudio3/coreSQLiteStudio/schemaresolver.cpp b/SQLiteStudio3/coreSQLiteStudio/schemaresolver.cpp
index a1ceca5..f14d23d 100644
--- a/SQLiteStudio3/coreSQLiteStudio/schemaresolver.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/schemaresolver.cpp
@@ -306,7 +306,7 @@ QString SchemaResolver::getObjectDdl(const QString &database, const QString &nam
// Validate query results
if (!results.isValid() || results.isNull())
{
- qDebug() << "Could not get object's DDL:" << database << "." << name;
+ qDebug() << "Could not get object's DDL:" << dbName << "." << name;
return QString::null;
}
@@ -458,9 +458,10 @@ QStringList SchemaResolver::getAllObjects(const QString& database)
return resList;
}
-QString SchemaResolver::getUniqueName(const QString& database, const QString& namePrefix)
+QString SchemaResolver::getUniqueName(const QString& database, const QString& namePrefix, const QStringList& forbiddenNames)
{
QStringList allObjects = getAllObjects(database);
+ allObjects += forbiddenNames;
QString baseName = namePrefix;
QString name = baseName;
for (int i = 0; allObjects.contains(name); i++)
@@ -469,9 +470,9 @@ QString SchemaResolver::getUniqueName(const QString& database, const QString& na
return name;
}
-QString SchemaResolver::getUniqueName(const QString& namePrefix)
+QString SchemaResolver::getUniqueName(const QString& namePrefix, const QStringList& forbiddenNames)
{
- return getUniqueName("main", namePrefix);
+ return getUniqueName("main", namePrefix, forbiddenNames);
}
QStringList SchemaResolver::getFkReferencingTables(const QString& table)
diff --git a/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h b/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h
index e1a8d5d..5316f5a 100644
--- a/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h
+++ b/SQLiteStudio3/coreSQLiteStudio/schemaresolver.h
@@ -52,8 +52,8 @@ class API_EXPORT SchemaResolver
QStringList getObjects(const QString& database, const QString& type);
QStringList getAllObjects();
QStringList getAllObjects(const QString& database);
- QString getUniqueName(const QString& database, const QString& namePrefix);
- QString getUniqueName(const QString& namePrefix = QString::null);
+ QString getUniqueName(const QString& database, const QString& namePrefix, const QStringList& forbiddenNames = QStringList());
+ QString getUniqueName(const QString& namePrefix = QString::null, const QStringList& forbiddenNames = QStringList());
QStringList getFkReferencingTables(const QString& table);
QStringList getFkReferencingTables(const QString& database, const QString& table);
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/config.h b/SQLiteStudio3/coreSQLiteStudio/services/config.h
index 5a3f594..6e1fd95 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/config.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/config.h
@@ -23,6 +23,7 @@ CFG_CATEGORIES(Core,
CFG_ENTRY(QString, LoadedPlugins, "")
CFG_ENTRY(QVariantHash, ActiveCodeFormatter, QVariantHash())
CFG_ENTRY(bool, CheckUpdatesOnStartup, true)
+ CFG_ENTRY(QString, Language, "en")
)
CFG_CATEGORY(Console,
CFG_ENTRY(int, HistorySize, 100)
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/exportmanager.cpp b/SQLiteStudio3/coreSQLiteStudio/services/exportmanager.cpp
index 6f916bc..c9b272d 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/exportmanager.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/exportmanager.cpp
@@ -221,7 +221,7 @@ void ExportManager::finalizeExport(bool result, QIODevice* output)
else if (!config->outputFileName.isEmpty())
notifyInfo(tr("Export to the file '%1' was successful.").arg(config->outputFileName));
else
- notifyInfo(tr("Export to was successful.").arg(config->outputFileName));
+ notifyInfo(tr("Export was successful."));
emit exportSuccessful();
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/extralicensemanager.cpp b/SQLiteStudio3/coreSQLiteStudio/services/extralicensemanager.cpp
index 23fb513..2bdc712 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/extralicensemanager.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/extralicensemanager.cpp
@@ -1,16 +1,63 @@
#include "extralicensemanager.h"
+#include <QDebug>
+#include <QFile>
ExtraLicenseManager::ExtraLicenseManager()
{
}
+ExtraLicenseManager::~ExtraLicenseManager()
+{
+ for (License* lic : licenses.values())
+ delete lic;
+
+ licenses.clear();
+}
+
bool ExtraLicenseManager::addLicense(const QString& title, const QString& filePath)
{
- if (licenses.contains(title))
+ return addLicense(title, filePath, Type::FILE);
+}
+
+bool ExtraLicenseManager::addLicenseContents(const QString& title, const QString& contents)
+{
+ return addLicense(title, contents, Type::CONTENTS);
+}
+
+void ExtraLicenseManager::setViolatedLicense(const QString& title, const QString& violationMessage)
+{
+ if (!licenses.contains(title))
+ return;
+
+ License* lic = licenses[title];
+ lic->violated = true;
+ lic->violationMessage = violationMessage;
+}
+
+void ExtraLicenseManager::unsetViolatedLicense(const QString& title)
+{
+ if (!licenses.contains(title))
+ return;
+
+ License* lic = licenses[title];
+ lic->violated = false;
+ lic->violationMessage = QString();
+}
+
+bool ExtraLicenseManager::isViolatedLicense(const QString& title)
+{
+ if (!licenses.contains(title))
return false;
- licenses[title] = filePath;
- return true;
+ return licenses[title]->violated;
+}
+
+QString ExtraLicenseManager::getViolationMessage(const QString& title)
+{
+ if (!licenses.contains(title))
+ return QString::null;
+
+ return licenses[title]->violationMessage;
}
bool ExtraLicenseManager::removeLicense(const QString& title)
@@ -18,11 +65,53 @@ bool ExtraLicenseManager::removeLicense(const QString& title)
if (!licenses.contains(title))
return false;
+ delete licenses[title];
licenses.remove(title);
return true;
}
-const QHash<QString, QString>&ExtraLicenseManager::getLicenses() const
+QHash<QString, QString> ExtraLicenseManager::getLicensesContents() const
+{
+ QHash<QString, QString> result;
+ License* lic = nullptr;
+ for (const QString& title : licenses.keys())
+ {
+ lic = licenses[title];
+ switch (lic->type)
+ {
+ case Type::CONTENTS:
+ result[title] = lic->data;
+ break;
+ case Type::FILE:
+ result[title] = readLicenseFile(lic->data);
+ break;
+ }
+ }
+ return result;
+}
+
+bool ExtraLicenseManager::addLicense(const QString& title, const QString& data, ExtraLicenseManager::Type type)
+{
+ if (licenses.contains(title))
+ return false;
+
+ License* lic = new License;
+ lic->title = title;
+ lic->data = data;
+ lic->type = type;
+ licenses[title] = lic;
+ return true;
+}
+
+QString ExtraLicenseManager::readLicenseFile(const QString& path) const
{
- return licenses;
+ QFile file(path);
+ if (!file.open(QIODevice::ReadOnly))
+ {
+ qCritical() << "Error opening" << file.fileName();
+ return QString::null;
+ }
+ QString contents = QString::fromLatin1(file.readAll());
+ file.close();
+ return contents;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/extralicensemanager.h b/SQLiteStudio3/coreSQLiteStudio/services/extralicensemanager.h
index fcf1203..c8da6f9 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/extralicensemanager.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/extralicensemanager.h
@@ -8,14 +8,38 @@
class API_EXPORT ExtraLicenseManager
{
public:
+ enum class Type
+ {
+ FILE,
+ CONTENTS
+ };
+
+ struct License
+ {
+ QString title;
+ QString data;
+ Type type;
+ QString violationMessage;
+ bool violated = false;
+ };
+
ExtraLicenseManager();
+ virtual ~ExtraLicenseManager();
bool addLicense(const QString& title, const QString& filePath);
+ bool addLicenseContents(const QString& title, const QString& contents);
+ void setViolatedLicense(const QString& title, const QString& violationMessage);
+ void unsetViolatedLicense(const QString& title);
+ bool isViolatedLicense(const QString& title);
+ QString getViolationMessage(const QString& title);
bool removeLicense(const QString& title);
- const QHash<QString,QString>& getLicenses() const;
+ QHash<QString,QString> getLicensesContents() const;
private:
- QHash<QString,QString> licenses;
+ bool addLicense(const QString& title, const QString& data, Type type);
+ QString readLicenseFile(const QString& path) const;
+
+ QHash<QString,License*> licenses;
};
#endif // EXTRALISENCEMANAGER_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp
index e210f01..bbfec32 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.cpp
@@ -278,13 +278,14 @@ qint64 ConfigImpl::addSqlHistory(const QString& sql, const QString& dbName, int
sqlHistoryId = 0;
}
+ sqlHistoryMutex.lock();
QtConcurrent::run(this, &ConfigImpl::asyncAddSqlHistory, sqlHistoryId, sql, dbName, timeSpentMillis, rowsAffected);
- sqlHistoryId++;
- return sqlHistoryId;
+ return sqlHistoryId++;
}
void ConfigImpl::updateSqlHistory(qint64 id, const QString& sql, const QString& dbName, int timeSpentMillis, int rowsAffected)
{
+ sqlHistoryMutex.lock();
QtConcurrent::run(this, &ConfigImpl::asyncUpdateSqlHistory, id, sql, dbName, timeSpentMillis, rowsAffected);
}
@@ -638,6 +639,7 @@ void ConfigImpl::asyncAddSqlHistory(qint64 id, const QString& sql, const QString
{
qDebug() << "Error adding SQL history:" << results->getErrorText();
db->rollback();
+ sqlHistoryMutex.unlock();
return;
}
@@ -657,6 +659,7 @@ void ConfigImpl::asyncAddSqlHistory(qint64 id, const QString& sql, const QString
db->commit();
emit sqlHistoryRefreshNeeded();
+ sqlHistoryMutex.unlock();
}
void ConfigImpl::asyncUpdateSqlHistory(qint64 id, const QString& sql, const QString& dbName, int timeSpentMillis, int rowsAffected)
@@ -665,6 +668,7 @@ void ConfigImpl::asyncUpdateSqlHistory(qint64 id, const QString& sql, const QStr
{dbName, timeSpentMillis, rowsAffected, sql, id});
emit sqlHistoryRefreshNeeded();
+ sqlHistoryMutex.unlock();
}
void ConfigImpl::asyncClearSqlHistory()
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h
index ec32e8d..63d1e1f 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/configimpl.h
@@ -4,6 +4,7 @@
#include "coreSQLiteStudio_global.h"
#include "services/config.h"
#include "db/sqlquery.h"
+#include <QMutex>
class AsyncConfigHandler;
class SqlHistoryModel;
@@ -118,6 +119,7 @@ class API_EXPORT ConfigImpl : public Config
bool massSaving = false;
SqlHistoryModel* sqlHistoryModel = nullptr;
DdlHistoryModel* ddlHistoryModel = nullptr;
+ QMutex sqlHistoryMutex;
public slots:
void refreshDdlHistory();
diff --git a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp
index 5d7a517..c3bc581 100644
--- a/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/services/impl/pluginmanagerimpl.cpp
@@ -3,6 +3,7 @@
#include "plugins/genericplugin.h"
#include "services/notifymanager.h"
#include "common/unused.h"
+#include "translations.h"
#include <QCoreApplication>
#include <QDir>
#include <QDebug>
@@ -465,6 +466,7 @@ void PluginManagerImpl::unload(const QString& pluginName)
// Deinitializing and unloading plugin
emit aboutToUnload(container->plugin, container->type);
container->plugin->deinit();
+ unloadTranslation(container->name);
QPluginLoader* loader = container->loader;
if (!loader->isLoaded())
@@ -586,6 +588,7 @@ void PluginManagerImpl::pluginLoaded(PluginManagerImpl::PluginContainer* contain
{
if (!container->builtIn)
{
+ loadTranslation(container->name);
container->plugin = dynamic_cast<Plugin*>(container->loader->instance());
container->loaded = true;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlhistorymodel.h b/SQLiteStudio3/coreSQLiteStudio/sqlhistorymodel.h
index 0f6b25d..17e1bc3 100644
--- a/SQLiteStudio3/coreSQLiteStudio/sqlhistorymodel.h
+++ b/SQLiteStudio3/coreSQLiteStudio/sqlhistorymodel.h
@@ -7,6 +7,8 @@ class Db;
class SqlHistoryModel : public QueryModel
{
+ Q_OBJECT
+
public:
SqlHistoryModel(Db* db, QObject *parent = nullptr);
diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
index 3595b21..8ff4f0d 100644
--- a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.cpp
@@ -32,13 +32,14 @@
#include "plugins/populateplugin.h"
#include "services/bugreporter.h"
#include "services/extralicensemanager.h"
+#include "translations.h"
#include <QProcessEnvironment>
#include <QThreadPool>
#include <QCoreApplication>
DEFINE_SINGLETON(SQLiteStudio)
-static const int sqlitestudioVersion = 30001;
+static const int sqlitestudioVersion = 30002;
SQLiteStudio::SQLiteStudio()
{
@@ -49,6 +50,21 @@ SQLiteStudio::SQLiteStudio()
SQLiteStudio::~SQLiteStudio()
{
}
+QStringList SQLiteStudio::getInitialTranslationFiles() const
+{
+ return initialTranslationFiles;
+}
+
+void SQLiteStudio::setInitialTranslationFiles(const QStringList& value)
+{
+ initialTranslationFiles = value;
+}
+
+
+QString SQLiteStudio::getCurrentLang() const
+{
+ return currentLang;
+}
ExtraLicenseManager* SQLiteStudio::getExtraLicenseManager() const
{
@@ -263,6 +279,9 @@ void SQLiteStudio::init(const QStringList& cmdListArguments, bool guiAvailable)
config = new ConfigImpl();
config->init();
+ currentLang = CFG_CORE.General.Language.get();
+ loadTranslations(initialTranslationFiles);
+
pluginManager = new PluginManagerImpl();
dbManager = new DbManagerImpl();
@@ -325,7 +344,9 @@ void SQLiteStudio::cleanUp()
disconnect(pluginManager, SIGNAL(unloaded(QString,PluginType*)), this, SLOT(pluginUnloaded(QString,PluginType*)));
if (!immediateQuit)
{
- pluginManager->deinit();
+ if (pluginManager)
+ pluginManager->deinit();
+
safe_delete(pluginManager); // PluginManager before DbManager, so Db objects are deleted while DbManager still exists
safe_delete(updateManager);
safe_delete(bugReporter);
diff --git a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h
index a41867a..f338e92 100644
--- a/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h
+++ b/SQLiteStudio3/coreSQLiteStudio/sqlitestudio.h
@@ -147,6 +147,11 @@ class API_EXPORT SQLiteStudio : public QObject
ExtraLicenseManager* getExtraLicenseManager() const;
void setExtraLicenseManager(ExtraLicenseManager* value);
+ QString getCurrentLang() const;
+
+ QStringList getInitialTranslationFiles() const;
+ void setInitialTranslationFiles(const QStringList& value);
+
private:
/**
* @brief Creates singleton instance.
@@ -197,6 +202,8 @@ class API_EXPORT SQLiteStudio : public QObject
BugReporter* bugReporter = nullptr;
UpdateManager* updateManager = nullptr;
ExtraLicenseManager* extraLicenseManager = nullptr;
+ QString currentLang;
+ QStringList initialTranslationFiles;
private slots:
void pluginLoaded(Plugin* plugin,PluginType* pluginType);
diff --git a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp
index 7555714..d064cb1 100644
--- a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp
+++ b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.cpp
@@ -44,11 +44,12 @@ void TableModifier::alterTable(SqliteCreateTablePtr newCreateTable)
sqls << newCreateTable->detokenize();
copyDataTo(newCreateTable);
+ handleFks(tempTableName);
+
// If temp table was created, it means that table name hasn't changed. In that case we need to cleanup temp table (drop it).
// Otherwise, the table name has changed, therefor there still remains the old table which we copied data from - we need to drop it here.
sqls << QString("DROP TABLE %1;").arg(wrapObjIfNeeded(tempTableName.isNull() ? originalTable : tempTableName, dialect));
- handleFks();
handleIndexes();
handleTriggers();
handleViews();
@@ -92,7 +93,7 @@ void TableModifier::copyDataTo(const QString& targetTable)
copyDataTo(targetTable, colsToCopy, colsToCopy);
}
-void TableModifier::handleFks()
+void TableModifier::handleFks(const QString& tempTableName)
{
SchemaResolver resolver(db);
@@ -108,10 +109,11 @@ void TableModifier::handleFks()
continue;
}
+ subModifier.usedTempTableNames = usedTempTableNames;
subModifier.tableColMap = tableColMap;
subModifier.existingColumns = existingColumns;
subModifier.newName = newName;
- subModifier.subHandleFks(originalTable);
+ subModifier.subHandleFks(originalTable, tempTableName);
sqls += subModifier.generateSqls();
modifiedTables << fkTable;
@@ -125,18 +127,18 @@ void TableModifier::handleFks()
}
}
-void TableModifier::subHandleFks(const QString& oldName)
+void TableModifier::subHandleFks(const QString& oldName, const QString& oldTempName)
{
bool modified = false;
foreach (SqliteCreateTable::Constraint* fk, createTable->getForeignKeysByTable(oldName))
{
- if (subHandleFks(fk->foreignKey, oldName))
+ if (subHandleFks(fk->foreignKey, oldName, oldTempName))
modified = true;
}
foreach (SqliteCreateTable::Column::Constraint* fk, createTable->getColumnForeignKeysByTable(oldName))
{
- if (subHandleFks(fk->foreignKey, oldName))
+ if (subHandleFks(fk->foreignKey, oldName, oldTempName))
modified = true;
}
@@ -151,19 +153,29 @@ void TableModifier::subHandleFks(const QString& oldName)
copyDataTo(originalTable);
+ handleFks(tempName);
+
sqls << QString("DROP TABLE %1;").arg(wrapObjIfNeeded(tempName, dialect));
simpleHandleIndexes();
simpleHandleTriggers();
}
-bool TableModifier::subHandleFks(SqliteForeignKey* fk, const QString& oldName)
+bool TableModifier::subHandleFks(SqliteForeignKey* fk, const QString& oldName, const QString& oldTempName)
{
+ // If table was not renamed (but uses temp table name), we will rename temp name into target name.
+ // If table was renamed, we will rename old name to new name.
bool modified = false;
// Table
if (handleName(oldName, fk->foreignTable))
modified = true;
+ else if (!oldTempName.isNull() && fk->foreignTable.compare(oldName, Qt::CaseInsensitive) == 0)
+ {
+ // This is the case when main table was not renamed - we will stay with the original name, but we need to mark it as modified,
+ // so the table gets recreated (the temp table is changed to the original table name in this FK).
+ modified = true;
+ }
// Columns
if (handleIndexedColumns(fk->indexedColumns))
@@ -354,9 +366,16 @@ void TableModifier::handleIndex(SqliteCreateIndexPtr index)
{
handleName(originalTable, index->table);
handleIndexedColumns(index->indexedColumns);
- index->rebuildTokens();
- sqls << index->detokenize();
- modifiedIndexes << index->index;
+ if (index->indexedColumns.size() > 0)
+ {
+ index->rebuildTokens();
+ sqls << index->detokenize();
+ modifiedIndexes << index->index;
+ }
+ else
+ {
+ warnings << QObject::tr("All columns indexed by the index %1 are gone. The index will not be recreated after table modification.").arg(index->index);
+ }
// TODO partial index needs handling expr here
}
@@ -388,9 +407,16 @@ void TableModifier::handleTrigger(SqliteCreateTriggerPtr trigger)
}
trigger->queries = newQueries;
- trigger->rebuildTokens();
- sqls << trigger->detokenize();
- modifiedTriggers << trigger->trigger;
+ if (trigger->event->type == SqliteCreateTrigger::Event::UPDATE_OF && trigger->event->columnNames.size() == 0)
+ {
+ warnings << QObject::tr("All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.").arg(trigger->trigger);
+ }
+ else
+ {
+ trigger->rebuildTokens();
+ sqls << trigger->detokenize();
+ modifiedTriggers << trigger->trigger;
+ }
}
void TableModifier::handleViews()
@@ -688,8 +714,10 @@ void TableModifier::parseDdl()
this->createTable = createTable;
}
-QString TableModifier::getTempTableName() const
+QString TableModifier::getTempTableName()
{
SchemaResolver resolver(db);
- return resolver.getUniqueName("sqlitestudio_temp_table");
+ QString name = resolver.getUniqueName("sqlitestudio_temp_table", usedTempTableNames);
+ usedTempTableNames << name;
+ return name;
}
diff --git a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h
index 6a39b33..62af492 100644
--- a/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h
+++ b/SQLiteStudio3/coreSQLiteStudio/tablemodifier.h
@@ -31,7 +31,7 @@ class API_EXPORT TableModifier
private:
void init();
void parseDdl();
- QString getTempTableName() const;
+ QString getTempTableName();
void copyDataTo(const QString& targetTable, const QStringList& srcCols, const QStringList& dstCols);
void renameTo(const QString& newName);
QString renameToTemp();
@@ -60,9 +60,9 @@ class API_EXPORT TableModifier
* @param newCreateTable
* Finds all tables referencing currently modified table and updates their referenced table name and columns.
*/
- void handleFks();
- void subHandleFks(const QString& oldName);
- bool subHandleFks(SqliteForeignKey* fk, const QString& oldName);
+ void handleFks(const QString& tempTableName);
+ void subHandleFks(const QString& oldName, const QString& oldTempName);
+ bool subHandleFks(SqliteForeignKey* fk, const QString& oldName, const QString& oldTempName);
bool handleName(const QString& oldName, QString& valueToUpdate);
bool handleIndexedColumns(QList<SqliteIndexedColumn*>& columnsToUpdate);
@@ -74,18 +74,18 @@ class API_EXPORT TableModifier
Dialect dialect;
/**
- * @brief database Database name. The "main" is default.
+ * @brief Database name. The "main" is default.
* Other databases (temp, attached...) are not supported at the moment.
*/
QString database;
/**
- * @brief table Current table name (after renaming)
+ * @brief Current table name (after renaming)
*/
QString table;
/**
- * @brief originalTable Initial table name, before any renaming.
+ * @brief Initial table name, before any renaming.
*/
QString originalTable;
@@ -95,7 +95,7 @@ class API_EXPORT TableModifier
SqliteCreateTablePtr createTable;
/**
- * @brief sqls Statements to be executed to make changes real.
+ * @brief Statements to be executed to make changes real.
*/
QStringList sqls;
@@ -109,6 +109,7 @@ class API_EXPORT TableModifier
QStringList modifiedIndexes;
QStringList modifiedTriggers;
QStringList modifiedViews;
+ QStringList usedTempTableNames;
};
#endif // TABLEMODIFIER_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations.cpp b/SQLiteStudio3/coreSQLiteStudio/translations.cpp
new file mode 100644
index 0000000..56dc5f6
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations.cpp
@@ -0,0 +1,108 @@
+#include "translations.h"
+#include "sqlitestudio.h"
+#include <QTranslator>
+#include <QCoreApplication>
+#include <QDir>
+#include <QDebug>
+#include <QRegularExpression>
+
+QHash<QString,QTranslator*> SQLITESTUDIO_TRANSLATIONS;
+QStringList SQLITESTUDIO_TRANSLATION_DIRS = QStringList({":/msg", ":/msg/translations", "msg", "translations"});
+
+void loadTranslation(const QString& baseName)
+{
+ if (SQLITESTUDIO_TRANSLATIONS.contains(baseName))
+ return;
+
+ QTranslator* translator = new QTranslator();
+
+ QString fName;
+ bool res = false;
+ QString lang = SQLITESTUDIO->getCurrentLang();
+ QStringList filters = QStringList({baseName+"_"+lang+".qm"});
+ QDir dir;
+
+ for (const QString& dirPath : SQLITESTUDIO_TRANSLATION_DIRS)
+ {
+ dir = dirPath;
+ for (const QString& f : dir.entryList(filters))
+ {
+ res = translator->load(f, dirPath);
+ if (res)
+ {
+ fName = dirPath + "/" + f;
+ break;
+ }
+ }
+
+ if (res)
+ break;
+ }
+
+ if (!res)
+ return;
+
+ qApp->installTranslator(translator);
+ SQLITESTUDIO_TRANSLATIONS[baseName] = translator;
+ qDebug() << "Loaded:" << fName;
+}
+
+void unloadTranslation(const QString& baseName)
+{
+ if (!SQLITESTUDIO_TRANSLATIONS.contains(baseName))
+ return;
+
+ QTranslator* trans = SQLITESTUDIO_TRANSLATIONS[baseName];
+ SQLITESTUDIO_TRANSLATIONS.remove(baseName);
+ qApp->removeTranslator(trans);
+ delete trans;
+}
+
+void loadTranslations(const QStringList& baseNames)
+{
+ for (const QString& name : baseNames)
+ loadTranslation(name);
+}
+
+QStringList getAvailableTranslations()
+{
+ QSet<QString> locales;
+ QRegularExpression re("[^\\_]+\\_(\\w+)\\.qm");
+ QRegularExpressionMatch match;
+ QDir dir;
+ QStringList filters = QStringList({"*_*.qm"});
+ for (const QString& dirPath : SQLITESTUDIO_TRANSLATION_DIRS)
+ {
+ dir = dirPath;
+ for (const QString& f : dir.entryList(filters))
+ {
+ match = re.match(f);
+ if (!match.isValid())
+ continue;
+
+ locales << match.captured(1).toLower();
+ }
+ }
+ locales << "en";
+
+ return locales.toList();
+}
+
+QMap<QString,QString> getAvailableLanguages()
+{
+ QMap<QString,QString> langs;
+ QStringList translations = getAvailableTranslations();
+ QLocale locale;
+ QString langName;
+ for (const QString& trans : translations)
+ {
+ locale = QLocale(trans);
+ langName = locale.nativeLanguageName();
+ if (langName.isEmpty())
+ langName = trans;
+
+ langs[langName] = trans;
+ }
+
+ return langs;
+}
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations.h b/SQLiteStudio3/coreSQLiteStudio/translations.h
new file mode 100644
index 0000000..c130064
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations.h
@@ -0,0 +1,25 @@
+#ifndef TRANSLATIONS_H
+#define TRANSLATIONS_H
+
+#include <QString>
+#include <QMap>
+
+void loadTranslations(const QStringList& baseNames);
+void loadTranslation(const QString& baseName);
+void unloadTranslation(const QString& baseName);
+
+/**
+ * @brief Provides list of translations as code names.
+ * @return List of available translations in their code names (pl, pt, de, ...).
+ */
+QStringList getAvailableTranslations();
+
+/**
+ * @brief Provides list of languages and their code names.
+ * @return A map of pairs, there key is a translated (with a current language) name of language and value is its translation code name (pl, pt, de, ...).
+ *
+ * As the result is a QMap, it comes sorted by a translated names of languages.
+ */
+QMap<QString, QString> getAvailableLanguages();
+
+#endif // TRANSLATIONS_H
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qm b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qm
new file mode 100644
index 0000000..8011cf1
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.qm
Binary files differ
diff --git a/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts
new file mode 100644
index 0000000..dc64023
--- /dev/null
+++ b/SQLiteStudio3/coreSQLiteStudio/translations/coreSQLiteStudio_pl.ts
@@ -0,0 +1,1298 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>AbstractDb</name>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="306"/>
+ <location filename="../db/abstractdb.cpp" line="324"/>
+ <source>Cannot execute query on closed database.</source>
+ <translation>Nie można wykonać zapytania na zamkniętej bazie danych.</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb.cpp" line="605"/>
+ <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>
+ <location filename="../services/bugreporter.cpp" line="46"/>
+ <source>Invalid login or password</source>
+ <translation>Niepoprawny login lub hasło</translation>
+ </message>
+</context>
+<context>
+ <name>ChainExecutor</name>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="35"/>
+ <source>The database for executing queries was not defined.</source>
+ <comment>chain executor</comment>
+ <translation>Nie zdefiniowano bazy danych do wykonywania zapytań.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="41"/>
+ <source>The database for executing queries was not open.</source>
+ <comment>chain executor</comment>
+ <translation>Baza danych do wykonywania zapytań nie jest otwarta.</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="47"/>
+ <source>Could not start a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>Nie udało się rozpocząć transakcji bazy danych. Szczegóły: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="74"/>
+ <source>Interrupted</source>
+ <comment>chain executor</comment>
+ <translation>Przerwane</translation>
+ </message>
+ <message>
+ <location filename="../db/chainexecutor.cpp" line="134"/>
+ <source>Could not commit a database transaction. Details: %1</source>
+ <comment>chain executor</comment>
+ <translation>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>DbManagerImpl</name>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="56"/>
+ <source>Could not add database %1: %2</source>
+ <translation>Nie udało się dodać bazę danych %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="115"/>
+ <source>Database %1 could not be updated, because of an error: %2</source>
+ <translation>Nie udało się zaktualizować baza danych %1 z powodu błędu: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="284"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="313"/>
+ <source>Database file doesn&apos;t exist.</source>
+ <translation>Plik bazy danych nie istnieje.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="286"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="315"/>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="467"/>
+ <source>No supporting plugin loaded.</source>
+ <translation>Nie załadowano obsługującej wtyczki.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="386"/>
+ <source>Database could not be initialized.</source>
+ <translation>Nie udało się zainicjalizować bazy danych.</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/dbmanagerimpl.cpp" line="396"/>
+ <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>
+</context>
+<context>
+ <name>DbVersionConverter</name>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="923"/>
+ <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="942"/>
+ <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="1176"/>
+ <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="116"/>
+ <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="175"/>
+ <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="275"/>
+ <location filename="../exportworker.cpp" line="326"/>
+ <source>Could not parse %1 in order to export it. It will be excluded from the export output.</source>
+ <translation>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="482"/>
+ <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="490"/>
+ <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="506"/>
+ <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="232"/>
+ <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="341"/>
+ <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="347"/>
+ <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="365"/>
+ <source>Invalid regular expression pattern: %1</source>
+ <translation>Niepoprawne wyrażenie regularne: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="384"/>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="417"/>
+ <source>Could not open file %1 for reading: %2</source>
+ <translation>Nie udało się otworzyć pliku %1 do odczytu: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/functionmanagerimpl.cpp" line="439"/>
+ <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="459"/>
+ <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="477"/>
+ <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="93"/>
+ <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="48"/>
+ <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="93"/>
+ <source>Table &apos;%1&apos; has less columns than there are columns in the data to be imported. Excessive data columns will be ignored.</source>
+ <translation>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="98"/>
+ <source>Table &apos;%1&apos; has more columns than there are columns in the data to be imported. Some columns in the table will be left empty.</source>
+ <translation>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="116"/>
+ <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="125"/>
+ <location filename="../importworker.cpp" line="152"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Error while importing data: %1</source>
+ <translation>Błąd podczas importowania danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../importworker.cpp" line="125"/>
+ <location filename="../importworker.cpp" line="158"/>
+ <source>Interrupted.</source>
+ <comment>import process status update</comment>
+ <translation>Przerwano.</translation>
+ </message>
+</context>
+<context>
+ <name>PluginManagerImpl</name>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="541"/>
+ <source>Cannot load plugin %1, because it&apos;s in conflict with plugin %2.</source>
+ <translation>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="552"/>
+ <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="561"/>
+ <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="577"/>
+ <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="730"/>
+ <source>min: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>min: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/impl/pluginmanagerimpl.cpp" line="731"/>
+ <source>max: %1</source>
+ <comment>plugin dependency version</comment>
+ <translation>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="88"/>
+ <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>Wartość końcowa:</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="56"/>
+ <source>Error while populating table: %1</source>
+ <translation>Błąd podczas zaludniania tabeli: %2</translation>
+ </message>
+ <message>
+ <location filename="../populateworker.cpp" line="65"/>
+ <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="137"/>
+ <location filename="../dbversionconverter.cpp" line="142"/>
+ <location filename="../dbversionconverter.cpp" line="195"/>
+ <location filename="../dbversionconverter.cpp" line="240"/>
+ <location filename="../dbversionconverter.cpp" line="245"/>
+ <location filename="../dbversionconverter.cpp" line="253"/>
+ <location filename="../dbversionconverter.cpp" line="331"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement.</source>
+ <translation>SQLite %1 nie obsługuje zapytania &apos;%2&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../dbversionconverter.cpp" line="201"/>
+ <source>SQLite %1 does not support &apos;%2&apos; statement, but the regular table can be created instead if you proceed.</source>
+ <translation>SQLite %1 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="424"/>
+ <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="435"/>
+ <location filename="../dbversionconverter.cpp" line="461"/>
+ <location filename="../dbversionconverter.cpp" line="482"/>
+ <location filename="../dbversionconverter.cpp" line="515"/>
+ <source>SQLite %1 does not support the &apos;%2&apos; clause. Cannot convert &apos;%3&apos; statement with that clause.</source>
+ <translation>SQLite %1 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="488"/>
+ <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="756"/>
+ <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="767"/>
+ <location filename="../dbversionconverter.cpp" line="770"/>
+ <location filename="../dbversionconverter.cpp" line="781"/>
+ <source>SQLite %1 does not support &apos;%2&apos; clause in expressions.</source>
+ <translation>SQLite %1 nie obsługuje klauzuli &apos;%2&apos; w wyrażeniach.</translation>
+ </message>
+ <message>
+ <location filename="../impl/dbattacherimpl.cpp" line="109"/>
+ <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="1905"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="2171"/>
+ <source>Parser stack overflow</source>
+ <translation>Przeciążenie stosu analizatora.</translation>
+ </message>
+ <message>
+ <location filename="../parser/sqlite2_parse.cpp" line="4471"/>
+ <location filename="../parser/sqlite3_parse.cpp" line="5086"/>
+ <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="307"/>
+ <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="../services/impl/configimpl.cpp" line="590"/>
+ <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="288"/>
+ <source>General purpose</source>
+ <comment>plugin category name</comment>
+ <translation>Ogólne</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="289"/>
+ <source>Database support</source>
+ <comment>plugin category name</comment>
+ <translation>Wsparcie baz danych</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="290"/>
+ <source>Code formatter</source>
+ <comment>plugin category name</comment>
+ <translation>Formatowanie kodu</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="291"/>
+ <source>Scripting languages</source>
+ <comment>plugin category name</comment>
+ <translation>Języki skryptowe</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="292"/>
+ <source>Exporting</source>
+ <comment>plugin category name</comment>
+ <translation>Eksportowanie</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="293"/>
+ <source>Importing</source>
+ <comment>plugin category name</comment>
+ <translation>Importowanie</translation>
+ </message>
+ <message>
+ <location filename="../sqlitestudio.cpp" line="294"/>
+ <source>Table populating</source>
+ <comment>plugin category name</comment>
+ <translation>Zaludnianie tabel</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="106"/>
+ <source>Table %1 is referencing table %2, but the foreign key definition will not be updated for new table definition due to problems while parsing DDL of the table %3.</source>
+ <translation>Tabela %1 odwołuje się do tabeli %2, ale definicja klucza obcego nie zostanie zaktualizowane dla definicji nowej tabeli w związku z problemami przy analizowaniu DDL tabeli %3.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="373"/>
+ <source>All columns indexed by the index %1 are gone. The index will not be recreated after table modification.</source>
+ <translation>Wszystkie kolumny indeksowane przez indeks %1 już nie istnieją. Indeks ten nie będzie odtworzony po modyfikacji tabeli.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="402"/>
+ <source>Cannot not update trigger %1 according to table %2 modification.</source>
+ <translation>Nie można zaktualizować wyzwalacza %1 zgodnie z modyfikacjami tabeli %2.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="408"/>
+ <source>All columns covered by the trigger %1 are gone. The trigger will not be recreated after table modification.</source>
+ <translation>Wszystkie kolumny obsługiwane przez wyzwalacz %1 już nie istnieją. Wyzwalacz ten nie będzie odtworzony po modyfikacji tabeli.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="431"/>
+ <source>Cannot not update view %1 according to table %2 modifications.
+The view will remain as it is.</source>
+ <translation>Nie można zaktualizować widoku %1 w związku z modyfikacjami tabeli %2.
+Widok pozostanie nienaruszony.</translation>
+ </message>
+ <message>
+ <location filename="../tablemodifier.cpp" line="528"/>
+ <location filename="../tablemodifier.cpp" line="549"/>
+ <location filename="../tablemodifier.cpp" line="567"/>
+ <source>There is a problem with updating an %1 statement within %2 trigger. One of the SELECT substatements which might be referring to table %3 cannot be properly modified. Manual update of the trigger may be necessary.</source>
+ <translation>Jest problem ze zaktualizowaniem zapytania %1 w wyzwalaczu %2. Jedeno z podzapytań SELECT, które może odwoływać się do tabeli %2 nie może być poprawnie zmodyfikowane. Ręczna aktualizacja tego wyzwalacza może być niezbędna.</translation>
+ </message>
+ <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="198"/>
+ <location filename="../db/abstractdb3.h" line="355"/>
+ <source>Could not open database: %1</source>
+ <translation>Nie udało się otworzyć bazy danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb3.h" line="375"/>
+ <source>Could not close database: %1</source>
+ <translation>Nie udało się zamknąć bazy danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/abstractdb2.h" line="791"/>
+ <location filename="../db/abstractdb3.h" line="1078"/>
+ <source>Result set expired or no row available.</source>
+ <translation>Wyniki zapytania są nieaktualne, lub nie ma dostępnych wierszy.</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="130"/>
+ <source>Execution interrupted.</source>
+ <translation>Wykonywanie przerwane.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="172"/>
+ <source>Database is not open.</source>
+ <translation>Baza danych nie jest otwarta.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="180"/>
+ <source>Only one query can be executed simultaneously.</source>
+ <translation>Tylko jedno zapytanie może być wykonywane w danym momencie.</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="262"/>
+ <location filename="../db/queryexecutor.cpp" line="535"/>
+ <source>An error occured while executing the count(*) query, thus data paging will be disabled. Error details from the database: %1</source>
+ <translation>Wystąpił błąd podczas wykonywania zapytania count(*), przez co stronicowanie danych będzie wyłączone. Szczegóły błędy z bazy danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../db/queryexecutor.cpp" line="446"/>
+ <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="30"/>
+ <source>Database</source>
+ <comment>sql history header</comment>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="32"/>
+ <source>Execution date</source>
+ <comment>sql history header</comment>
+ <translation>Data wykonania</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="34"/>
+ <source>Time spent</source>
+ <comment>sql history header</comment>
+ <translation>Czas trwania</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="36"/>
+ <source>Rows affected</source>
+ <comment>sql history header</comment>
+ <translation>Liczba wierszy</translation>
+ </message>
+ <message>
+ <location filename="../sqlhistorymodel.cpp" line="38"/>
+ <source>SQL</source>
+ <comment>sql history header</comment>
+ <translation>SQL</translation>
+ </message>
+</context>
+<context>
+ <name>UpdateManager</name>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="129"/>
+ <source>An error occurred while checking for updates: %1.</source>
+ <translation>Wystąpił błąd podczas sprawdzania aktualizacji: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="142"/>
+ <source>Could not check available updates, because server responded with invalid message format. It is safe to ignore this warning.</source>
+ <translation>Nie udało się sprawdzić aktualizacji, ponieważ serwer odpowiedział wiadomością w niepoprawnym formacie. Możesz spokojnie zignorować tą informację.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="173"/>
+ <source>An error occurred while reading updates metadata: %1.</source>
+ <translation>Wystąpił błąd podczas odczytu metadanych aktualizacji: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="186"/>
+ <source>Could not download updates, because server responded with invalid message format. You can try again later or download and install updates manually. See &lt;a href=&quot;%1&quot;&gt;User Manual&lt;/a&gt; for details.</source>
+ <translation>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>
+ <location filename="../services/updatemanager.cpp" line="193"/>
+ <source>Could not create temporary directory for downloading the update. Updating aborted.</source>
+ <translation>Nie udało się stworzyć katalogu tymczasowego w celu pobrania aktualizacji. Aktualizacja została przerwana.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="204"/>
+ <source>There was no updates to download. Updating aborted.</source>
+ <translation>Nie znaleziono aktualizacji do pobrania. Aktualizacja przerwana.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="239"/>
+ <source>Downloading: %1</source>
+ <translation>Pobieranie: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="245"/>
+ <source>Could not determinate file name from update URL: %1. Updating aborted.</source>
+ <translation>Nie udało się określić nazwy pliku z URL aktualizacji: %1. Aktualizacja przerwana.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="253"/>
+ <source>Failed to open file &apos;%1&apos; for writting: %2. Updating aborted.</source>
+ <translation>Nie udało się otworzyć pliku &apos;%1&apos; do zapisu: %2. Aktualizacja przerwana.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="274"/>
+ <source>Installing updates.</source>
+ <translation>Instalowanie aktualizacji.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="285"/>
+ <source>Could not copy current application directory into %1 directory.</source>
+ <translation>Nie udało się skopiować bieżącego katalogu aplikacji do katalogu %1.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="338"/>
+ <source>Could not create directory %1.</source>
+ <translation>Nie udało się stworzyć katalogu %1.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="346"/>
+ <source>Could not rename directory %1 to %2.
+Details: %3</source>
+ <translation>Nie udało się zmienić nazwy katalogu %1 na %2.
+Szczegóły: %3</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="350"/>
+ <source>Cannot not rename directory %1 to %2.
+Details: %3</source>
+ <translation>Nie można zmienić nazwy katalogu %1 na %2.
+Szczegóły: %3</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="358"/>
+ <source>Could not move directory %1 to %2 and also failed to restore original directory, so the original SQLiteStudio directory is now located at: %3</source>
+ <translation>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>
+ <location filename="../services/updatemanager.cpp" line="363"/>
+ <source>Could not rename directory %1 to %2. Rolled back to the original SQLiteStudio version.</source>
+ <translation>Nie udało się zmienić nazwy katalogu %1 na %2. Przywrócono originalną wersję SQLiteStudio.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="442"/>
+ <source>Could not unpack component %1 into %2 directory.</source>
+ <translation>Nie udało się rozpakować komponentu %1 do katalogu %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="553"/>
+ <source>Could not find permissions elevator application to run update as a root. Looked for: %1</source>
+ <translation>Nie udało się znaleźć narzędzia do podnoszenia uprawnień aplikacji, aby uruchomić aktualizację jako administrator. Szukano następujących: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="560"/>
+ <source>Could not execute final updating steps as root: %1</source>
+ <translation>Nie udało się wykonać ostatnich kroków jako administrator: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <location filename="../services/updatemanager.cpp" line="611"/>
+ <location filename="../services/updatemanager.cpp" line="621"/>
+ <source>Could not execute final updating steps as admin: %1</source>
+ <translation>Nie udało się wykonać ostatnich kroków jako administrator: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="589"/>
+ <source>Cannot create temporary directory for updater.</source>
+ <translation>Nie można stworzyć tymczasowego katalogu dla aktualizacji.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="598"/>
+ <source>Cannot create updater script file.</source>
+ <translation>Nie można utworzyć skryptu aktualizacji.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="631"/>
+ <source>Updating canceled.</source>
+ <translation>Aktualizacja wycofana.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="659"/>
+ <source>Could not execute final updating steps as administrator.</source>
+ <translation>Nie udało się wykonać ostatich kroków aktualizacji jako administrator.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="671"/>
+ <source>Could not execute final updating steps as administrator. Updater startup timed out.</source>
+ <translation>Nie udało się wykonać ostatich kroków aktualizacji jako administrator. Przekroczono limit czasu oczekiwania.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="677"/>
+ <source>Could not execute final updating steps as administrator. Updater operation timed out.</source>
+ <translation>Nie udało się wykonać ostatich kroków aktualizacji jako administrator. Przekroczono limit czasu oczekiwania.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="694"/>
+ <source>Could not clean up temporary directory %1. You can delete it manually at any time.</source>
+ <translation>Nie udało się wyczyścić katalogu tymczasowego %1. Możesz go usunąć ręcznie w dowolnym momencie.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="730"/>
+ <source>Could not run new version for continuing update.</source>
+ <translation>Nie udało się uruchomić nowej wersji w celu kontynuowania aktualizacji.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="815"/>
+ <source>Package not in tar.gz format, cannot install: %1</source>
+ <translation>Paczka nie jest w formacie tar.gz, nie można zainstalować: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="822"/>
+ <source>Package %1 cannot be installed, because cannot move it to directory: %2</source>
+ <translation>Paczka %1 nie może być zainstalowana, ponieważ nie można przenieść jej do katalogu: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="831"/>
+ <source>Package %1 cannot be installed, because cannot unpack it: %2</source>
+ <translation>Paczka %1 nie może być zainstalowana, ponieważ nie można jej rozpakować: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="850"/>
+ <source>Package not in zip format, cannot install: %1</source>
+ <translation>Paczka nie jest w formacie zip, nie można zainstalować: %1</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="857"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory %2: %3</source>
+ <translation>Paczka %1 nie może być zainstalowana, ponieważ nie można jej rozpakować do katalogu %2: %3</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="871"/>
+ <source>Package %1 cannot be installed, because cannot unzip it to directory: %2</source>
+ <translation>Paczka %1 nie może być zainstalowana, ponieważ nie można jej rozpakować do katalogu %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="921"/>
+ <location filename="../services/updatemanager.cpp" line="930"/>
+ <source>Could not rename directory %1 to %2.</source>
+ <translation>Nie udało się zmienić nazwy katalogu %1 na %2.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="943"/>
+ <source>Could not delete directory %1.</source>
+ <translation>Nie udało się skasować katalogu %1.</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="959"/>
+ <source>Error executing update command: %1
+Error message: %2</source>
+ <translation>Błąd podczas wykonywania polecenia aktualizacji: %1
+Treść błędu: %2</translation>
+ </message>
+ <message>
+ <location filename="../services/updatemanager.cpp" line="1026"/>
+ <source>An error occurred while downloading updates: %1. Updating aborted.</source>
+ <translation>Wystąpił błąd podczas pobierania aktualizacji: %1. Aktualizacja przerwana.</translation>
+ </message>
+</context>
+</TS>
diff --git a/SQLiteStudio3/dirs.pri b/SQLiteStudio3/dirs.pri
index 537d0c7..777c640 100644
--- a/SQLiteStudio3/dirs.pri
+++ b/SQLiteStudio3/dirs.pri
@@ -8,7 +8,6 @@ UI_DIR = $$PWD/../$$OUTPUT_DIR_NAME/build
LIBS += -L$$DESTDIR
-
macx: {
QMAKE_CXXFLAGS += -Wno-gnu-zero-variadic-macro-arguments -Wno-overloaded-virtual
INCLUDEPATH += $$PWD/../../include
diff --git a/SQLiteStudio3/guiSQLiteStudio/common/fontedit.ui b/SQLiteStudio3/guiSQLiteStudio/common/fontedit.ui
index d8daa9f..575208f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/common/fontedit.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/common/fontedit.ui
@@ -7,24 +7,24 @@
<x>0</x>
<y>0</y>
<width>451</width>
- <height>35</height>
+ <height>37</height>
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
- <string>TextLabel</string>
+ <string notr="true">TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="button">
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/common/numericspinbox.cpp b/SQLiteStudio3/guiSQLiteStudio/common/numericspinbox.cpp
index 5a48033..e1b6620 100644
--- a/SQLiteStudio3/guiSQLiteStudio/common/numericspinbox.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/common/numericspinbox.cpp
@@ -34,7 +34,6 @@ QValidator::State NumericSpinBox::validate(QString& input, int& pos) const
{
UNUSED(input);
UNUSED(pos);
- emit modified();
if (strict)
return validateStrict(input, pos);
@@ -103,6 +102,7 @@ void NumericSpinBox::setStrict(bool value, bool allowEmpty)
void NumericSpinBox::valueEdited(const QString& value)
{
setValueInternal(value);
+ emit modified();
}
QAbstractSpinBox::StepEnabled NumericSpinBox::stepEnabled() const
diff --git a/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp b/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp
index bda3040..a0da399 100644
--- a/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/completer/completeritemdelegate.cpp
@@ -51,7 +51,7 @@ void CompleterItemDelegate::paintIcon(QPainter* painter, const QStyleOptionViewI
iconRect.setSize(iconSize + QSize(spacer*2, spacer*2));
iconRect.setTopLeft(iconRect.topLeft() + QPoint(spacer, spacer));
- QIcon::State state = option.state & QStyle::State_Open ? QIcon::On : QIcon::Off;
+ QIcon::State state = (option.state & QStyle::State_Open) ? QIcon::On : QIcon::Off;
icon.paint(painter, iconRect, option.decorationAlignment, mode, state);
}
@@ -60,7 +60,7 @@ void CompleterItemDelegate::paintText(QPainter* painter, const QStyleOptionViewI
painter->save();
// Colors
- QPalette::ColorGroup cg = option.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled;
+ QPalette::ColorGroup cg = (option.state & QStyle::State_Enabled) ? QPalette::Normal : QPalette::Disabled;
if (cg == QPalette::Normal && !(option.state & QStyle::State_Active))
cg = QPalette::Inactive;
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columncollatepanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columncollatepanel.ui
index a481875..0c3478e 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columncollatepanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columncollatepanel.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -23,7 +23,16 @@
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -46,7 +55,16 @@
<item>
<widget class="QWidget" name="namedWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp
index 3d7090a..4f402b2 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp
@@ -1,9 +1,9 @@
#include "columndefaultpanel.h"
#include "ui_columndefaultpanel.h"
-#include "parser/ast/sqlitecreatetable.h"
#include "parser/parser.h"
#include "parser/keywords.h"
#include "uiutils.h"
+#include "schemaresolver.h"
#include <QDebug>
ColumnDefaultPanel::ColumnDefaultPanel(QWidget *parent) :
@@ -34,6 +34,22 @@ void ColumnDefaultPanel::changeEvent(QEvent *e)
bool ColumnDefaultPanel::validate()
{
+ if (!ui->exprEdit->isSyntaxChecked())
+ {
+ setValidState(ui->exprEdit, false, tr("Enter a default value expression."));
+ currentMode = Mode::ERROR;
+ return false;
+ }
+
+ // First check if we already validated this text.
+ // This method is called twice, by both errors checking and syntax highlighting,
+ // because signal for textChange() is connected with call to updateValidation().
+ QString text = ui->exprEdit->toPlainText();
+ if (!lastValidatedText.isNull() && lastValidatedText == text)
+ return lastValidationResult;
+
+ lastValidatedText = text;
+
bool nameOk = true;
if (ui->namedCheck->isChecked() && ui->namedEdit->text().isEmpty())
nameOk = false;
@@ -41,12 +57,40 @@ bool ColumnDefaultPanel::validate()
bool exprOk = !ui->exprEdit->toPlainText().trimmed().isEmpty() &&
!ui->exprEdit->haveErrors();
- bool exprCheckedOk = exprOk && ui->exprEdit->isSyntaxChecked();
+ QString exprError;
+ if (exprOk)
+ {
+ // Everything looks fine, so lets do the final check - if the value is considered constant by SQLite.
+ static QString tempDdlLiteralTpl = QStringLiteral("CREATE TABLE temp.%1 (col DEFAULT %2);");
+ static QString tempDdlExprTpl = QStringLiteral("CREATE TABLE temp.%1 (col DEFAULT (%2));");
+ static QString dropTempDdl = QStringLiteral("DROP TABLE IF EXISTS temp.%1;");
+
+ QString tableName = getTempTable();
+ QString tempDdl = tempDdlExprTpl.arg(tableName, ui->exprEdit->toPlainText());
+ SqlQueryPtr res = db->exec(tempDdl);
+ if (res->isError())
+ {
+ tempDdl = tempDdlLiteralTpl.arg(tableName, ui->exprEdit->toPlainText());
+ res = db->exec(tempDdl);
+ if (res->isError())
+ {
+ exprOk = false;
+ exprError = tr("Invalid default value expression: %1").arg(res->getErrorText());
+ }
+ else
+ currentMode = Mode::LITERAL;
+ }
+ else
+ currentMode = Mode::EXPR;
+
+ db->exec(dropTempDdl.arg(tableName));
+ }
- setValidState(ui->exprEdit, exprOk, tr("Enter a default value expression."));
+ setValidState(ui->exprEdit, exprOk, exprError);
setValidState(ui->namedEdit, nameOk, tr("Enter a name of the constraint."));
- return exprCheckedOk && nameOk;
+ lastValidationResult = (exprOk && nameOk);
+ return lastValidationResult;
}
bool ColumnDefaultPanel::validateOnly()
@@ -69,18 +113,99 @@ void ColumnDefaultPanel::storeConfiguration()
if (constraint.isNull())
return;
+ if (currentMode == Mode::ERROR)
+ {
+ qCritical() << "Call to ColumnDefaultPanel::storeConfiguration() while its mode is in ERROR state.";
+ return;
+ }
+
SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data());
constr->type = SqliteCreateTable::Column::Constraint::DEFAULT;
- SqliteExprPtr expr = parseExpression(ui->exprEdit->toPlainText());
- SqliteExpr* newExpr = new SqliteExpr(*expr.data());
- newExpr->setParent(constraint.data());
- constr->expr = newExpr;
+ switch (currentMode)
+ {
+ case Mode::EXPR:
+ storeExpr(constr);
+ break;
+ case Mode::LITERAL:
+ storeLiteral(constr);
+ break;
+ case Mode::ERROR:
+ return;
+ }
if (ui->namedCheck->isChecked())
constr->name = ui->namedEdit->text();
}
+void ColumnDefaultPanel::storeExpr(SqliteCreateTable::Column::Constraint* constr)
+{
+ QString text = ui->exprEdit->toPlainText();
+ clearDefault(constr);
+ if (text.toUpper() == "NULL")
+ {
+ // We will just use literal null, no need to create expression with null.
+ constr->literalNull = true;
+ return;
+ }
+
+ Parser parser(db->getDialect());
+ SqliteExpr* newExpr = parser.parseExpr(text);
+ newExpr->setParent(constraint.data());
+ constr->expr = newExpr;
+}
+
+void ColumnDefaultPanel::storeLiteral(SqliteCreateTable::Column::Constraint* constr)
+{
+ QString text = ui->exprEdit->toPlainText();
+
+ Parser parser(db->getDialect());
+ SqliteCreateTablePtr createTable = parser.parse<SqliteCreateTable>("CREATE TABLE tab (col DEFAULT "+text+");");
+ if (!createTable || createTable->columns.size() == 0 || createTable->columns.first()->constraints.size() == 0)
+ {
+ qCritical() << "ColumnDefaultPanel::storeLiteral(): create table not parsed! Cannot store literal. Expression was:" << text;
+ return;
+ }
+
+ SqliteCreateTable::Column::Constraint* parsedConstr = createTable->columns.first()->constraints.first();
+ if (parsedConstr->type != SqliteCreateTable::Column::Constraint::Type::DEFAULT)
+ {
+ qCritical() << "ColumnDefaultPanel::storeLiteral(): parsed constraint not a DEFAULT! Cannot store literal. Expression was:" << text;
+ return;
+ }
+
+ clearDefault(constr);
+ if (!parsedConstr->id.isNull())
+ constr->id = parsedConstr->id;
+ else if (!parsedConstr->ctime.isNull())
+ constr->ctime = parsedConstr->ctime.toUpper();
+ else if (parsedConstr->expr)
+ {
+ qWarning() << "ColumnDefaultPanel::storeLiteral(): parsed constraint turned out to be an expression. This should be handled by ColumnDefaultPanel::storeExpr."
+ << "Expression was:" << text;
+ constr->expr = parsedConstr->expr;
+ parsedConstr->expr = nullptr;
+ constr->expr->setParent(constr);
+ }
+ else if (parsedConstr->literalNull)
+ constr->literalNull = true;
+ else
+ constr->literalValue = parsedConstr->literalValue;
+}
+
+void ColumnDefaultPanel::clearDefault(SqliteCreateTable::Column::Constraint* constr)
+{
+ if (constr->expr)
+ {
+ delete constr->expr;
+ constr->expr = nullptr;
+ }
+ constr->literalNull = false;
+ constr->literalValue = QVariant();
+ constr->id = QString();
+ constr->ctime = QString();
+}
+
void ColumnDefaultPanel::init()
{
setFocusProxy(ui->exprEdit);
@@ -101,101 +226,49 @@ void ColumnDefaultPanel::readConstraint()
SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data());
if (constr->expr)
+ {
ui->exprEdit->setPlainText(constr->expr->detokenize());
+ currentMode = Mode::EXPR;
+ }
else if (!constr->literalValue.isNull())
- ui->exprEdit->setPlainText(constr->literalValue.toString());
-
- if (!constr->name.isNull())
{
- ui->namedCheck->setChecked(true);
- ui->namedEdit->setText(constr->name);
+ ui->exprEdit->setPlainText(constr->literalValue.toString());
+ currentMode = Mode::LITERAL;
}
-}
-
-void ColumnDefaultPanel::updateVirtualSql()
-{
- ui->exprEdit->setDb(db);
-
- SqliteCreateTable::Column* column = dynamic_cast<SqliteCreateTable::Column*>(constraint->parentStatement());
- SqliteCreateTable* createTable = dynamic_cast<SqliteCreateTable*>(column->parentStatement());
-
- createTable->rebuildTokens();
- TokenList tokens = createTable->tokens;
- TokenList colTokens = column->tokens;
- if (createTable->columns.indexOf(column) == -1)
+ else if (!constr->id.isNull())
{
- if (createTable->columns.size() == 0)
- {
- // No columns. Cannot get any context info.
- return;
- }
-
- colTokens = createTable->columns.last()->tokens;
+ ui->exprEdit->setPlainText(constr->id);
+ currentMode = Mode::LITERAL;
}
-
- if (colTokens.size() == 0)
+ else if (!constr->ctime.isNull())
{
- qWarning() << "CREATE TABLE tokens are invalid (0) while call to ColumnDefaultPanel::updateVirtualSql().";
- return;
+ ui->exprEdit->setPlainText(constr->ctime);
+ currentMode = Mode::LITERAL;
}
-
- int idx = tokens.lastIndexOf(colTokens.last());
- if (idx == -1)
+ else if (constr->literalNull)
{
- qWarning() << "CREATE TABLE tokens are invalid while call to ColumnDefaultPanel::updateVirtualSql().";
- return;
+ ui->exprEdit->setPlainText("NULL");
+ currentMode = Mode::LITERAL;
}
- idx++;
-
- TokenList newTokens;
- newTokens << TokenPtr::create(Token::SPACE, " ")
- << TokenPtr::create(Token::KEYWORD, "DEFAULT")
- << TokenPtr::create(Token::SPACE, " ");
- if (constraint->dialect == Dialect::Sqlite3)
- {
- newTokens << TokenPtr::create(Token::PAR_LEFT, "(")
- << TokenPtr::create(Token::OTHER, "%1")
- << TokenPtr::create(Token::PAR_RIGHT, ")");
- }
- else
+ if (!constr->name.isNull())
{
- newTokens << TokenPtr::create(Token::OTHER, "%1");
+ ui->namedCheck->setChecked(true);
+ ui->namedEdit->setText(constr->name);
}
-
- tokens.insert(idx, newTokens);
- QString sql = tokens.detokenize();
-
- ui->exprEdit->setVirtualSqlExpression(sql);
}
-SqliteExprPtr ColumnDefaultPanel::parseExpression(const QString& sql)
+void ColumnDefaultPanel::updateVirtualSql()
{
- Parser parser(db->getDialect());
- if (!parser.parse("SELECT "+sql))
- return SqliteExprPtr();
-
- QList<SqliteQueryPtr> queries = parser.getQueries();
- if (queries.size() == 0)
- return SqliteExprPtr();
-
- SqliteQueryPtr first = queries.first();
- if (first->queryType != SqliteQueryType::Select)
- return SqliteExprPtr();
-
- SqliteSelectPtr select = first.dynamicCast<SqliteSelect>();
- if (select->coreSelects.size() < 1)
- return SqliteExprPtr();
-
- SqliteSelect::Core* core = select->coreSelects.first();
- if (core->resultColumns.size() < 1)
- return SqliteExprPtr();
-
- SqliteSelect::Core::ResultColumn* resCol = core->resultColumns.first();
- if (!resCol->expr)
- return SqliteExprPtr();
+ static QString sql = QStringLiteral("CREATE TABLE tab (col DEFAULT %1)");
+ ui->exprEdit->setDb(db);
+ ui->exprEdit->setVirtualSqlExpression(sql.arg(db->getDialect() == Dialect::Sqlite3 ? "(%1)" : "%1"));
+}
- return resCol->expr->detach().dynamicCast<SqliteExpr>();
+QString ColumnDefaultPanel::getTempTable()
+{
+ SchemaResolver resolver(db);
+ return resolver.getUniqueName("temp", "sqlitestudio_temp_table");
}
void ColumnDefaultPanel::updateState()
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.h b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.h
index 933c2dd..3cdd962 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.h
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.h
@@ -4,6 +4,7 @@
#include "constraintpanel.h"
#include "parser/ast/sqliteconflictalgo.h"
#include "guiSQLiteStudio_global.h"
+#include "parser/ast/sqlitecreatetable.h"
#include <QWidget>
namespace Ui {
@@ -27,12 +28,25 @@ class GUI_API_EXPORT ColumnDefaultPanel : public ConstraintPanel
void storeConfiguration();
private:
+ enum class Mode
+ {
+ EXPR,
+ LITERAL,
+ ERROR
+ };
+
void init();
void readConstraint();
void updateVirtualSql();
- SqliteExprPtr parseExpression(const QString& sql);
+ QString getTempTable();
+ void storeExpr(SqliteCreateTable::Column::Constraint* constr);
+ void storeLiteral(SqliteCreateTable::Column::Constraint* constr);
+ void clearDefault(SqliteCreateTable::Column::Constraint* constr);
Ui::ColumnDefaultPanel *ui = nullptr;
+ QString lastValidatedText;
+ bool lastValidationResult = false;
+ Mode currentMode = Mode::ERROR;
private slots:
void updateState();
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.ui
index fdf55b0..0026fdb 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp
index cf234f7..f4eb3eb 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp
@@ -217,7 +217,7 @@ void ColumnForeignKeyPanel::storeConfiguration()
storeCondition(SqliteForeignKey::Condition::DELETE, ui->onDeleteCombo->currentText());
if (ui->onUpdateCheckBox->isChecked())
- storeCondition(SqliteForeignKey::Condition::UPDATE, ui->onDeleteCombo->currentText());
+ storeCondition(SqliteForeignKey::Condition::UPDATE, ui->onUpdateCombo->currentText());
if (ui->matchCheckBox->isChecked())
storeMatchCondition(ui->matchCombo->currentText());
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.ui
index c442967..23e2300 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.ui
@@ -17,7 +17,7 @@
</size>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -61,7 +61,7 @@
<item row="0" column="0">
<widget class="QCheckBox" name="onUpdateCheckBox">
<property name="text">
- <string>ON UPDATE</string>
+ <string notr="true">ON UPDATE</string>
</property>
</widget>
</item>
@@ -71,14 +71,14 @@
<item row="1" column="0">
<widget class="QCheckBox" name="onDeleteCheckBox">
<property name="text">
- <string>ON DELETE</string>
+ <string notr="true">ON DELETE</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="matchCheckBox">
<property name="text">
- <string>MATCH</string>
+ <string notr="true">MATCH</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.ui
index bedabca..d6c15d4 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.ui
@@ -17,7 +17,7 @@
</size>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -30,7 +30,16 @@
<item>
<widget class="QWidget" name="sortOrderWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -56,7 +65,16 @@
<item>
<widget class="QWidget" name="namedWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -75,7 +93,16 @@
<item>
<widget class="QWidget" name="conflictWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnuniqueandnotnullpanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columnuniqueandnotnullpanel.ui
index 16efc89..7a60f40 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnuniqueandnotnullpanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnuniqueandnotnullpanel.ui
@@ -17,13 +17,22 @@
</size>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="namedWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -42,7 +51,16 @@
<item>
<widget class="QWidget" name="conflictWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.ui
index 58f58e6..e7021b4 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.ui
@@ -7,17 +7,17 @@
<x>0</x>
<y>0</y>
<width>400</width>
- <height>197</height>
+ <height>211</height>
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGroupBox" name="exprGroup">
<property name="title">
- <string>The expression</string>
+ <string>The condition</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp
index 60da220..7354997 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp
@@ -327,7 +327,6 @@ void TableForeignKeyPanel::storeConfiguration()
QCheckBox* check = nullptr;
QComboBox* combo = nullptr;
SqliteIndexedColumn* idxCol = nullptr;
- QString name;
for (int i = 0; i < totalColumns; i++)
{
// Local column
@@ -352,7 +351,7 @@ void TableForeignKeyPanel::storeConfiguration()
storeCondition(SqliteForeignKey::Condition::DELETE, ui->onDeleteCombo->currentText());
if (ui->onUpdateCheckBox->isChecked())
- storeCondition(SqliteForeignKey::Condition::UPDATE, ui->onDeleteCombo->currentText());
+ storeCondition(SqliteForeignKey::Condition::UPDATE, ui->onUpdateCombo->currentText());
if (ui->matchCheckBox->isChecked())
storeMatchCondition(ui->matchCombo->currentText());
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui
index 8917381..7ecbe06 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui
@@ -17,7 +17,7 @@
</size>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -129,7 +129,7 @@ but it's okay to use them anyway.</string>
<item row="0" column="0">
<widget class="QCheckBox" name="onUpdateCheckBox">
<property name="text">
- <string>ON UPDATE</string>
+ <string notr="true">ON UPDATE</string>
</property>
</widget>
</item>
@@ -139,14 +139,14 @@ but it's okay to use them anyway.</string>
<item row="1" column="0">
<widget class="QCheckBox" name="onDeleteCheckBox">
<property name="text">
- <string>ON DELETE</string>
+ <string notr="true">ON DELETE</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="matchCheckBox">
<property name="text">
- <string>MATCH</string>
+ <string notr="true">MATCH</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.ui
index 9453d3c..52c5af1 100644
--- a/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>PrimaryKeyOrUniquePanel</string>
+ <string notr="true">PrimaryKeyOrUniquePanel</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp
index c732b6d..d631899 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitem.cpp
@@ -406,12 +406,14 @@ QString SqlQueryItem::loadFullData()
return tr("This cell is not editable, because: %1").arg(SqlQueryModelColumn::resolveMessage(col->editionForbiddenReason.values().first()));
}
- if (isJustInsertedWithOutRowId())
- {
- QString msg = tr("When inserted new row to the WITHOUT ROWID table, using DEFAULT value for PRIMARY KEY, "
- "the table has to be reloaded in order to edit the new row.");
- return tr("This cell is not editable, because: %1").arg(msg);
- }
+ // This should not happen anymore (since WITHOUT ROWID tables should be handled properly now,
+ // but we will keep this here for a while, just in case.
+// if (isJustInsertedWithOutRowId())
+// {
+// QString msg = tr("When inserted new row to the WITHOUT ROWID table, using DEFAULT value for PRIMARY KEY, "
+// "the table has to be reloaded in order to edit the new row.");
+// return tr("This cell is not editable, because: %1").arg(msg);
+// }
SqlQueryModel *model = getModel();
Db* db = model->getDb();
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.cpp
index ab8f7f2..6741d08 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.cpp
@@ -7,6 +7,7 @@
#include <QPainter>
#include <QEvent>
#include <QLineEdit>
+#include <QDebug>
SqlQueryItemDelegate::SqlQueryItemDelegate(QObject *parent) :
QStyledItemDelegate(parent)
@@ -16,7 +17,6 @@ SqlQueryItemDelegate::SqlQueryItemDelegate(QObject *parent) :
void SqlQueryItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyledItemDelegate::paint(painter, option, index);
-
SqlQueryItem* item = getItem(index);
if (item->isUncommited())
@@ -54,6 +54,16 @@ QWidget* SqlQueryItemDelegate::createEditor(QWidget* parent, const QStyleOptionV
return getEditor(item->getValue().userType(), parent);
}
+QString SqlQueryItemDelegate::displayText(const QVariant& value, const QLocale& locale) const
+{
+ UNUSED(locale);
+
+ if (value.type() == QVariant::Double)
+ return value.toString();
+
+ return QStyledItemDelegate::displayText(value, locale);
+}
+
SqlQueryItem* SqlQueryItemDelegate::getItem(const QModelIndex &index) const
{
const SqlQueryModel* queryModel = dynamic_cast<const SqlQueryModel*>(index.model());
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.h b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.h
index a190202..8b894ed 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.h
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryitemdelegate.h
@@ -14,6 +14,7 @@ class GUI_API_EXPORT SqlQueryItemDelegate : public QStyledItemDelegate
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const;
+ QString displayText(const QVariant & value, const QLocale & locale) const;
private:
SqlQueryItem* getItem(const QModelIndex &index) const;
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp
index caeab3b..cb0f27a 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.cpp
@@ -975,7 +975,7 @@ void SqlQueryModel::handleExecFinished(SqlQueryPtr results)
{
if (results->isError())
{
- emit executionFailed(tr("Error while executing SQL query: %1").arg(results->getErrorText()));
+ emit executionFailed(tr("Error while executing SQL query on database '%1': %2").arg(db->getName(), results->getErrorText()));
return;
}
@@ -992,11 +992,18 @@ void SqlQueryModel::handleExecFinished(SqlQueryPtr results)
reloading = false;
- if (queryExecutor->isRowCountingRequired() || rowCount() < CFG_UI.General.NumberOfRowsPerPage.get())
- emit totalRowsAndPagesAvailable(); // rows were counted manually
+ bool rowsCountedManually = queryExecutor->isRowCountingRequired() || rowCount() < CFG_UI.General.NumberOfRowsPerPage.get();
+ bool countRes = false;
+ if (rowsCountedManually)
+ emit totalRowsAndPagesAvailable();
else
- queryExecutor->countResults();
+ countRes = queryExecutor->countResults();
+ if (!countRes || !queryExecutor->getAsyncMode())
+ {
+ results.clear();
+ detachDatabases();
+ }
}
void SqlQueryModel::handleExecFailed(int code, QString errorMessage)
@@ -1019,7 +1026,7 @@ void SqlQueryModel::handleExecFailed(int code, QString errorMessage)
emit executionFailed(tr("Error while loading query results: %1").arg(errorMessage));
}
else
- emit executionFailed(tr("Error while executing SQL query: %1").arg(errorMessage));
+ emit executionFailed(tr("Error while executing SQL query on database '%1': %2").arg(db->getName(), errorMessage));
restoreNumbersToQueryExecutor();
resultsCountingFinished(0, 0, 0);
@@ -1032,6 +1039,7 @@ void SqlQueryModel::resultsCountingFinished(quint64 rowsAffected, quint64 rowsRe
this->rowsAffected = rowsAffected;
this->totalRowsReturned = rowsReturned;
this->totalPages = totalPages;
+ detachDatabases();
emit totalRowsAndPagesAvailable();
}
@@ -1150,10 +1158,10 @@ void SqlQueryModel::storeStep1NumbersFromExecution()
lastExecutionTime = queryExecutor->getLastExecutionTime();
page = queryExecutor->getPage();
sortOrder = queryExecutor->getSortOrder();
+ rowsAffected = queryExecutor->getRowsAffected();
if (!queryExecutor->getSkipRowCounting())
{
- rowsAffected = queryExecutor->getRowsAffected();
totalPages = queryExecutor->getTotalPages();
if (!queryExecutor->isRowCountingRequired())
totalRowsReturned = queryExecutor->getTotalRowsReturned();
@@ -1214,6 +1222,11 @@ bool SqlQueryModel::wasSchemaModified() const
return queryExecutor->wasSchemaModified();
}
+bool SqlQueryModel::wasDataModifyingQuery() const
+{
+ return queryExecutor->wasDataModifyingQuery();
+}
+
void SqlQueryModel::updateSelectiveCommitRollbackActions(const QItemSelection& selected, const QItemSelection& deselected)
{
UNUSED(selected);
@@ -1310,6 +1323,11 @@ Icon& SqlQueryModel::getIconForIdx(int idx) const
return ICONS.SORT_COUNT_20_PLUS;
}
+void SqlQueryModel::detachDatabases()
+{
+ queryExecutor->releaseResultsAndCleanup();
+}
+
void SqlQueryModel::addNewRow()
{
int row = rowCount();
@@ -1483,7 +1501,7 @@ void SqlQueryModel::CommitUpdateQueryBuilder::setTable(const QString& table)
void SqlQueryModel::CommitUpdateQueryBuilder::setColumn(const QString& column)
{
- this->columns = {column};
+ this->columns = QStringList({column});
}
void SqlQueryModel::CommitUpdateQueryBuilder::addColumn(const QString& column)
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h
index cb626ae..cbdd606 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodel.h
@@ -113,6 +113,7 @@ class GUI_API_EXPORT SqlQueryModel : public QStandardItemModel
* @return true if schema was modified, or false if not.
*/
bool wasSchemaModified() const;
+ bool wasDataModifyingQuery() const;
SqlQueryView* getView() const;
void setView(SqlQueryView* value);
@@ -254,6 +255,7 @@ class GUI_API_EXPORT SqlQueryModel : public QStandardItemModel
void reloadInternal();
void addNewRowInternal(int rowIdx);
Icon& getIconForIdx(int idx) const;
+ void detachDatabases();
QString query;
bool explain = false;
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp
index 62d0b45..0966ede 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlquerymodelcolumn.cpp
@@ -63,7 +63,8 @@ QString SqlQueryModelColumn::resolveMessage(SqlQueryModelColumn::EditionForbidde
switch (reason)
{
case EditionForbiddenReason::COMPOUND_SELECT:
- return QObject::tr("Cannot edit columns that are result of compound SELECT statements (one that includes UNION, INTERSECT or EXCEPT keywords).");
+ return QObject::tr("Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords).")
+ .arg("SELECT", "UNION", "INTERSECT", "EXCEPT");
case EditionForbiddenReason::SMART_EXECUTION_FAILED:
return QObject::tr("The query execution mechanism had problems with extracting ROWID's properly. This might be a bug in the application. You may want to report this.");
case EditionForbiddenReason::EXPRESSION:
@@ -71,11 +72,11 @@ QString SqlQueryModelColumn::resolveMessage(SqlQueryModelColumn::EditionForbidde
case EditionForbiddenReason::SYSTEM_TABLE:
return QObject::tr("Requested column belongs to restricted SQLite table. Those tables cannot be edited directly.");
case EditionForbiddenReason::NOT_A_SELECT:
- return QObject::tr("Cannot edit results of query other than SELECT.");
+ return QObject::tr("Cannot edit results of query other than %1.").arg("SELECT");
case EditionForbiddenReason::GROUPED_RESULTS:
- return QObject::tr("Cannot edit columns that are result of aggregated SELECT statements.");
+ return QObject::tr("Cannot edit columns that are result of aggregated %1 statements.").arg("SELECT");
case EditionForbiddenReason::DISTINCT_RESULTS:
- return QObject::tr("Cannot edit columns that are result of SELECT DISTINCT statement.");
+ return QObject::tr("Cannot edit columns that are result of %1 statement.").arg("SELECT DISTINCT");
case EditionForbiddenReason::COMMON_TABLE_EXPRESSION:
return QObject::tr("Cannot edit columns that are result of common table expression statement (%1).").arg("WITH ... SELECT ...");
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp
index e4a0656..1f08b30 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.cpp
@@ -35,88 +35,19 @@ SqlQueryView::~SqlQueryView()
delete itemDelegate;
}
-QList<SqlQueryItem*> SqlQueryView::getSelectedItems()
-{
- QList<SqlQueryItem*> items;
- QModelIndexList idxList = selectionModel()->selectedIndexes();
- QModelIndex currIdx = getCurrentIndex();
- if (!idxList.contains(currIdx) && currIdx.isValid())
- idxList << currIdx;
-
- if (idxList.size() == 0)
- return items;
-
- qSort(idxList);
- const SqlQueryModel* model = dynamic_cast<const SqlQueryModel*>(idxList.first().model());
- foreach (const QModelIndex& idx, idxList)
- items << model->itemFromIndex(idx);
-
- return items;
-}
-
-SqlQueryItem* SqlQueryView::getCurrentItem()
-{
- QModelIndex idx = getCurrentIndex();
- if (!idx.isValid())
- return nullptr;
-
- return getModel()->itemFromIndex(idx);
-}
-
-SqlQueryModel* SqlQueryView::getModel()
-{
- return dynamic_cast<SqlQueryModel*>(model());
-}
-
-void SqlQueryView::setModel(QAbstractItemModel* model)
-{
- QTableView::setModel(model);
- connect(widgetCover, SIGNAL(cancelClicked()), getModel(), SLOT(interrupt()));
- connect(getModel(), &SqlQueryModel::commitStatusChanged, this, &SqlQueryView::updateCommitRollbackActions);
- connect(getModel(), &SqlQueryModel::sortingUpdated, this, &SqlQueryView::sortingUpdated);
-}
-
-SqlQueryItem* SqlQueryView::itemAt(const QPoint& pos)
-{
- return dynamic_cast<SqlQueryItem*>(getModel()->itemFromIndex(indexAt(pos)));
-}
-
-QToolBar* SqlQueryView::getToolBar(int toolbar) const
-{
- UNUSED(toolbar);
- return nullptr;
-}
-
-void SqlQueryView::addAdditionalAction(QAction* action)
-{
- additionalActions << action;
-}
-
-QModelIndex SqlQueryView::getCurrentIndex() const
-{
- return currentIndex();
-}
-
-void SqlQueryView::mouseDoubleClickEvent(QMouseEvent* event)
-{
- SqlQueryItem* item = itemAt(event->pos());
- if (item && !handleDoubleClick(item))
- return;
-
- QTableView::mouseDoubleClickEvent(event);
-}
-
void SqlQueryView::init()
{
itemDelegate = new SqlQueryItemDelegate();
setItemDelegate(itemDelegate);
setMouseTracking(true);
+ setEditTriggers(QAbstractItemView::AnyKeyPressed);
setContextMenuPolicy(Qt::CustomContextMenu);
contextMenu = new QMenu(this);
connect(this, &QWidget::customContextMenuRequested, this, &SqlQueryView::customContextMenuRequested);
connect(CFG_UI.Fonts.DataView, SIGNAL(changed(QVariant)), this, SLOT(updateFont()));
+ connect(this, SIGNAL(activated(QModelIndex)), this, SLOT(itemActivated(QModelIndex)));
horizontalHeader()->setSortIndicatorShown(false);
horizontalHeader()->setSectionsClickable(true);
@@ -227,7 +158,84 @@ void SqlQueryView::setupHeaderMenu()
headerContextMenu->addAction(actionMap[RESET_SORTING]);
}
-bool SqlQueryView::handleDoubleClick(SqlQueryItem* item)
+QList<SqlQueryItem*> SqlQueryView::getSelectedItems()
+{
+ QList<SqlQueryItem*> items;
+ QModelIndexList idxList = selectionModel()->selectedIndexes();
+ QModelIndex currIdx = getCurrentIndex();
+ if (!idxList.contains(currIdx) && currIdx.isValid())
+ idxList << currIdx;
+
+ if (idxList.size() == 0)
+ return items;
+
+ qSort(idxList);
+ const SqlQueryModel* model = dynamic_cast<const SqlQueryModel*>(idxList.first().model());
+ foreach (const QModelIndex& idx, idxList)
+ items << model->itemFromIndex(idx);
+
+ return items;
+}
+
+SqlQueryItem* SqlQueryView::getCurrentItem()
+{
+ QModelIndex idx = getCurrentIndex();
+ if (!idx.isValid())
+ return nullptr;
+
+ return getModel()->itemFromIndex(idx);
+}
+
+SqlQueryModel* SqlQueryView::getModel()
+{
+ return dynamic_cast<SqlQueryModel*>(model());
+}
+
+void SqlQueryView::setModel(QAbstractItemModel* model)
+{
+ QTableView::setModel(model);
+ connect(widgetCover, SIGNAL(cancelClicked()), getModel(), SLOT(interrupt()));
+ connect(getModel(), &SqlQueryModel::commitStatusChanged, this, &SqlQueryView::updateCommitRollbackActions);
+ connect(getModel(), &SqlQueryModel::sortingUpdated, this, &SqlQueryView::sortingUpdated);
+}
+
+SqlQueryItem* SqlQueryView::itemAt(const QPoint& pos)
+{
+ return dynamic_cast<SqlQueryItem*>(getModel()->itemFromIndex(indexAt(pos)));
+}
+
+QToolBar* SqlQueryView::getToolBar(int toolbar) const
+{
+ UNUSED(toolbar);
+ return nullptr;
+}
+
+void SqlQueryView::addAdditionalAction(QAction* action)
+{
+ additionalActions << action;
+}
+
+QModelIndex SqlQueryView::getCurrentIndex() const
+{
+ return currentIndex();
+}
+
+void SqlQueryView::itemActivated(const QModelIndex& index)
+{
+ if (!index.isValid())
+ return;
+
+ SqlQueryItem* item = getModel()->itemFromIndex(index);
+ if (!item)
+ return;
+
+ if (!editInEditorIfNecessary(item))
+ return;
+
+ edit(getCurrentIndex());
+}
+
+bool SqlQueryView::editInEditorIfNecessary(SqlQueryItem* item)
{
if (item->getColumn()->dataType.getType() == DataType::BLOB)
{
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h
index 65486fe..a523200 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqlqueryview.h
@@ -71,9 +71,6 @@ class GUI_API_EXPORT SqlQueryView : public QTableView, public ExtActionContainer
void addAdditionalAction(QAction* action);
QModelIndex getCurrentIndex() const;
- protected:
- void mouseDoubleClickEvent(QMouseEvent* event);
-
private:
void init();
void setupWidgetCover();
@@ -82,7 +79,7 @@ class GUI_API_EXPORT SqlQueryView : public QTableView, public ExtActionContainer
void refreshShortcuts();
void setupActionsForMenu(SqlQueryItem* currentItem, const QList<SqlQueryItem*>& selectedItems);
void setupHeaderMenu();
- bool handleDoubleClick(SqlQueryItem* item);
+ bool editInEditorIfNecessary(SqlQueryItem* item);
SqlQueryItemDelegate* itemDelegate = nullptr;
QMenu* contextMenu = nullptr;
@@ -100,6 +97,7 @@ class GUI_API_EXPORT SqlQueryView : public QTableView, public ExtActionContainer
void resetSorting();
void sortingUpdated(const QueryExecutor::SortList& sortOrder);
void updateFont();
+ void itemActivated(const QModelIndex& index);
public slots:
void executionStarted();
diff --git a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqltablemodel.cpp b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqltablemodel.cpp
index d097d55..b0da325 100644
--- a/SQLiteStudio3/guiSQLiteStudio/datagrid/sqltablemodel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/datagrid/sqltablemodel.cpp
@@ -103,13 +103,15 @@ bool SqlTableModel::commitDeletedRow(const QList<SqlQueryItem*>& itemsInRow)
return false;
}
- if (itemsInRow[0]->isJustInsertedWithOutRowId())
- {
- QString msg = tr("When inserted new row to the WITHOUT ROWID table, using DEFAULT value for PRIMARY KEY, "
- "the table has to be reloaded in order to delete the new row.");
- notifyError(tr("Error while deleting row from table %1: %2").arg(table).arg(msg));
- return false;
- }
+ // This should not happen anymore (since WITHOUT ROWID tables should be handled properly now,
+ // but we will keep this here for a while, just in case.
+// if (itemsInRow[0]->isJustInsertedWithOutRowId())
+// {
+// QString msg = tr("When inserted new row to the WITHOUT ROWID table, using DEFAULT value for PRIMARY KEY, "
+// "the table has to be reloaded in order to delete the new row.");
+// notifyError(tr("Error while deleting row from table %1: %2").arg(table).arg(msg));
+// return false;
+// }
RowId rowId = itemsInRow[0]->getRowId();
if (rowId.isEmpty())
diff --git a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp
index baa0f76..af9da8f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.cpp
@@ -55,6 +55,11 @@ Db* DbListModel::getDb(int index)
return dbList[index];
}
+int DbListModel::getIndexForDb(Db* db)
+{
+ return dbList.indexOf(db);
+}
+
void DbListModel::setSortMode(DbListModel::SortMode sortMode)
{
this->sortMode = sortMode;
diff --git a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h
index 121db4d..57928df 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dblistmodel.h
@@ -26,6 +26,7 @@ class GUI_API_EXPORT DbListModel : public QAbstractListModel
QModelIndex sibling(int row, int column, const QModelIndex & idx) const;
Db* getDb(int index);
+ int getIndexForDb(Db* db);
void setSortMode(SortMode sortMode);
SortMode getSortMode() const;
void setSortMode(const QString& sortMode);
diff --git a/SQLiteStudio3/guiSQLiteStudio/dbobjectdialogs.h b/SQLiteStudio3/guiSQLiteStudio/dbobjectdialogs.h
index bedbab8..f9a36ee 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dbobjectdialogs.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dbobjectdialogs.h
@@ -14,6 +14,8 @@ class ViewWindow;
class GUI_API_EXPORT DbObjectDialogs : public QObject
{
+ Q_OBJECT
+
public:
explicit DbObjectDialogs(Db* db);
DbObjectDialogs(Db* db, QWidget* parentWidget);
diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp
index 8e137a4..509594d 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.cpp
@@ -114,20 +114,21 @@ void DbTree::createActions()
createAction(INTEGRITY_CHECK, ICONS.INTEGRITY_CHECK, tr("Integrity check"), this, SLOT(integrityCheck()), this);
createAction(ADD_TABLE, ICONS.TABLE_ADD, tr("Create a table"), this, SLOT(addTable()), this);
createAction(EDIT_TABLE, ICONS.TABLE_EDIT, tr("Edit the table"), this, SLOT(editTable()), this);
- createAction(DEL_TABLE, ICONS.TABLE_DEL, tr("Drop the table"), this, SLOT(delTable()), this);
+ createAction(DEL_TABLE, ICONS.TABLE_DEL, tr("Delete the table"), this, SLOT(delTable()), this);
createAction(EXPORT_TABLE, ICONS.TABLE_EXPORT, tr("Export the table"), this, SLOT(exportTable()), this);
createAction(IMPORT_TABLE, ICONS.TABLE_IMPORT, tr("Import into the table"), this, SLOT(importTable()), this);
createAction(POPULATE_TABLE, ICONS.TABLE_POPULATE, tr("Populate table"), this, SLOT(populateTable()), this);
createAction(CREATE_SIMILAR_TABLE, ICONS.TABLE_CREATE_SIMILAR, tr("Create similar table"), this, SLOT(createSimilarTable()), this);
+ createAction(RESET_AUTOINCREMENT, ICONS.RESET_AUTOINCREMENT, tr("Reset autoincrement sequence"), this, SLOT(resetAutoincrement()), this);
createAction(ADD_INDEX, ICONS.INDEX_ADD, tr("Create an index"), this, SLOT(addIndex()), this);
createAction(EDIT_INDEX, ICONS.INDEX_EDIT, tr("Edit the index"), this, SLOT(editIndex()), this);
- createAction(DEL_INDEX, ICONS.INDEX_DEL, tr("Drop the index"), this, SLOT(delIndex()), this);
+ createAction(DEL_INDEX, ICONS.INDEX_DEL, tr("Delete the index"), this, SLOT(delIndex()), this);
createAction(ADD_TRIGGER, ICONS.TRIGGER_ADD, tr("Create a trigger"), this, SLOT(addTrigger()), this);
createAction(EDIT_TRIGGER, ICONS.TRIGGER_EDIT, tr("Edit the trigger"), this, SLOT(editTrigger()), this);
- createAction(DEL_TRIGGER, ICONS.TRIGGER_DEL, tr("Drop the trigger"), this, SLOT(delTrigger()), this);
+ createAction(DEL_TRIGGER, ICONS.TRIGGER_DEL, tr("Delete the trigger"), this, SLOT(delTrigger()), this);
createAction(ADD_VIEW, ICONS.VIEW_ADD, tr("Create a view"), this, SLOT(addView()), this);
createAction(EDIT_VIEW, ICONS.VIEW_EDIT, tr("Edit the view"), this, SLOT(editView()), this);
- createAction(DEL_VIEW, ICONS.VIEW_DEL, tr("Drop the view"), this, SLOT(delView()), this);
+ createAction(DEL_VIEW, ICONS.VIEW_DEL, tr("Delete the view"), this, SLOT(delView()), this);
createAction(ADD_COLUMN, ICONS.TABLE_COLUMN_ADD, tr("Add a column"), this, SLOT(addColumn()), this);
createAction(EDIT_COLUMN, ICONS.TABLE_COLUMN_EDIT, tr("Edit the column"), this, SLOT(editColumn()), this);
createAction(DEL_COLUMN, ICONS.TABLE_COLUMN_DELETE, tr("Delete the column"), this, SLOT(delColumn()), this);
@@ -188,7 +189,7 @@ void DbTree::updateActionStates(const QStandardItem *item)
break;
case DbTreeItem::Type::TABLE:
enabled << EDIT_TABLE << DEL_TABLE << EXPORT_TABLE << IMPORT_TABLE << POPULATE_TABLE << ADD_COLUMN << CREATE_SIMILAR_TABLE;
- enabled << ADD_INDEX << ADD_TRIGGER;
+ enabled << RESET_AUTOINCREMENT << ADD_INDEX << ADD_TRIGGER;
break;
case DbTreeItem::Type::VIRTUAL_TABLE:
// TODO change below when virtual tables can be edited
@@ -304,12 +305,12 @@ void DbTree::setupActionsForMenu(DbTreeItem* currItem, QMenu* contextMenu)
{
QList<ActionEntry> actions;
- ActionEntry dbEntry(ICONS.DATABASE, tr("Datatabase"));
+ ActionEntry dbEntry(ICONS.DATABASE, tr("Database"));
dbEntry += ADD_DB;
dbEntry += EDIT_DB;
dbEntry += DELETE_DB;
- ActionEntry dbEntryExt(ICONS.DATABASE, tr("Datatabase"));
+ ActionEntry dbEntryExt(ICONS.DATABASE, tr("Database"));
dbEntryExt += CONNECT_TO_DB;
dbEntryExt += DISCONNECT_FROM_DB;
dbEntryExt += _separator;
@@ -391,6 +392,7 @@ void DbTree::setupActionsForMenu(DbTreeItem* currItem, QMenu* contextMenu)
actions += ActionEntry(EXPORT_TABLE);
actions += ActionEntry(POPULATE_TABLE);
actions += ActionEntry(CREATE_SIMILAR_TABLE);
+ actions += ActionEntry(RESET_AUTOINCREMENT);
actions += ActionEntry(_separator);
actions += dbEntryExt;
break;
@@ -875,6 +877,7 @@ void DbTree::refreshSchema(Db* db)
return;
treeModel->refreshSchema(db);
+ updateActionsForCurrent();
}
void DbTree::copy()
@@ -929,7 +932,7 @@ void DbTree::createGroup()
while (existingItems.contains(name = QInputDialog::getText(this, tr("Create group"), tr("Group name"))) ||
(name.isEmpty() && !name.isNull()))
{
- QMessageBox::information(this, tr("Create directory"), tr("Entry with name %1 already exists in directory %2.")
+ QMessageBox::information(this, tr("Create group"), tr("Entry with name %1 already exists in group %2.")
.arg(name).arg(currItem->text()), QMessageBox::Ok);
}
@@ -1370,6 +1373,32 @@ void DbTree::createSimilarTable()
dialog.addTableSimilarTo(QString(), table);
}
+void DbTree::resetAutoincrement()
+{
+ Db* db = getSelectedDb();
+ if (!db || !db->isValid())
+ return;
+
+ DbTreeItem* item = ui->treeView->currentItem();
+ QString table = item->getTable();
+ if (table.isNull())
+ {
+ qWarning() << "Tried to reset autoincrement, while table wasn't selected in DbTree.";
+ return;
+ }
+
+ QMessageBox::StandardButton btn = QMessageBox::question(this, tr("Reset autoincrement"), tr("Are you sure you want to reset autoincrement value for table '%1'?")
+ .arg(table));
+ if (btn != QMessageBox::Yes)
+ return;
+
+ SqlQueryPtr res = db->exec("DELETE FROM sqlite_sequence WHERE name = ?;", {table});
+ if (res->isError())
+ notifyError(tr("An error occurred while trying to reset autoincrement value for table '%1': %2").arg(table, res->getErrorText()));
+ else
+ notifyInfo(tr("Autoincrement value for table '%1' has been reset successfly.").arg(table));
+}
+
void DbTree::addColumn(DbTreeItem* item)
{
Db* db = getSelectedOpenDb();
@@ -1500,7 +1529,7 @@ void DbTree::deleteItems(const QList<DbTreeItem*>& itemsToDelete)
if (deletedDatabases.contains(dbToRefresh))
continue;
- DBTREE->refreshSchema(dbToRefresh);
+ refreshSchema(dbToRefresh);
}
}
@@ -1508,6 +1537,8 @@ void DbTree::refreshSchemas()
{
foreach (Db* db, DBLIST->getDbList())
treeModel->refreshSchema(db);
+
+ updateActionsForCurrent();
}
void DbTree::interrupt()
diff --git a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.h b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.h
index b368c08..60b8dd5 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dbtree/dbtree.h
@@ -83,6 +83,7 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
REFRESH_SCHEMAS,
REFRESH_SCHEMA,
CREATE_SIMILAR_TABLE,
+ RESET_AUTOINCREMENT,
_separator // Never use it directly, it's just for menu setup
};
@@ -107,6 +108,8 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
void setSelectedItem(DbTreeItem* item);
bool isMimeDataValidForItem(const QMimeData* mimeData, const DbTreeItem* item);
QToolBar* getToolBar(int toolbar) const;
+ Db* getSelectedDb();
+ Db* getSelectedOpenDb();
static bool isItemDraggable(const DbTreeItem* item);
@@ -116,8 +119,6 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
private:
void setActionEnabled(int action, bool enabled);
- Db* getSelectedDb();
- Db* getSelectedOpenDb();
TableWindow* openTable(DbTreeItem* item);
TableWindow* openTable(Db* db, const QString& database, const QString& table);
TableWindow* newTable(DbTreeItem* item);
@@ -147,6 +148,7 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
void refreshSchema(Db* db);
void refreshSchemas();
void interrupt();
+ void updateActionsForCurrent();
private slots:
void copy();
@@ -184,6 +186,7 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
void vacuumDb();
void integrityCheck();
void createSimilarTable();
+ void resetAutoincrement();
void addColumn(DbTreeItem* item);
void editColumn(DbTreeItem* item);
void delColumn(DbTreeItem* item);
@@ -191,7 +194,6 @@ class GUI_API_EXPORT DbTree : public QDockWidget, public ExtActionContainer
void deleteSelected();
void deleteItems(const QList<DbTreeItem*>& itemsToDelete);
void refreshSchema();
- void updateActionsForCurrent();
void dbConnected(Db* db);
void dbDisconnected(Db* db);
void updateDbIcon(Db* db);
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.cpp
index df790de..0d291e5 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.cpp
@@ -4,6 +4,9 @@
#include "sqlitestudio.h"
#include "iconmanager.h"
#include "services/extralicensemanager.h"
+#include "services/pluginmanager.h"
+#include "formmanager.h"
+#include "iconmanager.h"
#include <QDebug>
#include <QFile>
@@ -26,6 +29,7 @@ void AboutDialog::init(InitialMode initialMode)
ui->tabWidget->setCurrentWidget(initialMode == ABOUT ? ui->about : ui->license);
+ // About
QString distName;
switch (getDistributionType())
{
@@ -43,15 +47,23 @@ void AboutDialog::init(InitialMode initialMode)
QString newLabelValue = ui->aboutLabel->text().arg(SQLITESTUDIO->getVersionString(), distName);
ui->aboutLabel->setText(newLabelValue);
+ // Licenses
licenseContents = "";
int row = 1;
- QHash<QString,QString> licenses = SQLITESTUDIO->getExtraLicenseManager()->getLicenses();
+ QHash<QString,QString> licenses = SQLITESTUDIO->getExtraLicenseManager()->getLicensesContents();
+ QString violation;
+ QString title;
QHashIterator<QString,QString> it(licenses);
while (it.hasNext())
{
it.next();
- readLicense(row++, it.key(), it.value());
+ violation = QString();
+ title = it.key();
+ if (SQLITESTUDIO->getExtraLicenseManager()->isViolatedLicense(title))
+ violation = SQLITESTUDIO->getExtraLicenseManager()->getViolationMessage(title);
+
+ addLicense(row++, title, it.value(), violation);
}
buildIndex();
@@ -59,6 +71,18 @@ void AboutDialog::init(InitialMode initialMode)
ui->licenseEdit->setHtml(licenseContents);
indexContents.clear();
licenseContents.clear();
+
+ // Environment
+ copyAct = new QAction(tr("Copy"), this);
+ ui->appDirEdit->setText(qApp->applicationDirPath());
+ ui->cfgDirEdit->setText(CFG->getConfigDir());
+ ui->pluginDirList->addItems(filterResourcePaths(PLUGINS->getPluginDirs()));
+ ui->iconDirList->addItems(filterResourcePaths(ICONMANAGER->getIconDirs()));
+ ui->formDirList->addItems(filterResourcePaths(FORMS->getFormDirs()));
+ ui->qtVerEdit->setText(QT_VERSION_STR);
+ ui->pluginDirList->addAction(copyAct);
+ ui->iconDirList->addAction(copyAct);
+ ui->formDirList->addAction(copyAct);
}
void AboutDialog::buildIndex()
@@ -68,16 +92,19 @@ void AboutDialog::buildIndex()
for (const QString& idx : indexContents)
entries += entryTpl.arg(idx);
- licenseContents.prepend("<h3>Table of contents:</h3><ol>" + entries.join("") + "</ol>");
+ licenseContents.prepend(tr("<h3>Table of contents:</h3><ol>%2</ol>").arg(entries.join("")));
}
-void AboutDialog::readLicense(int row, const QString& title, const QString& path)
+void AboutDialog::addLicense(int row, const QString& title, const QString& contents, const QString& violation)
{
+ static_qstring(violatedTpl, "<span style=\"color: #FF0000;\">%1 (%2)</span>");
+
+ QString escapedTitle = title.toHtmlEscaped();
+ QString finalTitle = violation.isNull() ? escapedTitle : violatedTpl.arg(escapedTitle, violation);
QString rowNum = QString::number(row);
- QString contents = readFile(path);
- licenseContents += "<h3>" + rowNum + ". " + title + "</h3>";
- licenseContents += "<pre>" + contents + "</pre>";
- indexContents += title;
+ licenseContents += "<h3>" + rowNum + ". " + finalTitle + "</h3>";
+ licenseContents += "<pre>" + contents.toHtmlEscaped() + "</pre>";
+ indexContents += finalTitle;
}
QString AboutDialog::readFile(const QString& path)
@@ -92,3 +119,16 @@ QString AboutDialog::readFile(const QString& path)
file.close();
return contents;
}
+
+QStringList AboutDialog::filterResourcePaths(const QStringList& paths)
+{
+ QStringList output;
+ for (const QString& path : paths)
+ {
+ if (path.startsWith(":"))
+ continue;
+
+ output << path;
+ }
+ return output;
+}
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.h b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.h
index 3c828c0..4d49145 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.h
@@ -26,12 +26,15 @@ class GUI_API_EXPORT AboutDialog : public QDialog
private:
void init(InitialMode initialMode);
void buildIndex();
- void readLicense(int row, const QString& title, const QString& path);
+ void addLicense(int row, const QString& title, const QString& contents, const QString& violation);
QString readFile(const QString& path);
+ static QStringList filterResourcePaths(const QStringList& paths);
+
Ui::AboutDialog *ui = nullptr;
QStringList indexContents;
QString licenseContents;
+ QAction* copyAct = nullptr;
};
#endif // ABOUTDIALOG_H
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.ui
index 67fa632..1239cf5 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/aboutdialog.ui
@@ -17,7 +17,7 @@
<item row="0" column="1">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
- <number>1</number>
+ <number>2</number>
</property>
<widget class="QWidget" name="about">
<attribute name="title">
@@ -50,6 +50,97 @@
</item>
</layout>
</widget>
+ <widget class="QWidget" name="env">
+ <attribute name="title">
+ <string>Environment</string>
+ </attribute>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="3" column="0">
+ <widget class="QLabel" name="iconDirLabel">
+ <property name="text">
+ <string>Icon directories</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QListWidget" name="pluginDirList">
+ <property name="contextMenuPolicy">
+ <enum>Qt::ActionsContextMenu</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QLabel" name="formDirLabel">
+ <property name="text">
+ <string>Form directories</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QListWidget" name="iconDirList">
+ <property name="contextMenuPolicy">
+ <enum>Qt::ActionsContextMenu</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="pluginDirLabel">
+ <property name="text">
+ <string>Plugin directories</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="appDirLabel">
+ <property name="text">
+ <string>Application directory</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLineEdit" name="appDirEdit">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="cfgDirLabel">
+ <property name="text">
+ <string>Configuration directory</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="2">
+ <widget class="QListWidget" name="formDirList">
+ <property name="contextMenuPolicy">
+ <enum>Qt::ActionsContextMenu</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QLineEdit" name="cfgDirEdit">
+ <property name="readOnly">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0">
+ <widget class="QLabel" name="qtVerLabel">
+ <property name="text">
+ <string>Qt version:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="2">
+ <widget class="QLabel" name="qtVerEdit">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
<item row="0" column="0">
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp
index 7ab9c67..59a2ec6 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.cpp
@@ -65,7 +65,6 @@ QString BugDialog::getMessageAboutReportHistory()
{
return tr("You can see all your reported bugs and ideas by selecting menu '%1' and then '%2'.").arg(MAINWINDOW->getSQLiteStudioMenu()->title())
.arg(MAINWINDOW->getAction(MainWindow::BUG_REPORT_HISTORY)->text());
- return "";
}
void BugDialog::finishedBugReport(bool success, const QString& errorMsg)
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.ui
index f2dbcf3..3871436 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Bugs and ideas</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -51,7 +51,7 @@
<item>
<widget class="QToolButton" name="helpButton">
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugreportlogindialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugreportlogindialog.ui
index f6597bc..d1d26e6 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/bugreportlogindialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/bugreportlogindialog.ui
@@ -33,7 +33,7 @@
<item row="1" column="0">
<widget class="QLabel" name="passwordLabel">
<property name="text">
- <string>Password</string>
+ <string>Password:</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui
index ac7e5ae..2133aca 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.ui
@@ -36,7 +36,7 @@
<item row="1" column="3">
<widget class="QLabel" name="label">
<property name="text">
- <string>,</string>
+ <string notr="true">,</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp
index 932036e..b22ee6e 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.cpp
@@ -21,6 +21,7 @@
#include "configmapper.h"
#include "datatype.h"
#include "uiutils.h"
+#include "translations.h"
#include <QSignalMapper>
#include <QLineEdit>
#include <QSpinBox>
@@ -186,6 +187,7 @@ void ConfigDialog::init()
initFormatterPlugins();
initDataEditors();
initShortcuts();
+ initLangs();
connect(ui->categoriesTree, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(switchPage(QTreeWidgetItem*)));
connect(ui->previewTabs, SIGNAL(currentChanged(int)), this, SLOT(updateStylePreview()));
@@ -959,6 +961,7 @@ void ConfigDialog::initInternalCustomConfigWidgets()
QList<CustomConfigWidgetPlugin*> customWidgets;
customWidgets << new StyleConfigWidget();
customWidgets << new ListToStringListHash(&CFG_UI.General.DataEditorsOrder);
+ customWidgets << new ComboDataWidget(&CFG_CORE.General.Language);
configMapper->setInternalCustomConfigWidgets(customWidgets);
}
@@ -1235,7 +1238,7 @@ void ConfigDialog::initPluginsPage()
builtIn = PLUGINS->isBuiltIn(pluginName);
title = PLUGINS->getTitle(pluginName);
if (builtIn)
- title += tr(" (built-in)", "plugins manager in configuration dialog");
+ title += tr("%1 (built-in)", "plugins manager in configuration dialog").arg(title);
item = new QTreeWidgetItem({title});
item->setCheckState(0, PLUGINS->isLoaded(pluginName) ? Qt::Checked : Qt::Unchecked);
@@ -1489,6 +1492,23 @@ void ConfigDialog::initShortcuts(CfgCategory *cfgCategory)
category->setExpanded(true);
}
+void ConfigDialog::initLangs()
+{
+ QMap<QString, QString> langs = getAvailableLanguages();
+ int idx = 0;
+ int selected = -1;
+ for (const QString& lang : langs.keys())
+ {
+ ui->langCombo->addItem(lang, langs[lang]);
+ if (langs[lang] == SQLITESTUDIO->getCurrentLang())
+ selected = idx;
+
+ idx++;
+ }
+
+ ui->langCombo->setCurrentIndex(selected);
+}
+
bool ConfigDialog::isPluginCategoryItem(QTreeWidgetItem *item) const
{
return item->parent() && item->parent()->parent() && item->parent()->parent() == getPluginsCategoryItem();
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.h b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.h
index 95e9f1a..5661c1a 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.h
@@ -56,6 +56,7 @@ class GUI_API_EXPORT ConfigDialog : public QDialog
void initDataEditors();
void initShortcuts();
void initShortcuts(CfgCategory* cfgCategory);
+ void initLangs();
void applyStyle(QWidget* widget, QStyle* style);
QTreeWidgetItem* getPluginsCategoryItem() const;
QTreeWidgetItem* getPluginsCategoryItem(PluginType* type) const;
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.ui
index 040600e..966ebca 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/configdialog.ui
@@ -104,7 +104,7 @@
<string>General</string>
</property>
<property name="statusTip">
- <string>generalPage</string>
+ <string notr="true">generalPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -116,7 +116,7 @@
<string>Keyboard shortcuts</string>
</property>
<property name="statusTip">
- <string>shortcutsPage</string>
+ <string notr="true">shortcutsPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -128,7 +128,7 @@
<string>Look &amp; feel</string>
</property>
<property name="statusTip">
- <string>lookAndFeelPage</string>
+ <string notr="true">lookAndFeelPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -139,7 +139,7 @@
<string>Style</string>
</property>
<property name="statusTip">
- <string>stylePage</string>
+ <string notr="true">stylePage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -151,7 +151,7 @@
<string>Fonts</string>
</property>
<property name="statusTip">
- <string>fontsPage</string>
+ <string notr="true">fontsPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -163,7 +163,7 @@
<string>Colors</string>
</property>
<property name="statusTip">
- <string>colorsPage</string>
+ <string notr="true">colorsPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -176,7 +176,7 @@
<string>Plugins</string>
</property>
<property name="statusTip">
- <string>pluginsPage</string>
+ <string notr="true">pluginsPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -187,7 +187,7 @@
<string>Code formatters</string>
</property>
<property name="statusTip">
- <string>formatterPluginsPage</string>
+ <string notr="true">formatterPluginsPage</string>
</property>
</item>
</item>
@@ -196,7 +196,7 @@
<string>Data browsing</string>
</property>
<property name="statusTip">
- <string>dataBrowsingPage</string>
+ <string notr="true">dataBrowsingPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -207,7 +207,7 @@
<string>Data editors</string>
</property>
<property name="statusTip">
- <string>dataEditorsPage</string>
+ <string notr="true">dataEditorsPage</string>
</property>
<property name="icon">
<iconset resource="../icons.qrc">
@@ -227,7 +227,7 @@
</sizepolicy>
</property>
<property name="currentIndex">
- <number>2</number>
+ <number>6</number>
</property>
<widget class="QWidget" name="dataBrowsingPage">
<layout class="QVBoxLayout" name="verticalLayout_21">
@@ -259,7 +259,7 @@
<number>99999</number>
</property>
<property name="cfg" stdset="0">
- <string>General.NumberOfRowsPerPage</string>
+ <string notr="true">General.NumberOfRowsPerPage</string>
</property>
</widget>
</item>
@@ -288,7 +288,7 @@
<number>600</number>
</property>
<property name="cfg" stdset="0">
- <string>General.MaxInitialColumnWith</string>
+ <string notr="true">General.MaxInitialColumnWith</string>
</property>
</widget>
</item>
@@ -334,7 +334,7 @@
<item>
<widget class="QListWidget" name="dataEditorsTypesList">
<property name="cfg" stdset="0">
- <string>General.DataEditorsOrder</string>
+ <string notr="true">General.DataEditorsOrder</string>
</property>
</widget>
</item>
@@ -433,7 +433,7 @@
<number>9999999</number>
</property>
<property name="cfg" stdset="0">
- <string>General.DdlHistorySize</string>
+ <string notr="true">General.DdlHistorySize</string>
</property>
</widget>
</item>
@@ -450,7 +450,7 @@
<string>Don't show DDL preview dialog when commiting schema changes</string>
</property>
<property name="cfg" stdset="0">
- <string>General.DontShowDdlPreview</string>
+ <string notr="true">General.DontShowDdlPreview</string>
</property>
</widget>
</item>
@@ -478,7 +478,7 @@
<number>999999</number>
</property>
<property name="cfg" stdset="0">
- <string>General.SqlHistorySize</string>
+ <string notr="true">General.SqlHistorySize</string>
</property>
</widget>
</item>
@@ -501,7 +501,7 @@
<string>Execute only the query under the cursor</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ExecuteCurrentQueryOnly</string>
+ <string notr="true">General.ExecuteCurrentQueryOnly</string>
</property>
</widget>
</item>
@@ -520,7 +520,7 @@
<string>Automatically check for updates at startup</string>
</property>
<property name="cfg" stdset="0">
- <string>General.CheckUpdatesOnStartup</string>
+ <string notr="true">General.CheckUpdatesOnStartup</string>
</property>
</widget>
</item>
@@ -539,7 +539,7 @@
<string>Restore last session (active MDI windows) after startup</string>
</property>
<property name="cfg" stdset="0">
- <string>General.RestoreSession</string>
+ <string notr="true">General.RestoreSession</string>
</property>
</widget>
</item>
@@ -651,12 +651,35 @@
<number>0</number>
</property>
<item>
+ <widget class="QGroupBox" name="langGroup">
+ <property name="title">
+ <string>Language</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_30">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Changing language requires application restart to take effect.</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="langCombo">
+ <property name="cfg" stdset="0">
+ <string notr="true">General.Language</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<widget class="QGroupBox" name="dbListGroup">
<property name="title">
<string>Database list</string>
</property>
<layout class="QGridLayout" name="gridLayout">
- <item row="3" column="0">
+ <item row="4" column="0">
<widget class="QCheckBox" name="sortColumns">
<property name="toolTip">
<string>If switched off, then columns will be sorted in the order they are typed in CREATE TABLE statement.</string>
@@ -665,21 +688,21 @@
<string>Sort table columns alphabetically</string>
</property>
<property name="cfg" stdset="0">
- <string>General.SortColumns</string>
+ <string notr="true">General.SortColumns</string>
</property>
</widget>
</item>
- <item row="0" column="0">
+ <item row="1" column="0">
<widget class="QCheckBox" name="expandTablesCheck">
<property name="text">
<string>Expand tables node when connected to a database</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ExpandTables</string>
+ <string notr="true">General.ExpandTables</string>
</property>
</widget>
</item>
- <item row="5" column="0">
+ <item row="6" column="0">
<widget class="QGroupBox" name="addLabelsGroup">
<property name="toolTip">
<string>&lt;p&gt;Additional labels are those displayed next to the names on the databases list (they are blue, unless configured otherwise). Enabling this option will result in labels for databases, invalid databases and aggregated nodes (column group, index group, trigger group). For more labels see options below.&lt;p&gt;</string>
@@ -694,7 +717,7 @@
<bool>false</bool>
</property>
<property name="cfg" stdset="0">
- <string>General.ShowDbTreeLabels</string>
+ <string notr="true">General.ShowDbTreeLabels</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_20">
<item>
@@ -706,7 +729,7 @@
<string>Display labels for regular tables</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ShowRegularTableLabels</string>
+ <string notr="true">General.ShowRegularTableLabels</string>
</property>
</widget>
</item>
@@ -719,24 +742,24 @@
<string>Display labels for virtual tables</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ShowVirtualTableLabels</string>
+ <string notr="true">General.ShowVirtualTableLabels</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
- <item row="1" column="0">
+ <item row="2" column="0">
<widget class="QCheckBox" name="expandViewsCheck">
<property name="text">
<string>Expand views node when connected to a database</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ExpandViews</string>
+ <string notr="true">General.ExpandViews</string>
</property>
</widget>
</item>
- <item row="2" column="0">
+ <item row="3" column="0">
<widget class="QCheckBox" name="sortObjects">
<property name="toolTip">
<string>If this option is switched off, then objects will be sorted in order they appear in sqlite_master table (which is in order they were created)</string>
@@ -745,17 +768,17 @@
<string>Sort objects (tables, indexes, triggers and views) alphabetically</string>
</property>
<property name="cfg" stdset="0">
- <string>General.SortObjects</string>
+ <string notr="true">General.SortObjects</string>
</property>
</widget>
</item>
- <item row="4" column="0">
+ <item row="5" column="0">
<widget class="QCheckBox" name="dispSysTableCheck">
<property name="text">
<string>Display system tables and indexes on the list</string>
</property>
<property name="cfg" stdset="0">
- <string>General.ShowSystemObjects</string>
+ <string notr="true">General.ShowSystemObjects</string>
</property>
</widget>
</item>
@@ -777,7 +800,7 @@
<string>Open Table Windows with the data tab for start</string>
</property>
<property name="cfg" stdset="0">
- <string>General.OpenTablesOnData</string>
+ <string notr="true">General.OpenTablesOnData</string>
</property>
</widget>
</item>
@@ -799,7 +822,7 @@
<string>Open View Windows with the data tab for start</string>
</property>
<property name="cfg" stdset="0">
- <string>General.OpenViewsOnData</string>
+ <string notr="true">General.OpenViewsOnData</string>
</property>
</widget>
</item>
@@ -943,7 +966,7 @@
<item>
<widget class="QComboBox" name="activeStyleCombo">
<property name="cfg" stdset="0">
- <string>General.Style</string>
+ <string notr="true">General.Style</string>
</property>
</widget>
</item>
@@ -991,7 +1014,7 @@
<item row="1" column="6">
<widget class="QCheckBox" name="previewCheckBox">
<property name="text">
- <string>CheckBox</string>
+ <string notr="true">CheckBox</string>
</property>
</widget>
</item>
@@ -1015,7 +1038,7 @@
<item row="0" column="3" colspan="2">
<widget class="QPushButton" name="previewPushButton">
<property name="text">
- <string>PushButton</string>
+ <string notr="true">PushButton</string>
</property>
</widget>
</item>
@@ -1039,46 +1062,46 @@
<widget class="QTreeWidget" name="previewTreeWidget">
<column>
<property name="text">
- <string>Column</string>
+ <string notr="true">Column</string>
</property>
</column>
<item>
<property name="text">
- <string>123</string>
+ <string notr="true">123</string>
</property>
<item>
<property name="text">
- <string>11111</string>
+ <string notr="true">11111</string>
</property>
</item>
<item>
<property name="text">
- <string>22222</string>
+ <string notr="true">22222</string>
</property>
</item>
<item>
<property name="text">
- <string>33333</string>
+ <string notr="true">33333</string>
</property>
</item>
</item>
<item>
<property name="text">
- <string>456</string>
+ <string notr="true">456</string>
</property>
<item>
<property name="text">
- <string>44444</string>
+ <string notr="true">44444</string>
</property>
</item>
<item>
<property name="text">
- <string>55555</string>
+ <string notr="true">55555</string>
</property>
</item>
<item>
<property name="text">
- <string>66666</string>
+ <string notr="true">66666</string>
</property>
</item>
</item>
@@ -1087,7 +1110,7 @@
<item row="0" column="5">
<widget class="QToolButton" name="previewToolButton">
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
</widget>
</item>
@@ -1097,20 +1120,23 @@
<item row="0" column="6">
<widget class="QRadioButton" name="previewRadioButton">
<property name="text">
- <string>RadioButton</string>
+ <string notr="true">RadioButton</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QComboBox" name="previewComboBox">
+ <property name="currentText">
+ <string notr="true">ABC</string>
+ </property>
<item>
<property name="text">
- <string>ABC</string>
+ <string notr="true">ABC</string>
</property>
</item>
<item>
<property name="text">
- <string>XYZ</string>
+ <string notr="true">XYZ</string>
</property>
</item>
</widget>
@@ -1118,7 +1144,7 @@
<item row="3" column="3" colspan="5">
<widget class="QTextEdit" name="previewTextEdit">
<property name="html">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <string notr="true">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
@@ -1226,7 +1252,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="FontEdit" name="sqlEditorFont" native="true">
<property name="cfg" stdset="0">
- <string>Fonts.SqlEditor</string>
+ <string notr="true">Fonts.SqlEditor</string>
</property>
</widget>
</item>
@@ -1242,7 +1268,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="FontEdit" name="dbTreeFont" native="true">
<property name="cfg" stdset="0">
- <string>Fonts.DbTree</string>
+ <string notr="true">Fonts.DbTree</string>
</property>
</widget>
</item>
@@ -1258,7 +1284,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="FontEdit" name="dbTreeLabelFont" native="true">
<property name="cfg" stdset="0">
- <string>Fonts.DbTreeLabel</string>
+ <string notr="true">Fonts.DbTreeLabel</string>
</property>
</widget>
</item>
@@ -1274,7 +1300,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="FontEdit" name="dataViewFont" native="true">
<property name="cfg" stdset="0">
- <string>Fonts.DataView</string>
+ <string notr="true">Fonts.DataView</string>
</property>
</widget>
</item>
@@ -1290,7 +1316,7 @@ p, li { white-space: pre-wrap; }
<item>
<widget class="FontEdit" name="statusFieldfont" native="true">
<property name="cfg" stdset="0">
- <string>Fonts.StatusField</string>
+ <string notr="true">Fonts.StatusField</string>
</property>
</widget>
</item>
@@ -1374,7 +1400,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorKeywordFg</string>
+ <string notr="true">Colors.SqlEditorKeywordFg</string>
</property>
</widget>
</item>
@@ -1390,7 +1416,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorStringFg</string>
+ <string notr="true">Colors.SqlEditorStringFg</string>
</property>
</widget>
</item>
@@ -1406,7 +1432,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorCommentFg</string>
+ <string notr="true">Colors.SqlEditorCommentFg</string>
</property>
</widget>
</item>
@@ -1422,7 +1448,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorForeground</string>
+ <string notr="true">Colors.SqlEditorForeground</string>
</property>
</widget>
</item>
@@ -1438,7 +1464,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorCurrentLineBg</string>
+ <string notr="true">Colors.SqlEditorCurrentLineBg</string>
</property>
</widget>
</item>
@@ -1454,7 +1480,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorLineNumAreaBg</string>
+ <string notr="true">Colors.SqlEditorLineNumAreaBg</string>
</property>
</widget>
</item>
@@ -1480,7 +1506,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorParenthesisBg</string>
+ <string notr="true">Colors.SqlEditorParenthesisBg</string>
</property>
</widget>
</item>
@@ -1527,7 +1553,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorBlobFg</string>
+ <string notr="true">Colors.SqlEditorBlobFg</string>
</property>
</widget>
</item>
@@ -1564,7 +1590,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorNumberFg</string>
+ <string notr="true">Colors.SqlEditorNumberFg</string>
</property>
</widget>
</item>
@@ -1580,7 +1606,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorBindParamFg</string>
+ <string notr="true">Colors.SqlEditorBindParamFg</string>
</property>
</widget>
</item>
@@ -1606,7 +1632,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.SqlEditorValidObject</string>
+ <string notr="true">Colors.SqlEditorValidObject</string>
</property>
</widget>
</item>
@@ -1641,7 +1667,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.DataUncommited</string>
+ <string notr="true">Colors.DataUncommited</string>
</property>
</widget>
</item>
@@ -1667,7 +1693,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.DataUncommitedError</string>
+ <string notr="true">Colors.DataUncommitedError</string>
</property>
</widget>
</item>
@@ -1690,7 +1716,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.DataNullFg</string>
+ <string notr="true">Colors.DataNullFg</string>
</property>
</widget>
</item>
@@ -1713,7 +1739,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.DataDeletedBg</string>
+ <string notr="true">Colors.DataDeletedBg</string>
</property>
</widget>
</item>
@@ -1748,7 +1774,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.DbTreeLabelsFg</string>
+ <string notr="true">Colors.DbTreeLabelsFg</string>
</property>
</widget>
</item>
@@ -1780,7 +1806,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.StatusFieldInfoFg</string>
+ <string notr="true">Colors.StatusFieldInfoFg</string>
</property>
</widget>
</item>
@@ -1803,7 +1829,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.StatusFieldWarnFg</string>
+ <string notr="true">Colors.StatusFieldWarnFg</string>
</property>
</widget>
</item>
@@ -1826,7 +1852,7 @@ p, li { white-space: pre-wrap; }
<string/>
</property>
<property name="cfg" stdset="0">
- <string>Colors.StatusFieldErrorFg</string>
+ <string notr="true">Colors.StatusFieldErrorFg</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/constraintdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/constraintdialog.ui
index 7df34d8..addfb9f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/constraintdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/constraintdialog.ui
@@ -17,7 +17,7 @@
</size>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string notr="true">Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.cpp
index c94546e..8af131e 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.cpp
@@ -45,7 +45,6 @@ void DbConverterDialog::init()
{
ui->setupUi(this);
limitDialogWidth(this);
- setWindowTitle(tr("Convert database"));
widgetCover = new WidgetCover(this);
widgetCover->setVisible(false);
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.ui
index d328e99..f6bf009 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/dbconverterdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Convert database</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/errorsconfirmdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/errorsconfirmdialog.ui
index 81cdb17..615a6fd 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/errorsconfirmdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/errorsconfirmdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Errors</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.ui
index 9f84232..333d887 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/exportdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Export dialog</string>
+ <string>Export</string>
</property>
<property name="options">
<set>QWizard::CancelButtonOnLeft|QWizard::NoDefaultButton</set>
@@ -111,7 +111,7 @@
<item row="1" column="1">
<widget class="QLabel" name="exportTableSeparatorLabel">
<property name="text">
- <string>.</string>
+ <string notr="true">.</string>
</property>
</widget>
</item>
@@ -289,8 +289,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>298</width>
- <height>288</height>
+ <width>483</width>
+ <height>318</height>
</rect>
</property>
<property name="styleSheet">
@@ -347,7 +347,7 @@
<item row="0" column="2">
<widget class="QToolButton" name="exportFileButton">
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
</widget>
</item>
@@ -422,16 +422,16 @@
</widget>
<customwidgets>
<customwidget>
+ <class>SqlEditor</class>
+ <extends>QPlainTextEdit</extends>
+ <header>sqleditor.h</header>
+ </customwidget>
+ <customwidget>
<class>VerifiableWizardPage</class>
<extends>QWizardPage</extends>
<header>common/verifiablewizardpage.h</header>
<container>1</container>
</customwidget>
- <customwidget>
- <class>SqlEditor</class>
- <extends>QPlainTextEdit</extends>
- <header>sqleditor.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui
index b853ab8..c8756f7 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/importdialog.ui
@@ -47,7 +47,7 @@
<item row="1" column="2">
<widget class="QLabel" name="tableSeparatorLabel">
<property name="text">
- <string>.</string>
+ <string notr="true">.</string>
</property>
</widget>
</item>
@@ -103,8 +103,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>269</width>
- <height>280</height>
+ <width>479</width>
+ <height>310</height>
</rect>
</property>
<property name="styleSheet">
@@ -169,7 +169,7 @@
<item>
<widget class="QToolButton" name="inputFileButton">
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.ui
index e231550..4e2cbac 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.ui
@@ -17,7 +17,7 @@
</size>
</property>
<property name="windowTitle">
- <string>Index dialog</string>
+ <string>Index</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.cpp
new file mode 100644
index 0000000..38f6fe0
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.cpp
@@ -0,0 +1,34 @@
+#include "languagedialog.h"
+#include "ui_languagedialog.h"
+
+LanguageDialog::LanguageDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::LanguageDialog)
+{
+ ui->setupUi(this);
+}
+
+LanguageDialog::~LanguageDialog()
+{
+ delete ui;
+}
+
+void LanguageDialog::setLanguages(const QMap<QString, QString>& langs)
+{
+ for (const QString& langName : langs.keys())
+ ui->comboBox->addItem(langName, langs[langName]);
+}
+
+QString LanguageDialog::getSelectedLang() const
+{
+ return ui->comboBox->currentData().toString();
+}
+
+void LanguageDialog::setSelectedLang(const QString& lang)
+{
+ int idx = ui->comboBox->findData(lang);
+ if (idx < 0)
+ idx = 0;
+
+ ui->comboBox->setCurrentIndex(idx);
+}
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.h b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.h
new file mode 100644
index 0000000..7fc0607
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.h
@@ -0,0 +1,27 @@
+#ifndef LANGUAGEDIALOG_H
+#define LANGUAGEDIALOG_H
+
+#include <QMap>
+#include <QDialog>
+
+namespace Ui {
+ class LanguageDialog;
+}
+
+class LanguageDialog : public QDialog
+{
+ Q_OBJECT
+
+ public:
+ explicit LanguageDialog(QWidget *parent = 0);
+ ~LanguageDialog();
+
+ void setLanguages(const QMap<QString, QString>& langs);
+ QString getSelectedLang() const;
+ void setSelectedLang(const QString& lang);
+
+ private:
+ Ui::LanguageDialog *ui;
+};
+
+#endif // LANGUAGEDIALOG_H
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.ui
new file mode 100644
index 0000000..afd118e
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/languagedialog.ui
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>LanguageDialog</class>
+ <widget class="QDialog" name="LanguageDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>374</width>
+ <height>81</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Language</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Please choose language:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QComboBox" name="comboBox"/>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>LanguageDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>LanguageDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/messagelistdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/messagelistdialog.ui
index 10ee6b8..010c866 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/messagelistdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/messagelistdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string notr="true">Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/searchtextdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/searchtextdialog.ui
index ce9e12e..30113af 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/searchtextdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/searchtextdialog.ui
@@ -7,11 +7,11 @@
<x>0</x>
<y>0</y>
<width>403</width>
- <height>184</height>
+ <height>195</height>
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Find or replace</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggercolumnsdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggercolumnsdialog.ui
index 4326fca..861e17b 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggercolumnsdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggercolumnsdialog.ui
@@ -11,10 +11,19 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Trigger columns</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -52,12 +61,21 @@
<rect>
<x>0</x>
<y>0</y>
- <width>320</width>
- <height>239</height>
+ <width>316</width>
+ <height>237</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
</layout>
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.ui b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.ui
index bf3da0a..723f903 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/triggerdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Trigger dialog</string>
+ <string>Trigger</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
@@ -87,7 +87,7 @@
<string>List of columns for UPDATE OF action.</string>
</property>
<property name="text">
- <string>...</string>
+ <string notr="true">...</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/formmanager.cpp b/SQLiteStudio3/guiSQLiteStudio/formmanager.cpp
index 9df36d0..0ee7d43 100644
--- a/SQLiteStudio3/guiSQLiteStudio/formmanager.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/formmanager.cpp
@@ -46,6 +46,11 @@ QStringList FormManager::getAvailableForms() const
return widgetNameToFullPath.keys();
}
+QStringList FormManager::getFormDirs() const
+{
+ return formDirs;
+}
+
QWidget* FormManager::createWidgetByFullPath(const QString& path)
{
QWidget* widget = uiLoader->load(path);
@@ -104,22 +109,21 @@ void FormManager::init()
void FormManager::load()
{
- QStringList dirs;
- dirs += qApp->applicationDirPath() + "/forms";
- dirs += ":/forms";
- dirs += QDir(CFG->getConfigDir()).absoluteFilePath("forms");
+ formDirs += qApp->applicationDirPath() + "/forms";
+ formDirs += ":/forms";
+ formDirs += QDir(CFG->getConfigDir()).absoluteFilePath("forms");
QString envDirs = SQLITESTUDIO->getEnv("SQLITESTUDIO_FORMS");
if (!envDirs.isNull())
- dirs += envDirs.split(PATH_LIST_SEPARATOR);
+ formDirs += envDirs.split(PATH_LIST_SEPARATOR);
- dirs += PLUGINS->getPluginDirs();
+ formDirs += PLUGINS->getPluginDirs();
#ifdef FORMS_DIR
- dirs += STRINGIFY(FORMS_DIR);
+ formDirs += STRINGIFY(FORMS_DIR);
#endif
- foreach (QString dirPath, dirs)
+ foreach (QString dirPath, formDirs)
loadRecurently(dirPath, "");
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/formmanager.h b/SQLiteStudio3/guiSQLiteStudio/formmanager.h
index 41f98ce..fbffd7e 100644
--- a/SQLiteStudio3/guiSQLiteStudio/formmanager.h
+++ b/SQLiteStudio3/guiSQLiteStudio/formmanager.h
@@ -19,6 +19,7 @@ class GUI_API_EXPORT FormManager : public QObject
QWidget* createWidget(const QString& name);
bool hasWidget(const QString& name);
QStringList getAvailableForms() const;
+ QStringList getFormDirs() const;
private:
void init();
@@ -30,6 +31,7 @@ class GUI_API_EXPORT FormManager : public QObject
UiLoader* uiLoader = nullptr;
QHash<QString,QString> widgetNameToFullPath;
QStringList resourceForms;
+ QStringList formDirs;
private slots:
void rescanResources(Plugin* plugin, PluginType* pluginType);
diff --git a/SQLiteStudio3/guiSQLiteStudio/forms/sqlformatterplugin.ui b/SQLiteStudio3/guiSQLiteStudio/forms/sqlformatterplugin.ui
index 67f1bd6..87e13fd 100644
--- a/SQLiteStudio3/guiSQLiteStudio/forms/sqlformatterplugin.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/forms/sqlformatterplugin.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro
index 2195415..93796ea 100644
--- a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro
+++ b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.pro
@@ -27,6 +27,8 @@ QMAKE_CXXFLAGS += -pedantic
DEFINES += GUISQLITESTUDIO_LIBRARY
+TRANSLATIONS += translations/guiSQLiteStudio_pl.ts
+
SOURCES +=\
mainwindow.cpp \
iconmanager.cpp \
@@ -164,7 +166,8 @@ SOURCES +=\
windows/bugreporthistorywindow.cpp \
dialogs/newversiondialog.cpp \
dialogs/quitconfirmdialog.cpp \
- common/datawidgetmapper.cpp
+ common/datawidgetmapper.cpp \
+ dialogs/languagedialog.cpp
HEADERS += mainwindow.h \
iconmanager.h \
@@ -307,7 +310,8 @@ HEADERS += mainwindow.h \
dialogs/newversiondialog.h \
guiSQLiteStudio_global.h \
dialogs/quitconfirmdialog.h \
- common/datawidgetmapper.h
+ common/datawidgetmapper.h \
+ dialogs/languagedialog.h
FORMS += mainwindow.ui \
dbtree/dbtree.ui \
@@ -354,10 +358,12 @@ FORMS += mainwindow.ui \
dialogs/bugreportlogindialog.ui \
windows/bugreporthistorywindow.ui \
dialogs/newversiondialog.ui \
- dialogs/quitconfirmdialog.ui
+ dialogs/quitconfirmdialog.ui \
+ dialogs/languagedialog.ui
RESOURCES += \
- icons.qrc
+ icons.qrc \
+ guiSQLiteStudio.qrc
OTHER_FILES +=
diff --git a/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc
new file mode 100644
index 0000000..31e0f16
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/guiSQLiteStudio.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/msg">
+ <file>translations/guiSQLiteStudio_pl.qm</file>
+ </qresource>
+</RCC>
diff --git a/SQLiteStudio3/guiSQLiteStudio/iconmanager.cpp b/SQLiteStudio3/guiSQLiteStudio/iconmanager.cpp
index efe22a1..63dde26 100644
--- a/SQLiteStudio3/guiSQLiteStudio/iconmanager.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/iconmanager.cpp
@@ -62,6 +62,11 @@ void IconManager::init()
connect(PLUGINS, SIGNAL(pluginsInitiallyLoaded()), this, SLOT(pluginsInitiallyLoaded()));
}
+QStringList IconManager::getIconDirs() const
+{
+ return iconDirs;
+}
+
void IconManager::rescanResources(const QString& pluginName)
{
if (!pluginName.isNull() && PLUGINS->isBuiltIn(pluginName))
diff --git a/SQLiteStudio3/guiSQLiteStudio/iconmanager.h b/SQLiteStudio3/guiSQLiteStudio/iconmanager.h
index 8cb7dbe..8a30d99 100644
--- a/SQLiteStudio3/guiSQLiteStudio/iconmanager.h
+++ b/SQLiteStudio3/guiSQLiteStudio/iconmanager.h
@@ -153,6 +153,7 @@ class GUI_API_EXPORT IconManager : public QObject
DEF_ICON(RELOAD, "reload")
DEF_ICON(RENAME_FN_ARG, "rename_fn_arg")
DEF_ICO3(RENAME_DATATYPE, RENAME_FN_ARG)
+ DEF_ICON(RESET_AUTOINCREMENT, "reset_autoincrement")
DEF_ICON(RESULTS_BELOW, "results_below")
DEF_ICON(RESULTS_IN_TAB, "results_in_tab")
DEF_ICON(ROLLBACK, "rollback")
@@ -244,6 +245,7 @@ class GUI_API_EXPORT IconManager : public QObject
QMovie* getMovie(const QString& name);
QIcon* getIcon(const QString& name);
void init();
+ QStringList getIconDirs() const;
private:
IconManager();
diff --git a/SQLiteStudio3/guiSQLiteStudio/icons.qrc b/SQLiteStudio3/guiSQLiteStudio/icons.qrc
index f923fe9..d89afa9 100644
--- a/SQLiteStudio3/guiSQLiteStudio/icons.qrc
+++ b/SQLiteStudio3/guiSQLiteStudio/icons.qrc
@@ -190,5 +190,6 @@
<file>img/abort24.png</file>
<file>img/close.png</file>
<file>img/go_back.png</file>
+ <file>img/reset_autoincrement.png</file>
</qresource>
</RCC>
diff --git a/SQLiteStudio3/guiSQLiteStudio/img/reset_autoincrement.png b/SQLiteStudio3/guiSQLiteStudio/img/reset_autoincrement.png
new file mode 100644
index 0000000..d39f06d
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/img/reset_autoincrement.png
Binary files differ
diff --git a/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp
index 7dbde8c..bc492df 100644
--- a/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/mainwindow.cpp
@@ -147,6 +147,8 @@ void MainWindow::init()
widgetCover->getContainerLayout()->addWidget(updatingSubBar, 2, 0);
connect(UPDATES, SIGNAL(updatingProgress(QString,int,int)), this, SLOT(handleUpdatingProgress(QString,int,int)));
connect(UPDATES, SIGNAL(updatingError(QString)), this, SLOT(handleUpdatingError()));
+
+ connect(CFG_CORE.General.Language, SIGNAL(changed(QVariant)), this, SLOT(notifyAboutLanguageChange()));
}
void MainWindow::cleanUp()
@@ -195,6 +197,11 @@ void MainWindow::updateWindowActions()
actionMap[RESTORE_WINDOW]->setEnabled(hasClosedWindowToRestore());
}
+void MainWindow::notifyAboutLanguageChange()
+{
+ notifyInfo(tr("You need to restart application to make the language change take effect."));
+}
+
MdiArea *MainWindow::getMdiArea() const
{
return dynamic_cast<MdiArea*>(ui->mdiArea);
diff --git a/SQLiteStudio3/guiSQLiteStudio/mainwindow.h b/SQLiteStudio3/guiSQLiteStudio/mainwindow.h
index df12621..4e9f5c0 100644
--- a/SQLiteStudio3/guiSQLiteStudio/mainwindow.h
+++ b/SQLiteStudio3/guiSQLiteStudio/mainwindow.h
@@ -170,6 +170,7 @@ class GUI_API_EXPORT MainWindow : public QMainWindow, public ExtActionContainer
void updateWindowActions();
private slots:
+ void notifyAboutLanguageChange();
void cleanUp();
void openSqlEditorSlot();
void refreshMdiWindows();
diff --git a/SQLiteStudio3/guiSQLiteStudio/mainwindow.ui b/SQLiteStudio3/guiSQLiteStudio/mainwindow.ui
index 0ae72c8..1dbf462 100644
--- a/SQLiteStudio3/guiSQLiteStudio/mainwindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/mainwindow.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>SQLiteStudio (?.?.?)</string>
+ <string notr="true">SQLiteStudio (?.?.?)</string>
</property>
<property name="locale">
<locale language="English" country="UnitedStates"/>
@@ -57,7 +57,7 @@
<x>0</x>
<y>0</y>
<width>964</width>
- <height>22</height>
+ <height>19</height>
</rect>
</property>
</widget>
@@ -95,6 +95,9 @@
</attribute>
</widget>
<widget class="TaskBar" name="taskBar">
+ <property name="mouseTracking">
+ <bool>true</bool>
+ </property>
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.h b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.h
index b6f6d7c..d51150b 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.h
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditordate.h
@@ -5,6 +5,8 @@
class GUI_API_EXPORT MultiEditorDate : public MultiEditorDateTime
{
+ Q_OBJECT
+
public:
explicit MultiEditorDate(QWidget *parent = 0);
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp
index 198f71b..526f5c4 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.cpp
@@ -2,6 +2,7 @@
#include "common/numericspinbox.h"
#include <QVariant>
#include <QVBoxLayout>
+#include <QDebug>
MultiEditorNumeric::MultiEditorNumeric(QWidget* parent)
: MultiEditorWidget(parent)
@@ -32,7 +33,7 @@ void MultiEditorNumeric::setReadOnly(bool value)
QString MultiEditorNumeric::getTabLabel()
{
- return tr("Number");
+ return tr("Number", "numeric multi editor tab name");
}
void MultiEditorNumeric::focusThisWidget()
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.h b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.h
index 65d0409..c74d27a 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.h
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditornumeric.h
@@ -9,6 +9,8 @@ class NumericSpinBox;
class GUI_API_EXPORT MultiEditorNumeric : public MultiEditorWidget
{
+ Q_OBJECT
+
public:
explicit MultiEditorNumeric(QWidget *parent = 0);
diff --git a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.h b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.h
index 56bf60e..1fb05f3 100644
--- a/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.h
+++ b/SQLiteStudio3/guiSQLiteStudio/multieditor/multieditortime.h
@@ -6,6 +6,8 @@
class GUI_API_EXPORT MultiEditorTime : public MultiEditorDateTime
{
+ Q_OBJECT
+
public:
explicit MultiEditorTime(QWidget *parent = 0);
diff --git a/SQLiteStudio3/guiSQLiteStudio/sqlcompareview.cpp b/SQLiteStudio3/guiSQLiteStudio/sqlcompareview.cpp
index 0b5b91d..057ed1f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/sqlcompareview.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/sqlcompareview.cpp
@@ -107,7 +107,6 @@ void SqlCompareView::setupHighlighting(const QString& left, const QString& right
{
QList<Diff> diffs = diff->diff_main(left, right);
int leftPos = 0;
- int rightPos = 0;
int lgt = 0;
for (const Diff& d : diffs)
{
@@ -120,11 +119,9 @@ void SqlCompareView::setupHighlighting(const QString& left, const QString& right
break;
case EQUAL:
leftPos += lgt;
- rightPos += lgt;
break;
case INSERT:
rightView->setTextBackgroundColor(leftPos, leftPos + lgt - 1, Qt::green);
- rightPos += lgt;
break;
}
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/sqleditor.cpp b/SQLiteStudio3/guiSQLiteStudio/sqleditor.cpp
index 52e1676..edafce5 100644
--- a/SQLiteStudio3/guiSQLiteStudio/sqleditor.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/sqleditor.cpp
@@ -28,6 +28,7 @@
#include <QTextBlock>
#include <QScrollBar>
#include <QFileDialog>
+#include <QtConcurrent/QtConcurrent>
CFG_KEYS_DEFINE(SqlEditor)
@@ -184,6 +185,7 @@ Db* SqlEditor::getDb() const
void SqlEditor::setDb(Db* value)
{
db = value;
+ refreshValidObjects();
scheduleQueryParser(true);
}
@@ -194,34 +196,41 @@ void SqlEditor::setAutoCompletion(bool enabled)
void SqlEditor::customContextMenuRequested(const QPoint &pos)
{
- if (objectLinksEnabled)
- {
- const DbObject* obj = getValidObjectForPosition(pos);
- QString objName = toPlainText().mid(obj->from, (obj->to - obj->from + 1));
+ if (objectLinksEnabled && handleValidObjectContextMenu(pos))
+ return;
- validObjContextMenu->clear();
+ contextMenu->popup(mapToGlobal(pos));
+}
- DbTreeItem* item = nullptr;
- for (DbTreeItem::Type type : {DbTreeItem::Type::TABLE, DbTreeItem::Type::INDEX, DbTreeItem::Type::TRIGGER, DbTreeItem::Type::VIEW})
- {
- item = DBTREE->getModel()->findItem(type, objName);
- if (item)
- break;
- }
+bool SqlEditor::handleValidObjectContextMenu(const QPoint& pos)
+{
+ const DbObject* obj = getValidObjectForPosition(pos);
+ if (!obj)
+ return false;
- if (item)
- {
- DBTREE->setSelectedItem(item);
- DBTREE->setupActionsForMenu(item, validObjContextMenu);
- if (validObjContextMenu->actions().size() == 0)
- return;
+ QString objName = toPlainText().mid(obj->from, (obj->to - obj->from + 1));
- DBTREE->updateActionStates(item);
- validObjContextMenu->popup(mapToGlobal(pos));
- }
- return;
+ validObjContextMenu->clear();
+
+ DbTreeItem* item = nullptr;
+ for (DbTreeItem::Type type : {DbTreeItem::Type::TABLE, DbTreeItem::Type::INDEX, DbTreeItem::Type::TRIGGER, DbTreeItem::Type::VIEW})
+ {
+ item = DBTREE->getModel()->findItem(type, objName);
+ if (item)
+ break;
}
- contextMenu->popup(mapToGlobal(pos));
+
+ if (!item)
+ return false;
+
+ DBTREE->setSelectedItem(item);
+ DBTREE->setupActionsForMenu(item, validObjContextMenu);
+ if (validObjContextMenu->actions().size() == 0)
+ return false;
+
+ DBTREE->updateActionStates(item);
+ validObjContextMenu->popup(mapToGlobal(pos));
+ return true;
}
void SqlEditor::updateUndoAction(bool enabled)
@@ -487,17 +496,21 @@ void SqlEditor::refreshValidObjects()
if (!db || !db->isValid())
return;
- objectsInNamedDb.clear();
-
- SchemaResolver resolver(db);
- QSet<QString> databases = resolver.getDatabases();
- databases << "main";
- QStringList objects;
- foreach (const QString& dbName, databases)
+ QtConcurrent::run([this]()
{
- objects = resolver.getAllObjects();
- objectsInNamedDb[dbName] << objects;
- }
+ QMutexLocker lock(&objectsInNamedDbMutex);
+ objectsInNamedDb.clear();
+
+ SchemaResolver resolver(db);
+ QSet<QString> databases = resolver.getDatabases();
+ databases << "main";
+ QStringList objects;
+ foreach (const QString& dbName, databases)
+ {
+ objects = resolver.getAllObjects();
+ objectsInNamedDb[dbName] << objects;
+ }
+ });
}
Dialect SqlEditor::getDialect()
@@ -707,10 +720,7 @@ void SqlEditor::indentNewLine()
void SqlEditor::showSearchDialog()
{
if (!searchDialog)
- {
searchDialog = new SearchTextDialog(textLocator, this);
- searchDialog->setWindowTitle(tr("Find or replace", "sql editor find/replace dialog"));
- }
if (searchDialog->isVisible())
searchDialog->hide();
@@ -855,6 +865,7 @@ void SqlEditor::checkForValidObjects()
if (!db || !db->isValid())
return;
+ QMutexLocker lock(&objectsInNamedDbMutex);
Dialect dialect = db->getDialect();
QList<SqliteStatement::FullObject> fullObjects;
QString dbName;
@@ -1022,7 +1033,7 @@ void SqlEditor::saveToFile()
QFile file(fName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
- notifyError(tr("Could not open file '%1'' for writing: %2").arg(fName).arg(file.errorString()));
+ notifyError(tr("Could not open file '%1' for writing: %2").arg(fName).arg(file.errorString()));
return;
}
@@ -1046,7 +1057,7 @@ void SqlEditor::loadFromFile()
QFile file(fName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
- notifyError(tr("Could not open file '%1'' for reading: %2").arg(fName).arg(file.errorString()));
+ notifyError(tr("Could not open file '%1' for reading: %2").arg(fName).arg(file.errorString()));
return;
}
@@ -1393,6 +1404,7 @@ void SqlEditor::handleValidObjectCursor(const QPoint& point)
}
viewport()->setCursor(isValid ? Qt::PointingHandCursor : Qt::IBeamCursor);
}
+
bool SqlEditor::getVirtualSqlCompleteSemicolon() const
{
return virtualSqlCompleteSemicolon;
diff --git a/SQLiteStudio3/guiSQLiteStudio/sqleditor.h b/SQLiteStudio3/guiSQLiteStudio/sqleditor.h
index d525e20..43be251 100644
--- a/SQLiteStudio3/guiSQLiteStudio/sqleditor.h
+++ b/SQLiteStudio3/guiSQLiteStudio/sqleditor.h
@@ -9,6 +9,7 @@
#include <QTextEdit>
#include <QFont>
#include <QHash>
+#include <QMutex>
class CompleterWindow;
class QTimer;
@@ -185,6 +186,7 @@ class GUI_API_EXPORT SqlEditor : public QPlainTextEdit, public ExtActionContaine
const DbObject* getValidObjectForPosition(int position, bool movedLeft);
const DbObject* getValidObjectForPosition(const QPoint& point);
void handleValidObjectCursor(const QPoint& point);
+ bool handleValidObjectContextMenu(const QPoint& pos);
SqliteSyntaxHighlighter* highlighter = nullptr;
QMenu* contextMenu = nullptr;
@@ -197,6 +199,7 @@ class GUI_API_EXPORT SqlEditor : public QPlainTextEdit, public ExtActionContaine
QTimer* queryParserTimer = nullptr;
Parser* queryParser = nullptr;
QHash<QString,QStringList> objectsInNamedDb;
+ QMutex objectsInNamedDbMutex;
bool objectLinksEnabled = false;
QList<DbObject> validDbObjects;
QWidget* lineNumberArea = nullptr;
diff --git a/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp b/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp
index ba797f6..359dc29 100644
--- a/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/taskbar.cpp
@@ -10,7 +10,6 @@
#include <QStyle>
#include <QRubberBand>
#include <QApplication>
-#include <QDebug>
#include <QMenu>
TaskBar::TaskBar(const QString& title, QWidget *parent) :
@@ -179,6 +178,7 @@ bool TaskBar::handleMouseMoveEvent(QMouseEvent* event)
drag->setMimeData(generateMimeData());
dragStartIndex = tasks.indexOf(dragStartTask);
+ drag->start(Qt::MoveAction);
return true;
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/taskbar.h b/SQLiteStudio3/guiSQLiteStudio/taskbar.h
index 2cf6d56..652b3f6 100644
--- a/SQLiteStudio3/guiSQLiteStudio/taskbar.h
+++ b/SQLiteStudio3/guiSQLiteStudio/taskbar.h
@@ -39,7 +39,6 @@ class GUI_API_EXPORT TaskBar : public QToolBar
QAction* getNextClosestAction(const QPoint& position);
void dragTaskTo(QAction* task, const QPoint& position);
void dragTaskTo(QAction* task, int positionIndex);
- QAction* getDragTask(const QMimeData* data);
QMimeData* generateMimeData();
int getActiveTaskIdx();
diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qm b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qm
new file mode 100644
index 0000000..61124ad
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.qm
Binary files differ
diff --git a/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts
new file mode 100644
index 0000000..ca582d3
--- /dev/null
+++ b/SQLiteStudio3/guiSQLiteStudio/translations/guiSQLiteStudio_pl.ts
@@ -0,0 +1,5980 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="14"/>
+ <source>About SQLiteStudio and licenses</source>
+ <translation>O SQLiteStudio i licencje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="24"/>
+ <source>About</source>
+ <translation>O programie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="30"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;SQLiteStudio v%1&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Free, open-source, cross-platform SQLite database manager.&lt;br/&gt;&lt;a href=&quot;http://sqlitestudio.pl&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://sqlitestudio.pl&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;%2&lt;br/&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Author and active maintainer:&lt;br/&gt;SalSoft (&lt;a href=&quot;http://salsoft.com.pl&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://salsoft.com.pl&lt;/span&gt;&lt;/a&gt;)&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-size:11pt; font-weight:600;&quot;&gt;SQLiteStudio v%1&lt;/span&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Darmowy, otwartoźródłowy, wieloplatformowy menadżer baz danych SQLite.&lt;br/&gt;&lt;a href=&quot;http://sqlitestudio.pl&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://sqlitestudio.pl&lt;/span&gt;&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;%2&lt;br/&gt;&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Autor i aktywny opiekun:&lt;br/&gt;SalSoft (&lt;a href=&quot;http://salsoft.com.pl&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://salsoft.com.pl&lt;/span&gt;&lt;/a&gt;)&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="41"/>
+ <source>Licenses</source>
+ <translation>Licencje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="55"/>
+ <source>Environment</source>
+ <translation>Środowisko</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="61"/>
+ <source>Icon directories</source>
+ <translation>Katalogi ikon</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="75"/>
+ <source>Form directories</source>
+ <translation>Katalogi formularzy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="89"/>
+ <source>Plugin directories</source>
+ <translation>Katalogi wtyczek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="96"/>
+ <source>Application directory</source>
+ <translation>Katalog aplikacji</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="110"/>
+ <source>Configuration directory</source>
+ <translation>Katalog konfiguracji</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.ui" line="131"/>
+ <source>Qt version:</source>
+ <translation>Wersja Qt:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.cpp" line="37"/>
+ <source>Portable distribution.</source>
+ <translation>Dystrybucja przenośna.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.cpp" line="40"/>
+ <source>MacOS X application boundle distribution.</source>
+ <translation>Dytrybucja aplikacji MacOS X.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.cpp" line="43"/>
+ <source>Operating system managed distribution.</source>
+ <translation>Dystrybucja zarządzana przez system operacyjny.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.cpp" line="76"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/aboutdialog.cpp" line="95"/>
+ <source>&lt;h3&gt;Table of contents:&lt;/h3&gt;&lt;ol&gt;%2&lt;/ol&gt;</source>
+ <translation>&lt;h3&gt;Zawartość:&lt;/h3&gt;&lt;ol&gt;%2&lt;/ol&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>BugDialog</name>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="14"/>
+ <source>Bugs and ideas</source>
+ <translation>Błędy i pomysły</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="20"/>
+ <source>Reporter</source>
+ <translation>Zgłaszający</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="36"/>
+ <source>E-mail address</source>
+ <translation>Adres e-mail</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="43"/>
+ <location filename="../dialogs/bugdialog.cpp" line="121"/>
+ <source>Log in</source>
+ <translation>Zaloguj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="68"/>
+ <source>Short description</source>
+ <translation>Krótki opis</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="80"/>
+ <source>Detailed description</source>
+ <translation>Opis szczegółowy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="92"/>
+ <source>Show more details</source>
+ <translation>Pokaż więcej szczegółów</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="119"/>
+ <source>SQLiteStudio version</source>
+ <translation>Wersja SQLiteStudio</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="131"/>
+ <source>Operating system</source>
+ <translation>System operacyjny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.ui" line="143"/>
+ <source>Loaded plugins</source>
+ <translation>Załadowane wtyczki</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="39"/>
+ <source>Send</source>
+ <translation>Wyślij</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="66"/>
+ <source>You can see all your reported bugs and ideas by selecting menu &apos;%1&apos; and then &apos;%2&apos;.</source>
+ <translation>Możesz zobaczyć wszystkie błędy i pomysły zgłoszone przez ciebie wybierając menu &apos;%1&apos; i dalej &apos;%2&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="74"/>
+ <source>A bug report sent successfully.</source>
+ <translation>Błąd został zgłoszony pomyślnie.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="79"/>
+ <source>An error occurred while sending a bug report: %1
+%2</source>
+ <translation>Wystąpił błąd podczas zgłaszania błędu: %1
+%2</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="80"/>
+ <location filename="../dialogs/bugdialog.cpp" line="94"/>
+ <source>You can retry sending. The contents will be restored when you open a report dialog after an error like this.</source>
+ <translation>Możesz spróbować powtórzyć wysyłkę. Zawartość będzie przywrócona, kiedy otworzysz okno zgłaszania po błędzie takim jak ten.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="88"/>
+ <source>An idea proposal sent successfully.</source>
+ <translation>Pomysł został zgłoszony pomyślnie.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="93"/>
+ <source>An error occurred while sending an idea proposal: %1
+%2</source>
+ <translation>Wystąpił błąd podczas zgłaszania pomysłu: %1
+%2</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="105"/>
+ <source>A bug report</source>
+ <translation>Zgłoś błąd</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="106"/>
+ <source>Describe problem in few words</source>
+ <translation>Opisz problem w kilku słowach</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="107"/>
+ <source>Describe problem and how to reproduce it</source>
+ <translation>Opisz problem, oraz jak go powtórzyć</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="111"/>
+ <source>A new feature idea</source>
+ <translation>Zgłoś pomysł</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="112"/>
+ <source>A title for your idea</source>
+ <translation>Tytuł twojego pomysłu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="113"/>
+ <source>Describe your idea in more details</source>
+ <translation>Opisz twój pomysł szerzej</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="118"/>
+ <source>Reporting as an unregistered user, using e-mail address.</source>
+ <translation>Zgłaszanie jako niezarejestrowany użytkownik, używając adresu e-mail.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="127"/>
+ <source>Reporting as a registered user.</source>
+ <translation>Zgłaszanie jako zarejestrowany użytkownik.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="131"/>
+ <source>Log out</source>
+ <translation>Wyloguj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="144"/>
+ <source>Providing true email address will make it possible to contact you regarding your report. To learn more, press &apos;help&apos; button on the right side.</source>
+ <translation>Podanie prawdziwego adresu e-mail pozwoli na skontaktowanie się z tobą w związku z twoim zgłoszeniem. Aby dowiedzieć się więcej, kliknij przycisk &apos;pomoc&apos; po prawej stronie.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="146"/>
+ <source>Enter vaild e-mail address, or log in.</source>
+ <translation>Wpisz poprawny adres e-mail, lub zaloguj się.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="148"/>
+ <source>Short description requires at least 10 characters, but not more than 100. Longer description can be entered in the field below.</source>
+ <translation>Krótki opis wymaga przynajmniej 10 znaków, ale nie więcej niż 100. Dłuższy opis może być wpisany w polu poniżej.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugdialog.cpp" line="151"/>
+ <source>Long description requires at least 30 characters.</source>
+ <translation>Długi opis wymaga przynajmniej 30 znaków.</translation>
+ </message>
+</context>
+<context>
+ <name>BugReportHistoryWindow</name>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.ui" line="36"/>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="119"/>
+ <source>Title</source>
+ <translation>Tytuł</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.ui" line="41"/>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="119"/>
+ <source>Reported at</source>
+ <translation>Zgłoszony dnia</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.ui" line="46"/>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="119"/>
+ <source>URL</source>
+ <translation>URL</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="45"/>
+ <source>Reports history</source>
+ <translation>Historia zgłoszeń</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="50"/>
+ <source>Clear reports history</source>
+ <translation>Wyczyść historię zgłoszeń</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="51"/>
+ <source>Delete selected entry</source>
+ <translation>Usuń wybraną pozycję</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.cpp" line="90"/>
+ <source>Invalid response from server.</source>
+ <translation>Niepoprawna odpowiedź z serwera.</translation>
+ </message>
+</context>
+<context>
+ <name>BugReportLoginDialog</name>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="14"/>
+ <source>Log in</source>
+ <translation>Zaloguj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="20"/>
+ <source>Credentials</source>
+ <translation>Dane do logowania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="26"/>
+ <source>Login:</source>
+ <translation>Login:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="36"/>
+ <source>Password:</source>
+ <translation>Hasło:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="53"/>
+ <source>Validation</source>
+ <translation>Walidacja</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="59"/>
+ <source>Validate</source>
+ <translation>Sprawdź</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.ui" line="73"/>
+ <source>Validation result message</source>
+ <translation>Treść wyniku walidacji</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.cpp" line="45"/>
+ <source>Abort</source>
+ <translation>Przerwij</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.cpp" line="65"/>
+ <source>A login must be at least 2 characters long.</source>
+ <translation>Login musi mieć przynajmniej 2 znaki.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.cpp" line="66"/>
+ <source>A password must be at least 5 characters long.</source>
+ <translation>Hasło musi mieć przynajmniej 5 znaków.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/bugreportlogindialog.cpp" line="91"/>
+ <source>Valid</source>
+ <translation>Poprawne</translation>
+ </message>
+</context>
+<context>
+ <name>CollationsEditor</name>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="75"/>
+ <source>Filter collations</source>
+ <translation>Filtruj zestawienia</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="110"/>
+ <source>Collation name:</source>
+ <translation>Nazwa zestawienia:</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="120"/>
+ <source>Implementation language:</source>
+ <translation>Język implementacji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="152"/>
+ <source>Databases</source>
+ <translation>Bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="158"/>
+ <source>Register in all databases</source>
+ <translation>Zarejestruj we wszystkich bazach danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="165"/>
+ <source>Register in following databases:</source>
+ <translation>Zarejestruj w następujących bazach danych:</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.ui" line="186"/>
+ <source>Implementation code:</source>
+ <translation>Kod implementacji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="52"/>
+ <source>Collations editor</source>
+ <translation>Edytor zestawień</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="57"/>
+ <source>Commit all collation changes</source>
+ <translation>Zatwierdź wszystkie zmiany w zestawieniach</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="58"/>
+ <source>Rollback all collation changes</source>
+ <translation>Wycofaj wszystkie zmiany w zestawieniach</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="60"/>
+ <source>Create new collation</source>
+ <translation>Utwórz nowe zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="61"/>
+ <source>Delete selected collation</source>
+ <translation>Usuń wybrane zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="63"/>
+ <source>Editing collations manual</source>
+ <translation>Podręcznik edycji zestawień</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="283"/>
+ <source>Enter a non-empty, unique name of the collation.</source>
+ <translation>Podaj niepustą, unikalną nazwę zestawienia.</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="291"/>
+ <source>Pick the implementation language.</source>
+ <translation>Wybierz język implementacji.</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="294"/>
+ <source>Enter a non-empty implementation code.</source>
+ <translation>Wprowadź niepusty kod implementacji.</translation>
+ </message>
+ <message>
+ <location filename="../windows/collationseditor.cpp" line="388"/>
+ <source>Collations editor window has uncommited modifications.</source>
+ <translation>Okno edytora zestawień ma niezatwierdzone zmiany.</translation>
+ </message>
+</context>
+<context>
+ <name>ColorButton</name>
+ <message>
+ <location filename="../common/colorbutton.cpp" line="29"/>
+ <source>Pick a color</source>
+ <translation>Wybierz kolor</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnCollatePanel</name>
+ <message>
+ <location filename="../constraints/columncollatepanel.ui" line="41"/>
+ <source>Collation name:</source>
+ <translation>Nazwa zestawienia:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columncollatepanel.ui" line="73"/>
+ <source>Named constraint:</source>
+ <translation>Ograniczenie nazwane:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columncollatepanel.cpp" line="80"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columncollatepanel.cpp" line="81"/>
+ <source>Enter a collation name.</source>
+ <translation>Wprowadź nazwę zestawienia.</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnDefaultPanel</name>
+ <message>
+ <location filename="../constraints/columndefaultpanel.ui" line="20"/>
+ <source>Default value:</source>
+ <translation>Domyślna wartość:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columndefaultpanel.ui" line="35"/>
+ <source>Named constraint:</source>
+ <translation>Ograniczenie nazwane:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columndefaultpanel.cpp" line="39"/>
+ <source>Enter a default value expression.</source>
+ <translation>Wprowadź wyrażenie wartości domyślnej.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columndefaultpanel.cpp" line="78"/>
+ <source>Invalid default value expression: %1</source>
+ <translation>Niepoprawna wartość wyrażenia domyślnego: %1</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columndefaultpanel.cpp" line="90"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnDialog</name>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="14"/>
+ <source>Column</source>
+ <translation>Kolumna</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="23"/>
+ <source>Name and type</source>
+ <translation>Nazwa i typ</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="56"/>
+ <source>Data type:</source>
+ <translation>Typ danych:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="63"/>
+ <source>Column name:</source>
+ <translation>Nazwa kolumny:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="73"/>
+ <source>Size:</source>
+ <translation>Rozmiar:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="96"/>
+ <source>Constraints</source>
+ <translation>Ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="109"/>
+ <source>Unique</source>
+ <translation>Wartości unikalne</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="116"/>
+ <location filename="../dialogs/columndialog.ui" line="130"/>
+ <location filename="../dialogs/columndialog.ui" line="172"/>
+ <location filename="../dialogs/columndialog.ui" line="179"/>
+ <location filename="../dialogs/columndialog.ui" line="186"/>
+ <location filename="../dialogs/columndialog.ui" line="193"/>
+ <location filename="../dialogs/columndialog.ui" line="200"/>
+ <source>Configure</source>
+ <translation>Konfiguruj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="123"/>
+ <source>Foreign Key</source>
+ <translation>Klucz obcy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="137"/>
+ <source>Collate</source>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="144"/>
+ <source>Not NULL</source>
+ <translation>Niepuste</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="151"/>
+ <source>Check condition</source>
+ <translation>Sprawdzaj warunek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="158"/>
+ <source>Primary Key</source>
+ <translation>Klucz główny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="165"/>
+ <source>Default</source>
+ <translation>Wartość domyślna</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.ui" line="264"/>
+ <source>Advanced mode</source>
+ <translation>Tryb zaawandowany</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="83"/>
+ <source>Add constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="84"/>
+ <source>Edit constraint</source>
+ <comment>column dialog</comment>
+ <translation>Edytuj ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="85"/>
+ <location filename="../dialogs/columndialog.cpp" line="229"/>
+ <source>Delete constraint</source>
+ <comment>column dialog</comment>
+ <translation>Usuń ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="86"/>
+ <source>Move constraint up</source>
+ <comment>column dialog</comment>
+ <translation>Przenieś ograniczenie w górę</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="87"/>
+ <source>Move constraint down</source>
+ <comment>column dialog</comment>
+ <translation>Przenieś ograniczenie w dół</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="89"/>
+ <source>Add a primary key</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj klucz główny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="90"/>
+ <source>Add a foreign key</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj klucz obcy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="91"/>
+ <source>Add an unique constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie wartości unikalnych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="92"/>
+ <source>Add a check constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie sprawdzania wartości</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="93"/>
+ <source>Add a not null constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie niepustych wartości</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="94"/>
+ <source>Add a collate constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie zestawienia</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="95"/>
+ <source>Add a default constraint</source>
+ <comment>column dialog</comment>
+ <translation>Dodaj ograniczenie wartości domyślnej</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="228"/>
+ <source>Are you sure you want to delete constraint &apos;%1&apos;?</source>
+ <comment>column dialog</comment>
+ <translation>Czy na pewno chcesz usunąć ograniczenie &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="290"/>
+ <source>Correct the constraint&apos;s configuration.</source>
+ <translation>Popraw konfigurację ograniczenia.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialog.cpp" line="293"/>
+ <source>This constraint is not officially supported by SQLite 2,
+but it&apos;s okay to use it.</source>
+ <translation>To ograniczenie nie jest oficjalnie wspireane przez SQLite 2,
+ale można go używać.</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnDialogConstraintsModel</name>
+ <message>
+ <location filename="../dialogs/columndialogconstraintsmodel.cpp" line="328"/>
+ <source>Type</source>
+ <comment>column dialog constraints</comment>
+ <translation>Typ</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialogconstraintsmodel.cpp" line="330"/>
+ <source>Name</source>
+ <comment>column dialog constraints</comment>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/columndialogconstraintsmodel.cpp" line="332"/>
+ <source>Details</source>
+ <comment>column dialog constraints</comment>
+ <translation>Szczegóły</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnForeignKeyPanel</name>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="29"/>
+ <source>Foreign table:</source>
+ <translation>Tabela obca:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="45"/>
+ <source>Foreign column:</source>
+ <translation>Kolumn obca:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="58"/>
+ <source>Reactions</source>
+ <translation>Reakcje</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="97"/>
+ <source>Deferred foreign key</source>
+ <translation>Klucz obcy odroczony</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="115"/>
+ <source>Named constraint</source>
+ <translation>Nazwane ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.ui" line="122"/>
+ <source>Constraint name</source>
+ <translation>Nazwa ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.cpp" line="40"/>
+ <source>Pick the foreign table.</source>
+ <translation>Wybierz tabelę obcą</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.cpp" line="41"/>
+ <source>Pick the foreign column.</source>
+ <translation>Wybierz kolumnę obcą</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnforeignkeypanel.cpp" line="42"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnPrimaryKeyPanel</name>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.ui" line="26"/>
+ <source>Autoincrement</source>
+ <translation>Autoinkrementacja</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.ui" line="48"/>
+ <source>Sort order:</source>
+ <translation>Kierunek sortowania:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.ui" line="83"/>
+ <source>Named constraint:</source>
+ <translation>Ograniczenie nazwane:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.ui" line="111"/>
+ <source>On conflict:</source>
+ <translation>W razie konfliktu:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.cpp" line="87"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnprimarykeypanel.cpp" line="103"/>
+ <source>Autoincrement (only for %1 type columns)</source>
+ <comment>column primary key</comment>
+ <translation>Autoinkrementacja (tylko dla kolumn o typie %1)</translation>
+ </message>
+</context>
+<context>
+ <name>ColumnUniqueAndNotNullPanel</name>
+ <message>
+ <location filename="../constraints/columnuniqueandnotnullpanel.ui" line="41"/>
+ <source>Named constraint:</source>
+ <translation>Ograniczenie nazwane:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnuniqueandnotnullpanel.ui" line="69"/>
+ <source>On conflict:</source>
+ <translation>W razie konfliktu:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/columnuniqueandnotnullpanel.cpp" line="73"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+</context>
+<context>
+ <name>CompleterWindow</name>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="159"/>
+ <source>Column: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Kolumna: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="161"/>
+ <source>Table: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Tabela: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="163"/>
+ <source>Index: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Indeks: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="165"/>
+ <source>Trigger: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Wyzwalacz: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="167"/>
+ <source>View: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Widok: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="169"/>
+ <source>Database: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Baza danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="181"/>
+ <source>Keyword: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Słowo kluczowe: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="183"/>
+ <source>Function: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Funkcja: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="185"/>
+ <source>Operator: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Operator: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="187"/>
+ <source>String</source>
+ <comment>completer statusbar</comment>
+ <translation>Tekst</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="189"/>
+ <source>Number</source>
+ <comment>completer statusbar</comment>
+ <translation>Liczba</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="191"/>
+ <source>Binary data</source>
+ <comment>completer statusbar</comment>
+ <translation>Dane binarne</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="193"/>
+ <source>Collation: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Zestawienie: %1</translation>
+ </message>
+ <message>
+ <location filename="../completer/completerwindow.cpp" line="195"/>
+ <source>Pragma function: %1</source>
+ <comment>completer statusbar</comment>
+ <translation>Funkcja pragma: %1</translation>
+ </message>
+</context>
+<context>
+ <name>ConfigDialog</name>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="14"/>
+ <location filename="../dialogs/configdialog.ui" line="1216"/>
+ <source>Configuration</source>
+ <translation>Konfiguracja</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="73"/>
+ <source>Search</source>
+ <translation>Szukaj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="104"/>
+ <source>General</source>
+ <translation>Ogólne</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="116"/>
+ <source>Keyboard shortcuts</source>
+ <translation>Skróty klawiszowe</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="128"/>
+ <source>Look &amp; feel</source>
+ <translation>Wygląd i zachowanie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="139"/>
+ <source>Style</source>
+ <translation>Style</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="151"/>
+ <source>Fonts</source>
+ <translation>Czcionki</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="163"/>
+ <source>Colors</source>
+ <translation>Kolory</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="176"/>
+ <source>Plugins</source>
+ <translation>Wtyczki</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="187"/>
+ <source>Code formatters</source>
+ <translation>Formatery kodu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="196"/>
+ <source>Data browsing</source>
+ <translation>Przeglądanie danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="207"/>
+ <source>Data editors</source>
+ <translation>Edytory danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="237"/>
+ <source>Data browsing and editing</source>
+ <translation>Przeglądanie i edycja danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="243"/>
+ <source>Number of data rows per page:</source>
+ <translation>Liczba wierszy danych na stronie:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="269"/>
+ <location filename="../dialogs/configdialog.ui" line="279"/>
+ <source>&lt;p&gt;When the data is read into grid view columns width is automatically adjusted. This value limits the initial width for the adjustment, but user can still resize the column manually over this limit.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Kiedy dane są wczytane do widoku siatki, szerokość kolumn jest automatycznie dostosowywana. Ta wartość ogranicza początkową szerokość tego dostosowywania, ale użytkownik nadal może rozszerzać kolumnę ręcznie poza ten limit.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="272"/>
+ <source>Limit initial data column width to (in pixels):</source>
+ <translation>Ogranicz początkową szerokość kolumn danych (w pikselach):</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="328"/>
+ <source>Data types</source>
+ <translation>Type danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="366"/>
+ <source>Available editors:</source>
+ <translation>Dostępne edytory:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="382"/>
+ <source>Editors selected for this data type:</source>
+ <translation>Edytory wybrane dla tego typu danych:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="418"/>
+ <source>Schema editing</source>
+ <translation>Edycja schematu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="430"/>
+ <source>Number of DDL changes kept in history.</source>
+ <translation>Liczba zmian DDL trzymanych w historii.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="443"/>
+ <source>DDL history size:</source>
+ <translation>Rozmiar historii DDL:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="450"/>
+ <source>Don&apos;t show DDL preview dialog when commiting schema changes</source>
+ <translation>Nie pokazuj okna podglądu DDL podczas zatwierdzania zmian schematu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="463"/>
+ <source>SQL queries</source>
+ <translation>Zapytania SQL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="475"/>
+ <location filename="../dialogs/configdialog.ui" line="488"/>
+ <source>Number of queries kept in the history.</source>
+ <translation>Liczba zapytań trzymana w historii.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="491"/>
+ <source>History size:</source>
+ <translation>Rozmiar historii:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="498"/>
+ <source>&lt;p&gt;If there is more than one query in the SQL editor window, then (if this option is enabled) only a single query will be executed - the one under the keyboard insertion cursor. Otherwise all queries will be executed. You can always limit queries to be executed by selecting those queries before calling to execute.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Jeśli w oknie edytora SQL jest więcej niż jedno zapytanie, to (jeśli ta opcja jest włączona) tylko jedno zapytanie będzie wykonana - to, które znajduje się pod kursorem pisania. W przeciwnym wypadku wszystkie zapytania będą wykonywane. Zawsze możesz ograniczyć zapytania do wywołania przez zaznaczenie tych zapytań, które chcesz wywołać.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="501"/>
+ <source>Execute only the query under the cursor</source>
+ <translation>Wykonuj tylko zapytania będące pod kursorem</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="514"/>
+ <source>Updates</source>
+ <translation>Aktualizacje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="520"/>
+ <source>Automatically check for updates at startup</source>
+ <translation>Sprawdzaj aktualizacje automatycznie przy starcie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="533"/>
+ <source>Session</source>
+ <translation>Sesje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="539"/>
+ <source>Restore last session (active MDI windows) after startup</source>
+ <translation>Przywróć ostatnią sesję (aktywne okna MDI) po starcie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="581"/>
+ <source>Filter shortcuts by name or key combination</source>
+ <translation>Filtruj skróty po nazwie, lub kombinacji klawiszy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="622"/>
+ <source>Action</source>
+ <translation>Akcja</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="627"/>
+ <source>Key combination</source>
+ <translation>Kombinacja klawiszy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="662"/>
+ <source>Changing language requires application restart to take effect.</source>
+ <translation>Zmiana języka wymaga restartu aplikacji, aby zadziałać.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="679"/>
+ <source>Database list</source>
+ <translation>Lista baz</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="685"/>
+ <source>If switched off, then columns will be sorted in the order they are typed in CREATE TABLE statement.</source>
+ <translation>Gdy wyłączone, to kolumny będą ułożone w takiej kolejności, w jakiej wystąpiły w zapytaniu CREATE TABLE.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="688"/>
+ <source>Sort table columns alphabetically</source>
+ <translation>Sortuj kolumny tabel alfabetycznie.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="698"/>
+ <source>Expand tables node when connected to a database</source>
+ <translation>Rozwiń listę tabel po połączeniu z bazą danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="708"/>
+ <source>&lt;p&gt;Additional labels are those displayed next to the names on the databases list (they are blue, unless configured otherwise). Enabling this option will result in labels for databases, invalid databases and aggregated nodes (column group, index group, trigger group). For more labels see options below.&lt;p&gt;</source>
+ <translation>&lt;p&gt;Dodatkowe etykiety, to te wyświetlane obok nazw na liście baz danych (są niebieskie, chyba że skonfigurowano je inaczej). Włączenie tej opcji spowoduje wyświetlenie etykiet dla baz danych, niepoprawnych baz danych, oraz dla węzłów agregujących (grupa kolumn, grupa indeksów, grupa wyzwalaczy). Więcej etykiet jest dostępne niżej.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="711"/>
+ <source>Display additional labels on the list</source>
+ <translation>Wyświetlaj dodatkowe etykiety na liście</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="726"/>
+ <source>For regular tables labels will show number of columns, indexes and triggers for each of tables.</source>
+ <translation>Dla zwykłych tabel etykiety będą pokazywać liczbę kolumn, inseksów, oraz wyzwalaczy dla tych tabel.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="729"/>
+ <source>Display labels for regular tables</source>
+ <translation>Wyświetlaj etykiety dla zwykłych tabel</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="739"/>
+ <source>Virtual tables will be marked with a &apos;virtual&apos; label.</source>
+ <translation>Tabele wirtualne będą oznaczone etykietą &apos;wirtualna&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="742"/>
+ <source>Display labels for virtual tables</source>
+ <translation>Wyświetlaj etykiety dla tabel wirtualnych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="755"/>
+ <source>Expand views node when connected to a database</source>
+ <translation>Rozwiń listę widoków po połączeniu z bazą.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="765"/>
+ <source>If this option is switched off, then objects will be sorted in order they appear in sqlite_master table (which is in order they were created)</source>
+ <translation>Gdy ta opcja jest wyłączona, to wszystkie obiekty będą ułożone w takiej kolejności, w jakiej występują w tabeli sqlite_master (czyli w takiej, w jakiej zostały stworzone)</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="768"/>
+ <source>Sort objects (tables, indexes, triggers and views) alphabetically</source>
+ <translation>Sortuj obiekty (tabele, indeksy, wyzwalacze i widoki) alfabetycznie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="778"/>
+ <source>Display system tables and indexes on the list</source>
+ <translation>Wyświetlaj tabele i indeksy systemowe na liście</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="791"/>
+ <source>Table windows</source>
+ <translation>Okna tabel</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="797"/>
+ <source>When enabled, Table Windows will show up with the data tab, instead of the structure tab.</source>
+ <translation>Gdy włączone, Okna Tabel będą się pokazywać z zakładką danych, zamiast z zakładką struktury.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="800"/>
+ <source>Open Table Windows with the data tab for start</source>
+ <translation>Otwieraj Okna Tabeli z zakładką danych na początek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="813"/>
+ <source>View windows</source>
+ <translation>Okna Widoków</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="819"/>
+ <source>When enabled, View Windows will show up with the data tab, instead of the structure tab.</source>
+ <translation>Gdy włączone, Okna Widoków będą się pokazywać z zakładką danych, zamiast z zakładką struktury.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="822"/>
+ <source>Open View Windows with the data tab for start</source>
+ <translation>Otwieraj Okna Widoku z zakładką danych na początek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="933"/>
+ <source>Hide built-in plugins</source>
+ <translation>Ukryj wtyczki wbudowane</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="962"/>
+ <source>Current style:</source>
+ <translation>Aktualny styl:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="979"/>
+ <source>Preview</source>
+ <translation>Podgląd</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="989"/>
+ <source>Enabled</source>
+ <translation>Włączone</translation>
+ </message>
+ <message>
+ <source>Column</source>
+ <translation type="obsolete">Kolumna</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1162"/>
+ <source>Disabled</source>
+ <translation>Wyłączone</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="656"/>
+ <location filename="../dialogs/configdialog.ui" line="1206"/>
+ <source>Language</source>
+ <translation>Język</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1211"/>
+ <source>Active formatter plugin</source>
+ <translation>Aktywna wtyczka formatera</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1249"/>
+ <source>SQL editor font</source>
+ <translation>Czcionka edytora SQL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1265"/>
+ <source>Database list font</source>
+ <translation>Czcionka listy baz danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1281"/>
+ <source>Database list additional label font</source>
+ <translation>Czcionka dodatkowych etykiety listy baz danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1297"/>
+ <source>Data view font</source>
+ <translation>Czcionka widoku danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1313"/>
+ <source>Status field font</source>
+ <translation>Czcionka pola statusu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1371"/>
+ <source>SQL editor colors</source>
+ <translation>Kolory edytora SQL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1377"/>
+ <source>Current line background</source>
+ <translation>Tło bieżącej linii</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1384"/>
+ <source>&lt;p&gt;SQL strings are enclosed with single quote characters.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Łańcuchy znaków SQL są zamknięte pomiędzy znakami apostrofu.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1387"/>
+ <source>String foreground</source>
+ <translation>Czcionka łańcucha znaków</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1490"/>
+ <source>&lt;p&gt;Bind parameters are placeholders for values yet to be provided by the user. They have one of the forms:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;:param_name&lt;/li&gt;&lt;li&gt;$param_name&lt;/li&gt;&lt;li&gt;@param_name&lt;/li&gt;&lt;li&gt;?&lt;/li&gt;&lt;/ul&gt;</source>
+ <translation>&lt;b&gt;Parametry wiążące to wyrażenia zastępcze dla wartości, które mają być dopiero dostarczone przez użytkownika. Mają one jedną z form: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;:nazwa_parametru&lt;/li&gt;&lt;li&gt;$nazwa_parametru&lt;/li&gt;&lt;li&gt;@nazwa_parametru&lt;/li&gt;&lt;li&gt;?&lt;/li&gt;&lt;/ul&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1493"/>
+ <source>Bind parameter foreground</source>
+ <translation>Czcionka parametru wiążącego</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1516"/>
+ <source>Highlighted parenthesis background</source>
+ <translation>Tło podświetlonych nawiasów</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1523"/>
+ <source>&lt;p&gt;BLOB values are binary values represented as hexadecimal numbers, like:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;X&apos;12B4&apos;&lt;/li&gt;&lt;li&gt;x&apos;46A2F4&apos;&lt;/li&gt;&lt;/ul&gt;</source>
+ <translation>&lt;p&gt;Wartości BLOB są wartościami binarnymi, reprezentowanymi jako liczby heksadecymalne, jak np:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;X&apos;12B4&apos;&lt;/li&gt;&lt;li&gt;x&apos;46A2F4&apos;&lt;/li&gt;&lt;/ul&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1526"/>
+ <source>BLOB value foreground</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1533"/>
+ <source>Regular foreground</source>
+ <translation>Standardowa czcionka</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1540"/>
+ <source>Line numbers area background</source>
+ <translation>Tło obszaru numerów linii</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1563"/>
+ <source>Keyword foreground</source>
+ <translation>Czcionka słowa kluczowego</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1570"/>
+ <source>Number foreground</source>
+ <translation>Czcionka liczby</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1577"/>
+ <source>Comment foreground</source>
+ <translation>Czcionka komentarza</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1616"/>
+ <source>&lt;p&gt;Valid objects are name of tables, indexes, triggers, or views that exist in the SQLite database.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Poprawne obiekty to nazwy tabel, indekstów, wyzwalaczy i widoków, które istnieją w basie SQLite.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1619"/>
+ <source>Valid objects foreground</source>
+ <translation>Czcionka poprawnych obiektów</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1645"/>
+ <source>Data view colors</source>
+ <translation>Kolory widoku danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1651"/>
+ <source>&lt;p&gt;Any data changes will be outlined with this color, until they&apos;re commited to the database.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Jakakolwiek zmiana danych będzie obrysowana tym kolorem, dopóki nie zostanie zatwierdzona do bazy danych.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1654"/>
+ <source>Uncommited data outline color</source>
+ <translation>Kolor obrysu niezatwierdzonych danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1677"/>
+ <source>&lt;p&gt;In case of error while commiting data changes, the problematic cell will be outlined with this color.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;W przypadku błędu podczas zatwierdzania zmian danych, komórka będąca przyczyną problemu zostanie obrysowana tym kolorem.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1680"/>
+ <source>Commit error outline color</source>
+ <translation>Kolor obrysu błędu zatwierdzania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1703"/>
+ <source>NULL value foreground</source>
+ <translation>Kolor czcionki wartości NULL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1726"/>
+ <source>Deleted row background</source>
+ <translation>Tło wiersza usuniętego</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1752"/>
+ <source>Database list colors</source>
+ <translation>Kolory listy baz danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1758"/>
+ <source>&lt;p&gt;Additional labels are those which tell you SQLite version, number of objects deeper in the tree, etc.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Dodatkowe etykiety to te, które mówią o wersji SQLite, liczbie obiektów w głębszych częściach drzewa, itp.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1761"/>
+ <source>Additional labels foreground</source>
+ <translation>Czcionka dodatkowych etykiet</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1787"/>
+ <source>Status field colors</source>
+ <translation>Kolory pola statusu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1793"/>
+ <source>Information message foreground</source>
+ <translation>Czcionka wiadomości informującej</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1816"/>
+ <source>Warning message foreground</source>
+ <translation>Czcionka wiadomości ostrzegającej</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.ui" line="1839"/>
+ <source>Error message foreground</source>
+ <translation>Czcionka wiadomości błędu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="765"/>
+ <source>Description:</source>
+ <comment>plugin details</comment>
+ <translation>Opis:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="766"/>
+ <source>Category:</source>
+ <comment>plugin details</comment>
+ <translation>Kategoria:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="767"/>
+ <source>Version:</source>
+ <comment>plugin details</comment>
+ <translation>Wersja:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="768"/>
+ <source>Author:</source>
+ <comment>plugin details</comment>
+ <translation>Autor:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="770"/>
+ <source>Internal name:</source>
+ <comment>plugin details</comment>
+ <translation>Nazwa wewnętrzna:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="771"/>
+ <source>Dependencies:</source>
+ <comment>plugin details</comment>
+ <translation>Zależności:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="772"/>
+ <source>Conflicts:</source>
+ <comment>plugin details</comment>
+ <translation>Konflikty:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="776"/>
+ <source>Plugin details</source>
+ <translation>Szczegóły wtyczki</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1177"/>
+ <source>Plugins are loaded/unloaded immediately when checked/unchecked, but modified list of plugins to load at startup is not saved until you commit the whole configuration dialog.</source>
+ <translation>Wtyczki są ładowane/wyładowywane natychmiast po zaznaczeniu/odznaczeniu, ale zmodyfikowana lista wtyczek, które należy załadować przy starcie nie jest zapisana, dopóki nie zatwierdzisz całego okna configuracji.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1241"/>
+ <source>%1 (built-in)</source>
+ <comment>plugins manager in configuration dialog</comment>
+ <translation>%1 (wbudowany)</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1254"/>
+ <source>Details</source>
+ <translation>Szczegóły</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1266"/>
+ <source>No plugins in this category.</source>
+ <translation>Brak wtyczek w tej kategorii.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1362"/>
+ <source>Add new data type</source>
+ <translation>Dodaj nowy typ danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1366"/>
+ <source>Rename selected data type</source>
+ <translation>Zmień nazwę wybranego typu danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1370"/>
+ <source>Delete selected data type</source>
+ <translation>Usuń wybrany typ danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/configdialog.cpp" line="1374"/>
+ <source>Help for configuring data type editors</source>
+ <translation>Pomoc w konfiguracji edytorów typów danych</translation>
+ </message>
+</context>
+<context>
+ <name>ConstraintCheckPanel</name>
+ <message>
+ <location filename="../constraints/constraintcheckpanel.ui" line="20"/>
+ <source>The condition</source>
+ <translation>Warunek</translation>
+ </message>
+ <message>
+ <location filename="../constraints/constraintcheckpanel.ui" line="35"/>
+ <source>Named constraint:</source>
+ <translation>Ograniczenie nazwane:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/constraintcheckpanel.ui" line="51"/>
+ <source>On conflict</source>
+ <translation>W razie konfliktu</translation>
+ </message>
+ <message>
+ <location filename="../constraints/constraintcheckpanel.cpp" line="46"/>
+ <source>Enter a valid condition.</source>
+ <translation>Wprowadź poprawny warunek.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/constraintcheckpanel.cpp" line="47"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+</context>
+<context>
+ <name>ConstraintDialog</name>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="62"/>
+ <source>New constraint</source>
+ <comment>constraint dialog</comment>
+ <translation>Nowe ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="63"/>
+ <source>Create</source>
+ <comment>constraint dialog</comment>
+ <translation>Utwórz</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="66"/>
+ <source>Edit constraint</source>
+ <comment>dialog window</comment>
+ <translation>Edytuj ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="67"/>
+ <source>Apply</source>
+ <comment>constraint dialog</comment>
+ <translation>Zastosuj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="170"/>
+ <source>Primary key</source>
+ <comment>table constraints</comment>
+ <translation>Klucz główny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="174"/>
+ <source>Foreign key</source>
+ <comment>table constraints</comment>
+ <translation>Klucz obcy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="178"/>
+ <source>Unique</source>
+ <comment>table constraints</comment>
+ <translation>Wartości unikalne</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="182"/>
+ <source>Not NULL</source>
+ <comment>table constraints</comment>
+ <translation>Niepuste</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="186"/>
+ <source>Check</source>
+ <comment>table constraints</comment>
+ <translation>Warunek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="190"/>
+ <source>Collate</source>
+ <comment>table constraints</comment>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/constraintdialog.cpp" line="194"/>
+ <source>Default</source>
+ <comment>table constraints</comment>
+ <translation>Wartość domyślna</translation>
+ </message>
+</context>
+<context>
+ <name>ConstraintTabModel</name>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="68"/>
+ <source>Table</source>
+ <comment>table constraints</comment>
+ <translation>Tabela</translation>
+ </message>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="109"/>
+ <source>Column (%1)</source>
+ <comment>table constraints</comment>
+ <translation>Kolumna (%1)</translation>
+ </message>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="153"/>
+ <source>Scope</source>
+ <comment>table constraints</comment>
+ <translation>Zakres</translation>
+ </message>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="155"/>
+ <source>Type</source>
+ <comment>table constraints</comment>
+ <translation>Typ</translation>
+ </message>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="157"/>
+ <source>Details</source>
+ <comment>table constraints</comment>
+ <translation>Szczegóły</translation>
+ </message>
+ <message>
+ <location filename="../windows/constrainttabmodel.cpp" line="159"/>
+ <source>Name</source>
+ <comment>table constraints</comment>
+ <translation>Nazwa</translation>
+ </message>
+</context>
+<context>
+ <name>DataView</name>
+ <message>
+ <location filename="../dataview.cpp" line="95"/>
+ <source>Filter data</source>
+ <comment>data view</comment>
+ <translation>Filtruj dane</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="104"/>
+ <source>Grid view</source>
+ <translation>Widok siatki</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="105"/>
+ <source>Form view</source>
+ <translation>Widok formularza</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="148"/>
+ <source>Refresh table data</source>
+ <comment>data view</comment>
+ <translation>Odśwież dane tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="162"/>
+ <source>First page</source>
+ <comment>data view</comment>
+ <translation>Pierwsza strona</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="163"/>
+ <source>Previous page</source>
+ <comment>data view</comment>
+ <translation>Poprzednia strona</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="165"/>
+ <source>Next page</source>
+ <comment>data view</comment>
+ <translation>Następna strona</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="166"/>
+ <source>Last page</source>
+ <comment>data view</comment>
+ <translation>Ostatnia strona</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="171"/>
+ <source>Apply filter</source>
+ <comment>data view</comment>
+ <translation>Zastosuj filtr</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="186"/>
+ <source>Commit changes for selected cells</source>
+ <comment>data view</comment>
+ <translation>Zatwierdź zmiany dla wybranych komórek</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="187"/>
+ <source>Rollback changes for selected cells</source>
+ <comment>data view</comment>
+ <translation>Wycofaj zmiany dla wybranych komórek</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="188"/>
+ <source>Show grid view of results</source>
+ <comment>sql editor</comment>
+ <translation>Pokaż widok siatki dla wyników</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="189"/>
+ <source>Show form view of results</source>
+ <comment>sql editor</comment>
+ <translation>Pokaż widok formularza dla wyników</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="258"/>
+ <source>Filter by text</source>
+ <comment>data view</comment>
+ <translation>Filtruj po tekście</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="259"/>
+ <source>Filter by the Regular Expression</source>
+ <comment>data view</comment>
+ <translation>Filtruj używając Wyrażeń Regularnych</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="260"/>
+ <source>Filter by SQL expression</source>
+ <comment>data view</comment>
+ <translation>Filtruj używając wyrażenia SQL</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="291"/>
+ <source>Tabs on top</source>
+ <comment>data view</comment>
+ <translation>Karty na górze</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="292"/>
+ <source>Tabs at bottom</source>
+ <comment>data view</comment>
+ <translation>Karty na dole</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="510"/>
+ <source>Total number of rows is being counted.
+Browsing other pages will be possible after the row counting is done.</source>
+ <translation>Całkowita liczba wierszy jest liczona.
+Przeglądanie pozostałych stron będzie możliwe kiedy liczenie wierszy zostanie zakończone.</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="521"/>
+ <source>Row: %1</source>
+ <translation>Wiersz: %1</translation>
+ </message>
+</context>
+<context>
+ <name>DbConverterDialog</name>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="20"/>
+ <source>Source database</source>
+ <translation>Źródłowa baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="29"/>
+ <source>Source database version:</source>
+ <translation>Wersja źródłowej bazy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="46"/>
+ <source>Target database</source>
+ <translation>Docelowa baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="52"/>
+ <source>Target version:</source>
+ <translation>Wersja docelowej bazy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="59"/>
+ <source>This is the file that will be created as a result of the conversion.</source>
+ <translation>To jest plik, który będzie stworzony jako wynik konwersji.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="66"/>
+ <source>Target file:</source>
+ <translation>Docelowy plik:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="73"/>
+ <source>Name of the new database:</source>
+ <translation>Nazwa nowej bazy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="90"/>
+ <source>This is the name that the converted database will be added to SQLiteStudio with.</source>
+ <translation>To jest nazwa z jaką skonwertowana baza będzie dodana do SQLiteStudio.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.ui" line="14"/>
+ <source>Convert database</source>
+ <translation>Konwertuj bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="123"/>
+ <source>Select source database</source>
+ <translation>Wybierz źródłową bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="129"/>
+ <source>Enter valid and writable file path.</source>
+ <translation>Wprowadź poprawną ścieżkę do pliku, do której masz prawo zapisywać.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="131"/>
+ <source>Entered file exists and will be overwritten.</source>
+ <translation>Podany plik istnieje i zostanie nadpisany.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="135"/>
+ <source>Enter a not empty, unique name (as in the list of databases on the left).</source>
+ <translation>Wprowadź niepustą, unikalną nazwę (w kontekście listy baz danych po lewej).</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="140"/>
+ <source>No valid target dialect available. Conversion not possible.</source>
+ <translation>Nie ma dostępnego poprawnego docelowego dialektu. Konwersja nie jest możliwa.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="142"/>
+ <source>Select valid target dialect.</source>
+ <translation>Wybierz poprawny docelowy dialekt.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="194"/>
+ <source>Database %1 has been successfully converted and now is available under new name: %2</source>
+ <translation>Baza danych %1 została przekonwertowana pomyślnie i jest teraz dostępna pod nazwą: %2</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="206"/>
+ <source>SQL statements conversion</source>
+ <translation>Konwersja zapytań SQL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="214"/>
+ <source>Following error occurred while converting SQL statements to the target SQLite version:</source>
+ <translation>Następujące błędy wystąpiły podczas konwersji zapytań SQL do docelowej wersji SQLite:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbconverterdialog.cpp" line="215"/>
+ <source>Would you like to ignore those errors and proceed?</source>
+ <translation>Czy chcesz zignorować te błędy i kontynuować?</translation>
+ </message>
+</context>
+<context>
+ <name>DbDialog</name>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="20"/>
+ <source>Database</source>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="43"/>
+ <source>Database driver</source>
+ <translation>Sterownik bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="59"/>
+ <source>Name</source>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="66"/>
+ <source>Type</source>
+ <translation>Typ</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="78"/>
+ <source>Browse for database file on local computer</source>
+ <translation>Przeglądaj w poszukiwaniu pliku bazy danych na lokalnym komputerze</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="90"/>
+ <source>File</source>
+ <translation>Plik</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="97"/>
+ <source>Generate name basing on file path</source>
+ <translation>Generuj nazwę bazując na ścieżce do pliku</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="110"/>
+ <source>Permanent</source>
+ <translation>Trwała</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="132"/>
+ <source>&lt;p&gt;Enable this if you want the database to be stored in configuration file and restored every time SQLiteStudio is started.&lt;/p&gt;</source>
+ <extracomment>aasfd</extracomment>
+ <translation>&lt;p&gt;Włącz to, jeśli chcesz aby baza danych była przechowywana w pliku konfiguracji i przywracana za każdym razem, gdy startuje SQLiteStudio.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.ui" line="164"/>
+ <source>Test database connection</source>
+ <translation>Testuj połączenie z bazą</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.cpp" line="279"/>
+ <source>Browse</source>
+ <translation>Przeglądaj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.cpp" line="516"/>
+ <source>The name will be auto-generated</source>
+ <translation>Nazwa będzie generowana automatycznie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/dbdialog.cpp" line="521"/>
+ <source>Type the name</source>
+ <translation>Wprowadź nazwę</translation>
+ </message>
+</context>
+<context>
+ <name>DbObjectDialogs</name>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="174"/>
+ <source>Delete table</source>
+ <translation>Usuń tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="175"/>
+ <source>Are you sure you want to delete table %1?</source>
+ <translation>Czy na pewno chcesz usunąć tabelę %1?</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="179"/>
+ <source>Delete index</source>
+ <translation>Usuń indeks</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="180"/>
+ <source>Are you sure you want to delete index %1?</source>
+ <translation>Czy na pewno chcesz usunąć indeks %1?</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="184"/>
+ <source>Delete trigger</source>
+ <translation>Usuń wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="185"/>
+ <source>Are you sure you want to delete trigger %1?</source>
+ <translation>Czy na pewno chcesz usunąć wyzwalacz %1?</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="189"/>
+ <source>Delete view</source>
+ <translation>Usuń widok</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="190"/>
+ <source>Are you sure you want to delete view %1?</source>
+ <translation>Czy na pewno chcesz usunąć widok %1?</translation>
+ </message>
+ <message>
+ <location filename="../dbobjectdialogs.cpp" line="218"/>
+ <source>Error while dropping %1: %2</source>
+ <translation>Błąd podczas porzucania %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>DbTree</name>
+ <message>
+ <location filename="../dbtree/dbtree.ui" line="23"/>
+ <source>Databases</source>
+ <translation>Bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.ui" line="67"/>
+ <source>Filter by name</source>
+ <translation>Filtruj po nazwie</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="99"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="100"/>
+ <source>Paste</source>
+ <translation>Wklej</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="101"/>
+ <source>Select all</source>
+ <translation>Zaznacz wszystko</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="102"/>
+ <source>Create a group</source>
+ <translation>Utwórz grupę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="103"/>
+ <source>Delete the group</source>
+ <translation>Usuń grupę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="104"/>
+ <source>Rename the group</source>
+ <translation>Zmień nazwę grupy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="105"/>
+ <source>Add a database</source>
+ <translation>Dodaj bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="106"/>
+ <source>Edit the database</source>
+ <translation>Edytuj bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="107"/>
+ <source>Remove the database</source>
+ <translation>Usuń bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="108"/>
+ <source>Connect to the database</source>
+ <translation>Połącz z bazą danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="109"/>
+ <source>Disconnect from the database</source>
+ <translation>Rozłącz się z bazą danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="110"/>
+ <source>Import</source>
+ <translation>Importuj</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="111"/>
+ <source>Export the database</source>
+ <translation>Eksportuj bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="112"/>
+ <source>Convert database type</source>
+ <translation>Konwertuj typ bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="113"/>
+ <source>Vacuum</source>
+ <translation>Odkurz</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="114"/>
+ <source>Integrity check</source>
+ <translation>Sprawdź spójność</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="115"/>
+ <source>Create a table</source>
+ <translation>Utwórz tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="116"/>
+ <source>Edit the table</source>
+ <translation>Edytuj tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="935"/>
+ <source>Entry with name %1 already exists in group %2.</source>
+ <translation>Pozycja o nazwie %1 istnieje już w grupie %2.</translation>
+ </message>
+ <message>
+ <source>Drop the table</source>
+ <translation type="obsolete">Porzuć tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="118"/>
+ <source>Export the table</source>
+ <translation>Eksportuj tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="119"/>
+ <source>Import into the table</source>
+ <translation>Importuj do tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="120"/>
+ <source>Populate table</source>
+ <translation>Zaludnij tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="121"/>
+ <source>Create similar table</source>
+ <translation>Utwórz podobną tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="123"/>
+ <source>Create an index</source>
+ <translation>Utwórz indeks</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="124"/>
+ <source>Edit the index</source>
+ <translation>Edytuj indeks</translation>
+ </message>
+ <message>
+ <source>Drop the index</source>
+ <translation type="obsolete">Porzuć indeks</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="126"/>
+ <source>Create a trigger</source>
+ <translation>Utwórz wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="127"/>
+ <source>Edit the trigger</source>
+ <translation>Edytuj wyzwalacz</translation>
+ </message>
+ <message>
+ <source>Drop the trigger</source>
+ <translation type="obsolete">Porzuć wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="129"/>
+ <source>Create a view</source>
+ <translation>Utwórz widok</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="130"/>
+ <source>Edit the view</source>
+ <translation>Edytuj widok</translation>
+ </message>
+ <message>
+ <source>Drop the view</source>
+ <translation type="obsolete">Porzuć widok</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="132"/>
+ <source>Add a column</source>
+ <translation>Dodaj kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="133"/>
+ <source>Edit the column</source>
+ <translation>Edytuj kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="134"/>
+ <source>Delete the column</source>
+ <translation>Usuń kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="135"/>
+ <source>Delete selected items</source>
+ <translation>Usuń wybrane elementy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="136"/>
+ <source>Clear filter</source>
+ <translation>Wyczyść filtr</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="137"/>
+ <source>Refresh all database schemas</source>
+ <translation>Odśwież schematy wszystkich baz danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="138"/>
+ <source>Refresh selected database schema</source>
+ <translation>Odśwież schemat wybranej bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="117"/>
+ <source>Delete the table</source>
+ <translation>Usuń tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="122"/>
+ <source>Reset autoincrement sequence</source>
+ <translation>Wyzeruj sekwencję autoinkrementacji</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="125"/>
+ <source>Delete the index</source>
+ <translation>Usuń indeks</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="128"/>
+ <source>Delete the trigger</source>
+ <translation>Usuń wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="131"/>
+ <source>Delete the view</source>
+ <translation>Usuń widok</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="308"/>
+ <location filename="../dbtree/dbtree.cpp" line="313"/>
+ <source>Database</source>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="323"/>
+ <source>Grouping</source>
+ <translation>Grupowanie</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="932"/>
+ <location filename="../dbtree/dbtree.cpp" line="935"/>
+ <source>Create group</source>
+ <translation>Utwórz grupę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="932"/>
+ <source>Group name</source>
+ <translation>Nazwa grupy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="953"/>
+ <source>Delete group</source>
+ <translation>Usuń grupę</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="954"/>
+ <source>Are you sure you want to delete group %1?
+All objects from this group will be moved to parent group.</source>
+ <translation>Czy na pewno chcesz usunąć grupę %1?
+Wszystkie obiekty z tej grupy zostaną przeniesione do nadrzędnej grupy.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1014"/>
+ <source>Delete database</source>
+ <translation>Usuń bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1014"/>
+ <source>Are you sure you want to delete database &apos;%1&apos;?</source>
+ <translation>Czy na pewno chcesz usunąć bazę danych &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1050"/>
+ <location filename="../dbtree/dbtree.cpp" line="1260"/>
+ <source>Cannot import, because no import plugin is loaded.</source>
+ <translation>Nie można zaimportować, ponieważ żadna wtyczka importu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1070"/>
+ <location filename="../dbtree/dbtree.cpp" line="1235"/>
+ <source>Cannot export, because no export plugin is loaded.</source>
+ <translation>Nie można wyeksportować, ponieważ żadna wtyczka eksportu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1334"/>
+ <source>Error while executing VACUUM on the database %1: %2</source>
+ <translation>Błąd podczas wykonywania VACUUM na bazie danych %1: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1336"/>
+ <source>VACUUM execution finished successfully.</source>
+ <translation>Wykonanie VACUUM przebiegło pomyślnie.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1353"/>
+ <source>Integrity check (%1)</source>
+ <translation>Sprawdzanie spójności (%1)</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1390"/>
+ <source>Reset autoincrement</source>
+ <translation>Wyzeruj autoinkrementację</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1390"/>
+ <source>Are you sure you want to reset autoincrement value for table &apos;%1&apos;?</source>
+ <translation>Czy na pewno chcesz wyzerować wartość autoinkrementacji dla tabeli &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1397"/>
+ <source>An error occurred while trying to reset autoincrement value for table &apos;%1&apos;: %2</source>
+ <translation>Wystąpił błąd podczas próby wyzerowania wartości autoinkrementacji dla tabeli &apos;%1&apos;: %2</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1399"/>
+ <source>Autoincrement value for table &apos;%1&apos; has been reset successfly.</source>
+ <translation>Wartość autoinkrementacji dla tabeli &apos;%1&apos; została pomyślnie wyzerowana.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1501"/>
+ <source>Following objects will be deleted: %1.</source>
+ <translation>Następujące obiekty zostaną usunięte: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1504"/>
+ <source>Following databases will be removed from list: %1.</source>
+ <translation>Następujące bazy danych zostaną usunięte z listy: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1507"/>
+ <source>Remainig objects from deleted group will be moved in place where the group used to be.</source>
+ <translation>Pozostałe obiekty z usuniętej grupy będą przeniesione w miejsce, gdzie dotychczas była ta grupa.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1509"/>
+ <source>%1&lt;br&gt;&lt;br&gt;Are you sure you want to continue?</source>
+ <translation>%1&lt;br&gt;&lt;br&gt;Czy na pewno chcesz kontynuować?</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.cpp" line="1511"/>
+ <source>Delete objects</source>
+ <translation>Usuń obiekty</translation>
+ </message>
+</context>
+<context>
+ <name>DbTreeItemDelegate</name>
+ <message>
+ <location filename="../dbtree/dbtreeitemdelegate.cpp" line="92"/>
+ <source>error</source>
+ <comment>dbtree labels</comment>
+ <translation>błąd</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemdelegate.cpp" line="109"/>
+ <source>(system table)</source>
+ <comment>database tree label</comment>
+ <translation>(tabela systemowa)</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemdelegate.cpp" line="127"/>
+ <source>(virtual)</source>
+ <comment>virtual table label</comment>
+ <translation>(wirtualna)</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemdelegate.cpp" line="139"/>
+ <source>(system index)</source>
+ <comment>database tree label</comment>
+ <translation>(indeks systemowy)</translation>
+ </message>
+</context>
+<context>
+ <name>DbTreeModel</name>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="405"/>
+ <source>Database: %1</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Baza danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="410"/>
+ <source>Version:</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Wersja:</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="411"/>
+ <source>File size:</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Rozmiar pliku:</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="412"/>
+ <source>Encoding:</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Kodowanie:</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="417"/>
+ <source>Error details:</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Szczegóły błędu:</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="427"/>
+ <source>Table : %1</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Tablela: : %1</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="450"/>
+ <source>Columns (%1):</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Kolumny (%1):</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="453"/>
+ <source>Indexes (%1):</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Indeksy (%1):</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="456"/>
+ <source>Triggers (%1):</source>
+ <comment>dbtree tooltip</comment>
+ <translation>Wyzwalacze (%1):</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1071"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1072"/>
+ <source>Move</source>
+ <translation>Przenieś</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1074"/>
+ <source>Include data</source>
+ <translation>Również dane</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1075"/>
+ <source>Include indexes</source>
+ <translation>Również indeksy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1076"/>
+ <source>Include triggers</source>
+ <translation>Również wyzwalacze</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1078"/>
+ <source>Abort</source>
+ <translation>Przerwij</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1154"/>
+ <source>Referenced tables</source>
+ <translation>Tabele powiązane</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1155"/>
+ <source>Do you want to include following referenced tables as well:
+%1</source>
+ <translation>Czy chcesz zawrzeć również powiązane tabele:
+%1</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1164"/>
+ <source>Name conflict</source>
+ <translation>Konflikt nazwy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1165"/>
+ <source>Following object already exists in the target database.
+Please enter new, unique name, or press &apos;%1&apos; to abort the operation:</source>
+ <translation>Następująy obiekt istnieje już w docelowej bazie danych.
+Proszę podać nową, unikalną nazwę, lub nacisnąć &apos;%1&apos;, aby przerwać operację.</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1178"/>
+ <source>SQL statements conversion</source>
+ <translation>Konwersja zapytań SQL</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1186"/>
+ <source>Following error occurred while converting SQL statements to the target SQLite version:</source>
+ <translation>Następujące błędy wystąpiły podczas konwersji zapytań SQL do docelowej wersji SQLite:</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreemodel.cpp" line="1187"/>
+ <source>Would you like to ignore those errors and proceed?</source>
+ <translation>Czy chcesz zignorować te błędy i kontynuować?</translation>
+ </message>
+</context>
+<context>
+ <name>DdlHistoryWindow</name>
+ <message>
+ <location filename="../windows/ddlhistorywindow.ui" line="35"/>
+ <source>Filter by database:</source>
+ <translation>Filtruj po bazie danych:</translation>
+ </message>
+ <message>
+ <location filename="../windows/ddlhistorywindow.cpp" line="73"/>
+ <source>-- Queries executed on database %1 (%2)
+-- Date and time of execution: %3
+%4</source>
+ <translation>-- Zapytania wykonane na bazie %1 (%2)
+-- Data i godzina wykonania: %3
+%4</translation>
+ </message>
+ <message>
+ <location filename="../windows/ddlhistorywindow.cpp" line="124"/>
+ <source>DDL history</source>
+ <translation>Historia DDL</translation>
+ </message>
+</context>
+<context>
+ <name>DdlPreviewDialog</name>
+ <message>
+ <location filename="../dialogs/ddlpreviewdialog.ui" line="14"/>
+ <source>Queries to be executed</source>
+ <translation>Zapytania do wykonania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/ddlpreviewdialog.ui" line="42"/>
+ <source>Don&apos;t show again</source>
+ <translation>Nie pokazuj więcej</translation>
+ </message>
+</context>
+<context>
+ <name>DebugConsole</name>
+ <message>
+ <location filename="../debugconsole.ui" line="14"/>
+ <source>SQLiteStudio Debug Console</source>
+ <translation>Konsola Debugowania SQLiteStudio</translation>
+ </message>
+</context>
+<context>
+ <name>EditorWindow</name>
+ <message>
+ <location filename="../windows/editorwindow.ui" line="39"/>
+ <source>Query</source>
+ <translation>Zapytanie</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.ui" line="109"/>
+ <source>History</source>
+ <translation>Historia</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="130"/>
+ <source>Results in the separate tab</source>
+ <translation>Wyniki w osobnej karcie</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="131"/>
+ <source>Results below the query</source>
+ <translation>Wyniki pod zapytaniem</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="164"/>
+ <location filename="../windows/editorwindow.cpp" line="166"/>
+ <source>SQL editor %1</source>
+ <translation>Edytor SQL %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="324"/>
+ <source>Results</source>
+ <translation>Wyniki</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="357"/>
+ <source>Execute query</source>
+ <translation>Wykonaj zapytanie</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="358"/>
+ <source>Explain query</source>
+ <translation>Wytłumacz zapytanie</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="361"/>
+ <source>Clear execution history</source>
+ <comment>sql editor</comment>
+ <translation>Wymaż historię zapytań</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="363"/>
+ <source>Export results</source>
+ <comment>sql editor</comment>
+ <translation>Wyeksportuj wyniki</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="365"/>
+ <source>Create view from query</source>
+ <comment>sql editor</comment>
+ <translation>Utwórz widok z zapytania</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="374"/>
+ <source>Previous database</source>
+ <translation>Poprzednia baza danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="375"/>
+ <source>Next database</source>
+ <translation>Następna baza danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="378"/>
+ <source>Show next tab</source>
+ <comment>sql editor</comment>
+ <translation>Pokaż następną kartę</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="379"/>
+ <source>Show previous tab</source>
+ <comment>sql editor</comment>
+ <translation>Pokaż poprzednią kartę</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="380"/>
+ <source>Focus results below</source>
+ <comment>sql editor</comment>
+ <translation>Aktywuj wyniki poniżej</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="381"/>
+ <source>Focus SQL editor above</source>
+ <comment>sql editor</comment>
+ <translation>Aktywuj edytor SQL powyżej</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="455"/>
+ <source>Active database (%1/%2)</source>
+ <translation>Aktywna baza danych (%1/%2)</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="495"/>
+ <source>Query finished in %1 second(s). Rows affected: %2</source>
+ <translation>Zapytanie ukończone w %1 sekund(y). Liczba przetworzonych wierszy: %2</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="499"/>
+ <source>Query finished in %1 second(s).</source>
+ <translation>Zapytanie ukończone w %1 sekund(y).</translation>
+ </message>
+ <message>
+ <source>Query finished in %2 second(s).</source>
+ <translation type="obsolete">Zapytanie ukończone w %2 sekund(y).</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="601"/>
+ <source>Clear execution history</source>
+ <translation>Wymaż historię zapytań</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="601"/>
+ <source>Are you sure you want to erase the entire SQL execution history? This cannot be undone.</source>
+ <translation>Czy na pewno chcesz wymazać całą historię zapytań SQL? Tego nie można odwrócić.</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="613"/>
+ <source>Cannot export, because no export plugin is loaded.</source>
+ <translation>Nie można wyeksportować, ponieważ żadna wtyczka eksportu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="634"/>
+ <source>No database selected in the SQL editor. Cannot create a view for unknown database.</source>
+ <translation>Nie wybrano bazdy danych w edytorze SQL. Nie można utworzyć widoku dla nieznanej bazy.</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.cpp" line="664"/>
+ <source>Editor window &quot;%1&quot; has uncommited data.</source>
+ <translation>Okno edytora &quot;%1&quot; ma niezatwierdzone dane.</translation>
+ </message>
+</context>
+<context>
+ <name>ErrorsConfirmDialog</name>
+ <message>
+ <location filename="../dialogs/errorsconfirmdialog.ui" line="14"/>
+ <source>Errors</source>
+ <translation>Błędy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/errorsconfirmdialog.ui" line="20"/>
+ <source>Following errors occured:</source>
+ <translation>Wystąpiły następujące błędy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/errorsconfirmdialog.ui" line="34"/>
+ <source>Would you like to proceed?</source>
+ <translation>Czy chcesz kontynuować?</translation>
+ </message>
+</context>
+<context>
+ <name>ExportDialog</name>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="14"/>
+ <source>Export</source>
+ <translation>Eksportuj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="21"/>
+ <source>What do you want to export?</source>
+ <translation>Co chcesz eksportować?</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="36"/>
+ <source>A database</source>
+ <translation>Bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="46"/>
+ <source>A single table</source>
+ <translation>Pojedynczą tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="53"/>
+ <source>Query results</source>
+ <translation>Wyniki zapytania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="65"/>
+ <source>Table to export</source>
+ <translation>Tabela do wyeksportowania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="100"/>
+ <source>Database</source>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="107"/>
+ <source>Table</source>
+ <translation>Tabela</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="124"/>
+ <source>Options</source>
+ <translation>Opcje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="130"/>
+ <source>When this option is unchecked, then only table DDL (CREATE TABLE statement) is exported.</source>
+ <translation>Gdy ta opcja jest odznaczona, to tylko DDL tabeli (zapytanie CREATE TABLE) jest eksportowane.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="133"/>
+ <source>Export table data</source>
+ <translation>Eksportuj dane tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="143"/>
+ <source>Export table indexes</source>
+ <translation>Eksportuj indeksy tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="153"/>
+ <source>Export table triggers</source>
+ <translation>Eksportuj wyzwalacze tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="175"/>
+ <source>Note, that exporting table indexes and triggers may be unsupported by some output formats.</source>
+ <translation>Zwróć uwagę, że eksportowanie indeksów i wyzwalaczy tabeli może nie być obsługiwane przez niektóre formaty wyjściowe.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="189"/>
+ <source>Select database objects to export</source>
+ <translation>Wybierz obiekty bazy danych do eksportu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="202"/>
+ <source>Export data from tables</source>
+ <translation>Eksportuj dane z tabel</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="212"/>
+ <source>Select all</source>
+ <translation>Zaznacz wszystko</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="219"/>
+ <source>Deselect all</source>
+ <translation>Odznacz wszystko</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="229"/>
+ <location filename="../dialogs/exportdialog.ui" line="249"/>
+ <source>Database:</source>
+ <translation>Baza danych:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="237"/>
+ <source>Query to export results for</source>
+ <translation>Zapytanie dla wyników do eksportu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="256"/>
+ <source>Query to be executed for results:</source>
+ <translation>Zapytanie, które należy wykonać dla wyników:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="264"/>
+ <source>Export format and options</source>
+ <translation>Format eksportu i opcje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="318"/>
+ <source>Export format</source>
+ <translation>Format eksportu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="330"/>
+ <source>Output</source>
+ <translation>Wyjście</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="336"/>
+ <source>Exported file path</source>
+ <translation>Ścieżka do wyeksportowanego pliku</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="343"/>
+ <source>Clipboard</source>
+ <translation>Schowek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="357"/>
+ <source>File</source>
+ <translation>Plik</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="382"/>
+ <source>Exported text encoding:</source>
+ <translation>Kodowanie wyeksportowanego tekstu:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.ui" line="398"/>
+ <source>Export format options</source>
+ <translation>Opcje formatu eksportowania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="51"/>
+ <source>Cancel</source>
+ <translation>Anuluj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="141"/>
+ <location filename="../dialogs/exportdialog.cpp" line="165"/>
+ <location filename="../dialogs/exportdialog.cpp" line="188"/>
+ <source>Select database to export.</source>
+ <translation>Wybierz bazę do eksportu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="142"/>
+ <source>Select table to export.</source>
+ <translation>Wybierz tabelę do eksportu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="166"/>
+ <source>Enter valid query to export.</source>
+ <translation>Wprowadź poprawne zapytanie do eksportu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="189"/>
+ <source>Select at least one object to export.</source>
+ <translation>Wybierz przynajmniej jeden obiekt do eksportu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="212"/>
+ <source>You must provide a file name to export to.</source>
+ <translation>Musisz podać nazwę pliku do którego należy wyeksportować.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="219"/>
+ <source>Path you provided is an existing directory. You cannot overwrite it.</source>
+ <translation>Ścieżka którą podałeś jest istniejącym katalogiem. Nie można go nadpisać.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="225"/>
+ <source>The directory &apos;%1&apos; does not exist.</source>
+ <translation>Katalog &apos;%1&apos; nie istnieje.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="231"/>
+ <source>The file &apos;%1&apos; exists and will be overwritten.</source>
+ <translation>Plik &apos;%1&apos; istnieje i zostanie nadpisany.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="402"/>
+ <source>All files (*)</source>
+ <translation>Wszystkie pliki (*)</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="405"/>
+ <source>Pick file to export to</source>
+ <translation>Wybierz plik do eksportu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/exportdialog.cpp" line="694"/>
+ <source>Internal error during export. This is a bug. Please report it.</source>
+ <translation>Wystąpił wewnętrzny błąd podczas eksportu. To jest błąd programu. Proszę to zgłosić.</translation>
+ </message>
+</context>
+<context>
+ <name>FontEdit</name>
+ <message>
+ <location filename="../common/fontedit.cpp" line="61"/>
+ <source>Choose font</source>
+ <comment>font configuration</comment>
+ <translation>Wybierz czcionkę</translation>
+ </message>
+</context>
+<context>
+ <name>Form</name>
+ <message>
+ <location filename="../forms/sqlformatterplugin.ui" line="20"/>
+ <source>Active SQL formatter plugin</source>
+ <translation>Aktywna wtyczka formatera SQL</translation>
+ </message>
+</context>
+<context>
+ <name>FormView</name>
+ <message>
+ <location filename="../formview.cpp" line="253"/>
+ <source>Commit row</source>
+ <comment>form view</comment>
+ <translation>Zatwierdź wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="254"/>
+ <source>Rollback row</source>
+ <comment>form view</comment>
+ <translation>Wycofaj wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="255"/>
+ <source>First row</source>
+ <comment>form view</comment>
+ <translation>Pierwszy wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="256"/>
+ <source>Previous row</source>
+ <comment>form view</comment>
+ <translation>Poprzedni wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="257"/>
+ <source>Next row</source>
+ <comment>form view</comment>
+ <translation>Następny wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="258"/>
+ <source>Last row</source>
+ <comment>form view</comment>
+ <translation>Ostatni wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="259"/>
+ <source>Insert new row</source>
+ <comment>form view</comment>
+ <translation>Wstaw nowy wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.cpp" line="260"/>
+ <source>Delete current row</source>
+ <comment>form view</comment>
+ <translation>Usuń bieżący wiersz</translation>
+ </message>
+</context>
+<context>
+ <name>FunctionsEditor</name>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="81"/>
+ <source>Filter funtions</source>
+ <translation>Filtruj funkcje</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="151"/>
+ <source>Function name:</source>
+ <translation>Nazwa funkcji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="161"/>
+ <source>Implementation language:</source>
+ <translation>Język implementacji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="171"/>
+ <source>Type:</source>
+ <translation>Typ:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="187"/>
+ <source>Input arguments</source>
+ <translation>Argumenty wejściowe</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="193"/>
+ <source>Undefined</source>
+ <translation>Niezdefiniowane</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="235"/>
+ <source>Databases</source>
+ <translation>Bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="241"/>
+ <source>Register in all databases</source>
+ <translation>Zarejestruj we wszystkich bazach danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="248"/>
+ <source>Register in following databases:</source>
+ <translation>Zarejestruj w następujących bazach danych:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="278"/>
+ <source>Initialization code:</source>
+ <translation>Kod inicjalizacji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="294"/>
+ <location filename="../windows/functionseditor.cpp" line="426"/>
+ <source>Function implementation code:</source>
+ <translation>Kod implementacji funkcji:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.ui" line="310"/>
+ <source>Final step implementation code:</source>
+ <translation>Kod implementacji ostatniego kroku:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="54"/>
+ <source>SQL function editor</source>
+ <translation>Edytor funkcji SQL</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="59"/>
+ <source>Commit all function changes</source>
+ <translation>Zatwierdź zmiany we wszystkich funkcjach</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="60"/>
+ <source>Rollback all function changes</source>
+ <translation>Wycofaj zmiany we wszystkich funkcjach</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="62"/>
+ <source>Create new function</source>
+ <translation>Utwórz nową funkcję</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="63"/>
+ <source>Delete selected function</source>
+ <translation>Usuń wybraną funkcję</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="65"/>
+ <source>Custom SQL functions manual</source>
+ <translation>Podręcznik własnych funkcji SQL</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="68"/>
+ <source>Add function argument</source>
+ <translation>Dodaj argument funkcji</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="69"/>
+ <source>Rename function argument</source>
+ <translation>Zmień nazwę argumentu funkcji</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="70"/>
+ <source>Delete function argument</source>
+ <translation>Usuń argument funkcji</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="72"/>
+ <source>Move function argument up</source>
+ <translation>Przesuń argument funkcji w górę</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="73"/>
+ <source>Move function argument down</source>
+ <translation>Przesuń argument funkcji w dół</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="111"/>
+ <source>Scalar</source>
+ <translation>Skalarna</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="112"/>
+ <source>Aggregate</source>
+ <translation>Agregacyjna</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="410"/>
+ <source>Enter a non-empty, unique name of the function.</source>
+ <translation>Wprowadź niepustą, unikalną nazwę funkcji</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="422"/>
+ <source>Pick the implementation language.</source>
+ <translation>Wybierz język implementacji.</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="426"/>
+ <source>Per step code:</source>
+ <translation>Kod pojedynczego kroku:</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="432"/>
+ <source>Enter a non-empty implementation code.</source>
+ <translation>Wprowadź niepusty kod implementacji.</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="505"/>
+ <source>argument</source>
+ <comment>new function argument name in function editor window</comment>
+ <translation>argument</translation>
+ </message>
+ <message>
+ <location filename="../windows/functionseditor.cpp" line="631"/>
+ <source>Functions editor window has uncommited modifications.</source>
+ <translation>Okno edytora funkcji ma niezatwierdzone zmiany.</translation>
+ </message>
+</context>
+<context>
+ <name>ImportDialog</name>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="14"/>
+ <source>Import data</source>
+ <translation>Importuj dane</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="21"/>
+ <source>Table to import to</source>
+ <translation>Tabela do której należy importować</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="36"/>
+ <source>Table</source>
+ <translation>Tabela</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="43"/>
+ <source>Database</source>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="84"/>
+ <source>Data source to import from</source>
+ <translation>Źródło danych z którego należy importować</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="129"/>
+ <source>Data source type</source>
+ <translation>Typ źródła danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="141"/>
+ <source>Options</source>
+ <translation>OOpcje</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="147"/>
+ <source>Input file:</source>
+ <translation>Plik wejściowy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="182"/>
+ <source>Text encoding:</source>
+ <translation>Kodowanie tekstu:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.ui" line="195"/>
+ <source>Data source options</source>
+ <translation>Opcje źródła danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="71"/>
+ <source>Cancel</source>
+ <translation>Anuluj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="101"/>
+ <source>If you type table name that doesn&apos;t exist, it will be created.</source>
+ <translation>Jeśli wpiszesz nazwę tabeli, która nie istnieje, to zostanie ona stworzona.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="101"/>
+ <source>Enter the table name</source>
+ <translation>Wprowadź nazwę tabeli</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="119"/>
+ <source>Select import plugin.</source>
+ <translation>Wybierz wtyczkę importu</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="128"/>
+ <source>You must provide a file to import from.</source>
+ <translation>Musisz podać plik z którego należy zaimportować.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="135"/>
+ <source>The file &apos;%1&apos; does not exist.</source>
+ <translation>Plik &apos;%1&apos; nie istnieje.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="141"/>
+ <source>Path you provided is a directory. A regular file is required.</source>
+ <translation>Ścieżka którą podałeś jest katalogiem. Wymagany jest zwykły plik.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/importdialog.cpp" line="325"/>
+ <source>Pick file to import from</source>
+ <translation>Wybierz plik do importu</translation>
+ </message>
+</context>
+<context>
+ <name>IndexDialog</name>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="20"/>
+ <location filename="../dialogs/indexdialog.ui" line="30"/>
+ <source>Index</source>
+ <translation>Indeks</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="36"/>
+ <source>On table:</source>
+ <translation>Na tabeli:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="43"/>
+ <source>Index name:</source>
+ <translation>Nazwa indeksu:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="50"/>
+ <source>Partial index condition</source>
+ <translation>Warunek indeksu częściowego:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="67"/>
+ <source>Unique index</source>
+ <translation>Indeks unikalny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="90"/>
+ <source>Column</source>
+ <translation>Kolumna</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="95"/>
+ <source>Collation</source>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="100"/>
+ <source>Sort</source>
+ <translation>Sortowanie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.ui" line="115"/>
+ <source>DDL</source>
+ <translation>DDL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="65"/>
+ <source>Tried to open index dialog for closed or inexisting database.</source>
+ <translation>Próbowano otworzyć okno indeksu dla zamkniętej lub nieistniejącej bazy.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="131"/>
+ <source>Could not process index %1 correctly. Unable to open an index dialog.</source>
+ <translation>Nie udało się przetworzyć poprawnie indeksu %1. Nie można otworzyć okna indeksu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="185"/>
+ <source>Pick the table for the index.</source>
+ <translation>Wybierz tabelę dla indeksu.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="186"/>
+ <source>Select at least one column.</source>
+ <translation>Zaznacz przynajmniej jedną kolumnę.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="187"/>
+ <source>Enter a valid condition.</source>
+ <translation>Wprowadź poprawny warunek.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="236"/>
+ <source>default</source>
+ <comment>index dialog</comment>
+ <translation>domyślne</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="247"/>
+ <source>Sort order</source>
+ <comment>table constraints</comment>
+ <translation>Kierunek sortowania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="452"/>
+ <location filename="../dialogs/indexdialog.cpp" line="465"/>
+ <source>Error</source>
+ <comment>index dialog</comment>
+ <translation>Błąd</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="453"/>
+ <source>Cannot create unique index, because values in selected columns are not unique. Would you like to execute SELECT query to see problematic values?</source>
+ <translation>Nie można utworzyć indeksu, ponieważ wartości w wybranych kolumnach nie są unikalne. Czy chcesz wykonać zapytanie SELECT, aby zobaczyć wartości stwarzające problem?</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/indexdialog.cpp" line="465"/>
+ <source>An error occurred while executing SQL statements:
+%1</source>
+ <translation>Wystąpił błąd podczas wykonywania zapytań SQL:
+%1</translation>
+ </message>
+</context>
+<context>
+ <name>LanguageDialog</name>
+ <message>
+ <location filename="../dialogs/languagedialog.ui" line="14"/>
+ <source>Language</source>
+ <translation>Język</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/languagedialog.ui" line="20"/>
+ <source>Please choose language:</source>
+ <translation>Proszę wybrać język:</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <location filename="../mainwindow.ui" line="66"/>
+ <source>Database toolbar</source>
+ <translation>Pasek narzędzi baz danych</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.ui" line="77"/>
+ <source>Structure toolbar</source>
+ <translation>Pasek narzędzi struktury</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.ui" line="88"/>
+ <source>Tools</source>
+ <translation>Narzędzia</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.ui" line="105"/>
+ <source>Window list</source>
+ <translation>Lista okien</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.ui" line="119"/>
+ <source>View toolbar</source>
+ <translation>Pasek narzędzi widoku</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="104"/>
+ <source>Configuration widgets</source>
+ <translation>Kontrolki konfiguracji</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="105"/>
+ <source>Syntax highlighting engines</source>
+ <translation>Silniki podświetlania składni</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="106"/>
+ <source>Data editors</source>
+ <translation>Edytory danych</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="118"/>
+ <source>Running in debug mode. Press %1 or use &apos;Help / Open debug console&apos; menu entry to open the debug console.</source>
+ <translation>Uruchomiono tryb debugowania. Wciśnij %1 lub wybierz menu &apos;Pomoc / Otwórz konsolę debugowania&apos; aby otworzyć konsolę debugowania.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="120"/>
+ <source>Running in debug mode. Debug messages are printed to the standard output.</source>
+ <translation>Uruchomiono tryb debugowania. Wiadomości debugujące są wyświetlane na standardowym wyjściu.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="202"/>
+ <source>You need to restart application to make the language change take effect.</source>
+ <translation>Należy zrestartować aplikację, aby nastąpiła zmiana języka.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="245"/>
+ <source>Open SQL editor</source>
+ <translation>Otwórz edytor SQL</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="246"/>
+ <source>Open DDL history</source>
+ <translation>Otwórz historię DDL</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="247"/>
+ <source>Open SQL functions editor</source>
+ <translation>Otwórz edytor funkcji SQL</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="248"/>
+ <source>Open collations editor</source>
+ <translation>Otwórz edytor zestawień</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="249"/>
+ <source>Import</source>
+ <translation>Importuj</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="250"/>
+ <source>Export</source>
+ <translation>Eksportuj</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="252"/>
+ <source>Open configuration dialog</source>
+ <translation>Otwórz okno konfiguracji</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="254"/>
+ <source>Tile windows</source>
+ <translation>Ustaw okna w płytki</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="255"/>
+ <source>Tile windows horizontally</source>
+ <translation>Ustaw okno poziomo</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="256"/>
+ <source>Tile windows vertically</source>
+ <translation>Ustaw okna pionowo</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="257"/>
+ <source>Cascade windows</source>
+ <translation>Ustaw okna caskadowo</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="258"/>
+ <source>Next window</source>
+ <translation>Następne okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="259"/>
+ <source>Previous window</source>
+ <translation>Poprzednie okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="260"/>
+ <source>Hide status field</source>
+ <translation>Ukryj pole statusu</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="262"/>
+ <source>Close selected window</source>
+ <translation>Zamknij wybrane okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="263"/>
+ <source>Close all windows but selected</source>
+ <translation>Zamknij wszystkie okna, oprócz wybranego</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="264"/>
+ <source>Close all windows</source>
+ <translation>Zamknij wszystkie okna</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="265"/>
+ <source>Restore recently closed window</source>
+ <translation>Przywróć ostatnio zamknięte okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="266"/>
+ <source>Rename selected window</source>
+ <translation>Zmień nazwę wybranego okna</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="268"/>
+ <source>Open Debug Console</source>
+ <translation>Otwórz Konsolę Debugowania</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="269"/>
+ <source>Report a bug</source>
+ <translation>Zgłoś błąd</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="270"/>
+ <source>Propose a new feature</source>
+ <translation>Zgłoś pomysł</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="271"/>
+ <source>About</source>
+ <translation>O programie</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="272"/>
+ <source>Licenses</source>
+ <translation>Licencje</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="273"/>
+ <source>Open home page</source>
+ <translation>Otwórz stronę domową</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="274"/>
+ <source>Open forum page</source>
+ <translation>Otwórz stronę forum</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="275"/>
+ <source>User Manual</source>
+ <translation>Podręcznik Użytkownika</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="276"/>
+ <source>SQLite documentation</source>
+ <translation>Dokumentacja SQLite</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="277"/>
+ <source>Report history</source>
+ <translation>Historia zgłoszeń</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="278"/>
+ <source>Check for updates</source>
+ <translation>Sprawdź aktualizacje</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="315"/>
+ <source>Database</source>
+ <comment>menubar</comment>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="335"/>
+ <source>Structure</source>
+ <comment>menubar</comment>
+ <translation>Struktura</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="356"/>
+ <source>View</source>
+ <comment>menubar</comment>
+ <translation>Widok</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="360"/>
+ <source>Window list</source>
+ <comment>menubar view menu</comment>
+ <translation>Lista okien</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="381"/>
+ <source>Tools</source>
+ <comment>menubar</comment>
+ <translation>Narzędzia</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="395"/>
+ <source>Help</source>
+ <translation>Pomoc</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="549"/>
+ <source>Could not set style: %1</source>
+ <comment>main window</comment>
+ <translation>Nie udało się ustawić stylu: %1</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="621"/>
+ <source>Cannot export, because no export plugin is loaded.</source>
+ <translation>Nie można wyeksportować, ponieważ żadna wtyczka eksportu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="633"/>
+ <source>Cannot import, because no import plugin is loaded.</source>
+ <translation>Nie można zaimportować, ponieważ żadna wtyczka importu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="662"/>
+ <source>Rename window</source>
+ <translation>Zmień nazwę okna</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="662"/>
+ <source>Enter new name for the window:</source>
+ <translation>Wprowadź nową nazwę dla okna:</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="730"/>
+ <source>New updates are available. &lt;a href=&quot;%1&quot;&gt;Click here for details&lt;/a&gt;.</source>
+ <translation>Nowe aktualizacje są dostępne: &lt;a href=&quot;%1&quot;&gt;Kliknij aby poznać szczegóły&lt;/a&gt;.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="738"/>
+ <source>You&apos;re running the most recent version. No updates are available.</source>
+ <translation>Uruchomiona jest najnowsza wersja. Nie ma dostępnych aktualizacji.</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="837"/>
+ <source>Database passed in command line parameters (%1) has been temporarily added to the list under name: %2</source>
+ <translation>Baza danych podana w linii poleceń (%1) jest tymczasowo dodana do listy pod nazwą: %2</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.cpp" line="842"/>
+ <source>Could not add database %1 to list.</source>
+ <translation>Nie udało się dodać bazy danych %1 do listy.</translation>
+ </message>
+</context>
+<context>
+ <name>MdiWindow</name>
+ <message>
+ <location filename="../mdiwindow.cpp" line="190"/>
+ <source>Uncommited changes</source>
+ <translation>Niezatwierdzone dane</translation>
+ </message>
+ <message>
+ <location filename="../mdiwindow.cpp" line="195"/>
+ <source>Close anyway</source>
+ <translation>Zamknij mimo to</translation>
+ </message>
+ <message>
+ <location filename="../mdiwindow.cpp" line="197"/>
+ <source>Don&apos;t close</source>
+ <translation>Nie zamykaj</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditor</name>
+ <message>
+ <location filename="../multieditor/multieditor.cpp" line="53"/>
+ <source>Null value</source>
+ <comment>multieditor</comment>
+ <translation>Wartość null</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditor.cpp" line="68"/>
+ <source>Configure editors for this data type</source>
+ <translation>Skonfiguruj edytory dla tego typu danych</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditor.cpp" line="271"/>
+ <source>Data editor plugin &apos;%1&apos; not loaded, while it is defined for editing &apos;%1&apos; data type.</source>
+ <translation>Wtyczka edytora danych &apos;%1&apos; nie jest załadowana, podczas gdy jest ona zdefiniowana do edycji typu danych &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditor.cpp" line="356"/>
+ <source>Deleted</source>
+ <comment>multieditor</comment>
+ <translation>Usunięto</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditor.cpp" line="358"/>
+ <source>Read only</source>
+ <comment>multieditor</comment>
+ <translation>Tylko do odczytu</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorBool</name>
+ <message>
+ <location filename="../multieditor/multieditorbool.cpp" line="130"/>
+ <source>Boolean</source>
+ <translation>Logiczna</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorDate</name>
+ <message>
+ <location filename="../multieditor/multieditordate.cpp" line="14"/>
+ <source>Date</source>
+ <translation>Data</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorDateTime</name>
+ <message>
+ <location filename="../multieditor/multieditordatetime.cpp" line="181"/>
+ <source>Date &amp; time</source>
+ <translation>Data i czas</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorHex</name>
+ <message>
+ <location filename="../multieditor/multieditorhex.cpp" line="39"/>
+ <source>Hex</source>
+ <translation>Heks</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorNumeric</name>
+ <message>
+ <source>Number</source>
+ <translation type="obsolete">Liczba</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditornumeric.cpp" line="36"/>
+ <source>Number</source>
+ <comment>numeric multi editor tab name</comment>
+ <translation>Liczba</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorText</name>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="45"/>
+ <source>Text</source>
+ <translation>Tekst</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="106"/>
+ <source>Tab changes focus</source>
+ <translation>Tabulator zmienia aktywność</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="107"/>
+ <source>Cut</source>
+ <translation>Wytnij</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="108"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="109"/>
+ <source>Paste</source>
+ <translation>Wklej</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="110"/>
+ <source>Delete</source>
+ <translation>Usuń</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="111"/>
+ <source>Undo</source>
+ <translation>Cofnij</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.cpp" line="112"/>
+ <source>Redo</source>
+ <translation>Przywróć</translation>
+ </message>
+</context>
+<context>
+ <name>MultiEditorTime</name>
+ <message>
+ <location filename="../multieditor/multieditortime.cpp" line="16"/>
+ <source>Time</source>
+ <translation>Czas</translation>
+ </message>
+</context>
+<context>
+ <name>NewConstraintDialog</name>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.ui" line="20"/>
+ <source>New constraint</source>
+ <translation>Nowe ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="87"/>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="97"/>
+ <source>Primary Key</source>
+ <comment>new constraint dialog</comment>
+ <translation>Klucz główny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="89"/>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="99"/>
+ <source>Foreign Key</source>
+ <comment>new constraint dialog</comment>
+ <translation>Klucz obcy</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="91"/>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="101"/>
+ <source>Unique</source>
+ <comment>new constraint dialog</comment>
+ <translation>Wartości unikalne</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="92"/>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="102"/>
+ <source>Check</source>
+ <comment>new constraint dialog</comment>
+ <translation>Warunek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="103"/>
+ <source>Not NULL</source>
+ <comment>new constraint dialog</comment>
+ <translation>Niepuste</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="105"/>
+ <source>Collate</source>
+ <comment>new constraint dialog</comment>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newconstraintdialog.cpp" line="107"/>
+ <source>Default</source>
+ <comment>new constraint dialog</comment>
+ <translation>Wartość domyślna</translation>
+ </message>
+</context>
+<context>
+ <name>NewVersionDialog</name>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="14"/>
+ <source>SQLiteStudio updates</source>
+ <translation>Aktualizacje SQLiteStudio</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="26"/>
+ <source>New updates are available!</source>
+ <translation>Dostępne są nowe aktualizacje!</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="70"/>
+ <source>Component</source>
+ <translation>Komponent</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="75"/>
+ <source>Current version</source>
+ <translation>Obecna wersja</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="80"/>
+ <source>Update version</source>
+ <translation>Wersja aktualizacji</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="91"/>
+ <source>Check for updates on startup</source>
+ <translation>Sprawdzaj aktualizacje na starcie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="101"/>
+ <source>Update to new version!</source>
+ <translation>Aktualizuj do nowej wersji!</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="114"/>
+ <source>The update will be automatically downloaded and installed. This will also restart application at the end.</source>
+ <translation>Aktualizacja będzie pobrana i zainstalowana automatycznie. Spowoduje to również na końcu restart aplikacji.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="121"/>
+ <source>Not now.</source>
+ <translation>Nie teraz.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/newversiondialog.ui" line="134"/>
+ <source>Don&apos;t install the update and close this window.</source>
+ <translation>Nie instaluj aktualizacji i zamknij to okno.</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateConfigDialog</name>
+ <message>
+ <location filename="../dialogs/populateconfigdialog.ui" line="14"/>
+ <source>Populating configuration</source>
+ <translation>Konfiguracja zaludniania</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populateconfigdialog.cpp" line="54"/>
+ <source>Configuring &lt;b&gt;%1&lt;/b&gt; for column &lt;b&gt;%2&lt;/b&gt;</source>
+ <translation>Konfigurowanie &lt;b&gt;%1&lt;/b&gt; dla kolumny &lt;b&gt;%2&lt;/b&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>PopulateDialog</name>
+ <message>
+ <location filename="../dialogs/populatedialog.ui" line="14"/>
+ <source>Populate table</source>
+ <translation>Zaludnij tabelę</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.ui" line="26"/>
+ <source>Database</source>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.ui" line="44"/>
+ <source>Table</source>
+ <translation>Tabela</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.ui" line="72"/>
+ <source>Columns</source>
+ <translation>Kolumny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.ui" line="102"/>
+ <source>Number of rows to populate:</source>
+ <translation>Liczba wierszy do zaludnienia:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="42"/>
+ <source>Populate</source>
+ <comment>populate dialog button</comment>
+ <translation>Zaludnij</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="158"/>
+ <source>Configure</source>
+ <translation>Konfiguruj</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="256"/>
+ <source>Populating configuration for this column is invalid or incomplete.</source>
+ <translation>Konfiguracja zaludniania dla tej kolumny jest niepoprawna lub niekompletna.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="287"/>
+ <source>Select database with table to populate</source>
+ <translation>Wybierz bazę danych z tabelą do zaludnienia</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="288"/>
+ <source>Select table to populate</source>
+ <translation>Wybierz tabelę do zaludnienia</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/populatedialog.cpp" line="289"/>
+ <source>You have to select at least one column.</source>
+ <translation>Musisz zaznaczyć przynajmniej jedną kolumnę.</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="69"/>
+ <source>The query execution mechanism had problems with extracting ROWID&apos;s properly. This might be a bug in the application. You may want to report this.</source>
+ <translation>Mechanizm wykonywania zapytań miał problemy z wyciągnięciem własności ROWID. To może być błąd aplikacji. Możesz to zgłosić.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="71"/>
+ <source>Requested column is a result of SQL expression, instead of a simple column selection. Such columns cannot be edited.</source>
+ <translation>Ta kolumna jest wynikiem wyrażenia SQL, a nie zwykłej selekcji kolumny. Takie kolumny nie mogą być edytowane.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="73"/>
+ <source>Requested column belongs to restricted SQLite table. Those tables cannot be edited directly.</source>
+ <translation>Ta kolumna należy do systemowej tabeli SQLite. Te tabele nie mogą być edytowane bezpośrednio.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="66"/>
+ <source>Cannot edit columns that are result of compound %1 statements (one that includes %2, %3 or %4 keywords).</source>
+ <translation>Nie można edytować kolumn, które są wynikiem złożonego zapytania %1 (tego, które zawiera słowo kluczowe %2, %3, lub %4).</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="75"/>
+ <source>Cannot edit results of query other than %1.</source>
+ <translation>Nie można edytować wyników zapytania innego niż %1.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="77"/>
+ <source>Cannot edit columns that are result of aggregated %1 statements.</source>
+ <translation>Nie można edytować kolumn, które są wynikiem zapytania agregacyjnego %1.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="79"/>
+ <source>Cannot edit columns that are result of %1 statement.</source>
+ <translation>Nie można edytować kolumn, które są wynikiem zapytania %1.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="81"/>
+ <source>Cannot edit columns that are result of common table expression statement (%1).</source>
+ <translation>Nie można edytować kolumn, które są wynikiem zapytania ze wspólnym wyrażeniem tabeli (%1).</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="353"/>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="389"/>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="407"/>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="443"/>
+ <source>on conflict: %1</source>
+ <comment>data view tooltip</comment>
+ <translation>w razie konfliktu: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="373"/>
+ <source>references table %1, column %2</source>
+ <comment>data view tooltip</comment>
+ <translation>odwołuje się do tabeli %1, kolumny %2</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="440"/>
+ <source>condition: %1</source>
+ <comment>data view tooltip</comment>
+ <translation>warunek: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodelcolumn.cpp" line="460"/>
+ <source>collation name: %1</source>
+ <comment>data view tooltip</comment>
+ <translation>nazwa zestawienia: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="19"/>
+ <source>Data grid view</source>
+ <translation>Widok siatki danych</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="20"/>
+ <source>Copy cell(s) contents to clipboard</source>
+ <translation>Skopiuj zawartość komórek do schowka.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="22"/>
+ <source>Paste cell(s) contents from clipboard</source>
+ <translation>Wklej zawartość komórkek ze schowka.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="24"/>
+ <source>Set empty value to selected cell(s)</source>
+ <translation>Ustaw pustą wartość dla wybranych komórek</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="25"/>
+ <source>Set NULL value to selected cell(s)</source>
+ <translation>Ustaw wartość NULL dla wybranych komórek</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="26"/>
+ <source>Commit changes to cell(s) contents</source>
+ <translation>Zatwierdź zmiany dla zawartości komórek</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="27"/>
+ <source>Rollback changes to cell(s) contents</source>
+ <translation>Wycofaj zmiany dla zawartości komórek</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="28"/>
+ <source>Delete selected data row</source>
+ <translation>Usuń wybrane wiersze danych</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="29"/>
+ <source>Insert new data row</source>
+ <translation>Wstaw nowy wiersz danych</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.h" line="30"/>
+ <source>Open contents of selected cell in a separate editor</source>
+ <translation>Otwórz zawartość wybranej komórki w osobnym edytorze</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="487"/>
+ <source>Total pages available: %1</source>
+ <translation>Liczba dostępnych stron: %1</translation>
+ </message>
+ <message>
+ <location filename="../dataview.cpp" line="497"/>
+ <source>Total rows loaded: %1</source>
+ <translation>Liczba załadowanych wierszy: %1</translation>
+ </message>
+ <message>
+ <location filename="../dataview.h" line="17"/>
+ <source>Data view (both grid and form)</source>
+ <translation>Widok danych (zarówno siatki i formularza)</translation>
+ </message>
+ <message>
+ <location filename="../dataview.h" line="18"/>
+ <source>Refresh data</source>
+ <translation>Odśwież dane</translation>
+ </message>
+ <message>
+ <location filename="../dataview.h" line="19"/>
+ <source>Switch to grid view of the data</source>
+ <translation>Przełącz do widoku siatki danych</translation>
+ </message>
+ <message>
+ <location filename="../dataview.h" line="20"/>
+ <source>Switch to form view of the data</source>
+ <translation>Przełącz do widoku formularza danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="26"/>
+ <source>Database list</source>
+ <translation>Lista baz</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="27"/>
+ <source>Delete selected item</source>
+ <translation>Usuń zaznaczony element</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="28"/>
+ <source>Clear filter contents</source>
+ <translation>Wyczyść zawartość filtra</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="29"/>
+ <source>Refresh schema</source>
+ <translation>Odśwież schemat</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="30"/>
+ <source>Refresh all schemas</source>
+ <translation>Odśwież wszystkie schematy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="31"/>
+ <source>Add database</source>
+ <translation>Dodaj bazę danych</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="32"/>
+ <source>Select all items</source>
+ <translation>Zaznacz wszystkie elementy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="33"/>
+ <source>Copy selected item(s)</source>
+ <translation>Kopiuj zaznaczone elementy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtree.h" line="34"/>
+ <location filename="../multieditor/multieditortext.h" line="15"/>
+ <location filename="../sqleditor.h" line="24"/>
+ <source>Paste from clipboard</source>
+ <translation>Wklej ze schowka</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemfactory.cpp" line="47"/>
+ <source>Tables</source>
+ <translation>Tabele</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemfactory.cpp" line="52"/>
+ <source>Indexes</source>
+ <translation>Indeksy</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemfactory.cpp" line="57"/>
+ <source>Triggers</source>
+ <translation>Wyzwalacze</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemfactory.cpp" line="62"/>
+ <source>Views</source>
+ <translation>Widoki</translation>
+ </message>
+ <message>
+ <location filename="../dbtree/dbtreeitemfactory.cpp" line="67"/>
+ <source>Columns</source>
+ <translation>Kolumny</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="16"/>
+ <source>Data form view</source>
+ <translation>Widok formularza danych</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="17"/>
+ <source>Commit changes for current row</source>
+ <translation>Zatawierdź zmiany dla bieżącego wiersza</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="18"/>
+ <source>Rollback changes for current row</source>
+ <translation>Wycofaj zmiany dla bieżącego wiersza</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="19"/>
+ <source>Go to first row on current page</source>
+ <translation>Przejdź do pierwszego wiersza na bieżącej stronie</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="20"/>
+ <source>Go to next row</source>
+ <translation>Przejdź do następnego wiersza</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="21"/>
+ <source>Go to previous row</source>
+ <translation>Przejdź do poprzedniego wiersza</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="22"/>
+ <source>Go to last row on current page</source>
+ <translation>Przejdź do ostatniego wiersza na bieżącej stronie</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="23"/>
+ <source>Insert new row</source>
+ <translation>Wstaw nowy wiersz</translation>
+ </message>
+ <message>
+ <location filename="../formview.h" line="24"/>
+ <source>Delete current row</source>
+ <translation>Usuń bieżący wiersz</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="42"/>
+ <source>Main window</source>
+ <translation>Okno główne</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="43"/>
+ <source>Open SQL editor</source>
+ <translation>Otwórz edytor SQL</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="44"/>
+ <source>Previous window</source>
+ <translation>Poprzednie okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="45"/>
+ <source>Next window</source>
+ <translation>Następne okno</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="46"/>
+ <source>Hide status area</source>
+ <translation>Ukryj pole statusu</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="47"/>
+ <source>Open configuration dialog</source>
+ <translation>Otwórz okno konfiguracji</translation>
+ </message>
+ <message>
+ <location filename="../mainwindow.h" line="48"/>
+ <source>Open Debug Console</source>
+ <translation>Otwórz Konsolę Debugowania</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="12"/>
+ <source>Cell text value editor</source>
+ <translation>Edytor tekstowy wartości komórki</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="13"/>
+ <location filename="../sqleditor.h" line="22"/>
+ <source>Cut selected text</source>
+ <translation>Wytnij wybrany tekst</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="14"/>
+ <location filename="../sqleditor.h" line="23"/>
+ <source>Copy selected text</source>
+ <translation>Skopiuj wybrany tekst</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="16"/>
+ <location filename="../sqleditor.h" line="25"/>
+ <source>Delete selected text</source>
+ <translation>Usuń wybrany tekst</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="17"/>
+ <location filename="../sqleditor.h" line="27"/>
+ <source>Undo</source>
+ <translation>Cofnij</translation>
+ </message>
+ <message>
+ <location filename="../multieditor/multieditortext.h" line="18"/>
+ <location filename="../sqleditor.h" line="28"/>
+ <source>Redo</source>
+ <translation>Przywróć</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="21"/>
+ <source>SQL editor input field</source>
+ <translation>Pole wprowadzania edytora SQL</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="26"/>
+ <source>Select whole editor contents</source>
+ <translation>Zaznacz całą zawartość edytora</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="29"/>
+ <source>Save contents into a file</source>
+ <translation>Zapisz zawartość do pliku</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="30"/>
+ <source>Load contents from a file</source>
+ <translation>Wczytaj zawartość z pliku</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="31"/>
+ <source>Find in text</source>
+ <translation>Znajdź w tekście</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="32"/>
+ <source>Find next</source>
+ <translation>Znajdź następny</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="33"/>
+ <source>Find previous</source>
+ <translation>Znajdź poprzedni</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="34"/>
+ <source>Replace in text</source>
+ <translation>Zmień w tekście</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="35"/>
+ <source>Delete current line</source>
+ <translation>Usuń bieżącą linię</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="36"/>
+ <source>Request code assistant</source>
+ <translation>Wywołaj asystenta kodu</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="37"/>
+ <source>Format contents</source>
+ <translation>Formatuj zawartość</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="38"/>
+ <source>Move selected block of text one line down</source>
+ <translation>Przenieś wybrany blok tekstu o jedną linię w dół</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="39"/>
+ <source>Move selected block of text one line up</source>
+ <translation>Przenieś wybrany blok tekstu o jedną linię w górę</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="40"/>
+ <source>Copy selected block of text and paste it a line below</source>
+ <translation>Skopiuj wybrany blok tekstu i wklej go poniżej</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.h" line="41"/>
+ <source>Copy selected block of text and paste it a line above</source>
+ <translation>Skopiuj wybrany blok tekstu i wklej go powyżej</translation>
+ </message>
+ <message>
+ <location filename="../uiutils.cpp" line="32"/>
+ <source>All SQLite databases</source>
+ <translation>Wszystkie bazy danych SQLite</translation>
+ </message>
+ <message>
+ <location filename="../uiutils.cpp" line="35"/>
+ <source>All files</source>
+ <translation>Wszystkie pliki</translation>
+ </message>
+ <message>
+ <location filename="../uiutils.cpp" line="38"/>
+ <source>Database file</source>
+ <translation>Plik bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.h" line="11"/>
+ <source>Reports history window</source>
+ <translation>Okno history zgłoszeń</translation>
+ </message>
+ <message>
+ <location filename="../windows/bugreporthistorywindow.h" line="12"/>
+ <source>Delete selected entry</source>
+ <translation>Usuń wybraną pozycję</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="26"/>
+ <source>SQL editor window</source>
+ <translation>Okno edytora SQL</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="27"/>
+ <source>Execute query</source>
+ <translation>Wykonaj zapytanie</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="28"/>
+ <source>Execute &quot;%1&quot; query</source>
+ <translation>Wykonaj zapytanie &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="29"/>
+ <source>Switch current working database to previous on the list</source>
+ <translation>Zmień roboczą bazę danych na poprzednią z listy</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="30"/>
+ <source>Switch current working database to next on the list</source>
+ <translation>Zmień roboczą bazę danych na następną z listy</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="31"/>
+ <source>Go to next editor tab</source>
+ <translation>Przejdź do następnej karty edytora</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="32"/>
+ <source>Go to previous editor tab</source>
+ <translation>Przejdź do poprzedniej karty edytora</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="33"/>
+ <source>Move keyboard input focus to the results view below</source>
+ <translation>Przenieś aktywność klawiatury do widoku wyników poniżej</translation>
+ </message>
+ <message>
+ <location filename="../windows/editorwindow.h" line="34"/>
+ <source>Move keyboard input focus to the SQL editor above</source>
+ <translation>Przenieś aktywność klawiatury do edytora SQL powyżej</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="30"/>
+ <source>Table window</source>
+ <translation>Okno tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="31"/>
+ <source>Refresh table structure</source>
+ <translation>Odśwież strukturę tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="32"/>
+ <source>Add new column</source>
+ <translation>Dodaj nową kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="33"/>
+ <source>Edit selected column</source>
+ <translation>Edytuj wybraną kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="34"/>
+ <source>Delete selected column</source>
+ <translation>Usuń wybraną kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="35"/>
+ <source>Export table data</source>
+ <translation>Eksportuj dane tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="36"/>
+ <source>Import data to the table</source>
+ <translation>Importuj dane do tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="37"/>
+ <source>Add new table constraint</source>
+ <translation>Dodaj nowe ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="38"/>
+ <source>Edit selected table constraint</source>
+ <translation>Edytuj wybrane ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="39"/>
+ <source>Delete selected table constraint</source>
+ <translation>Usuń wybrane ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="40"/>
+ <source>Refresh table index list</source>
+ <translation>Odśwież listę indeksów tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="41"/>
+ <source>Add new index</source>
+ <translation>Dodaj nowy indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="42"/>
+ <source>Edit selected index</source>
+ <translation>Edytuj wybrany indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="43"/>
+ <source>Delete selected index</source>
+ <translation>Usuń wybrany indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="44"/>
+ <source>Refresh table trigger list</source>
+ <translation>Odśwież listę wyzwalaczy tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="45"/>
+ <location filename="../windows/viewwindow.h" line="25"/>
+ <source>Add new trigger</source>
+ <translation>Dodaj nowy wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="46"/>
+ <location filename="../windows/viewwindow.h" line="26"/>
+ <source>Edit selected trigger</source>
+ <translation>Edytuj wybrany wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="47"/>
+ <location filename="../windows/viewwindow.h" line="27"/>
+ <source>Delete selected trigger</source>
+ <translation>Usuń wybrany wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="48"/>
+ <location filename="../windows/viewwindow.h" line="28"/>
+ <source>Go to next tab</source>
+ <translation>Przejdź do następnej karty</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.h" line="49"/>
+ <location filename="../windows/viewwindow.h" line="29"/>
+ <source>Go to previous tab</source>
+ <translation>Przejdź do poprzedniej karty</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.h" line="23"/>
+ <source>A view window</source>
+ <translation>Okno widoku</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.h" line="24"/>
+ <source>Refresh view trigger list</source>
+ <translation>Odśwież listę wizwalaczy widoku</translation>
+ </message>
+</context>
+<context>
+ <name>QuitConfirmDialog</name>
+ <message>
+ <location filename="../dialogs/quitconfirmdialog.ui" line="14"/>
+ <source>Uncommited changes</source>
+ <translation>Niezatwierdzone dane</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/quitconfirmdialog.ui" line="20"/>
+ <source>Are you sure you want to quit the application?
+
+Following items are pending:</source>
+ <translation>Czy na pewno chcesz zamknąć aplikację?
+
+Następujące elementy są w toku:</translation>
+ </message>
+</context>
+<context>
+ <name>SearchTextDialog</name>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="14"/>
+ <source>Find or replace</source>
+ <translation>Znajdź lub zastąp</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="23"/>
+ <source>Find:</source>
+ <translation>Znajdź:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="36"/>
+ <source>Case sensitive</source>
+ <translation>Uwzględniaj wielkość liter</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="43"/>
+ <source>Search backwards</source>
+ <translation>Szukaj wstecz</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="50"/>
+ <source>Regular expression matching</source>
+ <translation>Dopasowywanie wyrażeniem regularnym</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="60"/>
+ <source>Replace &amp;&amp;
+find next</source>
+ <translation>Zastąp i
+znajdź następny</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="78"/>
+ <source>Replace with:</source>
+ <translation>Zastąp:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="91"/>
+ <source>Replace all</source>
+ <translation>Zastąp wszystkie</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/searchtextdialog.ui" line="98"/>
+ <source>Find</source>
+ <translation>Znajdź</translation>
+ </message>
+</context>
+<context>
+ <name>SortDialog</name>
+ <message>
+ <location filename="../dialogs/sortdialog.ui" line="14"/>
+ <source>Sort by columns</source>
+ <translation>Sortuj wg. kolumn</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/sortdialog.ui" line="45"/>
+ <location filename="../dialogs/sortdialog.cpp" line="48"/>
+ <source>Column</source>
+ <translation>Kolumna</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/sortdialog.ui" line="50"/>
+ <location filename="../dialogs/sortdialog.cpp" line="48"/>
+ <source>Order</source>
+ <translation>Kierunek</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/sortdialog.cpp" line="178"/>
+ <source>Sort by: %1</source>
+ <translation>Sortuj po: %1</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/sortdialog.cpp" line="242"/>
+ <source>Move column up</source>
+ <translation>Przesuń kolumnę w górę</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/sortdialog.cpp" line="243"/>
+ <source>Move column down</source>
+ <translation>Przesuń kolumnę w dół</translation>
+ </message>
+</context>
+<context>
+ <name>SqlEditor</name>
+ <message>
+ <location filename="../sqleditor.cpp" line="118"/>
+ <source>Cut</source>
+ <comment>sql editor</comment>
+ <translation>Wytnij</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="119"/>
+ <source>Copy</source>
+ <comment>sql editor</comment>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="120"/>
+ <source>Paste</source>
+ <comment>sql editor</comment>
+ <translation>Wklej</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="121"/>
+ <source>Delete</source>
+ <comment>sql editor</comment>
+ <translation>Usuń</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="122"/>
+ <source>Select all</source>
+ <comment>sql editor</comment>
+ <translation>Zaznacz wszystko</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="123"/>
+ <source>Undo</source>
+ <comment>sql editor</comment>
+ <translation>Cofnij</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="124"/>
+ <source>Redo</source>
+ <comment>sql editor</comment>
+ <translation>Przywróć</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="125"/>
+ <source>Complete</source>
+ <comment>sql editor</comment>
+ <translation>Dopełnij</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="126"/>
+ <source>Format SQL</source>
+ <comment>sql editor</comment>
+ <translation>Formatuj SQL</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="127"/>
+ <source>Save SQL to file</source>
+ <comment>sql editor</comment>
+ <translation>Zapisz SQL do pliku</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="128"/>
+ <source>Load SQL from file</source>
+ <comment>sql editor</comment>
+ <translation>Wczytaj SQL z pliku</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="129"/>
+ <source>Delete line</source>
+ <comment>sql editor</comment>
+ <translation>Usuń linię</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="130"/>
+ <source>Move block down</source>
+ <comment>sql editor</comment>
+ <translation>Przesuń blok w dół</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="131"/>
+ <source>Move block up</source>
+ <comment>sql editor</comment>
+ <translation>Przesuń blok w górę</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="132"/>
+ <source>Copy block down</source>
+ <comment>sql editor</comment>
+ <translation>Skopiuj blok w dół</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="133"/>
+ <source>Copy up down</source>
+ <comment>sql editor</comment>
+ <translation>Skopiuj blok w górę</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="134"/>
+ <source>Find</source>
+ <comment>sql editor</comment>
+ <translation>Znajdź</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="135"/>
+ <source>Find next</source>
+ <comment>sql editor</comment>
+ <translation>Znajdź następny</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="136"/>
+ <source>Find previous</source>
+ <comment>sql editor</comment>
+ <translation>Znajdź poprzedni</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="137"/>
+ <source>Replace</source>
+ <comment>sql editor</comment>
+ <translation>Zastąp</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="412"/>
+ <source>Syntax completion can be used only when a valid database is set for the SQL editor.</source>
+ <translation>Dopełnianie składni może być użyte tylko wtedy, gdy poprawna baza danych jest ustawiona w edytorze SQL.</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="800"/>
+ <source>Contents of the SQL editor are huge, so errors detecting and existing objects highlighting are temporarily disabled.</source>
+ <translation>Zawartość edytora SQL jest ogromna, więc sprawdzanie błędów i podświetlanie istniejących obiektów zostało tymczasowo wyłączone.</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1027"/>
+ <source>Save to file</source>
+ <translation>Zapisz do pliku</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1036"/>
+ <source>Could not open file &apos;%1&apos; for writing: %2</source>
+ <translation>Nie udało się otworzyć pliku &apos;%1&apos; do zapisu: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1050"/>
+ <source>SQL scripts (*.sql);;All files (*)</source>
+ <translation>Skrypty SQL (*.sql);;Wszystkie pliki (*)</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1051"/>
+ <source>Open file</source>
+ <translation>Otwórz plik</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1060"/>
+ <source>Could not open file &apos;%1&apos; for reading: %2</source>
+ <translation>Nie udało się otworzyć pliku &apos;%1&apos; do odczytu: %2</translation>
+ </message>
+ <message>
+ <location filename="../sqleditor.cpp" line="1267"/>
+ <source>Reached the end of document. Hit the find again to restart the search.</source>
+ <translation>Osiągnięto koniec dokumentu. Wciśnij szukanie ponownie, aby zrestartować szukanie.</translation>
+ </message>
+</context>
+<context>
+ <name>SqlQueryItem</name>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="259"/>
+ <source>Column:</source>
+ <comment>data view tooltip</comment>
+ <translation>Kolumna:</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="260"/>
+ <source>Data type:</source>
+ <comment>data view</comment>
+ <translation>Typ danych:</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="263"/>
+ <source>Table:</source>
+ <comment>data view tooltip</comment>
+ <translation>Tabela:</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="293"/>
+ <source>Constraints:</source>
+ <comment>data view tooltip</comment>
+ <translation>Ograniczenie:</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="406"/>
+ <source>This cell is not editable, because: %1</source>
+ <translation>Tej komórki nie można edytować, ponieważ: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitem.cpp" line="423"/>
+ <source>Cannot load the data for a cell that refers to the already closed database.</source>
+ <translation>Nie można załadować danych dla komórki, która odwołuje się do zamkniętej już bazy danych.</translation>
+ </message>
+</context>
+<context>
+ <name>SqlQueryItemDelegate</name>
+ <message>
+ <location filename="../datagrid/sqlqueryitemdelegate.cpp" line="41"/>
+ <location filename="../datagrid/sqlqueryitemdelegate.cpp" line="47"/>
+ <source>Cannot edit this cell. Details: %2</source>
+ <translation>Nie można edytować tej komórki. Szczegóły: %2</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryitemdelegate.cpp" line="41"/>
+ <source>The row is marked for deletion.</source>
+ <translation>Wiersz jest zaznaczony do usunięcia.</translation>
+ </message>
+</context>
+<context>
+ <name>SqlQueryModel</name>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="61"/>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="430"/>
+ <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="../datagrid/sqlquerymodel.cpp" line="93"/>
+ <source>Uncommited data</source>
+ <translation>Niezatwierdzone dane</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="94"/>
+ <source>There are uncommited data changes. Do you want to proceed anyway? All uncommited changes will be lost.</source>
+ <translation>Niektóre zmiany w danych nie zostały zatwierdzone. Czy na pewno chcesz kontynuować? Wszystkie niezatwierdzone zmiany zostaną utracone.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="340"/>
+ <source>Cannot commit the data for a cell that refers to the already closed database.</source>
+ <translation>Nie można zatwierdzić danych dla komórki, która odnosi się do zamkniętej już bazy danych.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="346"/>
+ <source>Could not begin transaction on the database. Details: %1</source>
+ <translation>Nie udało się rozpocząć transakcji na bazie danych. Szczegóły: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="383"/>
+ <source>An error occurred while commiting the transaction: %1</source>
+ <translation>Wystąpił błąd podczas zatwierdzania transakcji: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="402"/>
+ <source>An error occurred while rolling back the transaction: %1</source>
+ <translation>Wystąpił błąd podczas wycofywania transakcji: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="513"/>
+ <source>Tried to commit a cell which is not editable (yet modified and waiting for commit)! This is a bug. Please report it.</source>
+ <translation>Próbowano zatwierdzić komórkę, której nie można edytować (a mimo to została zmodyfikowana i czeka na zatwierdzenie)! To jest błąd. Proszę to zgłosić.</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="539"/>
+ <source>An error occurred while commiting the data: %1</source>
+ <translation>Wystąpił błąd podczas zatwierdzania danych: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="978"/>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="1029"/>
+ <source>Error while executing SQL query on database &apos;%1&apos;: %2</source>
+ <translation>Błąd podczas wykonywania zapytania SQL na bazie &apos;%1&apos;: %2</translation>
+ </message>
+ <message>
+ <source>Error while executing SQL query: %1</source>
+ <translation type="obsolete">Błąd podczas wykonywania zapytania SQL: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="1026"/>
+ <source>Error while loading query results: %1</source>
+ <translation>Błąd podczas wczytywania wyników zapytania: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="1346"/>
+ <source>Insert multiple rows</source>
+ <translation>Wstaw wiele wierszy</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlquerymodel.cpp" line="1346"/>
+ <source>Number of rows to insert:</source>
+ <translation>Liczba wierszy do wstawienia:</translation>
+ </message>
+</context>
+<context>
+ <name>SqlQueryView</name>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="69"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="70"/>
+ <source>Copy as...</source>
+ <translation>Kopiuj jako...</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="71"/>
+ <source>Paste</source>
+ <translation>Wklej</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="72"/>
+ <source>Paste as...</source>
+ <translation>Wklej jako...</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="73"/>
+ <source>Set NULL values</source>
+ <translation>Ustaw wartości NULL</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="74"/>
+ <source>Erase values</source>
+ <translation>Wymaż wartości</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="75"/>
+ <source>Edit value in editor</source>
+ <translation>Edytuj wartość w edytorze</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="76"/>
+ <source>Commit</source>
+ <translation>Zatwierdź</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="77"/>
+ <source>Rollback</source>
+ <translation>Wycofaj</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="78"/>
+ <source>Commit selected cells</source>
+ <translation>Zatwierdź zaznaczone komórki</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="79"/>
+ <source>Rollback selected cells</source>
+ <translation>Wycofaj zaznaczone komórki</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="80"/>
+ <source>Define columns to sort by</source>
+ <translation>Zdefiniuj kolumny po których sortować</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="81"/>
+ <source>Remove custom sorting</source>
+ <translation>Wycofaj własne sortowanie</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="82"/>
+ <source>Insert row</source>
+ <translation>Wstaw wiersz</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="83"/>
+ <source>Insert multiple rows</source>
+ <translation>Wstaw wiele wierszy</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="84"/>
+ <source>Delete selected row</source>
+ <translation>Usuń zaznaczony wiersz</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqlqueryview.cpp" line="443"/>
+ <source>Edit value</source>
+ <translation>Edytuj wartość</translation>
+ </message>
+</context>
+<context>
+ <name>SqlTableModel</name>
+ <message>
+ <location filename="../datagrid/sqltablemodel.cpp" line="74"/>
+ <source>Error while commiting new row: %1</source>
+ <translation>Błąd podczas zatwierdzania nowego wiersza: %1</translation>
+ </message>
+ <message>
+ <location filename="../datagrid/sqltablemodel.cpp" line="132"/>
+ <source>Error while deleting row from table %1: %2</source>
+ <translation>Błąd podczas usuwania wiersza z tabeli %1: %2</translation>
+ </message>
+</context>
+<context>
+ <name>StatusField</name>
+ <message>
+ <location filename="../statusfield.ui" line="14"/>
+ <source>Status</source>
+ <translation>Status</translation>
+ </message>
+ <message>
+ <location filename="../statusfield.cpp" line="161"/>
+ <source>Copy</source>
+ <translation>Kopiuj</translation>
+ </message>
+ <message>
+ <location filename="../statusfield.cpp" line="168"/>
+ <source>Clear</source>
+ <translation>Wyczyść</translation>
+ </message>
+</context>
+<context>
+ <name>TableConstraintsModel</name>
+ <message>
+ <location filename="../windows/tableconstraintsmodel.cpp" line="75"/>
+ <source>Type</source>
+ <comment>table constraints</comment>
+ <translation>Typ</translation>
+ </message>
+ <message>
+ <location filename="../windows/tableconstraintsmodel.cpp" line="77"/>
+ <source>Details</source>
+ <comment>table constraints</comment>
+ <translation>Szczegóły</translation>
+ </message>
+ <message>
+ <location filename="../windows/tableconstraintsmodel.cpp" line="79"/>
+ <source>Name</source>
+ <comment>table constraints</comment>
+ <translation>Nazwa</translation>
+ </message>
+</context>
+<context>
+ <name>TableForeignKeyPanel</name>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="29"/>
+ <source>Foreign table:</source>
+ <translation>Tabela obca:</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="48"/>
+ <source>SQLite 2 does not support foreign keys officially,
+but it&apos;s okay to use them anyway.</source>
+ <translation>SQLite 2 oficjalnie nie obsługuje kluczy obcych,
+ale można ich używać.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="62"/>
+ <source>Columns</source>
+ <translation>Kolumny</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="77"/>
+ <source>Local column</source>
+ <translation>Kolumna lokalna</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="90"/>
+ <source>Foreign column</source>
+ <translation>Kolumna obca</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="126"/>
+ <source>Reactions</source>
+ <translation>Reakcje</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="165"/>
+ <source>Deferred foreign key</source>
+ <translation>Klucz obcy odroczony</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="183"/>
+ <source>Named constraint</source>
+ <translation>Nazwane ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.ui" line="190"/>
+ <source>Constraint name</source>
+ <translation>Nazwa ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.cpp" line="53"/>
+ <source>Pick the foreign column.</source>
+ <translation>Wybierz kolumnę obcą</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.cpp" line="65"/>
+ <source>Pick the foreign table.</source>
+ <translation>Wybierz tabelę obcą</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.cpp" line="66"/>
+ <source>Select at least one foreign column.</source>
+ <translation>Wybierz przynajmnie jedną kolumnę obcą.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.cpp" line="67"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tableforeignkeypanel.cpp" line="209"/>
+ <source>Foreign column</source>
+ <comment>table constraints</comment>
+ <translation>Kolumna obca</translation>
+ </message>
+</context>
+<context>
+ <name>TablePrimaryKeyAndUniquePanel</name>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="32"/>
+ <source>Columns</source>
+ <translation>Kolumny</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="59"/>
+ <source>Column</source>
+ <translation>Kolumna</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="84"/>
+ <source>Collation</source>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="109"/>
+ <source>Sort</source>
+ <translation>Sortowanie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="142"/>
+ <source>Valid only for a single column with INTEGER data type</source>
+ <translation>Dozwolone tylko dla jednej kolumny o typie danych INTEGER</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="145"/>
+ <source>Autoincrement</source>
+ <translation>Autoinkrementacja</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="167"/>
+ <source>Named constraint</source>
+ <translation>Nazwane ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="174"/>
+ <source>Constraint name</source>
+ <translation>Nazwa ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.ui" line="199"/>
+ <source>On conflict</source>
+ <translation>W razie konfliktu</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.cpp" line="86"/>
+ <source>Collate</source>
+ <comment>table constraints</comment>
+ <translation>Zestawienie</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.cpp" line="93"/>
+ <source>Sort order</source>
+ <comment>table constraints</comment>
+ <translation>Kierunek sortowania</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.cpp" line="169"/>
+ <source>Select at least one column.</source>
+ <translation>Zaznacz przynajmniej jedną kolumnę.</translation>
+ </message>
+ <message>
+ <location filename="../constraints/tablepkanduniquepanel.cpp" line="170"/>
+ <source>Enter a name of the constraint.</source>
+ <translation>Wprowadź nazwę ograniczenia.</translation>
+ </message>
+</context>
+<context>
+ <name>TableStructureModel</name>
+ <message>
+ <location filename="../windows/tablestructuremodel.cpp" line="299"/>
+ <source>Name</source>
+ <comment>table structure columns</comment>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablestructuremodel.cpp" line="301"/>
+ <source>Data type</source>
+ <comment>table structure columns</comment>
+ <translation>Typ danych</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablestructuremodel.cpp" line="315"/>
+ <source>Default value</source>
+ <comment>table structure columns</comment>
+ <translation>Domyślna wartość</translation>
+ </message>
+</context>
+<context>
+ <name>TableWindow</name>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="36"/>
+ <source>Structure</source>
+ <translation>Struktura</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="60"/>
+ <source>Table name:</source>
+ <translation>Nazwa tabeli:</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="184"/>
+ <source>Data</source>
+ <translation>Dane</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="201"/>
+ <source>Constraints</source>
+ <translation>Ograniczenia</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="215"/>
+ <source>Indexes</source>
+ <translation>Indeksy</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="244"/>
+ <source>Triggers</source>
+ <translation>Wyzwalacze</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.ui" line="276"/>
+ <source>DDL</source>
+ <translation>DDL</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="180"/>
+ <source>Export table</source>
+ <comment>table window</comment>
+ <translation>Eksportuj tabelę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="181"/>
+ <source>Import data to table</source>
+ <comment>table window</comment>
+ <translation>Importuj do tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="182"/>
+ <source>Populate table</source>
+ <comment>table window</comment>
+ <translation>Zaludnij tabelę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="196"/>
+ <source>Refresh structure</source>
+ <comment>table window</comment>
+ <translation>Odśwież strukturę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="198"/>
+ <source>Commit structure changes</source>
+ <comment>table window</comment>
+ <translation>Zatwierdź zmiany w strukturze</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="199"/>
+ <source>Rollback structure changes</source>
+ <comment>table window</comment>
+ <translation>Wycofaj zmiany w strukturze</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="200"/>
+ <source>Add column</source>
+ <comment>table window</comment>
+ <translation>Dodaj kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="201"/>
+ <source>Edit column</source>
+ <comment>table window</comment>
+ <translation>Edytuj kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="202"/>
+ <location filename="../windows/tablewindow.cpp" line="289"/>
+ <source>Delete column</source>
+ <comment>table window</comment>
+ <translation>Usuń kolumnę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="203"/>
+ <source>Move column up</source>
+ <comment>table window</comment>
+ <translation>Przesuń kolumnę w górę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="204"/>
+ <source>Move column down</source>
+ <comment>table window</comment>
+ <translation>Przesuń kolumnę w dół</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="210"/>
+ <source>Create similar table</source>
+ <comment>table window</comment>
+ <translation>Utwórz podobną tabelę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="211"/>
+ <source>Reset autoincrement value</source>
+ <comment>table window</comment>
+ <translation>Wyzeruj wartość autoinkrementacji</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="214"/>
+ <source>Add table constraint</source>
+ <comment>table window</comment>
+ <translation>Dodaj ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="215"/>
+ <source>Edit table constraint</source>
+ <comment>table window</comment>
+ <translation>Edytuj ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="216"/>
+ <source>Delete table constraint</source>
+ <comment>table window</comment>
+ <translation>Usuń ograniczenie tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="217"/>
+ <source>Move table constraint up</source>
+ <comment>table window</comment>
+ <translation>Przesuń ograniczenie tabeli w górę</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="218"/>
+ <source>Move table constraint down</source>
+ <comment>table window</comment>
+ <translation>Przesuń ograniczenie tabeli w dół</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="220"/>
+ <source>Add table primary key</source>
+ <comment>table window</comment>
+ <translation>Dodaj klucz główny tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="221"/>
+ <source>Add table foreign key</source>
+ <comment>table window</comment>
+ <translation>Dodaj klucz obcy tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="222"/>
+ <source>Add table unique constraint</source>
+ <comment>table window</comment>
+ <translation>Dodaj ograniczenie unikalnych wartości tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="223"/>
+ <source>Add table check constraint</source>
+ <comment>table window</comment>
+ <translation>Dodaj ograniczenie warunkiem tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="241"/>
+ <source>Refresh index list</source>
+ <comment>table window</comment>
+ <translation>Odśwież listę indeksów</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="243"/>
+ <source>Create index</source>
+ <comment>table window</comment>
+ <translation>Utwórz indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="244"/>
+ <source>Edit index</source>
+ <comment>table window</comment>
+ <translation>Edytuj indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="245"/>
+ <source>Delete index</source>
+ <comment>table window</comment>
+ <translation>Usuń indeks</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="251"/>
+ <source>Refresh trigger list</source>
+ <comment>table window</comment>
+ <translation>Odśwież listę wyzwalaczy</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="253"/>
+ <source>Create trigger</source>
+ <comment>table window</comment>
+ <translation>Utwórz wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="254"/>
+ <source>Edit trigger</source>
+ <comment>table window</comment>
+ <translation>Edytuj wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="255"/>
+ <source>Delete trigger</source>
+ <comment>table window</comment>
+ <translation>Usuń wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="288"/>
+ <source>Are you sure you want to delete column &apos;%1&apos;?</source>
+ <comment>table window</comment>
+ <translation>Czy na pewno chcesz usunąć kolumnę &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="316"/>
+ <source>Following problems will take place while modifying the table.
+Would you like to proceed?</source>
+ <comment>table window</comment>
+ <translation>Następujące problemy wystąpią podczas modyfikacji tabeli.
+Czy chcesz kontynuować?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="318"/>
+ <source>Table modification</source>
+ <comment>table window</comment>
+ <translation>Modyfikacja tabeli</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="456"/>
+ <source>Could not load data for table %1. Error details: %2</source>
+ <translation>Nie udało się załadować danych dla tabeli %1. Szczegóły błędu: %2</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="569"/>
+ <source>Could not process the %1 table correctly. Unable to open a table window.</source>
+ <translation>Nie udało się przetworzyć poprawnie tabeli %1. Nie można otworzyć okna tabeli.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="637"/>
+ <source>Could not restore window, because database %1 could not be resolved.</source>
+ <translation>Nie można przywrócić okna, ponieważ nie znaleziono bazy danych %1.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="646"/>
+ <source>Could not restore window, because the table %1 doesn&apos;t exist in the database %2.</source>
+ <translation>Nie można przywrócić okna, ponieważ tabela %1 już nie jestnieje w bazie danych %2.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="671"/>
+ <location filename="../windows/tablewindow.cpp" line="673"/>
+ <source>New table %1</source>
+ <translation>Nowa tabela %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="824"/>
+ <source>Could not commit table structure. Error message: %1</source>
+ <comment>table window</comment>
+ <translation>Nie udało się zatwierdzić struktury tabeli. Treść błędu: %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="845"/>
+ <source>Reset autoincrement</source>
+ <translation>Wyzeruj autoinkrementację</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="845"/>
+ <source>Are you sure you want to reset autoincrement value for table &apos;%1&apos;?</source>
+ <translation>Czy na pewno chcesz wyzerować wartość autoinkrementacji dla tabeli &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="852"/>
+ <source>An error occurred while trying to reset autoincrement value for table &apos;%1&apos;: %2</source>
+ <translation>Wystąpił błąd podczas próby wyzerowania wartości autoinkrementacji dla tabeli &apos;%1&apos;: %2</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="854"/>
+ <source>Autoincrement value for table &apos;%1&apos; has been reset successfly.</source>
+ <translation>Wartość autoinkrementacji dla tabeli &apos;%1&apos; została pomyślnie wyzerowana.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="933"/>
+ <source>Empty name</source>
+ <translation>Pusta nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="933"/>
+ <source>A blank name for the table is allowed in SQLite, but it is not recommended.
+Are you sure you want to create a table with blank name?</source>
+ <translation>Pusta nazwa dla tabeli jest dozwolona w SQLite, ale nie jest zalecana.
+Czy na pewno chcesz utworzyć tabelę o pustej nazwie?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="942"/>
+ <source>Cannot create a table without at least one column.</source>
+ <translation>Nie można utworzyć tabeli bez przynajmniej jednej kolumny.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="968"/>
+ <source>Cannot create table %1, if it has no primary key defined. Either uncheck the %2, or define a primary key.</source>
+ <translation>Nie można utworzyć tabeli %1, jeśli nie ma zdefiniowanego klucza głównego. Albo udznacz %2, albo zdefiniuj klucz główny.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="975"/>
+ <source>Cannot use autoincrement for primary key when %1 clause is used. Either uncheck the %2, or the autoincrement in a primary key.</source>
+ <translation>Nie można użyć autoinkrementacji dla klucza głównego, kiedy klauzula %1 jest użyta. Albo odnacz %2, albo autonkrementację w kluczu głównym.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1105"/>
+ <source>Are you sure you want to delete table constraint &apos;%1&apos;?</source>
+ <comment>table window</comment>
+ <translation>Czy na pewno chcesz usunąć ograniczenie tabeli &apos;%1&apos;?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1106"/>
+ <source>Delete constraint</source>
+ <comment>table window</comment>
+ <translation>Usuń ograniczenie</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1160"/>
+ <source>Cannot export, because no export plugin is loaded.</source>
+ <translation>Nie można wyeksportować, ponieważ żadna wtyczka eksportu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1173"/>
+ <source>Cannot import, because no import plugin is loaded.</source>
+ <translation>Nie można zaimportować, ponieważ żadna wtyczka importu nie została załadowana.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1205"/>
+ <source>Uncommited changes</source>
+ <translation>Niezatwierdzone dane</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1206"/>
+ <source>There are uncommited structure modifications. You cannot browse or edit data until you have table structure settled.
+Do you want to commit the structure, or do you want to go back to the structure tab?</source>
+ <translation>Zmiany w strukturze nie zostały zatwierdzone. Nie można przeglądać, ani edytować danych, dopóki struktura tabeli nie zostanie ustalona.
+Czy chcesz zatwierdzić strukturę, czy jednak chcesz wrócić do karty struktury?</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1209"/>
+ <source>Go back to structure tab</source>
+ <translation>Wróć do karty struktury</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1209"/>
+ <source>Commit modifications and browse data.</source>
+ <translation>Zatwierdź modyfikacje i przeglądaj dane.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1359"/>
+ <source>Name</source>
+ <comment>table window indexes</comment>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1360"/>
+ <source>Unique</source>
+ <comment>table window indexes</comment>
+ <translation>Wartości unikalne</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1361"/>
+ <source>Columns</source>
+ <comment>table window indexes</comment>
+ <translation>Kolumny</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1362"/>
+ <source>Partial index condition</source>
+ <comment>table window indexes</comment>
+ <translation>Warunek indeksu częściowego:</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1415"/>
+ <source>Name</source>
+ <comment>table window triggers</comment>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1416"/>
+ <source>Event</source>
+ <comment>table window triggers</comment>
+ <translation>Zdarzenie</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1417"/>
+ <source>Condition</source>
+ <comment>table window triggers</comment>
+ <translation>Warunek</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1418"/>
+ <source>Details</source>
+ <comment>table window triggers</comment>
+ <translation>Szczegóły</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1506"/>
+ <source>Table window &quot;%1&quot; has uncommited structure modifications and data.</source>
+ <translation>Okno tabeli &quot;%1&quot; ma niezatwierdzone modyfikacje struktury i danych.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1508"/>
+ <source>Table window &quot;%1&quot; has uncommited data.</source>
+ <translation>Okno tabeli &quot;%1&quot; ma niezatwierdzone dane.</translation>
+ </message>
+ <message>
+ <location filename="../windows/tablewindow.cpp" line="1510"/>
+ <source>Table window &quot;%1&quot; has uncommited structure modifications.</source>
+ <translation>Okno tabeli &quot;%1&quot; ma niezatwierdzone modyfikacje struktury.</translation>
+ </message>
+</context>
+<context>
+ <name>TriggerColumnsDialog</name>
+ <message>
+ <location filename="../dialogs/triggercolumnsdialog.ui" line="14"/>
+ <source>Trigger columns</source>
+ <translation>Kolumny wyzwalacza</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggercolumnsdialog.ui" line="47"/>
+ <source>Triggering columns:</source>
+ <translation>Kolumny wyzwalające:</translation>
+ </message>
+</context>
+<context>
+ <name>TriggerDialog</name>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="14"/>
+ <location filename="../dialogs/triggerdialog.ui" line="24"/>
+ <source>Trigger</source>
+ <translation>Wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="30"/>
+ <source>On table:</source>
+ <translation>Na tabeli:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="40"/>
+ <source>Action:</source>
+ <translation>Akcja:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="56"/>
+ <location filename="../dialogs/triggerdialog.ui" line="124"/>
+ <source>&lt;p&gt;SQL condition that will be evaluated before the actual trigger code. In case the condition returns false, the trigger will not be fired for that row.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;Warunek SQL, który będzie wykonany przed właściwym kodem wyzwalacza. W przypadku gdy warunek zwróci fałsz, wyzwalacz nie zostanie uruchomiony dla tego wiersza.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="59"/>
+ <source>Pre-condition:</source>
+ <translation>Warunek wstępny:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="66"/>
+ <source>The scope is still not fully supported by the SQLite database.</source>
+ <translation>Zakres wciąż nie jest w pełni obsługiwany przez bazy danych SQLite.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="73"/>
+ <source>Trigger name:</source>
+ <translation>Nazwa wyzwalacza:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="80"/>
+ <source>When:</source>
+ <translation>Kiedy:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="87"/>
+ <source>List of columns for UPDATE OF action.</source>
+ <translation>Lista kolumn dla akcji UPDATE OF.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="97"/>
+ <source>Scope:</source>
+ <translation>Zakres:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="104"/>
+ <source>Code:</source>
+ <translation>Kod:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="111"/>
+ <source>Trigger statements to be executed.</source>
+ <translation>Zapytania wyzwalacz do wykonania.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.ui" line="132"/>
+ <source>DDL</source>
+ <translation>DDL</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="145"/>
+ <source>On view:</source>
+ <translation>Na widoku:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="168"/>
+ <source>Could not process trigger %1 correctly. Unable to open a trigger dialog.</source>
+ <translation>Nie udało się przetworzyć poprawnie wyzwalacza %1. Nie można otworzyć okna wyzwalacza.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="338"/>
+ <source>Enter a valid condition.</source>
+ <translation>Wprowadź poprawny warunek.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="339"/>
+ <source>Enter a valid trigger code.</source>
+ <translation>Wprowadź poprawny kod wyzwalacza.</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="411"/>
+ <source>Error</source>
+ <comment>trigger dialog</comment>
+ <translation>Błąd</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/triggerdialog.cpp" line="411"/>
+ <source>An error occurred while executing SQL statements:
+%1</source>
+ <translation>Wystąpił błąd podczas wykonywania zapytań SQL:
+%1</translation>
+ </message>
+</context>
+<context>
+ <name>VersionConvertSummaryDialog</name>
+ <message>
+ <location filename="../dialogs/versionconvertsummarydialog.ui" line="14"/>
+ <source>Database version convert</source>
+ <translation>Konwersja bazy danych</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/versionconvertsummarydialog.ui" line="20"/>
+ <source>Following changes to the SQL statements will be made:</source>
+ <translation>Dokonane będą następujące zmiany w zapytaniach SQL:</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/versionconvertsummarydialog.cpp" line="10"/>
+ <source>Before</source>
+ <translation>Przed</translation>
+ </message>
+ <message>
+ <location filename="../dialogs/versionconvertsummarydialog.cpp" line="11"/>
+ <source>After</source>
+ <translation>Po</translation>
+ </message>
+</context>
+<context>
+ <name>ViewWindow</name>
+ <message>
+ <location filename="../windows/viewwindow.ui" line="36"/>
+ <source>Query</source>
+ <translation>Zapytanie</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.ui" line="60"/>
+ <source>View name:</source>
+ <translation>Nazwa widoku:</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.ui" line="77"/>
+ <source>Data</source>
+ <translation>Dane</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.ui" line="87"/>
+ <source>Triggers</source>
+ <translation>Wyzwalacze</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.ui" line="119"/>
+ <source>DDL</source>
+ <translation>DDL</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="115"/>
+ <source>Could not restore window, because database %1 could not be resolved.</source>
+ <translation>Nie można przywrócić okna, ponieważ nie znaleziono bazy danych %1.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="121"/>
+ <source>Could not restore window, because database %1 could not be open.</source>
+ <translation>Nie można przywrócić okna, ponieważ nie udało się otworzyć bazy danych %1.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="130"/>
+ <source>Could not restore window, because the view %1 doesn&apos;t exist in the database %2.</source>
+ <translation>Nie można przywrócić okna, ponieważ widok %1 już nie jestnieje w bazie danych %2.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="155"/>
+ <location filename="../windows/viewwindow.cpp" line="157"/>
+ <source>New view %1</source>
+ <translation>Nowy widok %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="275"/>
+ <source>Refresh the view</source>
+ <comment>view window</comment>
+ <translation>Odśwież widok</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="277"/>
+ <source>Commit the view changes</source>
+ <comment>view window</comment>
+ <translation>Zatwierdź zmiany w widoku</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="278"/>
+ <source>Rollback the view changes</source>
+ <comment>view window</comment>
+ <translation>Wycofaj zmiany w widoku</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="285"/>
+ <source>Refresh trigger list</source>
+ <comment>view window</comment>
+ <translation>Odśwież listę wyzwalaczy</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="287"/>
+ <source>Create new trigger</source>
+ <comment>view window</comment>
+ <translation>Utwórz nowy wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="288"/>
+ <source>Edit selected trigger</source>
+ <comment>view window</comment>
+ <translation>Edytuj wybrany wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="289"/>
+ <source>Delete selected trigger</source>
+ <comment>view window</comment>
+ <translation>Usuń wybrany wyzwalacz</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="310"/>
+ <source>View window &quot;%1&quot; has uncommited structure modifications and data.</source>
+ <translation>Okno widoku &quot;%1&quot; ma niezatwierdzone modyfikacje struktury i danych.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="312"/>
+ <source>View window &quot;%1&quot; has uncommited data.</source>
+ <translation>Okno widoku &quot;%1&quot; ma niezatwierdzone dane.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="314"/>
+ <source>View window &quot;%1&quot; has uncommited structure modifications.</source>
+ <translation>Okno widoku &quot;%1&quot; ma niezatwierdzone modyfikacje struktury.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="455"/>
+ <source>Could not load data for view %1. Error details: %2</source>
+ <translation>Nie udało się załadować danych dla widoku %1. Szczegóły błędu: %2</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="466"/>
+ <source>Uncommited changes</source>
+ <translation>Niezatwierdzone dane</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="467"/>
+ <source>There are uncommited structure modifications. You cannot browse or edit data until you have the view structure settled.
+Do you want to commit the structure, or do you want to go back to the structure tab?</source>
+ <translation>Zmiany w strukturze nie zostały zatwierdzone. Nie można przeglądać, ani edytować danych, dopóki struktura widoku nie zostanie ustalona.
+Czy chcesz zatwierdzić strukturę, czy jednak chcesz wrócić do karty struktury?</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="470"/>
+ <source>Go back to structure tab</source>
+ <translation>Wróć do karty struktury</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="470"/>
+ <source>Commit modifications and browse data.</source>
+ <translation>Zatwierdź modyfikacje i przeglądaj dane.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="528"/>
+ <source>Could not commit view changes. Error message: %1</source>
+ <comment>view window</comment>
+ <translation>Nie udało się zatwierdzić widoku. Treść błędu: %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="606"/>
+ <source>Name</source>
+ <comment>view window triggers</comment>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="607"/>
+ <source>Instead of</source>
+ <comment>view window triggers</comment>
+ <translation>Zamiast</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="608"/>
+ <source>Condition</source>
+ <comment>view window triggers</comment>
+ <translation>Warunek</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="609"/>
+ <source>Details</source>
+ <comment>table window triggers</comment>
+ <translation>Szczegóły</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="649"/>
+ <source>Could not process the %1 view correctly. Unable to open a view window.</source>
+ <translation>Nie udało się przetworzyć poprawnie widoku %1. Nie można otworzyć okna widoku.</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="684"/>
+ <source>Empty name</source>
+ <translation>Pusta nazwa</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="684"/>
+ <source>A blank name for the view is allowed in SQLite, but it is not recommended.
+Are you sure you want to create a view with blank name?</source>
+ <translation>Pusta nazwa dla widoku jest dozwolona w SQLite, ale nie jest zalecana.
+Czy na pewno chcesz utworzyć widok o pustej nazwie?</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="699"/>
+ <source>The SELECT statement could not be parsed. Please correct the query and retry.
+Details: %1</source>
+ <translation>Zapytanie SELECT nie mogło być poprawnie przeanalizowane. Proszę poprawić zapytanie i spróbować ponownie.
+Szczegóły: %1</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="707"/>
+ <source>The view could not be modified due to internal SQLiteStudio error. Please report this!</source>
+ <translation>Widok nie mógł być zmodyfikowany w związku z wewnętrznym błędem SQLiteStudio. Proszę to zgłosić!</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="733"/>
+ <source>The view code could not be parsed properly for execution. This is a SQLiteStudio&apos;s bug. Please report it.</source>
+ <translation>Kod widok nie mógł być poprawnie przeanalizowany. To jest błąd SQLiteStudio Proszę to zgłosić!</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="746"/>
+ <source>Following problems will take place while modifying the view.
+Would you like to proceed?</source>
+ <comment>view window</comment>
+ <translation>Następujące problemy wystąpią podczas modyfikacji widoku.
+Czy chcesz kontynuować?</translation>
+ </message>
+ <message>
+ <location filename="../windows/viewwindow.cpp" line="748"/>
+ <source>View modification</source>
+ <comment>view window</comment>
+ <translation>Modyfikacja widoku</translation>
+ </message>
+</context>
+<context>
+ <name>WidgetCover</name>
+ <message>
+ <location filename="../common/widgetcover.cpp" line="198"/>
+ <source>Interrupt</source>
+ <translation>Przerwij</translation>
+ </message>
+</context>
+</TS>
diff --git a/SQLiteStudio3/guiSQLiteStudio/uiconfig.h b/SQLiteStudio3/guiSQLiteStudio/uiconfig.h
index 608ce47..e6cfea2 100644
--- a/SQLiteStudio3/guiSQLiteStudio/uiconfig.h
+++ b/SQLiteStudio3/guiSQLiteStudio/uiconfig.h
@@ -80,6 +80,7 @@ CFG_CATEGORIES(Ui,
CFG_ENTRY(Cfg::DataEditorsOrder, DataEditorsOrder, Cfg::DataEditorsOrder())
CFG_ENTRY(QString, FileDialogLastPath, QString())
CFG_ENTRY(int, MaxInitialColumnWith, 600)
+ CFG_ENTRY(bool, LanguageAsked, false)
)
)
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/bugreporthistorywindow.ui b/SQLiteStudio3/guiSQLiteStudio/windows/bugreporthistorywindow.ui
index 3218822..2211ec2 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/bugreporthistorywindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/bugreporthistorywindow.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/collationseditor.ui b/SQLiteStudio3/guiSQLiteStudio/windows/collationseditor.ui
index 635ae59..98e7ddb 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/collationseditor.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/collationseditor.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/ddlhistorywindow.ui b/SQLiteStudio3/guiSQLiteStudio/windows/ddlhistorywindow.ui
index 6591198..33cdb66 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/ddlhistorywindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/ddlhistorywindow.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp
index 7856a5e..590a2fd 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.cpp
@@ -17,13 +17,13 @@
#include "parser/lexer.h"
#include "common/utils_sql.h"
#include "parser/parser.h"
+#include "dbobjectdialogs.h"
+#include "dialogs/exportdialog.h"
#include <QComboBox>
#include <QDebug>
#include <QStringListModel>
#include <QActionGroup>
#include <QMessageBox>
-#include <dbobjectdialogs.h>
-#include <dialogs/exportdialog.h>
CFG_KEYS_DEFINE(EditorWindow)
EditorWindow::ResultsDisplayMode EditorWindow::resultsDisplayMode;
@@ -94,6 +94,10 @@ void EditorWindow::init()
initActions();
updateShortcutTips();
+ Db* treeSelectedDb = DBTREE->getSelectedOpenDb();
+ if (treeSelectedDb)
+ dbCombo->setCurrentIndex(dbComboModel->getIndexForDb(treeSelectedDb));
+
Db* currentDb = getCurrentDb();
resultsModel->setDb(currentDb);
ui->sqlEdit->setDb(currentDb);
@@ -484,7 +488,16 @@ void EditorWindow::executionSuccessful()
{
double secs = ((double)resultsModel->getExecutionTime()) / 1000;
QString time = QString::number(secs, 'f', 3);
- notifyInfo(tr("Query finished in %2 second(s).").arg(time));
+
+ if (resultsModel->wasDataModifyingQuery())
+ {
+ QString rowsAffected = QString::number(resultsModel->getTotalRowsAffected());
+ notifyInfo(tr("Query finished in %1 second(s). Rows affected: %2").arg(time, rowsAffected));
+ }
+ else
+ {
+ notifyInfo(tr("Query finished in %1 second(s).").arg(time));
+ }
lastQueryHistoryId = CFG->addSqlHistory(resultsModel->getQuery(), resultsModel->getDb()->getName(), resultsModel->getExecutionTime(), 0);
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h
index 0052a74..4666386 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.h
@@ -25,7 +25,7 @@ class SqlEditor;
CFG_KEY_LIST(EditorWindow, QObject::tr("SQL editor window"),
CFG_KEY_ENTRY(EXEC_QUERY, Qt::Key_F9, QObject::tr("Execute query"))
- CFG_KEY_ENTRY(EXPLAIN_QUERY, Qt::Key_F8, QObject::tr("Execute \"EXPLAIN\" query"))
+ CFG_KEY_ENTRY(EXPLAIN_QUERY, Qt::Key_F8, QObject::tr("Execute \"%1\" query").arg("EXPLAIN"))
CFG_KEY_ENTRY(PREV_DB, Qt::CTRL + Qt::Key_Up, QObject::tr("Switch current working database to previous on the list"))
CFG_KEY_ENTRY(NEXT_DB, Qt::CTRL + Qt::Key_Down, QObject::tr("Switch current working database to next on the list"))
CFG_KEY_ENTRY(SHOW_NEXT_TAB, Qt::ALT + Qt::Key_Right, QObject::tr("Go to next editor tab"))
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.ui b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.ui
index b0d598b..51d5503 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/editorwindow.ui
@@ -11,10 +11,19 @@
</rect>
</property>
<property name="windowTitle">
- <string>SQL editor</string>
+ <string notr="true">SQL editor</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -42,7 +51,16 @@
</widget>
<widget class="QWidget" name="resultsContainer" native="true">
<layout class="QVBoxLayout" name="verticalLayout_5">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
</layout>
@@ -59,7 +77,16 @@
<item>
<widget class="QWidget" name="resultsFrame" native="true">
<layout class="QVBoxLayout" name="verticalLayout_6">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -116,6 +143,11 @@
</widget>
<customwidgets>
<customwidget>
+ <class>SqlView</class>
+ <extends>QPlainTextEdit</extends>
+ <header>sqlview.h</header>
+ </customwidget>
+ <customwidget>
<class>DataView</class>
<extends>QTabWidget</extends>
<header>dataview.h</header>
@@ -126,11 +158,6 @@
<extends>QPlainTextEdit</extends>
<header>sqleditor.h</header>
</customwidget>
- <customwidget>
- <class>SqlView</class>
- <extends>QPlainTextEdit</extends>
- <header>sqlview.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/functionseditor.ui b/SQLiteStudio3/guiSQLiteStudio/windows/functionseditor.ui
index d5d5015..45d291d 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/functionseditor.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/functionseditor.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp
index 56accd0..1b47433 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.cpp
@@ -208,6 +208,7 @@ void TableWindow::createStructureActions()
ui->structureToolBar->addAction(actionMap[POPULATE]);
ui->structureToolBar->addSeparator();
createAction(CREATE_SIMILAR, ICONS.TABLE_CREATE_SIMILAR, tr("Create similar table", "table window"), this, SLOT(createSimilarTable()), ui->structureToolBar);
+ createAction(RESET_AUTOINCREMENT, ICONS.RESET_AUTOINCREMENT, tr("Reset autoincrement value", "table window"), this, SLOT(resetAutoincrement()), ui->structureToolBar);
// Table constraints
createAction(ADD_TABLE_CONSTRAINT, ICONS.TABLE_CONSTRAINT_ADD, tr("Add table constraint", "table window"), this, SLOT(addConstraint()), ui->tableConstraintsToolbar, ui->tableConstraintsView);
@@ -834,6 +835,24 @@ void TableWindow::rollbackStructure()
updateStructureCommitState();
updateStructureToolbarState();
updateTableConstraintsToolbarState();
+ updateDdlTab();
+}
+
+void TableWindow::resetAutoincrement()
+{
+ if (!existingTable)
+ return;
+
+ QMessageBox::StandardButton btn = QMessageBox::question(this, tr("Reset autoincrement"), tr("Are you sure you want to reset autoincrement value for table '%1'?")
+ .arg(table));
+ if (btn != QMessageBox::Yes)
+ return;
+
+ SqlQueryPtr res = db->exec("DELETE FROM sqlite_sequence WHERE name = ?;", {table});
+ if (res->isError())
+ notifyError(tr("An error occurred while trying to reset autoincrement value for table '%1': %2").arg(table, res->getErrorText()));
+ else
+ notifyInfo(tr("Autoincrement value for table '%1' has been reset successfly.").arg(table));
}
void TableWindow::addColumn()
@@ -947,15 +966,15 @@ bool TableWindow::validate(bool skipWarning)
if (!hasPk)
{
- notifyError(tr("Cannot create table without ROWID, if it has no PRIMARY KEY defined."
- " Either uncheck the WITHOUT ROWID, or define a PRIMARY KEY."));
+ notifyError(tr("Cannot create table %1, if it has no primary key defined."
+ " Either uncheck the %2, or define a primary key.").arg("WITHOUT ROWID", "WITHOUT ROWID"));
return false;
}
if (isPkAutoIncr)
{
- notifyError(tr("Cannot use AUTOINCREMENT for PRIMARY KEY when WITHOUT ROWID clause is used."
- " Either uncheck the WITHOUT ROWID, or the AUTOINCREMENT in a PRIMARY KEY."));
+ notifyError(tr("Cannot use autoincrement for primary key when %1 clause is used."
+ " Either uncheck the %2, or the autoincrement in a primary key.").arg("WITHOUT ROWID", "WITHOUT ROWID"));
return false;
}
}
@@ -1023,9 +1042,12 @@ void TableWindow::applyInitialTab()
void TableWindow::updateDdlTab()
{
- CodeFormatter* formatter = SQLITESTUDIO->getCodeFormatter();
createTable->rebuildTokens();
- ui->ddlEdit->setPlainText(formatter->format("sql", createTable->detokenize(), db));
+ QString ddl = createTable->detokenize();
+ if (createTable->columns.size() > 0)
+ ddl = SQLITESTUDIO->getCodeFormatter()->format("sql", ddl, db);
+
+ ui->ddlEdit->setPlainText(ddl);
}
void TableWindow::updateNewTableState()
@@ -1037,6 +1059,7 @@ void TableWindow::updateNewTableState()
actionMap[IMPORT]->setEnabled(existingTable);
actionMap[POPULATE]->setEnabled(existingTable);
actionMap[CREATE_SIMILAR]->setEnabled(existingTable);
+ actionMap[RESET_AUTOINCREMENT]->setEnabled(existingTable);
actionMap[REFRESH_STRUCTURE]->setEnabled(existingTable);
}
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.h b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.h
index b0ee1e3..54d544f 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.h
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.h
@@ -79,6 +79,7 @@ class GUI_API_EXPORT TableWindow : public MdiChild
IMPORT,
POPULATE,
CREATE_SIMILAR,
+ RESET_AUTOINCREMENT,
// Indexes tab
REFRESH_INDEXES,
ADD_INDEX,
@@ -189,6 +190,7 @@ class GUI_API_EXPORT TableWindow : public MdiChild
void changesSuccessfullyCommited();
void changesFailedToCommit(int errorCode, const QString& errorText);
void rollbackStructure();
+ void resetAutoincrement();
void editColumn();
void delColumn();
void moveColumnUp();
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.ui b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.ui
index 8c46443..f1fe409 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/tablewindow.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
@@ -74,7 +74,7 @@
<item>
<widget class="QCheckBox" name="withoutRowIdCheck">
<property name="text">
- <string>WITHOUT ROWID</string>
+ <string notr="true">WITHOUT ROWID</string>
</property>
</widget>
</item>
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp
index a37f387..a699801 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.cpp
@@ -284,9 +284,9 @@ void ViewWindow::createTriggersTabActions()
{
createAction(REFRESH_TRIGGERS, ICONS.RELOAD, tr("Refresh trigger list", "view window"), this, SLOT(refreshTriggers()), ui->triggersToolbar, ui->triggersList);
ui->triggersToolbar->addSeparator();
- createAction(ADD_TRIGGER, ICONS.TRIGGER_ADD, tr("Create new triger", "view window"), this, SLOT(addTrigger()), ui->triggersToolbar, ui->triggersList);
- createAction(EDIT_TRIGGER, ICONS.TRIGGER_EDIT, tr("Edit selected triger", "view window"), this, SLOT(editTrigger()), ui->triggersToolbar, ui->triggersList);
- createAction(DEL_TRIGGER, ICONS.TRIGGER_DEL, tr("Delete selected triger", "view window"), this, SLOT(deleteTrigger()), ui->triggersToolbar, ui->triggersList);
+ createAction(ADD_TRIGGER, ICONS.TRIGGER_ADD, tr("Create new trigger", "view window"), this, SLOT(addTrigger()), ui->triggersToolbar, ui->triggersList);
+ createAction(EDIT_TRIGGER, ICONS.TRIGGER_EDIT, tr("Edit selected trigger", "view window"), this, SLOT(editTrigger()), ui->triggersToolbar, ui->triggersList);
+ createAction(DEL_TRIGGER, ICONS.TRIGGER_DEL, tr("Delete selected trigger", "view window"), this, SLOT(deleteTrigger()), ui->triggersToolbar, ui->triggersList);
}
QString ViewWindow::getView() const
{
diff --git a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.ui b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.ui
index 734a265..94f5ea7 100644
--- a/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.ui
+++ b/SQLiteStudio3/guiSQLiteStudio/windows/viewwindow.ui
@@ -11,10 +11,19 @@
</rect>
</property>
<property name="windowTitle">
- <string>Form</string>
+ <string notr="true">Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -33,7 +42,16 @@
<item>
<widget class="QWidget" name="nameWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -116,6 +134,11 @@
</widget>
<customwidgets>
<customwidget>
+ <class>SqlView</class>
+ <extends>QPlainTextEdit</extends>
+ <header>sqlview.h</header>
+ </customwidget>
+ <customwidget>
<class>DataView</class>
<extends>QTabWidget</extends>
<header>dataview.h</header>
@@ -126,11 +149,6 @@
<extends>QPlainTextEdit</extends>
<header>sqleditor.h</header>
</customwidget>
- <customwidget>
- <class>SqlView</class>
- <extends>QPlainTextEdit</extends>
- <header>sqlview.h</header>
- </customwidget>
</customwidgets>
<resources/>
<connections/>
diff --git a/SQLiteStudio3/lang.tcl b/SQLiteStudio3/lang.tcl
new file mode 100755
index 0000000..fd6b3d0
--- /dev/null
+++ b/SQLiteStudio3/lang.tcl
@@ -0,0 +1,114 @@
+#!/usr/bin/env tclsh
+
+proc usage {} {
+ puts "$::argv0 (add|remove) <lang_name>"
+ puts "$::argv0 (update|release)"
+}
+
+lassign $argv op lang
+
+if {$::tcl_platform(platform) == "windows"} {
+ set ERR_NULL "2>NUL"
+} else {
+ set ERR_NULL "2>/dev/null"
+}
+
+switch -- $op {
+ "update" - "release" {
+ if {$argc != 1} {
+ usage
+ exit 1
+ }
+
+ set files [list]
+ foreach p [list coreSQLiteStudio guiSQLiteStudio sqlitestudio sqlitestudiocli] {
+ lappend files $p/$p.pro
+ }
+
+ foreach d [glob -directory ../Plugins -tails -nocomplain *] {
+ if {![file isdirectory ../Plugins/$d]} continue
+ lappend files ../Plugins/$d/$d.pro
+ }
+
+ foreach f $files {
+ catch {
+ if {$op == "update"} {
+ exec lupdate $f
+ } else {
+ exec lrelease $f $::ERR_NULL
+ }
+ } res
+ if {$op == "release"} {
+ puts $res
+ } else {
+ foreach line [split $res \n] {
+ if {[string first Q_OBJECT $line] > -1} {
+ puts $line
+ }
+ if {[regexp -- {^.*\w+\.ts.*$} $line]} {
+ puts -nonewline [lindex [regexp -inline -- {^.*"([\w\/\\\.]+\.ts)".*$} $line] 1]
+ puts -nonewline ": "
+ }
+ if {[regexp -- {^.*\d+[^\d]+\(\d+[^\d]+\d+.*\).*$} $line]} {
+ puts -nonewline [lindex [regexp -inline -- {\S+.*} $line] 0]
+ set new [lindex [regexp -inline -- {^.*\d+[^\d]+(\d+)[^\d]+\d+.*$} $line] 1]
+ if {$new > 0} {
+ puts -nonewline " <- !!!!!!!!!!!"
+ }
+ puts ""
+ }
+ }
+ }
+ }
+ }
+ "add" - "remove" {
+ if {$argc != 2} {
+ usage
+ exit 1
+ }
+
+ foreach p [list coreSQLiteStudio guiSQLiteStudio sqlitestudio sqlitestudiocli] {
+ set fd [open $p/$p.pro r]
+ set data [read $fd]
+ close $fd
+
+ set ts "translations/${p}_$lang.ts"
+ if {$op == "add"} {
+ set data [string map [list "TRANSLATIONS += " "TRANSLATIONS += $ts \\\n\t\t"] $data]
+ } else {
+ regsub -- "$ts\\s*(\\\\)?\n\\s*" $data "" data
+ }
+
+ set fd [open $p/$p.pro w+]
+ puts $fd $data
+ close $fd
+
+ puts "Updated $p.pro"
+ }
+
+ foreach d [glob -directory ../Plugins -tails -nocomplain *] {
+ if {![file isdirectory ../Plugins/$d]} continue
+
+ set fd [open ../Plugins/$d/$d.pro r]
+ set data [read $fd]
+ close $fd
+
+ set ts "${p}_$lang.ts"
+ if {$op == "add"} {
+ set data [string map [list "TRANSLATIONS += " "TRANSLATIONS += $ts \\\n\t\t"] $data]
+ } else {
+ regsub -- "$ts\\s*(\\\\)?\n\\s*" $data "" data
+ }
+
+ set fd [open ../Plugins/$p/$p.pro w+]
+ puts $fd $data
+ close $fd
+
+ puts "Updated $d.pro"
+ }
+ }
+ default {
+ usage
+ }
+}
+
diff --git a/SQLiteStudio3/sqlitestudio/main.cpp b/SQLiteStudio3/sqlitestudio/main.cpp
index b2d7b94..a5f297b 100644
--- a/SQLiteStudio3/sqlitestudio/main.cpp
+++ b/SQLiteStudio3/sqlitestudio/main.cpp
@@ -22,6 +22,8 @@
#include "coreSQLiteStudio_global.h"
#include "log.h"
#include "qio.h"
+#include "translations.h"
+#include "dialogs/languagedialog.h"
#include "services/pluginmanager.h"
#include <QCommandLineParser>
#include <QCommandLineOption>
@@ -46,7 +48,7 @@ QString uiHandleCmdLineArgs()
QCommandLineOption lemonDebugOption("debug-lemon", QObject::tr("Enables Lemon parser debug messages for SQL code assistant."));
QCommandLineOption sqlDebugOption("debug-sql", QObject::tr("Enables debugging of every single SQL query being sent to any database."));
QCommandLineOption sqlDebugDbNameOption("debug-sql-db", QObject::tr("Limits SQL query messages to only the given <database>."), QObject::tr("database"));
- QCommandLineOption listPluginsOption("list-plugins", QObject::tr("Lists plugins installed in the SQLiteStudio end exists."));
+ QCommandLineOption listPluginsOption("list-plugins", QObject::tr("Lists plugins installed in the SQLiteStudio and quits."));
parser.addOption(debugOption);
parser.addOption(debugStdOutOption);
parser.addOption(lemonDebugOption);
@@ -104,6 +106,7 @@ int main(int argc, char *argv[])
SqlQueryModelColumn::initMeta();
SqlQueryModel::staticInit();
+ SQLITESTUDIO->setInitialTranslationFiles({"coreSQLiteStudio", "guiSQLiteStudio", "sqlitestudio"});
SQLITESTUDIO->init(a.arguments(), true);
IconManager::getInstance()->init();
DbTree::staticInit();
@@ -130,6 +133,21 @@ int main(int argc, char *argv[])
IconManager::getInstance()->rescanResources();
+ if (!CFG_UI.General.LanguageAsked.get())
+ {
+ CFG_UI.General.LanguageAsked.set(true);
+ QMap<QString, QString> langs = getAvailableLanguages();
+
+ LanguageDialog dialog;
+ dialog.setLanguages(langs);
+ dialog.setSelectedLang(CFG_CORE.General.Language.getDefultValue().toString());
+ if (dialog.exec() == QDialog::Accepted)
+ CFG_CORE.General.Language.set(dialog.getSelectedLang());
+
+ QProcess::startDetached(a.applicationFilePath(), QStringList());
+ return 0;
+ }
+
MainWindow::getInstance()->restoreSession();
MainWindow::getInstance()->show();
diff --git a/SQLiteStudio3/sqlitestudio/sqlitestudio.pro b/SQLiteStudio3/sqlitestudio/sqlitestudio.pro
index 3293122..d1528aa 100644
--- a/SQLiteStudio3/sqlitestudio/sqlitestudio.pro
+++ b/SQLiteStudio3/sqlitestudio/sqlitestudio.pro
@@ -1,51 +1,56 @@
-#-------------------------------------------------
-#
-# Project created by QtCreator 2014-09-06T00:39:26
-#
-#-------------------------------------------------
-
-QT += core gui
-
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-
-include($$PWD/../dirs.pri)
-include($$PWD/../utils.pri)
-
-OBJECTS_DIR = $$OBJECTS_DIR/sqlitestudio
-MOC_DIR = $$MOC_DIR/sqlitestudio
-UI_DIR = $$UI_DIR/sqlitestudio
-
-linux: {
- TARGET = sqlitestudio
-}
-!linux: {
- TARGET = SQLiteStudio
-}
-TEMPLATE = app
-
-CONFIG += c++11
-QMAKE_CXXFLAGS += -pedantic
-linux|portable {
- QMAKE_LFLAGS += -Wl,-rpath,./lib
-}
-
-LIBS += -lcoreSQLiteStudio -lguiSQLiteStudio
-
-SOURCES += main.cpp
-
-win32: {
- RC_FILE = windows.rc
-}
-
-macx: {
- ICON = ../guiSQLiteStudio/img/sqlitestudio.icns
-}
-
-OTHER_FILES += \
- windows.rc \
- SQLiteStudio.exe.manifest
-
-unix: {
- target.path = $$BINDIR
- INSTALLS += target
-}
+#-------------------------------------------------
+#
+# Project created by QtCreator 2014-09-06T00:39:26
+#
+#-------------------------------------------------
+
+QT += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+include($$PWD/../dirs.pri)
+include($$PWD/../utils.pri)
+
+OBJECTS_DIR = $$OBJECTS_DIR/sqlitestudio
+MOC_DIR = $$MOC_DIR/sqlitestudio
+UI_DIR = $$UI_DIR/sqlitestudio
+
+linux: {
+ TARGET = sqlitestudio
+}
+!linux: {
+ TARGET = SQLiteStudio
+}
+TEMPLATE = app
+
+CONFIG += c++11
+QMAKE_CXXFLAGS += -pedantic
+linux|portable {
+ QMAKE_LFLAGS += -Wl,-rpath,./lib
+}
+
+LIBS += -lcoreSQLiteStudio -lguiSQLiteStudio
+
+SOURCES += main.cpp
+
+TRANSLATIONS += translations/sqlitestudio_pl.ts
+
+win32: {
+ RC_FILE = windows.rc
+}
+
+macx: {
+ ICON = ../guiSQLiteStudio/img/sqlitestudio.icns
+}
+
+OTHER_FILES += \
+ windows.rc \
+ SQLiteStudio.exe.manifest
+
+unix: {
+ target.path = $$BINDIR
+ INSTALLS += target
+}
+
+RESOURCES += \
+ sqlitestudio.qrc
diff --git a/SQLiteStudio3/sqlitestudio/sqlitestudio.qrc b/SQLiteStudio3/sqlitestudio/sqlitestudio.qrc
new file mode 100644
index 0000000..5cc74d2
--- /dev/null
+++ b/SQLiteStudio3/sqlitestudio/sqlitestudio.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/msg">
+ <file>translations/sqlitestudio_pl.qm</file>
+ </qresource>
+</RCC>
diff --git a/SQLiteStudio3/sqlitestudio/translations/sqlitestudio_pl.qm b/SQLiteStudio3/sqlitestudio/translations/sqlitestudio_pl.qm
new file mode 100644
index 0000000..610ec3f
--- /dev/null
+++ b/SQLiteStudio3/sqlitestudio/translations/sqlitestudio_pl.qm
Binary files differ
diff --git a/SQLiteStudio3/sqlitestudio/translations/sqlitestudio_pl.ts b/SQLiteStudio3/sqlitestudio/translations/sqlitestudio_pl.ts
new file mode 100644
index 0000000..cc2f9ca
--- /dev/null
+++ b/SQLiteStudio3/sqlitestudio/translations/sqlitestudio_pl.ts
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>QObject</name>
+ <message>
+ <source>GUI interface to SQLiteStudio, a SQLite manager.</source>
+ <translation>Interfejs graficzny dla SQLiteStudio, menadżera SQLite.</translation>
+ </message>
+ <message>
+ <source>Enables debug messages in console (accessible with F12).</source>
+ <translation>Włącza wiadomości debugujące w konsoli (dostępnej przez F12).</translation>
+ </message>
+ <message>
+ <source>Redirects debug messages into standard output (forces debug mode).</source>
+ <translation>Przekierowuje wiadomości debugujące na standardowe wyjście (wymusza tryb debugujący).</translation>
+ </message>
+ <message>
+ <source>Enables Lemon parser debug messages for SQL code assistant.</source>
+ <translation>Włącza wiadomości debugujące analizatora Lemon dla asystenta kodu SQL.</translation>
+ </message>
+ <message>
+ <source>Enables debugging of every single SQL query being sent to any database.</source>
+ <translation>Włacza debugowanie każdego pojedynczego zapytania SQL, wykonywanego na dowolnej bazie danych.</translation>
+ </message>
+ <message>
+ <source>Limits SQL query messages to only the given &lt;database&gt;.</source>
+ <translation>Ogranicze wiadomości zapytań SQL do podanej &lt;bazy danych&gt;.</translation>
+ </message>
+ <message>
+ <source>database</source>
+ <translation>baza danych</translation>
+ </message>
+ <message>
+ <source>file</source>
+ <translation>plik</translation>
+ </message>
+ <message>
+ <source>Database file to open</source>
+ <translation>Baza danych do otwarcia</translation>
+ </message>
+ <message>
+ <source>Error</source>
+ <translation>Błąd</translation>
+ </message>
+ <message>
+ <source>Lists plugins installed in the SQLiteStudio and quits.</source>
+ <translation>Wypisuje listę zainstalowanych w SQLiteStudio wtyczek i wychodzi.</translation>
+ </message>
+</context>
+</TS>
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandadd.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandadd.h
index ae09ee1..313be2d 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandadd.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandadd.h
@@ -5,6 +5,8 @@
class CliCommandAdd : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandcd.cpp b/SQLiteStudio3/sqlitestudiocli/commands/clicommandcd.cpp
index 0ca6cb6..14e91d5 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandcd.cpp
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandcd.cpp
@@ -14,7 +14,7 @@ void CliCommandCd::execute()
QString CliCommandCd::shortHelp() const
{
- return tr("changes current workind directory");
+ return tr("changes current working directory");
}
QString CliCommandCd::fullHelp() const
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandcd.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandcd.h
index 4cfabc9..44d5e23 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandcd.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandcd.h
@@ -5,6 +5,8 @@
class CliCommandCd : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandclose.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandclose.h
index 04fbbeb..40dcba6 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandclose.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandclose.h
@@ -5,6 +5,8 @@
class CliCommandClose : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddblist.cpp b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddblist.cpp
index cbc16b6..35f9c47 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddblist.cpp
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddblist.cpp
@@ -58,7 +58,7 @@ void CliCommandDbList::execute()
msg = pad(name, maxNameLength, ' ');
msg += "|";
- msg += pad((open ? tr("Open") : tr("Closed")), connStateLength, ' ');
+ msg += pad((open ? tr("Open", "CLI connection state column") : tr("Closed", "CLI connection state column")), connStateLength, ' ');
msg += "|";
msg += path;
println(msg);
@@ -74,9 +74,9 @@ QString CliCommandDbList::fullHelp() const
{
return tr(
"Prints list of databases registered in the SQLiteStudio. Each database on the list can be in open or closed state "
- "and .dblist tells you that. The current working database (aka default database) is also marked on the list with '*' at the start of its name. "
- "See help for %1 command to learn about the default database."
- ).arg(cmdName("use"));
+ "and %1 tells you that. The current working database (aka default database) is also marked on the list with '*' at the start of its name. "
+ "See help for %2 command to learn about the default database."
+ ).arg(cmdName("dblist"), cmdName("use"));
}
void CliCommandDbList::defineSyntax()
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddblist.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddblist.h
index ecbaa6f..ee5d73f 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddblist.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddblist.h
@@ -5,6 +5,8 @@
class CliCommandDbList : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.h
index ee52c30..46876df 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddesc.h
@@ -5,6 +5,8 @@
class CliCommandDesc : public CliCommand
{
+ Q_OBJECT
+
public:
CliCommandDesc();
void execute();
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddir.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddir.h
index 8aa5ccc..150b85d 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommanddir.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommanddir.h
@@ -5,6 +5,8 @@
class CliCommandDir : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandexit.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandexit.h
index dc061bb..7b63e09 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandexit.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandexit.h
@@ -5,6 +5,8 @@
class CliCommandExit : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandhelp.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandhelp.h
index c12c588..4fff7a6 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandhelp.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandhelp.h
@@ -5,6 +5,8 @@
class CliCommandHelp : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandhistory.cpp b/SQLiteStudio3/sqlitestudiocli/commands/clicommandhistory.cpp
index fd2a494..7d08846 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandhistory.cpp
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandhistory.cpp
@@ -46,7 +46,7 @@ QString CliCommandHistory::fullHelp() const
"Every history entry is separated with a horizontal line, so multiline entries are easier to read.\n"
"\n"
"When the -c or --clear option is passed, then the history gets erased.\n"
- "When the -l or --limit option is passed, it sets the new history entries limit. It requires an additional argument"
+ "When the -l or --limit option is passed, it sets the new history entries limit. It requires an additional argument "
"saying how many entries do you want the history to be limited to.\n"
"Use -ql or --querylimit option to see the current limit value."
);
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandhistory.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandhistory.h
index f2e07d0..41c6f88 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandhistory.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandhistory.h
@@ -5,6 +5,8 @@
class CliCommandHistory : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandmode.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandmode.h
index 2b087d3..30725f9 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandmode.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandmode.h
@@ -5,6 +5,8 @@
class CliCommandMode : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandnullvalue.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandnullvalue.h
index 4ac4699..1950ec0 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandnullvalue.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandnullvalue.h
@@ -5,6 +5,8 @@
class CliCommandNullValue : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.h
index e66f574..cd76158 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandopen.h
@@ -5,6 +5,8 @@
class CliCommandOpen : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandpwd.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandpwd.h
index 3568ce1..55afe48 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandpwd.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandpwd.h
@@ -5,6 +5,8 @@
class CliCommandPwd : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandremove.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandremove.h
index f4b5402..7ecd7b5 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandremove.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandremove.h
@@ -5,6 +5,8 @@
class CliCommandRemove : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandtables.cpp b/SQLiteStudio3/sqlitestudiocli/commands/clicommandtables.cpp
index 9a6b325..f5a9708 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandtables.cpp
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandtables.cpp
@@ -12,7 +12,7 @@ void CliCommandTables::execute()
db = DBLIST->getByName(syntax.getArgument(DB_NAME));
if (!db)
{
- println(tr("No such database: %1. Use .dblist to see list of known databases.").arg(syntax.getArgument(DB_NAME)));
+ println(tr("No such database: %1. Use %2 to see list of known databases.").arg(syntax.getArgument(DB_NAME), cmdName("dblist")));
return;
}
}
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandtables.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandtables.h
index 68ae314..cc4d908 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandtables.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandtables.h
@@ -5,6 +5,8 @@
class CliCommandTables : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommandtree.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommandtree.h
index 815d781..3085593 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommandtree.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommandtree.h
@@ -7,6 +7,8 @@
class CliCommandTree : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/commands/clicommanduse.h b/SQLiteStudio3/sqlitestudiocli/commands/clicommanduse.h
index 9a8f280..4211256 100644
--- a/SQLiteStudio3/sqlitestudiocli/commands/clicommanduse.h
+++ b/SQLiteStudio3/sqlitestudiocli/commands/clicommanduse.h
@@ -5,6 +5,8 @@
class CliCommandUse : public CliCommand
{
+ Q_OBJECT
+
public:
void execute();
QString shortHelp() const;
diff --git a/SQLiteStudio3/sqlitestudiocli/main.cpp b/SQLiteStudio3/sqlitestudiocli/main.cpp
index 118e3f6..cd10de3 100644
--- a/SQLiteStudio3/sqlitestudiocli/main.cpp
+++ b/SQLiteStudio3/sqlitestudiocli/main.cpp
@@ -25,7 +25,7 @@ QString cliHandleCmdLineArgs()
QCommandLineOption debugOption({"d", "debug"}, QObject::tr("Enables debug messages on standard error output."));
QCommandLineOption lemonDebugOption("debug-lemon", QObject::tr("Enables Lemon parser debug messages for SQL code assistant."));
- QCommandLineOption listPluginsOption("list-plugins", QObject::tr("Lists plugins installed in the SQLiteStudio end exists."));
+ QCommandLineOption listPluginsOption("list-plugins", QObject::tr("Lists plugins installed in the SQLiteStudio and quits."));
parser.addOption(debugOption);
parser.addOption(lemonDebugOption);
parser.addOption(listPluginsOption);
@@ -67,6 +67,7 @@ int main(int argc, char *argv[])
CliResultsDisplay::staticInit();
initCliUtils();
+ SQLITESTUDIO->setInitialTranslationFiles({"coreSQLiteStudio", "sqlitestudiocli"});
SQLITESTUDIO->init(a.arguments(), false);
SQLITESTUDIO->initPlugins();
diff --git a/SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.pro b/SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.pro
index 2fcf30a..09cb2b9 100644
--- a/SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.pro
+++ b/SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.pro
@@ -1,101 +1,106 @@
-#-------------------------------------------------
-#
-# Project created by QtCreator 2013-02-28T23:21:43
-#
-#-------------------------------------------------
-
-include($$PWD/../dirs.pri)
-
-OBJECTS_DIR = $$OBJECTS_DIR/sqlitestudiocli
-MOC_DIR = $$MOC_DIR/sqlitestudiocli
-UI_DIR = $$UI_DIR/sqlitestudiocli
-
-QT += core
-QT -= gui
-
-TARGET = sqlitestudiocli
-CONFIG += console
-CONFIG -= app_bundle
-
-TEMPLATE = app
-
-CONFIG += c++11
-QMAKE_CXXFLAGS += -pedantic
-linux|portable {
- QMAKE_LFLAGS += -Wl,-rpath,./lib
-}
-
-SOURCES += main.cpp \
- cli.cpp \
- commands/clicommand.cpp \
- commands/clicommandfactory.cpp \
- commands/clicommandadd.cpp \
- commands/clicommandremove.cpp \
- commands/clicommandexit.cpp \
- commands/clicommanddblist.cpp \
- commands/clicommanduse.cpp \
- commands/clicommandopen.cpp \
- commands/clicommandclose.cpp \
- commands/clicommandsql.cpp \
- clicommandexecutor.cpp \
- cli_config.cpp \
- commands/clicommandhelp.cpp \
- cliutils.cpp \
- commands/clicommandtables.cpp \
- climsghandler.cpp \
- commands/clicommandmode.cpp \
- commands/clicommandnullvalue.cpp \
- commands/clicommandhistory.cpp \
- commands/clicommanddir.cpp \
- commands/clicommandpwd.cpp \
- commands/clicommandcd.cpp \
- clicommandsyntax.cpp \
- commands/clicommandtree.cpp \
- clicompleter.cpp \
- commands/clicommanddesc.cpp
-
-LIBS += -lcoreSQLiteStudio
-
-win32: {
- INCLUDEPATH += $$PWD/../../../include
- LIBS += -L$$PWD/../../../lib -ledit_static
-}
-
-unix: {
- LIBS += -lreadline -ltermcap
-}
-
-HEADERS += \
- cli.h \
- commands/clicommand.h \
- commands/clicommandfactory.h \
- commands/clicommandadd.h \
- commands/clicommandremove.h \
- commands/clicommandexit.h \
- commands/clicommanddblist.h \
- commands/clicommanduse.h \
- commands/clicommandopen.h \
- commands/clicommandclose.h \
- commands/clicommandsql.h \
- cli_config.h \
- clicommandexecutor.h \
- commands/clicommandhelp.h \
- cliutils.h \
- commands/clicommandtables.h \
- climsghandler.h \
- commands/clicommandmode.h \
- commands/clicommandnullvalue.h \
- commands/clicommandhistory.h \
- commands/clicommanddir.h \
- commands/clicommandpwd.h \
- commands/clicommandcd.h \
- clicommandsyntax.h \
- commands/clicommandtree.h \
- clicompleter.h \
- commands/clicommanddesc.h
-
-unix: {
- target.path = $$BINDIR
- INSTALLS += target
-}
-
+#-------------------------------------------------
+#
+# Project created by QtCreator 2013-02-28T23:21:43
+#
+#-------------------------------------------------
+
+include($$PWD/../dirs.pri)
+
+OBJECTS_DIR = $$OBJECTS_DIR/sqlitestudiocli
+MOC_DIR = $$MOC_DIR/sqlitestudiocli
+UI_DIR = $$UI_DIR/sqlitestudiocli
+
+QT += core
+QT -= gui
+
+TARGET = sqlitestudiocli
+CONFIG += console
+CONFIG -= app_bundle
+
+TEMPLATE = app
+
+CONFIG += c++11
+QMAKE_CXXFLAGS += -pedantic
+linux|portable {
+ QMAKE_LFLAGS += -Wl,-rpath,./lib
+}
+
+TRANSLATIONS += translations/sqlitestudiocli_pl.ts
+
+SOURCES += main.cpp \
+ cli.cpp \
+ commands/clicommand.cpp \
+ commands/clicommandfactory.cpp \
+ commands/clicommandadd.cpp \
+ commands/clicommandremove.cpp \
+ commands/clicommandexit.cpp \
+ commands/clicommanddblist.cpp \
+ commands/clicommanduse.cpp \
+ commands/clicommandopen.cpp \
+ commands/clicommandclose.cpp \
+ commands/clicommandsql.cpp \
+ clicommandexecutor.cpp \
+ cli_config.cpp \
+ commands/clicommandhelp.cpp \
+ cliutils.cpp \
+ commands/clicommandtables.cpp \
+ climsghandler.cpp \
+ commands/clicommandmode.cpp \
+ commands/clicommandnullvalue.cpp \
+ commands/clicommandhistory.cpp \
+ commands/clicommanddir.cpp \
+ commands/clicommandpwd.cpp \
+ commands/clicommandcd.cpp \
+ clicommandsyntax.cpp \
+ commands/clicommandtree.cpp \
+ clicompleter.cpp \
+ commands/clicommanddesc.cpp
+
+LIBS += -lcoreSQLiteStudio
+
+win32: {
+ INCLUDEPATH += $$PWD/../../../include
+ LIBS += -L$$PWD/../../../lib -ledit_static
+}
+
+unix: {
+ LIBS += -lreadline -ltermcap
+}
+
+HEADERS += \
+ cli.h \
+ commands/clicommand.h \
+ commands/clicommandfactory.h \
+ commands/clicommandadd.h \
+ commands/clicommandremove.h \
+ commands/clicommandexit.h \
+ commands/clicommanddblist.h \
+ commands/clicommanduse.h \
+ commands/clicommandopen.h \
+ commands/clicommandclose.h \
+ commands/clicommandsql.h \
+ cli_config.h \
+ clicommandexecutor.h \
+ commands/clicommandhelp.h \
+ cliutils.h \
+ commands/clicommandtables.h \
+ climsghandler.h \
+ commands/clicommandmode.h \
+ commands/clicommandnullvalue.h \
+ commands/clicommandhistory.h \
+ commands/clicommanddir.h \
+ commands/clicommandpwd.h \
+ commands/clicommandcd.h \
+ clicommandsyntax.h \
+ commands/clicommandtree.h \
+ clicompleter.h \
+ commands/clicommanddesc.h
+
+unix: {
+ target.path = $$BINDIR
+ INSTALLS += target
+}
+
+RESOURCES += \
+ sqlitestudiocli.qrc
+
diff --git a/SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.qrc b/SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.qrc
new file mode 100644
index 0000000..ac0cb93
--- /dev/null
+++ b/SQLiteStudio3/sqlitestudiocli/sqlitestudiocli.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/msg">
+ <file>translations/sqlitestudiocli_pl.qm</file>
+ </qresource>
+</RCC>
diff --git a/SQLiteStudio3/sqlitestudiocli/translations/sqlitestudiocli_pl.qm b/SQLiteStudio3/sqlitestudiocli/translations/sqlitestudiocli_pl.qm
new file mode 100644
index 0000000..b438a02
--- /dev/null
+++ b/SQLiteStudio3/sqlitestudiocli/translations/sqlitestudiocli_pl.qm
Binary files differ
diff --git a/SQLiteStudio3/sqlitestudiocli/translations/sqlitestudiocli_pl.ts b/SQLiteStudio3/sqlitestudiocli/translations/sqlitestudiocli_pl.ts
new file mode 100644
index 0000000..dda9aac
--- /dev/null
+++ b/SQLiteStudio3/sqlitestudiocli/translations/sqlitestudiocli_pl.ts
@@ -0,0 +1,642 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>CLI</name>
+ <message>
+ <source>Current database: %1</source>
+ <translation>Bieżąca baza danych: %1</translation>
+ </message>
+ <message>
+ <source>No current working database is set.</source>
+ <translation>Nie ustawiono bieżącej bazy danych.</translation>
+ </message>
+ <message>
+ <source>Type %1 for help</source>
+ <translation>Wpisz %1, aby uzyskać pomoc.</translation>
+ </message>
+ <message>
+ <source>Could not add database %1 to list.</source>
+ <translation>Nie udało się dodać bazy danych %1 do listy.</translation>
+ </message>
+ <message>
+ <source>closed</source>
+ <translation>zamknięta</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommand</name>
+ <message>
+ <source>Usage: %1%2</source>
+ <translation>Sposób użycia: %1%2</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandAdd</name>
+ <message>
+ <source>Could not add database %1 to list.</source>
+ <translation>Nie udało się dodać bazy danych %1 do listy.</translation>
+ </message>
+ <message>
+ <source>Database added: %1</source>
+ <translation>Baza danych dodana: %1</translation>
+ </message>
+ <message>
+ <source>adds new database to the list</source>
+ <translation>dodaje bazę danych do listy</translation>
+ </message>
+ <message>
+ <source>Adds given database pointed by &lt;path&gt; with given &lt;name&gt; to list the databases list. The &lt;name&gt; is just a symbolic name that you can later refer to. Just pick any unique name. For list of databases already on the list use %1 command.</source>
+ <translation>Dodaje bazę danych wskazaną przez &lt;ścieżkę&gt; z daną &lt;nazwą&gt; do listy baz danych. &lt;nazwa&gt; jest tylko symboliczną nazwą, do której możesz się potem odwoływać. Po prostu wybierz dowolną, unikalną nazwę. Aby wypisać listę baz danych, które są już na liście, użyj polecenia %1.</translation>
+ </message>
+ <message>
+ <source>name</source>
+ <comment>CLI command syntax</comment>
+ <translation>nazwa</translation>
+ </message>
+ <message>
+ <source>path</source>
+ <comment>CLI command syntax</comment>
+ <translation>ścieżka</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandCd</name>
+ <message>
+ <source>Changed directory to: %1</source>
+ <translation>Zmieniono katalog na: %1</translation>
+ </message>
+ <message>
+ <source>Could not change directory to: %1</source>
+ <translation>Nie udało się zmienić katalogu na: %1</translation>
+ </message>
+ <message>
+ <source>Very similar command to &apos;cd&apos; known from Unix systems and Windows. It requires a &lt;path&gt; argument to be passed, therefore calling %1 will always cause a change of the directory. To learn what&apos;s the current working directory use %2 command and to list contents of the current working directory use %3 command.</source>
+ <translation>Bardzo podobne polecenie do &apos;cd&apos; znanego z systemów Unixowych i Windowsa. Wymaga &lt;ścieżki&gt; jako argumentu, stąd wywołanie %1 zawsze spowoduje zmianę katalogu. Aby poznać jaki jest bieżący katalog, użyj polecenia %2, a żeby wypisać listę zawartości bieżącego katalogu użyj polecenia %3.</translation>
+ </message>
+ <message>
+ <source>path</source>
+ <comment>CLI command syntax</comment>
+ <translation>ścieżka</translation>
+ </message>
+ <message>
+ <source>changes current working directory</source>
+ <translation>zmienia bieżący katalog</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandClose</name>
+ <message>
+ <source>Cannot call %1 when no database is set to be current. Specify current database with %2 command or pass database name to %3.</source>
+ <translation>Nie można wywołać %1, gdy żadna z baz nie jest ustawiona jako bieżąca. Okreś bieżącą bazę używając polecenia %2, lub podaj nazwę bazy do %3.</translation>
+ </message>
+ <message>
+ <source>Connection to database %1 closed.</source>
+ <translation>Połączenie z bazą %1 zostało zamknięte.</translation>
+ </message>
+ <message>
+ <source>No such database: %1. Use %2 to see list of known databases.</source>
+ <translation>Nie znaleziono bazy danych: %1. Użyj %2 aby zonaczyć listę znanych baz danych.</translation>
+ </message>
+ <message>
+ <source>closes given (or current) database</source>
+ <translation>zamyka daną (lub bieżącą) bazę danych</translation>
+ </message>
+ <message>
+ <source>Closes database connection. If the database was already closed, nothing happens. If &lt;name&gt; is provided, it should be name of the database to close (as printed by %1 command). The the &lt;name&gt; is not provided, then current working database is closed (see help for %2 for details).</source>
+ <translation>Zamyka połączenie z bazą danych. Jeśli baza danych była już zamknięta, nic się nie stanie. Jeśli &lt;nazwa&gt; jest podana, to powinna ona być nazwą bazy danych do zamknięcia (wg. tego jak wyświetla ją polecenie %1). Gdy &lt;nazwa&gt; nie jest podana, to bieżąca baza danych zostanie zamknięta (więcej szczegółów w pomocy dla %2).</translation>
+ </message>
+ <message>
+ <source>name</source>
+ <comment>CLI command syntax</comment>
+ <translation>nazwa</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandDbList</name>
+ <message>
+ <source>No current working database defined.</source>
+ <translation>Nie określono bieżącej bazy danych.</translation>
+ </message>
+ <message>
+ <source>Databases:</source>
+ <translation>Bazy danych:</translation>
+ </message>
+ <message>
+ <source>Name</source>
+ <comment>CLI db name column</comment>
+ <translation>Nazwa</translation>
+ </message>
+ <message>
+ <source>Open</source>
+ <comment>CLI connection state column</comment>
+ <translation>Otwarta</translation>
+ </message>
+ <message>
+ <source>Closed</source>
+ <comment>CLI connection state column</comment>
+ <translation>Zamknięta</translation>
+ </message>
+ <message>
+ <source>Connection</source>
+ <comment>CLI connection state column</comment>
+ <translation>Połączenie</translation>
+ </message>
+ <message>
+ <source>Database file path</source>
+ <translation>Ścieżka do pliku bazy danych</translation>
+ </message>
+ <message>
+ <source>prints list of registered databases</source>
+ <translation>wypisuje listę zarejestrowanych baz danych</translation>
+ </message>
+ <message>
+ <source>Prints list of databases registered in the SQLiteStudio. Each database on the list can be in open or closed state and %1 tells you that. The current working database (aka default database) is also marked on the list with &apos;*&apos; at the start of its name. See help for %2 command to learn about the default database.</source>
+ <translation>Wypisuje listę zarejestrowanych w SQLiteStudio baz danych. Każda baza danych na liście może być otwarta, lub zamknięta i %1 o tym mówi. Bieżąca baza danych (nazywana również domyślną bazą danych) jest również zaznaczona na liście znakiem &apos;*&apos; na początku swojej nazwy. Zobacz pomoc dla polecenia %2, żeby dowiedzieć się więcej o domyślnej bazie danych.</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandDesc</name>
+ <message>
+ <source>shows details about the table</source>
+ <translation>pokazuje szczegóły o tabeli</translation>
+ </message>
+ <message>
+ <source>table</source>
+ <translation>tabela</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandDir</name>
+ <message>
+ <source>lists directories and files in current working directory</source>
+ <translation>wypisuje listę katalogów i plików w bieżącym katalogu</translation>
+ </message>
+ <message>
+ <source>This is very similar to &apos;dir&apos; command known from Windows and &apos;ls&apos; command from Unix systems.
+
+You can pass &lt;pattern&gt; with wildcard characters to filter output.</source>
+ <translation>To jest polecenie bardzo podobne do &apos;dir&apos; znanego z systemu Windows, oraz &apos;ls&apos; znanego z systemów Unixowych.
+
+Możesz podać &lt;wzorzec&gt; ze znakami maskującymi, aby filtrować wynik.</translation>
+ </message>
+ <message>
+ <source>pattern</source>
+ <translation>wzorzec</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandExit</name>
+ <message>
+ <source>quits the application</source>
+ <translation>zamyka aplikację</translation>
+ </message>
+ <message>
+ <source>Quits the application. Settings are stored in configuration file and will be restored on next startup.</source>
+ <translation>Zamyka aplikację. Ustawienia są zapisywane w pliku konfiguracyjnym i zostaną przywrócone przy następnym starcie.</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandHelp</name>
+ <message>
+ <source>shows this help message</source>
+ <translation>pokazuje tą treść pomocy</translation>
+ </message>
+ <message>
+ <source>Use %1 to learn about certain commands supported by the command line interface (CLI) of the SQLiteStudio.
+To see list of supported commands, type %2 without any arguments.
+
+When passing &lt;command&gt; name, you can skip special prefix character (&apos;%3&apos;).
+
+You can always execute any command with exactly single &apos;--help&apos; option to see help for that command. It&apos;s an alternative for typing: %1 &lt;command&gt;.</source>
+ <translation>Używaj %1 aby poznać poszczególne polecenia obsługiwane przez interfejs linii poleceń (CLI) SQLiteStudio.
+Aby zobaczyć listę obsługiwanych poleceń, wpisz %2 bez żadnych argumentów.
+
+Kiedy podaje się nazwę &lt;polecenia&gt;, można pominąć specjalny znak przedrostka (&apos;%3&apos;).
+
+Zawsze możesz wywołać dowolne polecenie z dokładnie jedną opcją &apos;--help&apos;, aby zobaczyć pomoc dla tego polecenia. Jest to alternatywa dla wpisywania: %1 &lt;polecenie&gt;.</translation>
+ </message>
+ <message>
+ <source>command</source>
+ <comment>CLI command syntax</comment>
+ <translation>polecenie</translation>
+ </message>
+ <message>
+ <source>No such command: %1</source>
+ <translation>Nie ma takiego polecenia: %1</translation>
+ </message>
+ <message>
+ <source>Type &apos;%1&apos; for list of available commands.</source>
+ <translation>Wpisz &apos;%1&apos; aby poznać listę dostępnych poleceń.</translation>
+ </message>
+ <message>
+ <source>Usage: %1%2</source>
+ <translation>Sposób użycia: %1%2</translation>
+ </message>
+ <message>
+ <source>Aliases: %1</source>
+ <translation>Aliasy: %1</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandHistory</name>
+ <message>
+ <source>Current history limit is set to: %1</source>
+ <translation>Bieżący limit historii jest ustawiony na: %1</translation>
+ </message>
+ <message>
+ <source>prints history or erases it</source>
+ <translation>wyświetla historię lub ją kasuje</translation>
+ </message>
+ <message>
+ <source>number</source>
+ <translation>liczba</translation>
+ </message>
+ <message>
+ <source>Console history erased.</source>
+ <translation>Historia konsoli skasowana.</translation>
+ </message>
+ <message>
+ <source>Invalid number: %1</source>
+ <translation>Niepoprawna liczba: %1</translation>
+ </message>
+ <message>
+ <source>History limit set to %1</source>
+ <translation>Limit historii ustawiono na %1</translation>
+ </message>
+ <message>
+ <source>When no argument was passed, this command prints command line history. Every history entry is separated with a horizontal line, so multiline entries are easier to read.
+
+When the -c or --clear option is passed, then the history gets erased.
+When the -l or --limit option is passed, it sets the new history entries limit. It requires an additional argument saying how many entries do you want the history to be limited to.
+Use -ql or --querylimit option to see the current limit value.</source>
+ <translation>Gdy nie poda się żadnego argumentu, to polecenie wyświetla historię linii poleceń. Każdy wpis w historii jest oddzielony linią poziomą, żeby łatwiej było czytać więcej wpisów.
+
+Kiedy poda się opcję -c lub --clear, to historia jest kasowana.
+Kiedy poda się opcję -l lub --limit, to ustawiany jest nowy limit na historii. Wymaga to podania dodatkowego argumentu, mówiącego o tym, ile ma być wpisów przechowywanych w historii.
+Użyj opcji -ql lub --querylimit, aby poznać aktualną wartość limitu.</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandMode</name>
+ <message>
+ <source>Current results printing mode: %1</source>
+ <translation>Aktualny tryb wyświetlania wyników: %1</translation>
+ </message>
+ <message>
+ <source>Invalid results printing mode: %1</source>
+ <translation>Niepoprawny tryb wyświetlania wyników: %1</translation>
+ </message>
+ <message>
+ <source>New results printing mode: %1</source>
+ <translation>Nowy tryb wyświetlania wyników: %1</translation>
+ </message>
+ <message>
+ <source>tells or changes the query results format</source>
+ <translation>wyświetla lub zmienia format wyników zapytania</translation>
+ </message>
+ <message>
+ <source>When called without argument, tells the current output format for a query results. When the &lt;mode&gt; is passed, the mode is changed to the given one. Supported modes are:
+- CLASSIC - columns are separated by a comma, not aligned,
+- FIXED - columns have equal and fixed width, they always fit into terminal window width, but the data in columns can be cut off,
+- COLUMNS - like FIXED, but smarter (do not use with huge result sets, see details below),
+- ROW - each column from the row is displayed in new line, so the full data is displayed.
+
+The CLASSIC mode is recommended if you want to see all the data, but you don&apos;t want to waste lines for each column. Each row will display full data for every column, but this also means, that columns will not be aligned to each other in next rows. The CLASSIC mode also doesn&apos;t respect the width of your terminal (console) window, so if values in columns are wider than the window, the row will be continued in next lines.
+
+The FIXED mode is recommended if you want a readable output and you don&apos;t care about long data values. Columns will be aligned, making the output a nice table. The width of columns is calculated from width of the console window and a number of columns.
+
+The COLUMNS mode is similar to FIXED mode, except it tries to be smart and make columns with shorter values more thin, while columns with longer values get more space. First to shrink are columns with longest headers (so the header names are to be cut off as first), then columns with the longest values are shrinked, up to the moment when all columns fit into terminal window.
+ATTENTION! The COLUMNS mode reads all the results from the query at once in order to evaluate column widhts, therefore it is dangerous to use this mode when working with huge result sets. Keep in mind that this mode will load entire result set into memory.
+
+The ROW mode is recommended if you need to see whole values and you don&apos;t expect many rows to be displayed, because this mode displays a line of output per each column, so you&apos;ll get 10 lines for single row with 10 columns, then if you have 10 of such rows, you will get 100 lines of output (+1 extra line per each row, to separate rows from each other).</source>
+ <translation>Jeśli nie poda się argumentu, wyświetla aktualny format wyjściowy dla wyników zapytania. Kiedy poda się &lt;tryb&gt;, to jest on zmieniany na podany tryb.
+Obsługiwane tryby to:
+- CLASSIC - kolumny są oddzielone przecinkiem, bez wyrównania,
+- FIXED - kolumny mają równą i ustaloną szerokość, zawsze mieszczą się w oknie terminala, ale dane w kolumnach mogą być ucięte,
+- COLUMNS - taki jak FIXED, ale sprytniejszy (nie używać z ogromnymi wynikami zapytań, szczegóły poniżej),
+- ROW - każda kolumna w wierszu jest wyświetlana w osobnej linii, więc pełne dane są wyświetlane.
+
+Tryb CLASSIC jest zalecane, jeśli chcesz widzieć wszystkie dane, ale nie chcesz marnować linii na każdą kolumnę. Każdy wiersz wyświetli całe dane dla każdej kolumny, ale oznacza to również, że kolumny nie będą wyrównane do siebie względem kolejnych wierszy. Tryb CLASSIC również nie patrzy na szerokość okna terminala (konsoli), więc jeśli wartości w kolumnach są szersze niż okno, to wiersz będzie kontynuowany w następnej linii.
+
+Tryb FIXED jest zalecany, jeśli chcesz czytelny wynik i nie przejmujesz się zbyt długimi danymi. Kolumny będą wyrównane, otrzymując ładną tabelę. Szerokość kolumn jest obliczana dzieląc szerokość okna konsoli przez liczbę kolumn.
+
+Tryb COLUMNS jest podobny do trybu FIXED, z tą różnicą, że póbuje być sprytny i szerokość kolumn zawierających krótsze dane jest mniejsza, niż kolumn z dłuższymi danymi. Pierwsze w kolejności odchudzane są kolumny z najdłuższymi nagłówkami (więc nazwy nagłówków są pierwsze w kolejce do obcięcia), następnie kolumny z najdłuższymi wartościami, aż do momentu, kiedy wszystkie kolumny mieszczą się w oknie terminala.
+UWAGA! Tryb COLUMNS od razu odczytuje wszystkie dane z wyników zapytania, aby określić szerokość kolumn, więc jest to niebezpieczne, gdy pracuje się z ogromnymi zestawami danych w wynikach. Miej na uwadze, że ten tryb wczyta wszystkie dane do pamięci na raz.
+
+Tryb ROW jest zalecane, kiedy musisz widzieć całe wartości i nie spodziewasz się wielu wierszy do wyświetlenia, ponieważ ten tryb wyświetla linię dla każdej kolumny, więc dostaniesz 10 linii dla jednego wiersza z 10 kolumnami, następnie będziesz miał 10 takich wierszy, więc skończysz ze 100 liniami wyjścia (+1 dodatkowa dla każdego wiersza danych, aby oddzielić je od siebie).</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandNullValue</name>
+ <message>
+ <source>Current NULL representation string: %1</source>
+ <translation>Aktualny łańcuch reprezentujący wartość NULL: %1</translation>
+ </message>
+ <message>
+ <source>tells or changes the NULL representation string</source>
+ <translation>wyświetla lub zmienia łąńcuch reprezentujący wartość NULL</translation>
+ </message>
+ <message>
+ <source>If no argument was passed, it tells what&apos;s the current NULL value representation (that is - what is printed in place of NULL values in query results). If the argument is given, then it&apos;s used as a new string to be used for NULL representation.</source>
+ <translation>Jeśli nie poda się argumentu, to wyświetlana jest aktualna reprezentacja wartości NULL (to znaczy to, co jest wyświetlane zamiast wartości NULL w wynikach zapytań). Jeśli podano argument, to staje się on nową reprezentacją wartości NULL.</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandOpen</name>
+ <message>
+ <source>Cannot call %1 when no database is set to be current. Specify current database with %2 command or pass database name to %3.</source>
+ <translation>Nie można wywołać %1, gdy żadna z baz nie jest ustawiona jako bieżąca. Okreś bieżącą bazę używając polecenia %2, lub podaj nazwę bazy do %3.</translation>
+ </message>
+ <message>
+ <source>Could not add database %1 to list.</source>
+ <translation>Nie udało się dodać bazy danych %1 do listy.</translation>
+ </message>
+ <message>
+ <source>File %1 doesn&apos;t exist in %2. Cannot open inexisting database with %3 command. To create a new database, use %4 command.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>Database %1 has been open and set as the current working database.</source>
+ <translation></translation>
+ </message>
+ <message>
+ <source>opens database connection</source>
+ <translation>otwiera połączenie z bazą</translation>
+ </message>
+ <message>
+ <source>Opens connection to the database. If no additional argument was passed, then the connection is open to the current default database (see help for %1 for details). However if an argument was passed, it can be either &lt;name&gt; of the registered database to open, or it can be &lt;path&gt; to the database file to open. In the second case, the &lt;path&gt; gets registered on the list with a generated name, but only for the period of current application session. After restarting application such database is not restored on the list.</source>
+ <translation>Otwiera połączenie do bazy. Jeśli nie podano dodatkowych argumentów, to połączenie jest nawiązywane z domyślną bazą (więcej szczegółów w pomocy dla polecenia %1). Natomiast gdy poda się argument, to może to być albo &lt;nazwa&gt; zarejestrowanej bazy danych do otwarcia, lub może to być &lt;ścieżka&gt; do pliku bazy danych do otwarcia. W drugim przypadku &lt;ścieżka&gt; zostanie zarejestrowana na liście baz danych z wygenerowaną nazwą, ale tylko na czas aktualnej sesji aplikacji. Po restarcie aplikacji taka baza danych nie jest przywracana na listę.</translation>
+ </message>
+ <message>
+ <source>name</source>
+ <comment>CLI command syntax</comment>
+ <translation>nazwa</translation>
+ </message>
+ <message>
+ <source>path</source>
+ <comment>CLI command syntax</comment>
+ <translation>ścieżka</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandPwd</name>
+ <message>
+ <source>prints the current working directory</source>
+ <translation>wypisuje bieżący katalog</translation>
+ </message>
+ <message>
+ <source>This is the same as &apos;pwd&apos; command on Unix systems and &apos;cd&apos; command without arguments on Windows. It prints current working directory. You can change the current working directory with %1 command and you can also list contents of the current working directory with %2 command.</source>
+ <translation>Jest to polecenie podobne do &apos;pwd&apos; znanego z sytemów Unixowych oraz polecenia &apos;cd&apos; bez argumentów dla systemów Windows. Wypisuje bieżący katalog. Możesz zmienić bieżący katalog za pomocą polecenia %1, oraz możesz wypisać zawartość bieżącego katalogu za pomocą polecenia %2.</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandRemove</name>
+ <message>
+ <source>No such database: %1</source>
+ <translation>Nie ma takiej bazy danych: %1</translation>
+ </message>
+ <message>
+ <source>Database removed: %1</source>
+ <translation>Baza danych usunięta: %1</translation>
+ </message>
+ <message>
+ <source>New current database set:</source>
+ <translation>Nowa domyślna baza danych:</translation>
+ </message>
+ <message>
+ <source>removes database from the list</source>
+ <translation>usuwa bazę danych z listy</translation>
+ </message>
+ <message>
+ <source>Removes &lt;name&gt; database from the list of registered databases. If the database was not on the list (see %1 command), then error message is printed and nothing more happens.</source>
+ <translation>Usuwa &lt;nazwaną&gt; bazę danych z listy zarejestrowanych baz danych. Jeśli baza nie była na liście (patrz - polecenie %1), to zostanie wyświetlony komunikat błędu i nic się nie stanie.</translation>
+ </message>
+ <message>
+ <source>name</source>
+ <comment>CLI command syntax</comment>
+ <translation>nazwa</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandSql</name>
+ <message>
+ <source>No working database is set.
+Call %1 command to set working database.
+Call %2 to see list of all databases.</source>
+ <translation>Nie wybrano domyślnej bazy danych.
+Użyj polecenia %1, aby ustawić domyślną bazę danych.
+Użyj polecenie %2, aby wypisać listę wszystkich baz.</translation>
+ </message>
+ <message>
+ <source>Database is not open.</source>
+ <translation>Baz danych nie jest otwarta.</translation>
+ </message>
+ <message>
+ <source>executes SQL query</source>
+ <translation>wykonuje zapytanie SQL</translation>
+ </message>
+ <message>
+ <source>This command is executed every time you enter SQL query in command prompt. It executes the query on the current working database (see help for %1 for details). There&apos;s no sense in executing this command explicitly. Instead just type the SQL query in the command prompt, without any command prefixed.</source>
+ <translation>To polecenie jest wywoływane za każdym razem, kiedy wpisujesz zapytanie SQL w linii poleceń. Wykonuje ono zapytanie na bieżącej bazie danych (więcej szczegółów w pomocy dla %1). Nie ma sensu wywoływanie tego polecenia bezpośrednio. Zamiast tego po prostu wpisuj zapytania SQL w linii poleceń, bez polecenia poprzedzającego.</translation>
+ </message>
+ <message>
+ <source>sql</source>
+ <comment>CLI command syntax</comment>
+ <translation>sql</translation>
+ </message>
+ <message>
+ <source>Too many columns to display in %1 mode.</source>
+ <translation>Zbyt wiele kolumn, aby wyświetlić w trybie %1.</translation>
+ </message>
+ <message>
+ <source>Row %1</source>
+ <translation>Wiersz %1</translation>
+ </message>
+ <message>
+ <source>Query execution error: %1</source>
+ <translation>Błąd wykonywania zapytania: %1</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandTables</name>
+ <message>
+ <source>Cannot call %1 when no database is set to be current. Specify current database with %2 command or pass database name to %3.</source>
+ <translation>Nie można wywołać %1, gdy żadna z baz nie jest ustawiona jako bieżąca. Okreś bieżącą bazę używając polecenia %2, lub podaj nazwę bazy do %3.</translation>
+ </message>
+ <message>
+ <source>Database %1 is closed.</source>
+ <translation>Baza danych %1 jest zamknięta.</translation>
+ </message>
+ <message>
+ <source>Database</source>
+ <translation>Baza danych</translation>
+ </message>
+ <message>
+ <source>Table</source>
+ <translation>Tabela</translation>
+ </message>
+ <message>
+ <source>prints list of tables in the database</source>
+ <translation>wypisuje listę tabel w bazie danych</translation>
+ </message>
+ <message>
+ <source>Prints list of tables in given &lt;database&gt; or in the current working database. Note, that the &lt;database&gt; should be the name of the registered database (see %1). The output list includes all tables from any other databases attached to the queried database.
+When the -s option is given, then system tables are also listed.</source>
+ <translation>Wypisuje listę tabel w danej &lt;bazie danych&gt; lub w bieżącej bazie danych. &lt;baza danych&gt; powinna być nazwą zarejestrowanej bazy danych (patrz %1). List wyjściowa zawiera wszystkie tabele ze wszystkich baz dołączonych do odpytywanej bazy. Gdy podana jest opcja -s, to również systemowe tabele pojawią się na liście.</translation>
+ </message>
+ <message>
+ <source>database</source>
+ <comment>CLI command syntax</comment>
+ <translation>baza danych</translation>
+ </message>
+ <message>
+ <source>No such database: %1. Use %2 to see list of known databases.</source>
+ <translation>Nie znaleziono bazy danych: %1. Użyj %2 aby zonaczyć listę znanych baz danych.</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandTree</name>
+ <message>
+ <source>No current working database is selected. Use %1 to define one and then run %2.</source>
+ <translation>Nie wybrano bieżącej bazy danych. Użyj %1 aby taką zdefiniować i wtedy uruchom %2.</translation>
+ </message>
+ <message>
+ <source>Tables</source>
+ <translation>Tabele</translation>
+ </message>
+ <message>
+ <source>Views</source>
+ <translation>Widoki</translation>
+ </message>
+ <message>
+ <source>Columns</source>
+ <translation>Kolumny</translation>
+ </message>
+ <message>
+ <source>Indexes</source>
+ <translation>Indeksy</translation>
+ </message>
+ <message>
+ <source>Triggers</source>
+ <translation>Wyzwalacze</translation>
+ </message>
+ <message>
+ <source>prints all objects in the database as a tree</source>
+ <translation>wypisuje wszystkie obiekty w bazie danych w postaci drzewa</translation>
+ </message>
+ <message>
+ <source>Prints all objects (tables, indexes, triggers and views) that are in the database as a tree. The tree is very similar to the one that you can see in GUI client of the SQLiteStudio.
+When -c option is given, then also columns will be listed under each table.
+When -s option is given, then also system objects will be printed (sqlite_* tables, autoincrement indexes, etc).
+The database argument is optional and if provided, then only given database will be printed. This is not a registered database name, but instead it&apos;s an internal SQLite database name, like &apos;main&apos;, &apos;temp&apos;, or any attached database name. To print tree for other registered database, call %1 first to switch the working database, and then use %2 command.</source>
+ <translation>Wypisuje wszystkie obiekty (tabele, indeksy, wyzwalacze i widoki) znajdujące się w bazie danych w postaci drzewa. Drzewo to jest podobne do tego, które można zobaczyć w interfejsie graficznym SQLiteStudio.
+Kiedy poda się opcję -c, to pod każdą tabelą wylistowane zostaną kolumny.
+Kiedy poda się opcję -s, to również obiekty systemowe będą wypisane (tabele sqlite_*, indeksy autoinkrementacji, itp).
+Argument bazy danych jest opcjonalny i gdy się go poda, to tylko ta baza zostanie wypisana. Nie jest to nazwa zarejestrowanej nazwy, ale nazwa wewnętrzna bazy SQLite, jak np &apos;main&apos;, &apos;temp&apos;, lub dowolna nazwa dołączonej bazy. Aby wypisać drzewo dla innej zarejestrowanej bazy, użyj najpierw %1, aby zmienić bieżącą bazę danych i wtedy użyj polecenia %2.</translation>
+ </message>
+</context>
+<context>
+ <name>CliCommandUse</name>
+ <message>
+ <source>No current database selected.</source>
+ <translation>Bieżąca baza danych nie jest wybrana.</translation>
+ </message>
+ <message>
+ <source>Current database: %1</source>
+ <translation>Bieżąca baza danych: %1</translation>
+ </message>
+ <message>
+ <source>No such database: %1</source>
+ <translation>Nie ma takiej bazy danych: %1</translation>
+ </message>
+ <message>
+ <source>changes default working database</source>
+ <translation>zmienia domyślną bazę danych</translation>
+ </message>
+ <message>
+ <source>Changes current working database to &lt;name&gt;. If the &lt;name&gt; database is not registered in the application, then the error message is printed and no change is made.
+
+What is current working database?
+When you type a SQL query to be executed, it is executed on the default database, which is also known as the current working database. Most of database-related commands can also work using default database, if no database was provided in their arguments. The current database is always identified by command line prompt. The default database is always defined (unless there is no database on the list at all).
+
+The default database can be selected in various ways:
+- using %1 command,
+- by passing database file name to the application startup parameters,
+- by passing registered database name to the application startup parameters,
+- by restoring previously selected default database from saved configuration,
+- or when default database was not selected by any of the above, then first database from the registered databases list becomes the default one.</source>
+ <translation>Zmienia domyślną bazę danych na &lt;nazwaną&gt;. Jeśli &lt;nazwana&gt; baza danych nie jest zarejestrowana w aplikacji, to wyświetlony zostanie komunikat błędu i żadne zmiany nie nastąpią.
+
+Czym jest domyślna baza danych?
+Kiedy piszesz zapytanie SQL do wykonania, jest ono wykonywane na domyślnej bazie danych, która jest również nazywana bieżącą bazą danych. Większość poleceń związanych z bazą danych może pracować z użyciem domyślnej bazy danych, jeśli nie poda się bazy w ich argumentach. Bieżąca baza danych jest zawsze widoczna w wierszu poleceń. Domyślna baza danych jest zawsze zdefiniowana (z wyjątkiem, gdy nie ma żadnej bazy na liście).
+
+Domyślna baza danych może być wybrana na kilka sposobów:
+- używając polecenia %1,
+- podając plik bazy danych jako parametr do uruchomienia aplikacji,
+- podając nazwę zarejestrowanej bazy danych jako parametr do uruchomienia aplikacji,
+- lub gdy domyślna baza nie została wybrana przez żadne z powyższych, to pierwsza baza z listy zarejestrowanych baz stanie się domyślną.</translation>
+ </message>
+ <message>
+ <source>name</source>
+ <comment>CLI command syntax</comment>
+ <translation>nazwa</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <source>Insufficient number of arguments.</source>
+ <translation>Niewystarająca liczba arugmentów.</translation>
+ </message>
+ <message>
+ <source>Too many arguments.</source>
+ <translation>Za dużo argumentów.</translation>
+ </message>
+ <message>
+ <source>Invalid argument value: %1.
+Expected one of: %2</source>
+ <translation>Niepoprawna wartość argumentu: %1.
+Oczekiwano jednej z: %2</translation>
+ </message>
+ <message>
+ <source>Unknown option: %1</source>
+ <comment>CLI command syntax</comment>
+ <translation>Nieznana opcja: %1</translation>
+ </message>
+ <message>
+ <source>Option %1 requires an argument.</source>
+ <comment>CLI command syntax</comment>
+ <translation>Opcja %1 wymaga argumentu.</translation>
+ </message>
+ <message>
+ <source>string</source>
+ <comment>CLI command syntax</comment>
+ <translation>łańcuch</translation>
+ </message>
+ <message>
+ <source>Command line interface to SQLiteStudio, a SQLite manager.</source>
+ <translation>Interfejs linii poleceń dla SQLiteStudio, menażera SQLite.</translation>
+ </message>
+ <message>
+ <source>Enables debug messages on standard error output.</source>
+ <translation>Włącza wiadomości debugujące na standardowym wyjściu błędów.</translation>
+ </message>
+ <message>
+ <source>Enables Lemon parser debug messages for SQL code assistant.</source>
+ <translation>Włącza wiadomości debugujące analizatora Lemon dla asystenta kodu SQL.</translation>
+ </message>
+ <message>
+ <source>file</source>
+ <translation>plik</translation>
+ </message>
+ <message>
+ <source>Database file to open</source>
+ <translation>Baza danych do otwarcia</translation>
+ </message>
+ <message>
+ <source>Lists plugins installed in the SQLiteStudio and quits.</source>
+ <translation>Wypisuje listę zainstalowanych w SQLiteStudio wtyczek i wychodzi.</translation>
+ </message>
+</context>
+</TS>