/**
  * For lazy loaded fields requiring extra sql manipulation, ie versioning.
  *
  * @param SQLSelect $query
  * @param DataQuery $dataQuery
  * @param DataObject $dataObject
  */
 public function augmentLoadLazyFields(SQLSelect &$query, DataQuery &$dataQuery = null, $dataObject)
 {
     // The VersionedMode local variable ensures that this decorator only applies to
     // queries that have originated from the Versioned object, and have the Versioned
     // metadata set on the query object. This prevents regular queries from
     // accidentally querying the *_versions tables.
     $versionedMode = $dataObject->getSourceQueryParam('Versioned.mode');
     $dataClass = $dataQuery->dataClass();
     $modesToAllowVersioning = array('all_versions', 'latest_versions', 'archive');
     if (!empty($dataObject->Version) && (!empty($versionedMode) && in_array($versionedMode, $modesToAllowVersioning))) {
         $dataQuery->where("\"{$dataClass}\".\"RecordID\" = " . $dataObject->ID);
         $dataQuery->where("\"{$dataClass}\".\"Version\" = " . $dataObject->Version);
         $dataQuery->setQueryParam('Versioned.mode', 'all_versions');
     } else {
         // Same behaviour as in DataObject->loadLazyFields
         $dataQuery->where("\"{$dataClass}\".\"ID\" = {$dataObject->ID}")->limit(1);
     }
 }