function getSingleFilterValue(oFilter, sEdmType, bWithinAnd, bThese) {
			var sFilter, sFilterPath, bToLower, sValue;

			function setCase(sText) {
				return bToLower ? "tolower(" + sText + ")" : sText;
			}

			bToLower = sEdmType === "Edm.String" && oFilter.isCaseSensitive() === false;
			sFilterPath = bThese && !aFiltersNoThese?.includes(oFilter)
				? setCase(`$these/aggregate(${oFilter.getPath()})`)
				: setCase(decodeURIComponent(oFilter.getPath()));
			sValue = setCase(_Helper.formatLiteral(oFilter.getValue1(), sEdmType));

			switch (oFilter.getOperator()) {
				case FilterOperator.BT:
					sFilter = sFilterPath + " ge " + sValue + " and " + sFilterPath + " le "
						+ setCase(_Helper.formatLiteral(oFilter.getValue2(), sEdmType));
					break;
				case FilterOperator.NB:
					sFilter = wrap(sFilterPath + " lt " + sValue + " or " + sFilterPath + " gt "
						+ setCase(_Helper.formatLiteral(oFilter.getValue2(), sEdmType)),
						bWithinAnd);
					break;
				case FilterOperator.EQ:
				case FilterOperator.GE:
				case FilterOperator.GT:
				case FilterOperator.LE:
				case FilterOperator.LT:
				case FilterOperator.NE:
					sFilter = sFilterPath + " " + oFilter.getOperator().toLowerCase() + " "
						+ sValue;
					break;
				case FilterOperator.Contains:
				case FilterOperator.EndsWith:
				case FilterOperator.NotContains:
				case FilterOperator.NotEndsWith:
				case FilterOperator.NotStartsWith:
				case FilterOperator.StartsWith:
					sFilter = oFilter.getOperator().toLowerCase().replace("not", "not ")
						+ "(" + sFilterPath + "," + sValue + ")";
					break;
				default:
					throw new Error("Unsupported operator: " + oFilter.getOperator());
			}
			return sFilter;
		}
Requests a $filter query option value for this binding; the value is computed from the
given arrays of dynamic application and control filters and the given static filter. If
{@link sap.ui.filter.Filter.NONE} is set as any of the dynamic filters, it will override
all static filters.

As a side effect, this method computes <code>$$aggregation.$leafLevelAggregated</code>.

@param {sap.ui.model.Context} oContext
  The context instance to be used; it is given as a parameter and this.oContext is unused
  because setContext calls this method (indirectly) before calling the superclass to ensure
  that the cache promise is already created when the events are fired.
@param {string} sStaticFilter
  The static filter value
@returns {sap.ui.base.SyncPromise}
  A promise which resolves with an array that consists of three filters where each can be
  <code>undefined</code>. The first one has to be applied after data aggregation. The second
  one can simply be applied before data aggregation (which improves performance) because it
  is unrelated to aggregates. The third one is special in that it has to be applied before
  data aggregation and contains the special syntax "$these/aggregate(...)" because it relates
  to aggregates. The promise rejects with an error if a filter has an unknown operator or an
  invalid path.

@private