Skip to content

Commit e182280

Browse files
authoredMay 18, 2018
Merge pull request #6997 from pblottiere/executesql_bugfix
[executesql] Use parameter's name instead of description to save sql query
2 parents b4ec9a3 + 599799d commit e182280

File tree

1 file changed

+26
-12
lines changed

1 file changed

+26
-12
lines changed
 

‎python/plugins/processing/algs/qgis/ui/ExecuteSQLWidget.py

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,12 @@
2828
import os
2929

3030
from qgis.PyQt import uic
31-
from qgis.PyQt.QtWidgets import QTreeWidgetItem
32-
from qgis.PyQt.QtCore import Qt
3331

34-
from qgis.core import (QgsApplication,
35-
QgsExpressionContextScope,
32+
from qgis.core import (QgsExpressionContextScope,
3633
QgsProcessingParameterString,
3734
QgsProcessingParameterNumber,
3835
QgsExpression,
39-
QgsProcessingModelChildParameterSource,
40-
QgsProcessingParameterFile,
41-
QgsProcessingParameterField,
42-
QgsProcessingOutputString,
43-
QgsProcessingParameterExpression,
44-
QgsProcessingOutputFile)
36+
QgsProcessingModelChildParameterSource)
4537

4638
from qgis.gui import QgsFieldExpressionWidget
4739

@@ -82,7 +74,7 @@ def __init__(self, dialog):
8274

8375
def insert(self):
8476
if self.mExpressionWidget.currentText():
85-
exp = '[% {} %]'.format(self.mExpressionWidget.currentText())
77+
exp = '[%{}%]'.format(self.mExpressionWidget.currentText())
8678
self.mText.insertPlainText(exp)
8779

8880
def setValue(self, value):
@@ -95,6 +87,17 @@ def setValue(self, value):
9587
and v.source() == QgsProcessingModelChildParameterSource.ExpressionText:
9688
text = v.expressionText()
9789

90+
# replace parameter's name by expression (diverging after model save)
91+
names = QgsExpression.referencedVariables(text)
92+
93+
strings = self.dialog.getAvailableValuesOfType(
94+
[QgsProcessingParameterString, QgsProcessingParameterNumber], [])
95+
model_params = [(self.dialog.resolveValueDescription(s), s) for s in strings]
96+
97+
for k, v in model_params:
98+
if v.parameterName() in names:
99+
text = text.replace('[% @{} %]'.format(v.parameterName()), '[% @{} %]'.format(k))
100+
98101
self.mText.setPlainText(text)
99102

100103
def value(self):
@@ -113,8 +116,19 @@ def _expressionValues(self, text):
113116
model_params = [(self.dialog.resolveValueDescription(s), s) for s in strings]
114117

115118
variables = QgsExpression.referencedVariables(text)
119+
120+
# replace description by parameter's name (diverging after model save)
121+
descriptions = QgsExpression.referencedVariables(text)
122+
123+
for k, v in model_params:
124+
if k in descriptions:
125+
text = text.replace('[% @{} %]'.format(k), '[% @{} %]'.format(v.parameterName()))
126+
127+
src = QgsProcessingModelChildParameterSource.fromExpressionText(text)
128+
129+
# add parameters currently used by the expression
116130
expression_values = []
117-
expression_values.append(QgsProcessingModelChildParameterSource.fromExpressionText(text))
131+
expression_values.append(src)
118132

119133
for k, v in model_params:
120134
if k in variables:

0 commit comments

Comments
 (0)
Please sign in to comment.