Skip to content

Commit 5578096

Browse files
author
wonder
committed
added missing conversions from expression tree nodes to string.
git-svn-id: http://svn.osgeo.org/qgis/trunk@13950 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent ecf895b commit 5578096

File tree

1 file changed

+46
-9
lines changed

1 file changed

+46
-9
lines changed

src/core/qgssearchtreenode.cpp

+46-9
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,48 @@ QString QgsSearchTreeNode::makeSearchString()
190190
QString str;
191191
if ( mType == tOperator )
192192
{
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 )
195196
{
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 += "(";
196235
if ( mLeft )
197236
{
198237
str += mLeft->makeSearchString();
@@ -206,6 +245,7 @@ QString QgsSearchTreeNode::makeSearchString()
206245
case opMINUS: str += "-"; break;
207246
case opMUL: str += "*"; break;
208247
case opDIV: str += "/"; break;
248+
case opPOW: str += "^"; break;
209249

210250
case opEQ: str += " = "; break;
211251
case opNE: str += " != "; break;
@@ -214,10 +254,12 @@ QString QgsSearchTreeNode::makeSearchString()
214254
case opGE: str += " >= "; break;
215255
case opLE: str += " <= "; break;
216256

257+
case opISNULL: str += " IS NULL"; break;
258+
case opISNOTNULL: str += " IS NOT NULL"; break;
259+
217260
case opRegexp: str += " ~ "; break;
218261
case opLike: str += " LIKE "; break;
219262

220-
// TODO: other opeators / functions
221263
case opCONCAT: str += " || "; break;
222264

223265
default: str += " ? ";
@@ -227,13 +269,8 @@ QString QgsSearchTreeNode::makeSearchString()
227269
{
228270
str += mRight->makeSearchString();
229271
}
272+
str += ")";
230273
}
231-
else
232-
{
233-
str += "NOT ";
234-
str += mLeft->makeSearchString();
235-
}
236-
str += ")";
237274
}
238275
else if ( mType == tNumber )
239276
{

0 commit comments

Comments
 (0)