function invalidSegment(sSegment, bAsInfo) {
			// no error for a key predicate, it's most probably due to a deleted entity
			bAsInfo ||= sSegment[0] === "(" && sSegment.at(-1) === ")";
			Log[bAsInfo ? "info" : "error"]("Failed to drill-down into " + sPath
				+ ", invalid segment: " + sSegment, that.toString(), sClassName);
			return undefined;
		}
Drills down into the given object according to <code>sPath</code>. Logs an error if the path
leads into void. Paths may contain key predicates like "TEAM_2_EMPLOYEES('42')/Name". The
initial segment in a collection cache may even start with a key predicate, for example a path
could be "('42')/Name". For properties that do not exist in transient entities, the default
value or <code>null</code> is delivered.

@param {object} oData
  The result from a read or cache lookup
@param {string} [sPath]
  Relative path to drill-down into
@param {sap.ui.model.odata.v4.lib._GroupLock} oGroupLock
  An unlocked lock for the group to associate a request for late properties with
@param {boolean} [bCreateOnDemand]
  Whether to create missing objects on demand, in order to avoid drill-down errors
@returns {sap.ui.base.SyncPromise}
  A promise that is resolved with the result matching to <code>sPath</code>

@protected