/** * Test DataObject::composite_fields() and DataObject::is_composite_field() */ public function testCompositeFieldMetaDataFunctions() { $this->assertEquals('Money', DataObject::is_composite_field('CompositeDBFieldTest_DataObject', 'MyMoney')); $this->assertNull(DataObject::is_composite_field('CompositeDBFieldTest_DataObject', 'Title')); $this->assertEquals(array('MyMoney' => 'Money'), DataObject::composite_fields('CompositeDBFieldTest_DataObject')); $this->assertEquals('Money', DataObject::is_composite_field('SubclassedDBFieldObject', 'MyMoney')); $this->assertEquals('Money', DataObject::is_composite_field('SubclassedDBFieldObject', 'OtherMoney')); $this->assertNull(DataObject::is_composite_field('SubclassedDBFieldObject', 'Title')); $this->assertNull(DataObject::is_composite_field('SubclassedDBFieldObject', 'OtherField')); $this->assertEquals(array('MyMoney' => 'Money', 'OtherMoney' => 'Money'), DataObject::composite_fields('SubclassedDBFieldObject')); }
/** * 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); } } } }
/** * Update the SELECT clause of the query with the columns from the given table */ protected function selectAllFromTable(SQLQuery &$query, $tableClass) { // 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(!isset($compositeFields[$k])) { // Update $collidingFields if necessary if(isset($query->select[$k])) { if(!isset($this->collidingFields[$k])) $this->collidingFields[$k] = array($query->select[$k]); $this->collidingFields[$k][] = "\"$tableClass\".\"$k\""; } else { $query->select[$k] = "\"$tableClass\".\"$k\""; } } } if($compositeFields) foreach($compositeFields as $k => $v) { if($v) { $dbO = Object::create_from_string($v, $k); $dbO->addToQuery($query); } } }