/ FLTGetLogicalComparisonExpresssion */ / Return the expression for logical comparison expression. */ /
| 2266 | /* Return the expression for logical comparison expression. */ |
| 2267 | /************************************************************************/ |
| 2268 | char *FLTGetLogicalComparisonExpresssion(FilterEncodingNode *psFilterNode, layerObj *lp) |
| 2269 | { |
| 2270 | char *pszTmp = NULL; |
| 2271 | char *pszBuffer = NULL; |
| 2272 | int nTmp = 0; |
| 2273 | |
| 2274 | if (!psFilterNode || !FLTIsLogicalFilterType(psFilterNode->pszValue)) |
| 2275 | return NULL; |
| 2276 | |
| 2277 | |
| 2278 | /* ==================================================================== */ |
| 2279 | /* special case for BBOX node. */ |
| 2280 | /* ==================================================================== */ |
| 2281 | if (psFilterNode->psLeftNode && psFilterNode->psRightNode && |
| 2282 | (strcasecmp(psFilterNode->psLeftNode->pszValue, "BBOX") == 0 || |
| 2283 | strcasecmp(psFilterNode->psRightNode->pszValue, "BBOX") == 0 || |
| 2284 | FLTIsGeosNode(psFilterNode->psLeftNode->pszValue) || |
| 2285 | FLTIsGeosNode(psFilterNode->psRightNode->pszValue))) |
| 2286 | |
| 2287 | |
| 2288 | { |
| 2289 | |
| 2290 | /*strcat(szBuffer, " (");*/ |
| 2291 | if (strcasecmp(psFilterNode->psLeftNode->pszValue, "BBOX") != 0 && |
| 2292 | strcasecmp(psFilterNode->psLeftNode->pszValue, "DWithin") != 0 && |
| 2293 | FLTIsGeosNode(psFilterNode->psLeftNode->pszValue) == MS_FALSE) |
| 2294 | pszTmp = FLTGetNodeExpression(psFilterNode->psLeftNode, lp); |
| 2295 | else |
| 2296 | pszTmp = FLTGetNodeExpression(psFilterNode->psRightNode, lp); |
| 2297 | |
| 2298 | if (!pszTmp) |
| 2299 | return NULL; |
| 2300 | |
| 2301 | pszBuffer = (char *)malloc(sizeof(char) * (strlen(pszTmp) + 3)); |
| 2302 | pszBuffer[0] = '\0'; |
| 2303 | /* |
| 2304 | if (strcasecmp(psFilterNode->psLeftNode->pszValue, "PropertyIsLike") == 0 || |
| 2305 | strcasecmp(psFilterNode->psRightNode->pszValue, "PropertyIsLike") == 0) |
| 2306 | sprintf(pszBuffer, "%s", pszTmp); |
| 2307 | else |
| 2308 | */ |
| 2309 | sprintf(pszBuffer, "(%s)", pszTmp); |
| 2310 | |
| 2311 | free(pszTmp); |
| 2312 | |
| 2313 | return pszBuffer; |
| 2314 | } |
| 2315 | |
| 2316 | |
| 2317 | /* -------------------------------------------------------------------- */ |
| 2318 | /* OR and AND */ |
| 2319 | /* -------------------------------------------------------------------- */ |
| 2320 | if (psFilterNode->psLeftNode && psFilterNode->psRightNode) |
| 2321 | { |
| 2322 | pszTmp = FLTGetNodeExpression(psFilterNode->psLeftNode, lp); |
| 2323 | if (!pszTmp) |
| 2324 | return NULL; |
| 2325 |
no test coverage detected