Skip to content

Commit 4e20972

Browse files
authoredNov 19, 2018
Merge pull request #8260 from lbartoletti/dbmanager_add_save_sql_file
[FEATURE][needs-docs]Add buttons to load and save an external SQL file
2 parents 50e2b76 + 03d53fb commit 4e20972

File tree

2 files changed

+69
-5
lines changed

2 files changed

+69
-5
lines changed
 

‎python/plugins/db_manager/dlg_sql_window.py

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@
2626
from builtins import str
2727
from hashlib import md5
2828

29-
from qgis.PyQt.QtCore import Qt, pyqtSignal
30-
from qgis.PyQt.QtWidgets import QDialog, QWidget, QAction, QApplication, QInputDialog, QStyledItemDelegate, QTableWidgetItem
29+
import os
30+
31+
from qgis.PyQt.QtCore import Qt, pyqtSignal, QDir
32+
from qgis.PyQt.QtWidgets import QDialog, QWidget, QAction, QApplication, QInputDialog, QStyledItemDelegate, QTableWidgetItem, QFileDialog
3133
from qgis.PyQt.QtGui import QKeySequence, QCursor, QClipboard, QIcon, QStandardItemModel, QStandardItem
3234
from qgis.PyQt.Qsci import QsciAPIs
3335

@@ -116,6 +118,8 @@ def __init__(self, iface, db, parent=None):
116118
self.btnClear.clicked.connect(self.clearSql)
117119

118120
self.presetStore.clicked.connect(self.storePreset)
121+
self.presetSaveAsFile.clicked.connect(self.saveAsFilePreset)
122+
self.presetLoadFile.clicked.connect(self.loadFilePreset)
119123
self.presetDelete.clicked.connect(self.deletePreset)
120124
self.presetCombo.activated[str].connect(self.loadPreset)
121125
self.presetCombo.activated[str].connect(self.presetName.setText)
@@ -224,6 +228,47 @@ def storePreset(self):
224228
else:
225229
self.presetCombo.setCurrentIndex(index)
226230

231+
def saveAsFilePreset(self):
232+
settings = QgsSettings()
233+
lastDir = settings.value('DB_Manager/lastDirSQLFIle', "")
234+
235+
query = self._getSqlQuery()
236+
if query == "":
237+
return
238+
239+
filename, _ = QFileDialog.getSaveFileName(
240+
self,
241+
self.tr('Save SQL Query'),
242+
lastDir,
243+
self.tr("SQL File (*.sql, *.SQL)"))
244+
245+
if filename:
246+
if not filename.lower().endswith('.sql'):
247+
filename += ".sql"
248+
249+
with open(filename, 'w') as f:
250+
f.write(query)
251+
lastDir = os.path.dirname(filename)
252+
settings.setValue('DB_Manager/lastDirSQLFile', lastDir)
253+
254+
def loadFilePreset(self):
255+
settings = QgsSettings()
256+
lastDir = settings.value('DB_Manager/lastDirSQLFIle', "")
257+
258+
filename, _ = QFileDialog.getOpenFileName(
259+
self,
260+
self.tr("Load SQL Query"),
261+
lastDir,
262+
self.tr("SQL File (*.sql, *.SQL)"))
263+
264+
if filename:
265+
with open(filename, 'r') as f:
266+
self.editSql.clear()
267+
for line in f:
268+
self.editSql.insertText(line)
269+
lastDir = os.path.dirname(filename)
270+
settings.setValue('DB_Manager/lastDirSQLFile', lastDir)
271+
227272
def deletePreset(self):
228273
name = self.presetCombo.currentText()
229274
QgsProject.instance().removeEntry('DBManager', 'savedQueries/' + self.getQueryHash(name))

‎python/plugins/db_manager/ui/DlgSqlWindow.ui

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<property name="orientation">
2626
<enum>Qt::Vertical</enum>
2727
</property>
28-
<widget class="QWidget" name="">
28+
<widget class="QWidget" name="layoutWidget">
2929
<layout class="QVBoxLayout" name="verticalLayout_2">
3030
<item>
3131
<layout class="QHBoxLayout" name="horizontalLayout">
@@ -100,6 +100,26 @@
100100
</property>
101101
</widget>
102102
</item>
103+
<item>
104+
<widget class="QPushButton" name="presetLoadFile">
105+
<property name="toolTip">
106+
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Load SQL file&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
107+
</property>
108+
<property name="text">
109+
<string>Load File</string>
110+
</property>
111+
</widget>
112+
</item>
113+
<item>
114+
<widget class="QPushButton" name="presetSaveAsFile">
115+
<property name="toolTip">
116+
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Save the query as SQL file&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
117+
</property>
118+
<property name="text">
119+
<string>Save As File</string>
120+
</property>
121+
</widget>
122+
</item>
103123
</layout>
104124
</item>
105125
<item>
@@ -226,7 +246,7 @@
226246
</item>
227247
</layout>
228248
</widget>
229-
<widget class="QWidget" name="">
249+
<widget class="QWidget" name="layoutWidget">
230250
<layout class="QVBoxLayout" name="verticalLayout">
231251
<item>
232252
<widget class="QTableView" name="viewResult">
@@ -498,7 +518,6 @@ unique values</string>
498518
<tabstop>queryBuilderBtn</tabstop>
499519
<tabstop>presetCombo</tabstop>
500520
<tabstop>presetName</tabstop>
501-
<tabstop>presetStore</tabstop>
502521
<tabstop>presetDelete</tabstop>
503522
<tabstop>editSql</tabstop>
504523
<tabstop>btnExecute</tabstop>

0 commit comments

Comments
 (0)
Please sign in to comment.