/** * Update the SELECT clause of the query with the columns from the given table */ protected function selectColumnsFromTable(SQLQuery &$query, $tableClass, $columns = null) { // Add SQL for multi-value fields $databaseFields = DataObject::database_fields($tableClass); $compositeFields = DataObject::composite_fields($tableClass, false); if ($databaseFields) { foreach ($databaseFields as $k => $v) { if ((is_null($columns) || in_array($k, $columns)) && !isset($compositeFields[$k])) { // Update $collidingFields if necessary if ($expressionForField = $query->expressionForField($k)) { if (!isset($this->collidingFields[$k])) { $this->collidingFields[$k] = array($expressionForField); } $this->collidingFields[$k][] = "\"{$tableClass}\".\"{$k}\""; } else { $query->selectField("\"{$tableClass}\".\"{$k}\"", $k); } } } } if ($compositeFields) { foreach ($compositeFields as $k => $v) { if ((is_null($columns) || in_array($k, $columns)) && $v) { $dbO = Object::create_from_string($v, $k); $dbO->addToQuery($query); } } } }
/** * @param String $field Select statement identifier, either the unquoted column name, * the full composite SQL statement, or the alias set through {@link SQLQuery->selectField()}. * @param SQLQuery $query * @return String */ protected function expressionForField($field, $query) { // Special case for ID if ($field == 'ID') { $baseClass = ClassInfo::baseDataClass($this->dataClass); return "\"{$baseClass}\".\"ID\""; } else { return $query->expressionForField($field); } }