/** * 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); } }