| 611 | } |
| 612 | |
| 613 | char *FLTGetFeatureIdCommonExpression(FilterEncodingNode *psFilterNode, layerObj *lp) |
| 614 | { |
| 615 | |
| 616 | char *pszExpression = NULL; |
| 617 | int nTokens = 0, i=0, bString=0; |
| 618 | char **tokens = NULL; |
| 619 | const char *pszAttribute=NULL; |
| 620 | |
| 621 | #if defined(USE_WMS_SVR) || defined (USE_WFS_SVR) || defined (USE_WCS_SVR) || defined(USE_SOS_SVR) |
| 622 | if (psFilterNode->pszValue) |
| 623 | { |
| 624 | pszAttribute = msOWSLookupMetadata(&(lp->metadata), "OFG", "featureid"); |
| 625 | if (pszAttribute) |
| 626 | { |
| 627 | tokens = msStringSplit(psFilterNode->pszValue,',', &nTokens); |
| 628 | if (tokens && nTokens > 0) |
| 629 | { |
| 630 | for (i=0; i<nTokens; i++) |
| 631 | { |
| 632 | char *pszTmp = NULL; |
| 633 | int bufferSize = 0; |
| 634 | |
| 635 | if (i == 0) |
| 636 | { |
| 637 | if(FLTIsNumeric(tokens[0]) == MS_FALSE) |
| 638 | bString = 1; |
| 639 | } |
| 640 | |
| 641 | |
| 642 | if (bString) |
| 643 | { |
| 644 | bufferSize = 11+strlen(tokens[i])+strlen(pszAttribute)+1; |
| 645 | pszTmp = (char *)msSmallMalloc(bufferSize); |
| 646 | snprintf(pszTmp, bufferSize, "(\"[%s]\" ==\"%s\")" , pszAttribute, tokens[i]); |
| 647 | } |
| 648 | else |
| 649 | { |
| 650 | bufferSize = 8+strlen(tokens[i])+strlen(pszAttribute)+1; |
| 651 | pszTmp = (char *)msSmallMalloc(bufferSize); |
| 652 | snprintf(pszTmp, bufferSize, "([%s] == %s)" , pszAttribute, tokens[i]); |
| 653 | } |
| 654 | |
| 655 | if (pszExpression != NULL) |
| 656 | pszExpression = msStringConcatenate(pszExpression, " OR "); |
| 657 | else |
| 658 | pszExpression = msStringConcatenate(pszExpression, "("); |
| 659 | pszExpression = msStringConcatenate(pszExpression, pszTmp); |
| 660 | msFree(pszTmp); |
| 661 | } |
| 662 | |
| 663 | msFreeCharArray(tokens, nTokens); |
| 664 | } |
| 665 | } |
| 666 | /*opening and closing brackets are needed for mapserver expressions*/ |
| 667 | if (pszExpression) |
| 668 | pszExpression = msStringConcatenate(pszExpression, ")"); |
| 669 | } |
| 670 | #endif |
no test coverage detected