function getSelect(vSelect, sProperty) {
				var iAt;

				if (vSelect === true) {
					return true;
				}
				if (vSelect[sProperty]) {
					return vSelect[sProperty];
				}
				iAt = sProperty.indexOf("@");
				if (iAt === 0 || iAt > 0 && vSelect[sProperty.slice(0, iAt)]) {
					return true; // always fire changes for selected annotations
				}
			}
Updates the old value with the given new value for the selected properties (see
{@link #updateExisting}). If a property is missing in the new value, the old value
remains unchanged. If no selected properties are given or if "*" is contained in the
selected properties, then all properties are selected. Fires change events for all
changed properties. An instance annotation is updated if the instance (which would be a
complex-valued structural property then) or one of its properties is selected, a property
annotation is updated if the property itself is selected.

Restrictions:
- oOldValue and oNewValue are expected to have the same structure: when there is an
  object at a given path in either of them, the other one must have an object or
  <code>null</code>.
- "*" in aSelect does not work correctly if oNewValue contains navigation properties
- does not update collection-valued navigation properties properly (ignores both key
  predicates and $count)

@param {object} mChangeListeners
  A map of change listeners by path
@param {string} sBasePath
  The path of oOldValue in mChangeListeners
@param {object} oOldValue
  The old value
@param {object} oNewValue
  The new value
@param {string[]} [aSelect]
  The relative paths to properties to be updated in oOldValue; default is all properties
  from oNewValue
@param {function} [fnCheckKeyPredicate]
  Callback function which tells whether the key predicate for the given path is checked
  for equality instead of just being copied from source to target
@param {boolean} [bOkIfMissing]
  Whether this should not check for selected properties missing in the response

@public