@@ -190,9 +190,48 @@ QString QgsSearchTreeNode::makeSearchString()
190
190
QString str;
191
191
if ( mType == tOperator )
192
192
{
193
- str += " (" ;
194
- if ( mOp != opNOT )
193
+ if ( mOp == opSQRT || mOp == opSIN || mOp == opCOS || mOp == opTAN ||
194
+ mOp == opASIN || mOp == opACOS || mOp == opATAN ||
195
+ mOp == opTOINT || mOp == opTOREAL || mOp == opTOSTRING )
195
196
{
197
+ // functions
198
+ switch ( mOp )
199
+ {
200
+ case opSQRT: str += " sqrt" ; break ;
201
+ case opSIN: str += " sin" ; break ;
202
+ case opCOS: str += " cos" ; break ;
203
+ case opTAN: str += " tan" ; break ;
204
+ case opASIN: str += " asin" ; break ;
205
+ case opACOS: str += " acos" ; break ;
206
+ case opATAN: str += " atan" ; break ;
207
+ case opTOINT: str += " to int" ; break ;
208
+ case opTOREAL: str += " to real" ; break ;
209
+ case opTOSTRING: str += " to string" ; break ;
210
+ default : str += " ?" ;
211
+ }
212
+ // currently all functions take one parameter
213
+ str += QString ( " (%1)" ).arg ( mLeft ->makeSearchString () );
214
+ }
215
+ else if ( mOp == opLENGTH || mOp == opAREA || mOp == opROWNUM )
216
+ {
217
+ // special nullary opeators
218
+ switch ( mOp )
219
+ {
220
+ case opLENGTH: str += " $length" ; break ;
221
+ case opAREA: str += " $area" ; break ;
222
+ case opROWNUM: str += " $rownum" ; break ;
223
+ default : str += " ?" ;
224
+ }
225
+ }
226
+ else if ( mOp == opNOT )
227
+ {
228
+ // unary NOT operator
229
+ str += " (NOT " + mLeft ->makeSearchString () + " )" ;
230
+ }
231
+ else
232
+ {
233
+ // the rest of operator using infix notation
234
+ str += " (" ;
196
235
if ( mLeft )
197
236
{
198
237
str += mLeft ->makeSearchString ();
@@ -206,6 +245,7 @@ QString QgsSearchTreeNode::makeSearchString()
206
245
case opMINUS: str += " -" ; break ;
207
246
case opMUL: str += " *" ; break ;
208
247
case opDIV: str += " /" ; break ;
248
+ case opPOW: str += " ^" ; break ;
209
249
210
250
case opEQ: str += " = " ; break ;
211
251
case opNE: str += " != " ; break ;
@@ -214,10 +254,12 @@ QString QgsSearchTreeNode::makeSearchString()
214
254
case opGE: str += " >= " ; break ;
215
255
case opLE: str += " <= " ; break ;
216
256
257
+ case opISNULL: str += " IS NULL" ; break ;
258
+ case opISNOTNULL: str += " IS NOT NULL" ; break ;
259
+
217
260
case opRegexp: str += " ~ " ; break ;
218
261
case opLike: str += " LIKE " ; break ;
219
262
220
- // TODO: other opeators / functions
221
263
case opCONCAT: str += " || " ; break ;
222
264
223
265
default : str += " ? " ;
@@ -227,13 +269,8 @@ QString QgsSearchTreeNode::makeSearchString()
227
269
{
228
270
str += mRight ->makeSearchString ();
229
271
}
272
+ str += " )" ;
230
273
}
231
- else
232
- {
233
- str += " NOT " ;
234
- str += mLeft ->makeSearchString ();
235
- }
236
- str += " )" ;
237
274
}
238
275
else if ( mType == tNumber )
239
276
{
0 commit comments