@@ -375,40 +375,46 @@ typedef QgsExpression::FunctionDef FnDef;
375375FnDef QgsExpression::BuiltinFunctions[] =
376376{
377377 // math
378- FnDef ( " sqrt" , 1 , fcnSqrt ),
379- FnDef ( " sin" , 1 , fcnSin ),
380- FnDef ( " cos" , 1 , fcnCos ),
381- FnDef ( " tan" , 1 , fcnTan ),
382- FnDef ( " asin" , 1 , fcnAsin ),
383- FnDef ( " acos" , 1 , fcnAcos ),
384- FnDef ( " atan" , 1 , fcnAtan ),
385- FnDef ( " atan2" , 2 , fcnAtan2 ),
386- FnDef ( " exp" , 1 , fcnExp ),
387- FnDef ( " ln" , 1 , fcnLn ),
388- FnDef ( " log10" , 1 , fcnLog10 ),
389- FnDef ( " log" , 2 , fcnLog ),
378+ FnDef ( " sqrt" , 1 , fcnSqrt, " Math " ),
379+ FnDef ( " sin" , 1 , fcnSin, " Math " ),
380+ FnDef ( " cos" , 1 , fcnCos, " Math " ),
381+ FnDef ( " tan" , 1 , fcnTan, " Math " ),
382+ FnDef ( " asin" , 1 , fcnAsin, " Math " ),
383+ FnDef ( " acos" , 1 , fcnAcos, " Math " ),
384+ FnDef ( " atan" , 1 , fcnAtan, " Math " ),
385+ FnDef ( " atan2" , 2 , fcnAtan2, " Math " ),
386+ FnDef ( " exp" , 1 , fcnExp, " Math " ),
387+ FnDef ( " ln" , 1 , fcnLn, " Math " ),
388+ FnDef ( " log10" , 1 , fcnLog10, " Math " ),
389+ FnDef ( " log" , 2 , fcnLog, " Math " ),
390390 // casts
391- FnDef ( " toint" , 1 , fcnToInt ),
392- FnDef ( " toreal" , 1 , fcnToReal ),
393- FnDef ( " tostring" , 1 , fcnToString ),
391+ FnDef ( " toint" , 1 , fcnToInt, " Conversions " ),
392+ FnDef ( " toreal" , 1 , fcnToReal, " Conversions " ),
393+ FnDef ( " tostring" , 1 , fcnToString, " Conversions " ),
394394 // string manipulation
395- FnDef ( " lower" , 1 , fcnLower ),
396- FnDef ( " upper" , 1 , fcnUpper ),
397- FnDef ( " length" , 1 , fcnLength ),
398- FnDef ( " replace" , 3 , fcnReplace ),
399- FnDef ( " regexp_replace" , 3 , fcnRegexpReplace ),
400- FnDef ( " substr" , 3 , fcnSubstr ),
395+ FnDef ( " lower" , 1 , fcnLower, " String" , " <b>Convert to lower case</b> " \
396+ " <br> Converts a string to lower case letters. " \
397+ " <br> <i>Usage:</i><br>lower('HELLO WORLD') will return 'hello world'" ),
398+ FnDef ( " upper" , 1 , fcnUpper, " String" , " <b>Convert to upper case</b> " \
399+ " <br> Converts a string to upper case letters. " \
400+ " <br> <i>Usage:</i><br>upper('hello world') will return 'HELLO WORLD'" ),
401+ FnDef ( " length" , 1 , fcnLength, " String" , " <b>Length of string</b> " \
402+ " <br> Returns the legnth of a string. " \
403+ " <br> <i>Usage:</i><br>length('hello') will return 5" ),
404+ FnDef ( " replace" , 3 , fcnReplace, " String" , " <b>Replace a section of a string.</b> " ),
405+ FnDef ( " regexp_replace" , 3 , fcnRegexpReplace, " String" ),
406+ FnDef ( " substr" , 3 , fcnSubstr, " String" ),
401407 // geometry accessors
402- FnDef ( " xat" , 1 , fcnXat, true ),
403- FnDef ( " yat" , 1 , fcnYat, true ),
408+ FnDef ( " xat" , 1 , fcnXat, " Geometry" , " " , true ),
409+ FnDef ( " yat" , 1 , fcnYat, " Geometry" , " " , true ),
410+ FnDef ( " $area" , 0 , fcnGeomArea, " Geometry" , " " , true ),
411+ FnDef ( " $length" , 0 , fcnGeomLength, " Geometry" , " " , true ),
412+ FnDef ( " $perimeter" , 0 , fcnGeomPerimeter, " Geometry" , " " , true ),
413+ FnDef ( " $x" , 0 , fcnX, " Geometry" , " " , true ),
414+ FnDef ( " $y" , 0 , fcnY, " Geometry" , " " , true ),
404415 // special columns
405- FnDef ( " $rownum" , 0 , fcnRowNumber ),
406- FnDef ( " $area" , 0 , fcnGeomArea, true ),
407- FnDef ( " $length" , 0 , fcnGeomLength, true ),
408- FnDef ( " $perimeter" , 0 , fcnGeomPerimeter, true ),
409- FnDef ( " $x" , 0 , fcnX, true ),
410- FnDef ( " $y" , 0 , fcnY, true ),
411- FnDef ( " $id" , 0 , fcnFeatureId ),
416+ FnDef ( " $rownum" , 0 , fcnRowNumber, " Record" ),
417+ FnDef ( " $id" , 0 , fcnFeatureId, " Record" )
412418};
413419
414420
@@ -419,7 +425,7 @@ bool QgsExpression::isFunctionName( QString name )
419425
420426int QgsExpression::functionIndex ( QString name )
421427{
422- int count = sizeof ( BuiltinFunctions ) / sizeof ( FunctionDef );
428+ int count = functionCount ( );
423429 for ( int i = 0 ; i < count; i++ )
424430 {
425431 if ( QString::compare ( name, BuiltinFunctions[i].mName , Qt::CaseInsensitive ) == 0 )
@@ -428,6 +434,11 @@ int QgsExpression::functionIndex( QString name )
428434 return -1 ;
429435}
430436
437+ int QgsExpression::functionCount ()
438+ {
439+ return ( sizeof ( BuiltinFunctions ) / sizeof ( FunctionDef) );
440+ }
441+
431442
432443QgsExpression::QgsExpression ( const QString& expr )
433444 : mExpression( expr ), mRowNumber( 0 ), mCalc( NULL )
0 commit comments