| 4695 | |
| 4696 | |
| 4697 | int msSLDNumberOfLogicalOperators(char *pszExpression) |
| 4698 | { |
| 4699 | char *pszAnd = NULL; |
| 4700 | char *pszOr = NULL; |
| 4701 | char *pszNot = NULL; |
| 4702 | char *pszSecondAnd=NULL, *pszSecondOr=NULL; |
| 4703 | if (!pszExpression) |
| 4704 | return 0; |
| 4705 | |
| 4706 | /* -------------------------------------------------------------------- */ |
| 4707 | /* tests here are minimal to be able to parse simple expression */ |
| 4708 | /* like A AND B, A OR B, NOT A. */ |
| 4709 | /* -------------------------------------------------------------------- */ |
| 4710 | pszAnd = strcasestr(pszExpression, " AND "); |
| 4711 | pszOr = strcasestr(pszExpression, " OR "); |
| 4712 | pszNot = strcasestr(pszExpression, "NOT "); |
| 4713 | |
| 4714 | if (!pszAnd && !pszOr) |
| 4715 | { |
| 4716 | pszAnd = strcasestr(pszExpression, "AND("); |
| 4717 | pszOr = strcasestr(pszExpression, "OR("); |
| 4718 | } |
| 4719 | |
| 4720 | if (!pszAnd && !pszOr && !pszNot) |
| 4721 | return 0; |
| 4722 | |
| 4723 | /* doen not matter how many exactly if there are 2 or more */ |
| 4724 | if ((pszAnd && pszOr) || (pszAnd && pszNot) || (pszOr && pszNot)) |
| 4725 | return 2; |
| 4726 | |
| 4727 | if (pszAnd) |
| 4728 | { |
| 4729 | pszSecondAnd = strcasestr(pszAnd+3, " AND "); |
| 4730 | pszSecondOr = strcasestr(pszAnd+3, " OR "); |
| 4731 | } |
| 4732 | else if (pszOr) |
| 4733 | { |
| 4734 | pszSecondAnd = strcasestr(pszOr+2, " AND "); |
| 4735 | pszSecondOr = strcasestr(pszOr+2, " OR "); |
| 4736 | } |
| 4737 | |
| 4738 | if (!pszSecondAnd && !pszSecondOr) |
| 4739 | return 1; |
| 4740 | else |
| 4741 | return 2; |
| 4742 | } |
| 4743 | |
| 4744 | |
| 4745 | char *msSLDGetAttributeNameOrValue(char *pszExpression, |
no test coverage detected