MCPcopy Create free account
hub / github.com/MapServer/MapServer / FLTGetLogicalComparisonExpresssion

Function FLTGetLogicalComparisonExpresssion

mapogcfilter.c:2268–2373  ·  view source on GitHub ↗

/ FLTGetLogicalComparisonExpresssion */ / Return the expression for logical comparison expression. */ /

Source from the content-addressed store, hash-verified

2266/* Return the expression for logical comparison expression. */
2267/************************************************************************/
2268char *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

Callers 2

FLTGetNodeExpressionFunction · 0.85

Calls 4

FLTIsLogicalFilterTypeFunction · 0.85
strcasecmpFunction · 0.85
FLTIsGeosNodeFunction · 0.85
FLTGetNodeExpressionFunction · 0.85

Tested by

no test coverage detected